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
56
57
58
59
60
61
62
#[cfg(test)]
use stdsimd_test::assert_instr;
types! {
    
    pub struct i8x16(
        i8, i8, i8, i8, i8, i8, i8, i8,
        i8, i8, i8, i8, i8, i8, i8, i8,
    );
}
#[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 core_arch::mips64::msa;
    use simd::*;
    use stdsimd_test::simd_test;
    #[simd_test(enable = "msa")]
    unsafe fn __msa_add_a_b() {
        #[rustfmt::skip]
        let a = i8x16(
            1, 2, 3, 4,
            1, 2, 3, 4,
            1, 2, 3, 4,
            1, 2, 3, 4,
        );
        #[rustfmt::skip]
        let b = i8x16(
            -4, -3, -2, -1,
            -4, -3, -2, -1,
            -4, -3, -2, -1,
            -4, -3, -2, -1,
        );
        let r = i8x16(5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5);
        assert_eq!(r, msa::__msa_add_a_b(a, b));
    }
}