Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-6.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* { dg-do compile } */ | |
2 /* { dg-options "-mdejagnu-cpu=future" } */ | |
3 | |
4 #include <altivec.h> | |
5 | |
6 extern void abort (void); | |
7 | |
8 #define NumSamples 4 | |
9 | |
10 void | |
11 doTests00000001 (vector unsigned long long int a_sources [], | |
12 vector unsigned long long int b_sources [], | |
13 vector unsigned long long int c_sources []) { | |
14 for (int i = 0; i < NumSamples; i++) | |
15 for (int j = 0; j < NumSamples; j++) | |
16 for (int k = 0; k < NumSamples; k++) | |
17 { | |
18 vector unsigned long long a = a_sources [i]; | |
19 vector unsigned long long b = b_sources [j]; | |
20 vector unsigned long long c = c_sources [k]; | |
21 vector unsigned long long result = vec_ternarylogic (a, b, c, 0x01); | |
22 vector unsigned long long intended = (a & b & c); | |
23 if (!vec_all_eq (result, intended)) | |
24 abort (); | |
25 } | |
26 } | |
27 | |
28 void doTests11100101 (vector unsigned long long int a_sources [], | |
29 vector unsigned long long int b_sources [], | |
30 vector unsigned long long int c_sources []) { | |
31 for (int i = 0; i < NumSamples; i++) | |
32 for (int j = 0; j < NumSamples; j++) | |
33 for (int k = 0; k < NumSamples; k++) | |
34 { | |
35 vector unsigned long long a = a_sources [i]; | |
36 vector unsigned long long b = b_sources [j]; | |
37 vector unsigned long long c = c_sources [k]; | |
38 vector unsigned long long result = vec_ternarylogic (a, b, c, 0xe5); | |
39 vector unsigned long long intended = { 0, 0 }; | |
40 // Supposed to be a ? c: nand (b,c) | |
41 for (int l = 0; l < 2; l++) | |
42 { | |
43 for (int m = 0; m < 64; m++) | |
44 { | |
45 unsigned long long int bit_selector = (0x01ll << m); | |
46 if (a[l] & bit_selector) | |
47 intended [l] |= c [l] & bit_selector; | |
48 else if ((b [l] & c [l] & bit_selector) == 0) | |
49 intended [l] |= (0x01ll << m); | |
50 } | |
51 } | |
52 if (!vec_all_eq (result, intended)) | |
53 abort (); | |
54 } | |
55 } | |
56 | |
57 void doTests11110011 (vector unsigned long long int a_sources [], | |
58 vector unsigned long long int b_sources [], | |
59 vector unsigned long long int c_sources []) { | |
60 for (int i = 0; i < NumSamples; i++) | |
61 for (int j = 0; j < NumSamples; j++) | |
62 for (int k = 0; k < NumSamples; k++) | |
63 { | |
64 vector unsigned long long a = a_sources [i]; | |
65 vector unsigned long long b = b_sources [j]; | |
66 vector unsigned long long c = c_sources [k]; | |
67 vector unsigned long long result = vec_ternarylogic (a, b, c, 0xfb); | |
68 vector unsigned long long intended = { 0, 0 }; | |
69 intended [0] = b [0] | ~(a [0] & c [0]); | |
70 intended [1] = b [1] | ~(a [1] & c [1]); | |
71 if (!vec_all_eq (result, intended)) | |
72 abort (); | |
73 } | |
74 } | |
75 | |
76 int main (int argc, char *argv []) | |
77 { | |
78 vector unsigned long long int a_sources [NumSamples] = { | |
79 { 0x0123456789abcdef, 0x123456789abcdef0 }, | |
80 { 0x5555555555555555, 0xffffffffffffffff }, | |
81 { 0xcccccccc55555555, 0x0000000000000000 }, | |
82 { 0xe7e7e7e7e7e7e7e7, 0x6969696969696969 }, | |
83 }; | |
84 vector unsigned long long int b_sources [NumSamples] = { | |
85 { 0x0123456789abcdef, 0x123456789abcdef0 }, | |
86 { 0x5555555555555555, 0xffffffffffffffff }, | |
87 { 0xcccccccc55555555, 0x0000000000000000 }, | |
88 { 0xe7e7e7e7e7e7e7e7, 0x6969696969696969 }, | |
89 }; | |
90 vector unsigned long long int c_sources [NumSamples] = { | |
91 { 0x0123456789abcdef, 0x123456789abcdef0 }, | |
92 { 0x5555555555555555, 0xffffffffffffffff }, | |
93 { 0xcccccccc55555555, 0x0000000000000000 }, | |
94 { 0xe7e7e7e7e7e7e7e7, 0x6969696969696969 }, | |
95 }; | |
96 | |
97 doTests00000001 (a_sources, b_sources, c_sources); | |
98 doTests11100101 (a_sources, b_sources, c_sources); | |
99 doTests11110011 (a_sources, b_sources, c_sources); | |
100 | |
101 return 0; | |
102 } | |
103 | |
104 /* { dg-final { scan-assembler {\mxxeval\M} } } */ |