1 /* { dg-do run { target { power10_hw } } } */
2 /* { dg-do link { target { ! power10_hw } } } */
3 /* { dg-options "-mcpu=power10 -O2" } */
4 /* { dg-require-effective-target { int128 && power10_ok } } */
6 /* Check that the expected 128-bit instructions are generated if the processor
7 supports the 128-bit integer instructions. */
8 /* { dg-final { scan-assembler-times {\mmtvsrbm\M} 1 } } */
9 /* { dg-final { scan-assembler-times {\mmtvsrhm\M} 1 } } */
10 /* { dg-final { scan-assembler-times {\mmtvsrwm\M} 1 } } */
11 /* { dg-final { scan-assembler-times {\mmtvsrdm\M} 1 } } */
12 /* { dg-final { scan-assembler-times {\mmtvsrqm\M} 1 } } */
13 /* { dg-final { scan-assembler-times {\mmtvsrbmi\M} 2 } } */
28 unsigned long long arg1
;
30 vector
unsigned char vbc_result_bi
, vbc_expected_result_bi
;
31 vector
unsigned short vbc_result_hi
, vbc_expected_result_hi
;
32 vector
unsigned int vbc_result_wi
, vbc_expected_result_wi
;
33 vector
unsigned long long vbc_result_di
, vbc_expected_result_di
;
34 vector __uint128_t vbc_result_qi
, vbc_expected_result_qi
;
36 unsigned int result_wi
, expected_result_wi
;
37 unsigned long long result
, expected_result
;
38 const unsigned char mp
=1;
39 vector
unsigned char vbc_bi_src
;
40 vector
unsigned short vbc_hi_src
;
41 vector
unsigned int vbc_wi_src
;
42 vector
unsigned long long vbc_di_src
;
43 vector __uint128_t vbc_qi_src
;
48 for (i
= 0; i
<num_elements
; i
++)
49 vbc_expected_result_bi
[i
] = 0x0;
51 vbc_expected_result_bi
[0] = 0xFF;
52 vbc_expected_result_bi
[2] = 0xFF;
54 vbc_result_bi
= vec_genbm(5);
56 for (i
= 0; i
<num_elements
; i
++) {
57 if (vbc_result_bi
[i
] != vbc_expected_result_bi
[i
]) {
59 printf("ERROR: vec_genbm(const 5) ");
60 printf("element %d equals 0x%x does not match expected_result = 0x%x",
61 i
, vbc_result_bi
[i
], vbc_expected_result_bi
[i
]);
71 /* -O2 should generate mtvsrbmi as argument will fit in 6-bit field. */
74 for (i
= 0; i
<num_elements
; i
++)
75 vbc_expected_result_bi
[i
] = 0x0;
77 vbc_expected_result_bi
[1] = 0xFF;
78 vbc_expected_result_bi
[0] = 0xFF;
80 vbc_result_bi
= vec_genbm(arg1
);
82 for (i
= 0; i
<num_elements
; i
++) {
83 if (vbc_result_bi
[i
] != vbc_expected_result_bi
[i
]) {
85 printf("ERROR: vec_genbm(%d) ", arg1
);
86 printf("element %d equals 0x%x does not match expected_result = 0x%x",
87 i
, vbc_result_bi
[i
], vbc_expected_result_bi
[i
]);
96 /* Should generate mtvsrbm as argument will not fit in 6-bit field. */
97 arg1
= 0xEA; // 234 decimal
99 for (i
= 0; i
<num_elements
; i
++)
100 vbc_expected_result_bi
[i
] = 0x0;
102 vbc_expected_result_bi
[7] = 0xFF;
103 vbc_expected_result_bi
[6] = 0xFF;
104 vbc_expected_result_bi
[5] = 0xFF;
105 vbc_expected_result_bi
[3] = 0xFF;
106 vbc_expected_result_bi
[1] = 0xFF;
108 vbc_result_bi
= vec_genbm(arg1
);
110 for (i
= 0; i
<num_elements
; i
++) {
111 if (vbc_result_bi
[i
] != vbc_expected_result_bi
[i
]) {
113 printf("ERROR: vec_genbm(%d) ", arg1
);
114 printf("element %d equals 0x%x does not match expected_result = 0x%x",
115 i
, vbc_result_bi
[i
], vbc_expected_result_bi
[i
]);
127 for (i
= 0; i
<num_elements
; i
++)
128 vbc_expected_result_hi
[i
] = 0x0;
130 vbc_expected_result_hi
[2] = 0xFFFF;
131 vbc_expected_result_hi
[0] = 0xFFFF;
133 vbc_result_hi
= vec_genhm(arg1
);
135 for (i
= 0; i
<num_elements
; i
++) {
136 if (vbc_result_hi
[i
] != vbc_expected_result_hi
[i
]) {
138 printf("ERROR: vec_genhm(%d) ", arg1
);
139 printf("element %d equals 0x%x does not match expected_result = 0x%x",
140 i
, vbc_result_hi
[i
], vbc_expected_result_hi
[i
]);
152 for (i
= 0; i
<num_elements
; i
++)
153 vbc_expected_result_wi
[i
] = 0x0;
155 vbc_expected_result_wi
[2] = 0xFFFFFFFF;
156 vbc_expected_result_wi
[1] = 0xFFFFFFFF;
157 vbc_expected_result_wi
[0] = 0xFFFFFFFF;
159 vbc_result_wi
= vec_genwm(arg1
);
161 for (i
= 0; i
<num_elements
; i
++) {
162 if (vbc_result_wi
[i
] != vbc_expected_result_wi
[i
]) {
164 printf("ERROR: vec_genwm(%d) ", arg1
);
165 printf("element %d equals 0x%x does not match expected_result = 0x%x",
166 i
, vbc_result_wi
[i
], vbc_expected_result_wi
[i
]);
178 for (i
= 0; i
<num_elements
; i
++)
179 vbc_expected_result_di
[i
] = 0x0;
181 vbc_expected_result_di
[1] = 0x0;
182 vbc_expected_result_di
[0] = 0xFFFFFFFFFFFFFFFF;
184 vbc_result_di
= vec_gendm(arg1
);
186 for (i
= 0; i
<num_elements
; i
++) {
187 if (vbc_result_di
[i
] != vbc_expected_result_di
[i
]) {
189 printf("ERROR: vec_gendm(%d) ", arg1
);
190 printf("element %d equals 0x%llx does not match expected_result = ",
191 i
, vbc_result_di
[i
]);
192 printf("0x%llx\n\n", vbc_expected_result_di
[i
]);
203 for (i
= 0; i
<num_elements
; i
++)
204 vbc_expected_result_qi
[i
] = 0x0;
206 vbc_expected_result_qi
[0] = 0xFFFFFFFFFFFFFFFFULL
;
207 vbc_expected_result_qi
[0] = (vbc_expected_result_qi
[0] << 64)
208 | 0xFFFFFFFFFFFFFFFFULL
;
210 vbc_result_qi
= vec_genqm(arg1
);
212 for (i
= 0; i
<num_elements
; i
++) {
213 if (vbc_result_qi
[i
] != vbc_expected_result_qi
[i
]) {
215 printf("ERROR: vec_genqm(%d) ", arg1
);
216 printf("element %d equals 0x%llx does not match expected_result = ",
217 i
, vbc_result_qi
[i
]);
218 printf("0x%llx\n\n", vbc_expected_result_qi
[i
]);