]>
git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/powerpc/vec-ternarylogic-9.c
2 /* { dg-require-effective-target powerpc_future_hw } */
3 /* { dg-require-effective-target int128 } */
4 /* { dg-options "-mdejagnu-cpu=future" } */
8 extern void abort (void);
12 /* vec_all_eq not yet supported for arguments of type
13 vector unsigned __int128. */
15 vector_equal (vector
unsigned __int128 a
, vector
unsigned __int128 b
)
21 doTests00000001 (vector
unsigned __int128 a_sources
[],
22 vector
unsigned __int128 b_sources
[],
23 vector
unsigned __int128 c_sources
[]) {
24 for (int i
= 0; i
< NumSamples
; i
++)
25 for (int j
= 0; j
< NumSamples
; j
++)
26 for (int k
= 0; k
< NumSamples
; k
++)
28 vector
unsigned __int128 a
= a_sources
[i
];
29 vector
unsigned __int128 b
= b_sources
[j
];
30 vector
unsigned __int128 c
= c_sources
[k
];
31 vector
unsigned __int128 result
= vec_ternarylogic (a
, b
, c
, 0x01);
32 vector
unsigned __int128 intended
= (a
& b
& c
);
33 if (!vector_equal (result
, intended
))
39 doTests11100101 (vector
unsigned __int128 a_sources
[],
40 vector
unsigned __int128 b_sources
[],
41 vector
unsigned __int128 c_sources
[]) {
42 for (int i
= 0; i
< NumSamples
; i
++)
43 for (int j
= 0; j
< NumSamples
; j
++)
44 for (int k
= 0; k
< NumSamples
; k
++)
46 vector
unsigned __int128 a
= a_sources
[i
];
47 vector
unsigned __int128 b
= b_sources
[j
];
48 vector
unsigned __int128 c
= c_sources
[k
];
49 vector
unsigned __int128 result
= vec_ternarylogic (a
, b
, c
, 0xe5);
50 vector
unsigned __int128 intended
= { 0 };
51 // Supposed to be a ? c: nand (b,c)
52 for (int l
= 0; l
< 1; l
++)
54 for (int m
= 0; m
< 128; m
++)
56 unsigned __int128 bit_selector
= 0x01;
57 bit_selector
= bit_selector
<< m
;
59 if (a
[l
] & bit_selector
)
60 intended
[l
] |= c
[l
] & bit_selector
;
61 else if ((b
[l
] & c
[l
] & bit_selector
) == 0)
62 intended
[l
] |= bit_selector
;
65 if (!vector_equal (result
, intended
))
71 doTests11110011 (vector
unsigned __int128 a_sources
[],
72 vector
unsigned __int128 b_sources
[],
73 vector
unsigned __int128 c_sources
[]) {
74 for (int i
= 0; i
< NumSamples
; i
++)
75 for (int j
= 0; j
< NumSamples
; j
++)
76 for (int k
= 0; k
< NumSamples
; k
++)
78 vector
unsigned __int128 a
= a_sources
[i
];
79 vector
unsigned __int128 b
= b_sources
[j
];
80 vector
unsigned __int128 c
= c_sources
[k
];
81 vector
unsigned __int128 result
= vec_ternarylogic (a
, b
, c
, 0xfb);
82 vector
unsigned __int128 intended
= { 0 };
83 for (int i
= 0; i
< 1; i
++)
84 intended
[i
] = b
[i
] | ~(a
[i
] & c
[i
]);
85 if (!vector_equal (result
, intended
))
90 int main (int argc
, int *argv
[])
92 vector
unsigned __int128 a_sources
[NumSamples
];
93 vector
unsigned __int128 b_sources
[NumSamples
];
94 vector
unsigned __int128 c_sources
[NumSamples
];
96 a_sources
[0][0] = 0x0123456789abcdefull
;
97 a_sources
[0][0] = a_sources
[0][0] << 64 | 0x123456789abcdef0ull
;
98 a_sources
[1][0] = 0x5555555555555555ull
;
99 a_sources
[1][0] = a_sources
[1][0] << 64 | 0xffffffffffffffffull
;
100 a_sources
[2][0] = 0xcccccccc55555555ull
;
101 a_sources
[2][0] = a_sources
[2][0] << 64 | 0x0000000000000000ull
;
102 a_sources
[3][0] = 0xe7e7e7e7e7e7e7e7ull
;
103 a_sources
[3][0] = a_sources
[3][0] << 64 | 0x6969696969696969ull
;
105 b_sources
[0][0] = 0x0123456789abcdefull
;
106 b_sources
[0][0] = b_sources
[0][0] << 64 | 0x123456789abcdef0ull
;
107 b_sources
[1][0] = 0x5555555555555555ull
;
108 b_sources
[1][0] = b_sources
[1][0] << 64 | 0xffffffffffffffffull
;
109 b_sources
[2][0] = 0xcccccccc55555555ull
;
110 b_sources
[2][0] = b_sources
[2][0] << 64 | 0x0000000000000000ull
;
111 b_sources
[3][0] = 0xe7e7e7e7e7e7e7e7ull
;
112 b_sources
[3][0] = b_sources
[3][0] << 64 | 0x6969696969696969ull
;
114 c_sources
[0][0] = 0x0123456789abcdefull
;
115 c_sources
[0][0] = c_sources
[0][0] << 64 | 0x123456789abcdef0ull
;
116 c_sources
[1][0] = 0x5555555555555555ull
;
117 c_sources
[1][0] = c_sources
[1][0] << 64 | 0xffffffffffffffffull
;
118 c_sources
[2][0] = 0xcccccccc55555555ull
;
119 c_sources
[2][0] = c_sources
[2][0] << 64 | 0x0000000000000000ull
;
120 c_sources
[3][0] = 0xe7e7e7e7e7e7e7e7ull
;
121 c_sources
[3][0] = c_sources
[3][0] << 64 | 0x6969696969696969ull
;
123 doTests00000001 (a_sources
, b_sources
, c_sources
);
124 doTests11100101 (a_sources
, b_sources
, c_sources
);
125 doTests11110011 (a_sources
, b_sources
, c_sources
);
130 /* { dg-final { scan-assembler {\mxxeval\M} } } */