annotate gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-0.c @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 /* { dg-do compile } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 /* { dg-options "-mdejagnu-cpu=future" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4 #include <altivec.h>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6 extern void abort (void);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8 #define NumSamples 4
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 void
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 doTests00000001 (vector unsigned char a_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 vector unsigned char b_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 vector unsigned char c_sources []) {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 for (int i = 0; i < NumSamples; i++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 for (int j = 0; j < NumSamples; j++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 for (int k = 0; k < NumSamples; k++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 vector unsigned char a = a_sources [i];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 vector unsigned char b = b_sources [j];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 vector unsigned char c = c_sources [k];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 vector unsigned char result = vec_ternarylogic (a, b, c, 0x01);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 vector unsigned char intended = (a & b & c);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 if (!vec_all_eq (result, intended))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 void
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 doTests11100101 (vector unsigned char a_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 vector unsigned char b_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 vector unsigned char c_sources []) {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 for (int i = 0; i < NumSamples; i++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33 for (int j = 0; j < NumSamples; j++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 for (int k = 0; k < NumSamples; k++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 vector unsigned char a = a_sources [i];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 vector unsigned char b = b_sources [j];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 vector unsigned char c = c_sources [k];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 vector unsigned char result = vec_ternarylogic (a, b, c, 0xe5);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40 vector unsigned char intended =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 // Supposed to be a ? c: nand (b,c)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 for (int l = 0; l < 16; l++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45 for (int m = 0; m < 8; m++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 unsigned char bit_selector = (0x01 << m);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 if (a[l] & bit_selector)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 intended [l] |= c [l] & bit_selector;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 else if ((b [l] & c [l] & bit_selector) == 0)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 intended [l] |= bit_selector;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 if (!vec_all_eq (result, intended))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 void
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 doTests11110011 (vector unsigned char a_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61 vector unsigned char b_sources [],
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 vector unsigned char c_sources []) {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 for (int i = 0; i < NumSamples; i++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 for (int j = 0; j < NumSamples; j++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 for (int k = 0; k < NumSamples; k++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 vector unsigned char a = a_sources [i];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 vector unsigned char b = b_sources [j];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 vector unsigned char c = c_sources [k];
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70 vector unsigned char result = vec_ternarylogic (a, b, c, 0xfb);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 vector unsigned char intended = {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73 for (int i = 0; i < 16; i++)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
74 intended [i] = b [i] | ~(a [i] & c [i]);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
75 if (!vec_all_eq (result, intended))
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
76 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
77 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
78 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
79
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
80 int main (int argc, char *argv [])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
81 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
82 vector unsigned char a_sources [NumSamples] = {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
83 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
84 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
85 { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
86 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
87 { 0xcc, 0xcc, 0xcc, 0xcc, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
88 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
89 { 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
90 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
91 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
92 vector unsigned char b_sources [NumSamples] = {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
93 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
94 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
95 { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
96 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
97 { 0xcc, 0xcc, 0xcc, 0xcc, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
98 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
99 { 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
100 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
101 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
102 vector unsigned char c_sources [NumSamples] = {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
103 { 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
104 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
105 { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
106 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
107 { 0xcc, 0xcc, 0xcc, 0xcc, 0x55, 0x55, 0x55, 0x55,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
108 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
109 { 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
110 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69 },
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
111 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
112
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
113 doTests00000001 (a_sources, b_sources, c_sources);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
114 doTests11100101 (a_sources, b_sources, c_sources);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
115 doTests11110011 (a_sources, b_sources, c_sources);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
116
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
117 return 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
118 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
119
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
120 /* { dg-final { scan-assembler {\mxxeval\M} } } */