Lines 34-68
macro_rules! x86_m32x4_sse_impl {
Link Here
|
34 |
} |
34 |
} |
35 |
}; |
35 |
}; |
36 |
} |
36 |
} |
37 |
|
|
|
38 |
macro_rules! x86_m8x8_sse_impl { |
39 |
($id:ident) => { |
40 |
impl All for $id { |
41 |
#[inline] |
42 |
#[target_feature(enable = "sse")] |
43 |
unsafe fn all(self) -> bool { |
44 |
#[cfg(target_arch = "x86")] |
45 |
use crate::arch::x86::_mm_movemask_pi8; |
46 |
#[cfg(target_arch = "x86_64")] |
47 |
use crate::arch::x86_64::_mm_movemask_pi8; |
48 |
// _mm_movemask_pi8(a) creates an 8bit mask containing the most |
49 |
// significant bit of each byte of `a`. If all bits are set, |
50 |
// then all 8 lanes of the mask are true. |
51 |
_mm_movemask_pi8(crate::mem::transmute(self)) |
52 |
== u8::max_value() as i32 |
53 |
} |
54 |
} |
55 |
impl Any for $id { |
56 |
#[inline] |
57 |
#[target_feature(enable = "sse")] |
58 |
unsafe fn any(self) -> bool { |
59 |
#[cfg(target_arch = "x86")] |
60 |
use crate::arch::x86::_mm_movemask_pi8; |
61 |
#[cfg(target_arch = "x86_64")] |
62 |
use crate::arch::x86_64::_mm_movemask_pi8; |
63 |
|
64 |
_mm_movemask_pi8(crate::mem::transmute(self)) != 0 |
65 |
} |
66 |
} |
67 |
}; |
68 |
} |