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} } } */