sse3: _mm_lddqu_si128
This commit is contained in:
parent
dfc7bef6cc
commit
b5a28bad22
2 changed files with 38 additions and 0 deletions
|
|
@ -1,5 +1,6 @@
|
|||
pub use self::sse::*;
|
||||
pub use self::sse2::*;
|
||||
pub use self::sse3::*;
|
||||
pub use self::ssse3::*;
|
||||
pub use self::sse41::*;
|
||||
pub use self::sse42::*;
|
||||
|
|
@ -25,6 +26,7 @@ mod runtime;
|
|||
|
||||
mod sse;
|
||||
mod sse2;
|
||||
mod sse3;
|
||||
mod ssse3;
|
||||
mod sse41;
|
||||
mod sse42;
|
||||
|
|
|
|||
36
library/stdarch/src/x86/sse3.rs
Normal file
36
library/stdarch/src/x86/sse3.rs
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
use x86::__m128i;
|
||||
|
||||
#[cfg(test)]
|
||||
use stdsimd_test::assert_instr;
|
||||
|
||||
/// Load 128-bits of integer data from unaligned memory.
|
||||
/// This intrinsic may perform better than `_mm_loadu_si128`
|
||||
/// when the data crosses a cache line boundary.
|
||||
#[inline(always)]
|
||||
#[target_feature = "+sse3"]
|
||||
#[cfg_attr(test, assert_instr(lddqu))]
|
||||
pub unsafe fn _mm_lddqu_si128(mem_addr: *const __m128i) -> __m128i {
|
||||
lddqu(mem_addr as *const _)
|
||||
}
|
||||
|
||||
#[allow(improper_ctypes)]
|
||||
extern {
|
||||
#[link_name = "llvm.x86.sse3.ldu.dq"]
|
||||
fn lddqu(mem_addr: *const i8) -> __m128i;
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use stdsimd_test::simd_test;
|
||||
|
||||
use v128::*;
|
||||
use x86::sse3 as sse3;
|
||||
|
||||
#[simd_test = "sse3"]
|
||||
unsafe fn _mm_lddqu_si128() {
|
||||
let a = i8x16::new(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
|
||||
let r = sse3::_mm_lddqu_si128(&a);
|
||||
assert_eq!(a, r);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue