modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/simd-1.c (about) 1 /* Origin: Aldy Hernandez <aldyh@redhat.com> 2 3 Purpose: Test generic SIMD support. This test should work 4 regardless of if the target has SIMD instructions. 5 */ 6 7 typedef int __attribute__((mode(SI))) __attribute__((vector_size (16))) vecint; 8 typedef int __attribute__((mode(SI))) siint; 9 10 vecint i = { 150, 100, 150, 200 }; 11 vecint j = { 10, 13, 20, 30 }; 12 vecint k; 13 14 union { 15 vecint v; 16 siint i[4]; 17 } res; 18 19 /* This should go away once we can use == and != on vector types. */ 20 void 21 verify (siint a1, siint a2, siint a3, siint a4, 22 siint b1, siint b2, siint b3, siint b4) 23 { 24 if (a1 != b1 25 || a2 != b2 26 || a3 != b3 27 || a4 != b4) 28 abort (); 29 } 30 31 int 32 main () 33 { 34 k = i + j; 35 res.v = k; 36 37 verify (res.i[0], res.i[1], res.i[2], res.i[3], 160, 113, 170, 230); 38 39 k = i * j; 40 res.v = k; 41 42 verify (res.i[0], res.i[1], res.i[2], res.i[3], 1500, 1300, 3000, 6000); 43 44 k = i / j; 45 res.v = k; 46 47 verify (res.i[0], res.i[1], res.i[2], res.i[3], 15, 7, 7, 6); 48 49 k = i & j; 50 res.v = k; 51 52 verify (res.i[0], res.i[1], res.i[2], res.i[3], 2, 4, 20, 8); 53 54 k = i | j; 55 res.v = k; 56 57 verify (res.i[0], res.i[1], res.i[2], res.i[3], 158, 109, 150, 222); 58 59 k = i ^ j; 60 res.v = k; 61 62 verify (res.i[0], res.i[1], res.i[2], res.i[3], 156, 105, 130, 214); 63 64 k = -i; 65 res.v = k; 66 verify (res.i[0], res.i[1], res.i[2], res.i[3], 67 -150, -100, -150, -200); 68 69 k = ~i; 70 res.v = k; 71 verify (res.i[0], res.i[1], res.i[2], res.i[3], -151, -101, -151, -201); 72 73 exit (0); 74 }