2 * Copyright © 2020 Valve Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
28 BEGIN_TEST(to_hw_instr
.swap_subdword
)
46 for (unsigned i
= GFX6
; i
<= GFX7
; i
++) {
47 if (!setup_cs(NULL
, (chip_class
)i
))
50 //~gfx[67]>> p_unit_test 0
51 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
52 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
53 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
54 bld
.pseudo(aco_opcode::p_unit_test
, Operand(0u));
55 bld
.pseudo(aco_opcode::p_parallelcopy
,
56 Definition(v0_lo
, v2b
), Definition(v1_lo
, v2b
),
57 Operand(v1_lo
, v2b
), Operand(v0_lo
, v2b
));
59 //~gfx[67]! p_unit_test 1
60 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
61 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
62 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
63 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
64 bld
.pseudo(aco_opcode::p_unit_test
, Operand(1u));
65 bld
.pseudo(aco_opcode::p_create_vector
,
66 Definition(v0_lo
, v1
),
67 Operand(v1_lo
, v2b
), Operand(v0_lo
, v2b
));
69 //~gfx[67]! p_unit_test 2
70 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
71 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
72 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
73 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
74 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[2][0:16]
75 bld
.pseudo(aco_opcode::p_unit_test
, Operand(2u));
76 bld
.pseudo(aco_opcode::p_create_vector
,
77 Definition(v0_lo
, v6b
), Operand(v1_lo
, v2b
),
78 Operand(v0_lo
, v2b
), Operand(v2_lo
, v2b
));
80 //~gfx[67]! p_unit_test 3
81 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
82 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
83 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[0][0:16]
84 //~gfx[67]! v1: %0:v[0] = v_mov_b32 %0:v[1]
85 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:16]
86 //~gfx[67]! v1: %0:v[3] = v_and_b32 0xffff, %0:v[3][0:16]
87 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[2][0:16], %0:v[3][0:16]
88 bld
.pseudo(aco_opcode::p_unit_test
, Operand(3u));
89 bld
.pseudo(aco_opcode::p_create_vector
,
90 Definition(v0_lo
, v2
),
91 Operand(v1_lo
, v2b
), Operand(v0_lo
, v2b
),
92 Operand(v2_lo
, v2b
), Operand(v3_lo
, v2b
));
94 //~gfx[67]! p_unit_test 4
95 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:16]
96 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xffff, %0:v[1][0:16]
97 //~gfx[67]! v1: %0:v[1] = v_cvt_pk_u16_u32 %0:v[1][0:16], %0:v[2][0:16]
98 //~gfx[67]! v1: %0:v[3] = v_and_b32 0xffff, %0:v[3][0:16]
99 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
100 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[3][0:16]
101 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
102 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
103 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
104 bld
.pseudo(aco_opcode::p_unit_test
, Operand(4u));
105 bld
.pseudo(aco_opcode::p_create_vector
,
106 Definition(v0_lo
, v2
),
107 Operand(v1_lo
, v2b
), Operand(v2_lo
, v2b
),
108 Operand(v0_lo
, v2b
), Operand(v3_lo
, v2b
));
110 //~gfx[67]! p_unit_test 5
111 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
112 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
113 bld
.pseudo(aco_opcode::p_unit_test
, Operand(5u));
114 bld
.pseudo(aco_opcode::p_split_vector
,
115 Definition(v1_lo
, v2b
), Definition(v0_lo
, v2b
),
118 //~gfx[67]! p_unit_test 6
119 //~gfx[67]! v2b: %0:v[2][0:16] = v_mov_b32 %0:v[1][0:16]
120 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
121 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
122 bld
.pseudo(aco_opcode::p_unit_test
, Operand(6u));
123 bld
.pseudo(aco_opcode::p_split_vector
,
124 Definition(v1_lo
, v2b
), Definition(v0_lo
, v2b
),
125 Definition(v2_lo
, v2b
), Operand(v0_lo
, v6b
));
127 //~gfx[67]! p_unit_test 7
128 //~gfx[67]! v2b: %0:v[2][0:16] = v_mov_b32 %0:v[1][0:16]
129 //~gfx[67]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16]
130 //~gfx[67]! v2b: %0:v[0][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
131 //~gfx[67]! v2b: %0:v[3][0:16] = v_lshrrev_b32 16, %0:v[2][16:32]
132 bld
.pseudo(aco_opcode::p_unit_test
, Operand(7u));
133 bld
.pseudo(aco_opcode::p_split_vector
,
134 Definition(v1_lo
, v2b
), Definition(v0_lo
, v2b
),
135 Definition(v2_lo
, v2b
), Definition(v3_lo
, v2b
),
138 //~gfx[67]! p_unit_test 8
139 //~gfx[67]! v2b: %0:v[2][0:16] = v_lshrrev_b32 16, %0:v[0][16:32]
140 //~gfx[67]! v2b: %0:v[3][0:16] = v_lshrrev_b32 16, %0:v[1][16:32]
141 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
142 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
143 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
144 bld
.pseudo(aco_opcode::p_unit_test
, Operand(8u));
145 bld
.pseudo(aco_opcode::p_split_vector
,
146 Definition(v1_lo
, v2b
), Definition(v2_lo
, v2b
),
147 Definition(v0_lo
, v2b
), Definition(v3_lo
, v2b
),
150 //~gfx[67]! p_unit_test 9
151 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
152 //~gfx[67]! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
153 //~gfx[67]! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
154 bld
.pseudo(aco_opcode::p_unit_test
, Operand(9u));
155 bld
.pseudo(aco_opcode::p_parallelcopy
,
156 Definition(v0_lo
, v1b
), Definition(v1_lo
, v1b
),
157 Operand(v1_lo
, v1b
), Operand(v0_lo
, v1b
));
159 //~gfx[67]! p_unit_test 10
160 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
161 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
162 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
163 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
164 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
165 bld
.pseudo(aco_opcode::p_unit_test
, Operand(10u));
166 bld
.pseudo(aco_opcode::p_create_vector
,
167 Definition(v0_lo
, v2b
),
168 Operand(v1_lo
, v1b
), Operand(v0_lo
, v1b
));
170 //~gfx[67]! p_unit_test 11
171 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
172 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
173 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
174 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
175 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
176 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:8]
177 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
178 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[2][0:8]
179 bld
.pseudo(aco_opcode::p_unit_test
, Operand(11u));
180 bld
.pseudo(aco_opcode::p_create_vector
,
181 Definition(v0_lo
, v3b
), Operand(v1_lo
, v1b
),
182 Operand(v0_lo
, v1b
), Operand(v2_lo
, v1b
));
184 //~gfx[67]! p_unit_test 12
185 //~gfx[67]! v1: %0:v[1] = v_and_b32 0xff, %0:v[1][0:8]
186 //~gfx[67]! v1: %0:v[0] = v_lshlrev_b32 8, %0:v[0][0:8]
187 //~gfx[67]! v1: %0:v[1] = v_or_b32 %0:v[1][0:8], %0:v[0][0:8]
188 //~gfx[67]! v1: %0:v[0] = v_lshrrev_b32 8, %0:v[0][0:8]
189 //~gfx[67]! v2b: %0:v[0][0:16] = v_mov_b32 %0:v[1][0:16]
190 //~gfx[67]! v1: %0:v[2] = v_and_b32 0xffff, %0:v[2][0:8]
191 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:16]
192 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[2][0:8]
193 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffffff, %0:v[0][0:8]
194 //~gfx[67]! v1: %0:v[3] = v_lshlrev_b32 24, %0:v[3][0:8]
195 //~gfx[67]! v1: %0:v[0] = v_or_b32 %0:v[0][0:8], %0:v[3][0:8]
196 //~gfx[67]! v1: %0:v[3] = v_lshrrev_b32 24, %0:v[3][0:8]
197 bld
.pseudo(aco_opcode::p_unit_test
, Operand(12u));
198 bld
.pseudo(aco_opcode::p_create_vector
,
199 Definition(v0_lo
, v1
),
200 Operand(v1_lo
, v1b
), Operand(v0_lo
, v1b
),
201 Operand(v2_lo
, v1b
), Operand(v3_lo
, v1b
));
203 //~gfx[67]! p_unit_test 13
204 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xff, %0:v[0][0:8]
205 //~gfx[67]! v1: %0:v[0] = v_mul_u32_u24 0x101, %0:v[0][0:8]
206 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffff, %0:v[0][0:8]
207 //~gfx[67]! v1: %0:v[0] = v_cvt_pk_u16_u32 %0:v[0][0:16], %0:v[0][0:8]
208 //~gfx[67]! v1: %0:v[0] = v_and_b32 0xffffff, %0:v[0][0:8]
209 //~gfx[67]! s1: %0:m0 = s_mov_b32 0x1000001
210 //~gfx[67]! v1: %0:v[0] = v_mul_lo_u32 %0:m0, %0:v[0][0:8]
211 bld
.pseudo(aco_opcode::p_unit_test
, Operand(13u));
212 Instruction
* pseudo
= bld
.pseudo(aco_opcode::p_create_vector
,
213 Definition(v0_lo
, v1
),
214 Operand(v0_lo
, v1b
), Operand(v0_lo
, v1b
),
215 Operand(v0_lo
, v1b
), Operand(v0_lo
, v1b
));
216 static_cast<Pseudo_instruction
*>(pseudo
)->scratch_sgpr
= m0
;
218 //~gfx[67]! p_unit_test 14
219 //~gfx[67]! v1b: %0:v[1][0:8] = v_mov_b32 %0:v[0][0:8]
220 //~gfx[67]! v1b: %0:v[0][0:8] = v_lshrrev_b32 8, %0:v[1][8:16]
221 bld
.pseudo(aco_opcode::p_unit_test
, Operand(14u));
222 bld
.pseudo(aco_opcode::p_split_vector
,
223 Definition(v1_lo
, v1b
), Definition(v0_lo
, v1b
),
224 Operand(v0_lo
, v2b
));
226 //~gfx[67]! p_unit_test 15
227 //~gfx[67]! v1b: %0:v[1][0:8] = v_mov_b32 %0:v[0][0:8]
228 //~gfx[67]! v1b: %0:v[0][0:8] = v_lshrrev_b32 8, %0:v[1][8:16]
229 //~gfx[67]! v1b: %0:v[2][0:8] = v_lshrrev_b32 16, %0:v[1][16:24]
230 //~gfx[67]! v1b: %0:v[3][0:8] = v_lshrrev_b32 24, %0:v[1][24:32]
231 bld
.pseudo(aco_opcode::p_unit_test
, Operand(15u));
232 bld
.pseudo(aco_opcode::p_split_vector
,
233 Definition(v1_lo
, v1b
), Definition(v0_lo
, v1b
),
234 Definition(v2_lo
, v1b
), Definition(v3_lo
, v1b
),
239 finish_to_hw_instr_test();
242 for (unsigned i
= GFX8
; i
<= GFX9
; i
++) {
243 if (!setup_cs(NULL
, (chip_class
)i
))
246 //~gfx[89]>> p_unit_test 0
247 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
248 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
249 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
250 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
251 bld
.pseudo(aco_opcode::p_unit_test
, Operand(0u));
252 bld
.pseudo(aco_opcode::p_parallelcopy
,
253 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
),
254 Operand(v0_hi
, v2b
), Operand(v0_lo
, v2b
));
256 //~gfx[89]! p_unit_test 1
257 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
258 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
259 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
260 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
261 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
262 bld
.pseudo(aco_opcode::p_unit_test
, Operand(1u));
263 bld
.pseudo(aco_opcode::p_parallelcopy
,
264 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
),
265 Operand(v1_lo
, v1
), Operand(v0_lo
, v2b
));
267 //~gfx[89]! p_unit_test 2
268 //~gfx[89]! v2b: %0:v[0][16:32] = v_mov_b32 %0:v[1][16:32] dst_preserve
269 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][0:16] dst_preserve
270 //~gfx[89]! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
271 //~gfx[89]! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
272 //~gfx[89]! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
273 bld
.pseudo(aco_opcode::p_unit_test
, Operand(2u));
274 bld
.pseudo(aco_opcode::p_parallelcopy
,
275 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
), Definition(v1_hi
, v2b
),
276 Operand(v1_lo
, v1
), Operand(v0_lo
, v2b
), Operand(v0_lo
, v2b
));
278 //~gfx[89]! p_unit_test 3
279 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
280 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
281 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
282 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
283 //~gfx[89]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16] dst_preserve
284 //~gfx[89]! v1b: %0:v[1][16:24] = v_mov_b32 %0:v[0][16:24] dst_preserve
285 bld
.pseudo(aco_opcode::p_unit_test
, Operand(3u));
286 bld
.pseudo(aco_opcode::p_parallelcopy
,
287 Definition(v0_lo
, v1
), Definition(v1_b3
, v1b
),
288 Operand(v1_lo
, v1
), Operand(v0_b3
, v1b
));
290 //~gfx[89]! p_unit_test 4
291 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
292 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
293 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
294 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
295 //~gfx[89]! v1b: %0:v[1][8:16] = v_mov_b32 %0:v[0][8:16] dst_preserve
296 //~gfx[89]! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
297 bld
.pseudo(aco_opcode::p_unit_test
, Operand(4u));
298 bld
.pseudo(aco_opcode::p_parallelcopy
,
299 Definition(v0_lo
, v1
), Definition(v1_lo
, v1b
),
300 Operand(v1_lo
, v1
), Operand(v0_lo
, v1b
));
302 //~gfx[89]! p_unit_test 5
303 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
304 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
305 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
306 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
307 //~gfx[89]! v1b: %0:v[0][8:16] = v_mov_b32 %0:v[1][8:16] dst_preserve
308 //~gfx[89]! v1b: %0:v[0][24:32] = v_mov_b32 %0:v[1][24:32] dst_preserve
309 bld
.pseudo(aco_opcode::p_unit_test
, Operand(5u));
310 bld
.pseudo(aco_opcode::p_parallelcopy
,
311 Definition(v0_lo
, v1b
), Definition(v0_hi
, v1b
), Definition(v1_lo
, v1
),
312 Operand(v1_lo
, v1b
), Operand(v1_hi
, v1b
), Operand(v0_lo
, v1
));
314 //~gfx[89]! p_unit_test 6
315 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
316 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
317 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
318 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
319 bld
.pseudo(aco_opcode::p_unit_test
, Operand(6u));
320 bld
.pseudo(aco_opcode::p_parallelcopy
,
321 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
), Definition(v1_lo
, v1
),
322 Operand(v1_lo
, v2b
), Operand(v1_hi
, v2b
), Operand(v0_lo
, v1
));
324 //~gfx[89]! p_unit_test 7
325 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
326 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
327 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
328 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
329 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
330 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
331 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
332 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
333 bld
.pseudo(aco_opcode::p_unit_test
, Operand(7u));
334 bld
.pseudo(aco_opcode::p_parallelcopy
,
335 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
), Definition(v1_lo
, v1
),
336 Operand(v1_hi
, v2b
), Operand(v1_lo
, v2b
), Operand(v0_lo
, v1
));
338 //~gfx[89]! p_unit_test 8
339 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
340 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
341 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
342 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
343 //~gfx[89]! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
344 //~gfx[89]! v1b: %0:v[0][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
345 //~gfx[89]! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
346 bld
.pseudo(aco_opcode::p_unit_test
, Operand(8u));
347 bld
.pseudo(aco_opcode::p_parallelcopy
,
348 Definition(v0_lo
, v3b
), Definition(v1_lo
, v3b
),
349 Operand(v1_lo
, v3b
), Operand(v0_lo
, v3b
));
351 //~gfx[89]! p_unit_test 9
352 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
353 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
354 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
355 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
356 //~gfx[89]! v1b: %0:v[1][24:32] = v_mov_b32 %0:v[0][24:32] dst_preserve
357 bld
.pseudo(aco_opcode::p_unit_test
, Operand(9u));
358 bld
.pseudo(aco_opcode::p_parallelcopy
,
359 Definition(v0_lo
, v3b
), Definition(v1_lo
, v3b
), Definition(v0_b3
, v1b
),
360 Operand(v1_lo
, v3b
), Operand(v0_lo
, v3b
), Operand(v1_b3
, v1b
));
362 //~gfx[89]! p_unit_test 10
363 //~gfx[89]! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
364 //~gfx[89]! v1b: %0:v[0][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
365 //~gfx[89]! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
366 //~gfx[89]! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
367 //~gfx[89]! v1b: %0:v[0][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
368 //~gfx[89]! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
369 bld
.pseudo(aco_opcode::p_unit_test
, Operand(10u));
370 bld
.pseudo(aco_opcode::p_parallelcopy
,
371 Definition(v0_b1
, v2b
), Definition(v1_b1
, v2b
),
372 Operand(v1_b1
, v2b
), Operand(v0_b1
, v2b
));
374 //~gfx[89]! p_unit_test 11
375 //~gfx[89]! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][16:32] dst_preserve
376 //~gfx[89]! v1: %0:v[0] = v_mov_b32 42
377 bld
.pseudo(aco_opcode::p_unit_test
, Operand(11u));
378 bld
.pseudo(aco_opcode::p_parallelcopy
,
379 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
),
380 Operand(42u), Operand(v0_hi
, v2b
));
384 finish_to_hw_instr_test();