Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-3.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 run } */ | |
2 /* { dg-require-effective-target powerpc_future_hw } */ | |
3 /* { dg-options "-mdejagnu-cpu=future" } */ | |
4 | |
5 #include <altivec.h> | |
6 | |
7 extern void abort (void); | |
8 | |
9 #define NumSamples 4 | |
10 | |
11 void | |
12 doTests00000001 (vector unsigned short int a_sources [], | |
13 vector unsigned short int b_sources [], | |
14 vector unsigned short int c_sources []) { | |
15 for (int i = 0; i < NumSamples; i++) | |
16 for (int j = 0; j < NumSamples; j++) | |
17 for (int k = 0; k < NumSamples; k++) | |
18 { | |
19 vector unsigned short a = a_sources [i]; | |
20 vector unsigned short b = b_sources [j]; | |
21 vector unsigned short c = c_sources [k]; | |
22 vector unsigned short result = vec_ternarylogic (a, b, c, 0x01); | |
23 vector unsigned short intended = (a & b & c); | |
24 if (!vec_all_eq (result, intended)) | |
25 abort (); | |
26 } | |
27 } | |
28 | |
29 void doTests11100101 (vector unsigned short int a_sources [], | |
30 vector unsigned short int b_sources [], | |
31 vector unsigned short int c_sources []) { | |
32 for (int i = 0; i < NumSamples; i++) | |
33 for (int j = 0; j < NumSamples; j++) | |
34 for (int k = 0; k < NumSamples; k++) | |
35 { | |
36 vector unsigned short a = a_sources [i]; | |
37 vector unsigned short b = b_sources [j]; | |
38 vector unsigned short c = c_sources [k]; | |
39 vector unsigned short result = vec_ternarylogic (a, b, c, 0xe5); | |
40 vector unsigned short intended = | |
41 { 0, 0, 0, 0, 0, 0, 0, 0 }; | |
42 // Supposed to be a ? c: nand (b,c) | |
43 for (int l = 0; l < 8; l++) | |
44 { | |
45 for (int m = 0; m < 16; m++) | |
46 { | |
47 unsigned short int bit_selector = (0x01 << m); | |
48 if (a[l] & bit_selector) | |
49 intended [l] |= c [l] & bit_selector; | |
50 else if ((b [l] & c [l] & bit_selector) == 0) | |
51 intended [l] |= bit_selector; | |
52 } | |
53 } | |
54 if (!vec_all_eq (result, intended)) | |
55 abort (); | |
56 } | |
57 } | |
58 | |
59 void doTests11110011 (vector unsigned short int a_sources [], | |
60 vector unsigned short int b_sources [], | |
61 vector unsigned short int c_sources []) { | |
62 for (int i = 0; i < NumSamples; i++) | |
63 for (int j = 0; j < NumSamples; j++) | |
64 for (int k = 0; k < NumSamples; k++) | |
65 { | |
66 vector unsigned short a = a_sources [i]; | |
67 vector unsigned short b = b_sources [j]; | |
68 vector unsigned short c = c_sources [k]; | |
69 vector unsigned short result = vec_ternarylogic (a, b, c, 0xfb); | |
70 vector unsigned short intended = { 0, 0, 0, 0, 0, 0, 0, 0 }; | |
71 for (int i = 0; i < 8; i++) | |
72 intended [i] = b [i] | ~(a [i] & c [i]); | |
73 if (!vec_all_eq (result, intended)) | |
74 abort (); | |
75 } | |
76 } | |
77 | |
78 int main (int argc, short *argv []) | |
79 { | |
80 vector unsigned short int a_sources [NumSamples] = { | |
81 { 0x0123, 0x4567, 0x89ab, 0xcdef, 0x1234, 0x5678, 0x9abc, 0xdef0 }, | |
82 { 0x5555, 0x5555, 0x5555, 0x5555, 0xffff, 0xffff, 0xffff, 0xffff }, | |
83 { 0xcccc, 0xcccc, 0x5555, 0x5555, 0x0000, 0x0000, 0x0000, 0x0000 }, | |
84 { 0xe7e7, 0xe7e7, 0xe7e7, 0xe7e7, 0x6969, 0x6969, 0x6969, 0x6969 }, | |
85 }; | |
86 vector unsigned short int b_sources [NumSamples] = { | |
87 { 0x0123, 0x4567, 0x89ab, 0xcdef, 0x1234, 0x5678, 0x9abc, 0xdef0 }, | |
88 { 0x5555, 0x5555, 0x5555, 0x5555, 0xffff, 0xffff, 0xffff, 0xffff }, | |
89 { 0xcccc, 0xcccc, 0x5555, 0x5555, 0x0000, 0x0000, 0x0000, 0x0000 }, | |
90 { 0xe7e7, 0xe7e7, 0xe7e7, 0xe7e7, 0x6969, 0x6969, 0x6969, 0x6969 }, | |
91 }; | |
92 vector unsigned short int c_sources [NumSamples] = { | |
93 { 0x0123, 0x4567, 0x89ab, 0xcdef, 0x1234, 0x5678, 0x9abc, 0xdef0 }, | |
94 { 0x5555, 0x5555, 0x5555, 0x5555, 0xffff, 0xffff, 0xffff, 0xffff }, | |
95 { 0xcccc, 0xcccc, 0x5555, 0x5555, 0x0000, 0x0000, 0x0000, 0x0000 }, | |
96 { 0xe7e7, 0xe7e7, 0xe7e7, 0xe7e7, 0x6969, 0x6969, 0x6969, 0x6969 }, | |
97 }; | |
98 | |
99 doTests00000001 (a_sources, b_sources, c_sources); | |
100 doTests11100101 (a_sources, b_sources, c_sources); | |
101 doTests11110011 (a_sources, b_sources, c_sources); | |
102 | |
103 return 0; | |
104 } | |
105 | |
106 /* { dg-final { scan-assembler {\mxxeval\M} } } */ |