iir: vminnm/vmaxnm

master
Robert Jördens 2020-11-26 14:19:09 +01:00
parent cc64f47004
commit 468929690d
5 changed files with 35 additions and 1 deletions

View File

@ -62,7 +62,7 @@ branch = "dma"
[features]
semihosting = ["panic-semihosting", "cortex-m-log/semihosting"]
bkpt = [ ]
nightly = ["cortex-m/inline-asm"]
nightly = ["cortex-m/inline-asm", "dsp/nightly"]
[profile.dev]
codegen-units = 1

View File

@ -6,3 +6,6 @@ edition = "2018"
[dependencies]
serde = { version = "1.0", features = ["derive"], default-features = false }
[features]
nightly = []

View File

@ -24,6 +24,7 @@ fn copysign(x: f32, y: f32) -> f32 {
}
}
#[cfg(not(feature = "nightly"))]
fn max(x: f32, y: f32) -> f32 {
if x > y {
x
@ -32,6 +33,7 @@ fn max(x: f32, y: f32) -> f32 {
}
}
#[cfg(not(feature = "nightly"))]
fn min(x: f32, y: f32) -> f32 {
if x < y {
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`.
//
// A.k.a. dot product.

View File

@ -1,3 +1,4 @@
#![no_std]
#![cfg_attr(feature = "nightly", feature(asm))]
pub mod iir;

View File

@ -13,6 +13,9 @@
fn panic(_info: &core::panic::PanicInfo) -> ! {
let gpiod = unsafe { &*hal::stm32::GPIOD::ptr() };
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 {
core::intrinsics::abort();
}