Rewrite Arm transmutes, reading std::arch closer

This commit is contained in:
Jubilee Young 2021-11-12 16:42:48 -08:00 committed by Jubilee
parent 6ddf7ad8e1
commit 1ce1c645cf
2 changed files with 59 additions and 38 deletions

View File

@ -15,16 +15,14 @@ macro_rules! from_transmute {
}; };
} }
/// Conversions to x86's SIMD types.
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))] #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
mod x86; mod x86;
#[cfg(any(target_arch = "wasm32"))] #[cfg(any(target_arch = "wasm32"))]
mod wasm32; mod wasm32;
#[cfg(any( #[cfg(any(target_arch = "aarch64", target_arch = "arm",))]
target_arch = "aarch64",
all(target_arch = "arm", target_feature = "v7")
))]
mod arm; mod arm;
#[cfg(any(target_arch = "powerpc", target_arch = "powerpc64"))] #[cfg(any(target_arch = "powerpc", target_arch = "powerpc64"))]

View File

@ -1,11 +1,19 @@
#![allow(unused)]
use crate::simd::*; use crate::simd::*;
#[cfg(all(target_arch = "arm", target_feature = "v7"))] #[cfg(target_arch = "arm")]
use core::arch::arm::*; use core::arch::arm::*;
#[cfg(target_arch = "aarch64")] #[cfg(target_arch = "aarch64")]
use core::arch::aarch64::*; use core::arch::aarch64::*;
#[cfg(any(
target_arch = "aarch64",
all(target_arch = "arm", target_feature = "v7"),
))]
mod neon {
use super::*;
from_transmute! { unsafe f32x2 => float32x2_t } from_transmute! { unsafe f32x2 => float32x2_t }
from_transmute! { unsafe f32x4 => float32x4_t } from_transmute! { unsafe f32x4 => float32x4_t }
@ -34,20 +42,35 @@ from_transmute! { unsafe Simd<i64, 1> => int64x1_t }
from_transmute! { unsafe i64x2 => int64x2_t } from_transmute! { unsafe i64x2 => int64x2_t }
from_transmute! { unsafe Simd<u64, 1> => poly64x1_t } from_transmute! { unsafe Simd<u64, 1> => poly64x1_t }
from_transmute! { unsafe u64x2 => poly64x2_t } from_transmute! { unsafe u64x2 => poly64x2_t }
}
#[cfg(all(target_arch = "arm", target_feature = "v7"))] #[cfg(any(
mod arm { all(target_feature = "v5te", not(target_feature = "mclass")),
all(target_feature = "mclass", target_feature = "dsp"),
))]
mod dsp {
use super::*; use super::*;
from_transmute! { unsafe Simd<u8, 4> => uint8x4_t }
from_transmute! { unsafe Simd<i8, 4> => int8x4_t }
from_transmute! { unsafe Simd<u16, 2> => uint16x2_t } from_transmute! { unsafe Simd<u16, 2> => uint16x2_t }
from_transmute! { unsafe Simd<i16, 2> => int16x2_t } from_transmute! { unsafe Simd<i16, 2> => int16x2_t }
} }
#[cfg(any(
all(target_feature = "v6", not(target_feature = "mclass")),
all(target_feature = "mclass", target_feature = "dsp"),
))]
mod simd32 {
use super::*;
from_transmute! { unsafe Simd<u8, 4> => uint8x4_t }
from_transmute! { unsafe Simd<i8, 4> => int8x4_t }
}
#[cfg(target_arch = "aarch64")] #[cfg(target_arch = "aarch64")]
mod aarch64 { mod aarch64 {
use super::neon::*;
use super::*; use super::*;
from_transmute! { unsafe Simd<f64, 1> => float64x1_t } from_transmute! { unsafe Simd<f64, 1> => float64x1_t }
from_transmute! { unsafe f64x2 => float64x2_t } from_transmute! { unsafe f64x2 => float64x2_t }
} }