Skip to content

Commit 67cc419

Browse files
gnzlbgalexcrichton
authored andcommitted
[ssse3] _mm_alignr_pi8 (rust-lang#235)
1 parent 098787d commit 67cc419

File tree

1 file changed

+17
-26
lines changed

1 file changed

+17
-26
lines changed

coresimd/src/x86/i686/ssse3.rs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,17 @@ pub unsafe fn _mm_shuffle_pi8(a: u8x8, b: u8x8) -> u8x8 {
4545

4646
/// Concatenates the two 64-bit integer vector operands, and right-shifts
4747
/// the result by the number of bytes specified in the immediate operand.
48-
/*#[inline(always)]
48+
#[inline(always)]
4949
#[target_feature = "+ssse3"]
5050
#[cfg_attr(test, assert_instr(palignr, n = 15))]
51-
pub unsafe fn _mm_alignr_pi8(a: i8x8, b: i8x8, n: i32) -> i8x8 {
52-
mem::transmute(palignrb(mem::transmute(a), mem::transmute(b), n))
53-
}*/
51+
pub unsafe fn _mm_alignr_pi8(a: u8x8, b: u8x8, n: u8) -> u8x8 {
52+
macro_rules! call {
53+
($imm8:expr) => {
54+
mem::transmute(palignrb(mem::transmute(a), mem::transmute(b), $imm8))
55+
}
56+
}
57+
constify_imm8!(n, call)
58+
}
5459

5560
/// Horizontally add the adjacent pairs of values contained in 2 packed
5661
/// 64-bit vectors of [4 x i16].
@@ -178,8 +183,8 @@ extern "C" {
178183
#[link_name = "llvm.x86.ssse3.pshuf.b"]
179184
fn pshufb(a: __m64, b: __m64) -> __m64;
180185

181-
/*#[link_name = "llvm.x86.mmx.palignr.b"]
182-
fn palignrb(a: __m64, b: __m64, n: i32) -> __m64;*/
186+
#[link_name = "llvm.x86.mmx.palignr.b"]
187+
fn palignrb(a: __m64, b: __m64, n: u8) -> __m64;
183188

184189
#[link_name = "llvm.x86.ssse3.phadd.w"]
185190
fn phaddw(a: __m64, b: __m64) -> __m64;
@@ -249,27 +254,13 @@ mod tests {
249254
assert_eq!(r, expected);
250255
}
251256

252-
/*#[simd_test = "ssse3"]
257+
#[simd_test = "ssse3"]
253258
unsafe fn _mm_alignr_pi8() {
254-
let a = i8x8::new(1, 2, 3, 4, 5, 6, 7, 8);
255-
let b = i8x8::new(4, 63, 4, 3, 24, 12, 6, 19);
256-
let r = ssse3::_mm_alignr_pi8(a, b, 33);
257-
assert_eq!(r, i8x8::splat(0));
258-
259-
let r = ssse3::_mm_alignr_pi8(a, b, 17);
260-
let expected = i8x8::new(2, 3, 4, 5, 6, 7, 8, 0);
261-
assert_eq!(r, expected);
262-
263-
let r = ssse3::_mm_alignr_pi8(a, b, 16);
264-
assert_eq!(r, a);
265-
266-
let r = ssse3::_mm_alignr_pi8(a, b, 15);
267-
let expected = i8x8::new(0, 1, 2, 3, 4, 5, 6, 7);
268-
assert_eq!(r, expected);
269-
270-
let r = ssse3::_mm_alignr_pi8(a, b, 0);
271-
assert_eq!(r, b);
272-
}*/
259+
let a = u32x2::new(0x89ABCDEF_u32, 0x01234567_u32);
260+
let b = u32x2::new(0xBBAA9988_u32, 0xFFDDEECC_u32);
261+
let r = ssse3::_mm_alignr_pi8(u8x8::from(a), u8x8::from(b), 4);
262+
assert_eq!(r, ::std::mem::transmute(0x89abcdefffddeecc_u64));
263+
}
273264

274265
#[simd_test = "ssse3"]
275266
unsafe fn _mm_hadd_pi16() {

0 commit comments

Comments
 (0)