075295886a3c9c593f368c78b0b5b0b53831604e
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
)
29 for (unsigned i
= GFX8
; i
<= GFX9
; i
++) {
30 if (!setup_cs(NULL
, (chip_class
)i
))
49 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
50 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
51 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
52 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
53 bld
.pseudo(aco_opcode::p_unit_test
, Operand(0u));
54 bld
.pseudo(aco_opcode::p_parallelcopy
,
55 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
),
56 Operand(v0_hi
, v2b
), Operand(v0_lo
, v2b
));
59 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
60 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
61 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
62 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
63 //! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
64 bld
.pseudo(aco_opcode::p_unit_test
, Operand(1u));
65 bld
.pseudo(aco_opcode::p_parallelcopy
,
66 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
),
67 Operand(v1_lo
, v1
), Operand(v0_lo
, v2b
));
70 //! v2b: %0:v[0][16:32] = v_mov_b32 %0:v[1][16:32] dst_preserve
71 //! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][0:16] dst_preserve
72 //! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
73 //! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
74 //! v2b: %0:v[1][0:16] = v_xor_b32 %0:v[1][0:16], %0:v[0][0:16] dst_preserve
75 bld
.pseudo(aco_opcode::p_unit_test
, Operand(2u));
76 bld
.pseudo(aco_opcode::p_parallelcopy
,
77 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
), Definition(v1_hi
, v2b
),
78 Operand(v1_lo
, v1
), Operand(v0_lo
, v2b
), Operand(v0_lo
, v2b
));
81 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
82 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
83 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
84 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
85 //! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][0:16] dst_preserve
86 //! v1b: %0:v[1][16:24] = v_mov_b32 %0:v[0][16:24] dst_preserve
87 bld
.pseudo(aco_opcode::p_unit_test
, Operand(3u));
88 bld
.pseudo(aco_opcode::p_parallelcopy
,
89 Definition(v0_lo
, v1
), Definition(v1_b3
, v1b
),
90 Operand(v1_lo
, v1
), Operand(v0_b3
, v1b
));
93 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
94 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
95 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
96 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
97 //! v1b: %0:v[1][8:16] = v_mov_b32 %0:v[0][8:16] dst_preserve
98 //! v2b: %0:v[1][16:32] = v_mov_b32 %0:v[0][16:32] dst_preserve
99 bld
.pseudo(aco_opcode::p_unit_test
, Operand(4u));
100 bld
.pseudo(aco_opcode::p_parallelcopy
,
101 Definition(v0_lo
, v1
), Definition(v1_lo
, v1b
),
102 Operand(v1_lo
, v1
), Operand(v0_lo
, v1b
));
105 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
106 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
107 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
108 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
109 //! v1b: %0:v[0][8:16] = v_mov_b32 %0:v[1][8:16] dst_preserve
110 //! v1b: %0:v[0][24:32] = v_mov_b32 %0:v[1][24:32] dst_preserve
111 bld
.pseudo(aco_opcode::p_unit_test
, Operand(5u));
112 bld
.pseudo(aco_opcode::p_parallelcopy
,
113 Definition(v0_lo
, v1b
), Definition(v0_hi
, v1b
), Definition(v1_lo
, v1
),
114 Operand(v1_lo
, v1b
), Operand(v1_hi
, v1b
), Operand(v0_lo
, v1
));
117 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
118 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
119 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
120 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
121 bld
.pseudo(aco_opcode::p_unit_test
, Operand(6u));
122 bld
.pseudo(aco_opcode::p_parallelcopy
,
123 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
), Definition(v1_lo
, v1
),
124 Operand(v1_lo
, v2b
), Operand(v1_hi
, v2b
), Operand(v0_lo
, v1
));
127 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
128 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[0], %0:v[1]
129 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[0], %0:v[1]
130 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
131 //~gfx8! v2b: %0:v[0][0:16] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
132 //~gfx8! v2b: %0:v[0][16:32] = v_xor_b32 %0:v[0][16:32], %0:v[0][0:16] dst_preserve
133 //~gfx9! v1: %0:v[1], v1: %0:v[0] = v_swap_b32 %0:v[0], %0:v[1]
134 //~gfx9! v1: %0:v[0] = v_pk_add_u16 %0:v[0].yx, 0
135 bld
.pseudo(aco_opcode::p_unit_test
, Operand(7u));
136 bld
.pseudo(aco_opcode::p_parallelcopy
,
137 Definition(v0_lo
, v2b
), Definition(v0_hi
, v2b
), Definition(v1_lo
, v1
),
138 Operand(v1_hi
, v2b
), Operand(v1_lo
, v2b
), Operand(v0_lo
, v1
));
141 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
142 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
143 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
144 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
145 //! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
146 //! v1b: %0:v[0][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
147 //! v1b: %0:v[1][24:32] = v_xor_b32 %0:v[1][24:32], %0:v[0][24:32] dst_preserve
148 bld
.pseudo(aco_opcode::p_unit_test
, Operand(8u));
149 bld
.pseudo(aco_opcode::p_parallelcopy
,
150 Definition(v0_lo
, v3b
), Definition(v1_lo
, v3b
),
151 Operand(v1_lo
, v3b
), Operand(v0_lo
, v3b
));
154 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
155 //~gfx8! v1: %0:v[0] = v_xor_b32 %0:v[1], %0:v[0]
156 //~gfx8! v1: %0:v[1] = v_xor_b32 %0:v[1], %0:v[0]
157 //~gfx9! v1: %0:v[0], v1: %0:v[1] = v_swap_b32 %0:v[1], %0:v[0]
158 //! v1b: %0:v[1][24:32] = v_mov_b32 %0:v[0][24:32] dst_preserve
159 bld
.pseudo(aco_opcode::p_unit_test
, Operand(9u));
160 bld
.pseudo(aco_opcode::p_parallelcopy
,
161 Definition(v0_lo
, v3b
), Definition(v1_lo
, v3b
), Definition(v0_b3
, v1b
),
162 Operand(v1_lo
, v3b
), Operand(v0_lo
, v3b
), Operand(v1_b3
, v1b
));
165 //! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
166 //! v1b: %0:v[0][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
167 //! v1b: %0:v[1][8:16] = v_xor_b32 %0:v[1][8:16], %0:v[0][8:16] dst_preserve
168 //! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
169 //! v1b: %0:v[0][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
170 //! v1b: %0:v[1][16:24] = v_xor_b32 %0:v[1][16:24], %0:v[0][16:24] dst_preserve
171 bld
.pseudo(aco_opcode::p_unit_test
, Operand(10u));
172 bld
.pseudo(aco_opcode::p_parallelcopy
,
173 Definition(v0_b1
, v2b
), Definition(v1_b1
, v2b
),
174 Operand(v1_b1
, v2b
), Operand(v0_b1
, v2b
));
177 //! v2b: %0:v[1][0:16] = v_mov_b32 %0:v[0][16:32] dst_preserve
178 //! v1: %0:v[0] = v_mov_b32 42
179 bld
.pseudo(aco_opcode::p_unit_test
, Operand(11u));
180 bld
.pseudo(aco_opcode::p_parallelcopy
,
181 Definition(v0_lo
, v1
), Definition(v1_lo
, v2b
),
182 Operand(42u), Operand(v0_hi
, v2b
));
186 finish_to_hw_instr_test();