1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use coresimd::simd::*;
#[cfg(test)]
use stdsimd_test::assert_instr;
#[allow(improper_ctypes)]
extern "C" {
#[link_name = "llvm.mips.add.a.b"]
fn msa_add_a_b(a: i8x16, b: i8x16) -> i8x16;
}
#[inline]
#[target_feature(enable = "msa")]
#[cfg_attr(test, assert_instr(add_a.b))]
pub unsafe fn __msa_add_a_b(a: i8x16, b: i8x16) -> i8x16 {
msa_add_a_b(a, b)
}
#[cfg(test)]
mod tests {
use coresimd::mips64::msa;
use simd::*;
use stdsimd_test::simd_test;
#[simd_test(enable = "msa")]
unsafe fn __msa_add_a_b() {
#[cfg_attr(rustfmt, rustfmt_skip)]
let a = i8x16::new(
1, 2, 3, 4,
1, 2, 3, 4,
1, 2, 3, 4,
1, 2, 3, 4,
);
#[cfg_attr(rustfmt, rustfmt_skip)]
let b = i8x16::new(
-4, -3, -2, -1,
-4, -3, -2, -1,
-4, -3, -2, -1,
-4, -3, -2, -1,
);
let r = i8x16::splat(5);
assert_eq!(r, msa::__msa_add_a_b(a, b));
}
}