iir: vminnm/vmaxnm
This commit is contained in:
parent
cc64f47004
commit
468929690d
|
@ -62,7 +62,7 @@ branch = "dma"
|
||||||
[features]
|
[features]
|
||||||
semihosting = ["panic-semihosting", "cortex-m-log/semihosting"]
|
semihosting = ["panic-semihosting", "cortex-m-log/semihosting"]
|
||||||
bkpt = [ ]
|
bkpt = [ ]
|
||||||
nightly = ["cortex-m/inline-asm"]
|
nightly = ["cortex-m/inline-asm", "dsp/nightly"]
|
||||||
|
|
||||||
[profile.dev]
|
[profile.dev]
|
||||||
codegen-units = 1
|
codegen-units = 1
|
||||||
|
|
|
@ -6,3 +6,6 @@ edition = "2018"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
serde = { version = "1.0", features = ["derive"], default-features = false }
|
serde = { version = "1.0", features = ["derive"], default-features = false }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
nightly = []
|
||||||
|
|
|
@ -24,6 +24,7 @@ fn copysign(x: f32, y: f32) -> f32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "nightly"))]
|
||||||
fn max(x: f32, y: f32) -> f32 {
|
fn max(x: f32, y: f32) -> f32 {
|
||||||
if x > y {
|
if x > y {
|
||||||
x
|
x
|
||||||
|
@ -32,6 +33,7 @@ fn max(x: f32, y: f32) -> f32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(not(feature = "nightly"))]
|
||||||
fn min(x: f32, y: f32) -> f32 {
|
fn min(x: f32, y: f32) -> f32 {
|
||||||
if x < y {
|
if x < y {
|
||||||
x
|
x
|
||||||
|
@ -40,6 +42,31 @@ fn min(x: f32, y: f32) -> f32 {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
fn max(x: f32, y: f32) -> f32 {
|
||||||
|
let o: f32;
|
||||||
|
unsafe {
|
||||||
|
asm!("vmaxnm.f32 {}, {}, {}",
|
||||||
|
lateout(sreg) o, in(sreg) x, in(sreg) y,
|
||||||
|
options(pure, nomem, nostack, preserves_flags)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
o
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
fn min(x: f32, y: f32) -> f32 {
|
||||||
|
let o: f32;
|
||||||
|
unsafe {
|
||||||
|
asm!("vminnm.f32 {}, {}, {}",
|
||||||
|
lateout(sreg) o, in(sreg) x, in(sreg) y,
|
||||||
|
options(pure, nomem, nostack, preserves_flags)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
o
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Multiply-accumulate vectors `x` and `a`.
|
// Multiply-accumulate vectors `x` and `a`.
|
||||||
//
|
//
|
||||||
// A.k.a. dot product.
|
// A.k.a. dot product.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
#![no_std]
|
#![no_std]
|
||||||
|
#![cfg_attr(feature = "nightly", feature(asm))]
|
||||||
|
|
||||||
pub mod iir;
|
pub mod iir;
|
||||||
|
|
|
@ -13,6 +13,9 @@
|
||||||
fn panic(_info: &core::panic::PanicInfo) -> ! {
|
fn panic(_info: &core::panic::PanicInfo) -> ! {
|
||||||
let gpiod = unsafe { &*hal::stm32::GPIOD::ptr() };
|
let gpiod = unsafe { &*hal::stm32::GPIOD::ptr() };
|
||||||
gpiod.odr.modify(|_, w| w.odr6().high().odr12().high()); // FP_LED_1, FP_LED_3
|
gpiod.odr.modify(|_, w| w.odr6().high().odr12().high()); // FP_LED_1, FP_LED_3
|
||||||
|
#[cfg(feature = "nightly")]
|
||||||
|
core::intrinsics::abort();
|
||||||
|
#[cfg(not(feature = "nightly"))]
|
||||||
unsafe {
|
unsafe {
|
||||||
core::intrinsics::abort();
|
core::intrinsics::abort();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue