|
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 |
} |