[AMDGPU] Make v8i16/v8f16 legal
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / mul.ll
blob97858b3dae67c067a4c6b554003454f98b3b42df
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx700 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX7 %s
3 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx801 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX8 %s
4 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
5 ; RUN: llc -global-isel -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10 %s
7 define amdgpu_ps i16 @s_mul_i16(i16 inreg %num, i16 inreg %den) {
8 ; GFX7-LABEL: s_mul_i16:
9 ; GFX7:       ; %bb.0:
10 ; GFX7-NEXT:    s_mul_i32 s0, s0, s1
11 ; GFX7-NEXT:    ; return to shader part epilog
13 ; GFX8-LABEL: s_mul_i16:
14 ; GFX8:       ; %bb.0:
15 ; GFX8-NEXT:    s_mov_b32 s2, 0xffff
16 ; GFX8-NEXT:    s_and_b32 s0, s0, s2
17 ; GFX8-NEXT:    s_and_b32 s1, s1, s2
18 ; GFX8-NEXT:    s_mul_i32 s0, s0, s1
19 ; GFX8-NEXT:    ; return to shader part epilog
21 ; GFX9-LABEL: s_mul_i16:
22 ; GFX9:       ; %bb.0:
23 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
24 ; GFX9-NEXT:    s_and_b32 s0, s0, s2
25 ; GFX9-NEXT:    s_and_b32 s1, s1, s2
26 ; GFX9-NEXT:    s_mul_i32 s0, s0, s1
27 ; GFX9-NEXT:    ; return to shader part epilog
29 ; GFX10-LABEL: s_mul_i16:
30 ; GFX10:       ; %bb.0:
31 ; GFX10-NEXT:    s_mov_b32 s2, 0xffff
32 ; GFX10-NEXT:    s_and_b32 s0, s0, s2
33 ; GFX10-NEXT:    s_and_b32 s1, s1, s2
34 ; GFX10-NEXT:    s_mul_i32 s0, s0, s1
35 ; GFX10-NEXT:    ; return to shader part epilog
36   %result = mul i16 %num, %den
37   ret i16 %result
40 define i16 @v_mul_i16(i16 %num, i16 %den) {
41 ; GFX7-LABEL: v_mul_i16:
42 ; GFX7:       ; %bb.0:
43 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44 ; GFX7-NEXT:    s_mov_b32 s4, 0xffff
45 ; GFX7-NEXT:    v_and_b32_e32 v0, s4, v0
46 ; GFX7-NEXT:    v_and_b32_e32 v1, s4, v1
47 ; GFX7-NEXT:    v_mul_u32_u24_e32 v0, v0, v1
48 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
50 ; GFX8-LABEL: v_mul_i16:
51 ; GFX8:       ; %bb.0:
52 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
53 ; GFX8-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
54 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
56 ; GFX9-LABEL: v_mul_i16:
57 ; GFX9:       ; %bb.0:
58 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
59 ; GFX9-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
60 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
62 ; GFX10-LABEL: v_mul_i16:
63 ; GFX10:       ; %bb.0:
64 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
65 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
66 ; GFX10-NEXT:    v_mul_lo_u16 v0, v0, v1
67 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
68   %result = mul i16 %num, %den
69   ret i16 %result
72 define amdgpu_ps zeroext i16 @s_mul_i16_zeroext(i16 inreg zeroext %num, i16 inreg zeroext %den) {
73 ; GFX7-LABEL: s_mul_i16_zeroext:
74 ; GFX7:       ; %bb.0:
75 ; GFX7-NEXT:    s_mul_i32 s0, s0, s1
76 ; GFX7-NEXT:    s_and_b32 s0, s0, 0xffff
77 ; GFX7-NEXT:    ; return to shader part epilog
79 ; GFX8-LABEL: s_mul_i16_zeroext:
80 ; GFX8:       ; %bb.0:
81 ; GFX8-NEXT:    s_mov_b32 s2, 0xffff
82 ; GFX8-NEXT:    s_and_b32 s0, s0, s2
83 ; GFX8-NEXT:    s_and_b32 s1, s1, s2
84 ; GFX8-NEXT:    s_mul_i32 s0, s0, s1
85 ; GFX8-NEXT:    s_and_b32 s0, s0, s2
86 ; GFX8-NEXT:    ; return to shader part epilog
88 ; GFX9-LABEL: s_mul_i16_zeroext:
89 ; GFX9:       ; %bb.0:
90 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
91 ; GFX9-NEXT:    s_and_b32 s0, s0, s2
92 ; GFX9-NEXT:    s_and_b32 s1, s1, s2
93 ; GFX9-NEXT:    s_mul_i32 s0, s0, s1
94 ; GFX9-NEXT:    s_and_b32 s0, s0, s2
95 ; GFX9-NEXT:    ; return to shader part epilog
97 ; GFX10-LABEL: s_mul_i16_zeroext:
98 ; GFX10:       ; %bb.0:
99 ; GFX10-NEXT:    s_mov_b32 s2, 0xffff
100 ; GFX10-NEXT:    s_and_b32 s0, s0, s2
101 ; GFX10-NEXT:    s_and_b32 s1, s1, s2
102 ; GFX10-NEXT:    s_mul_i32 s0, s0, s1
103 ; GFX10-NEXT:    s_and_b32 s0, s0, s2
104 ; GFX10-NEXT:    ; return to shader part epilog
105   %result = mul i16 %num, %den
106   ret i16 %result
109 define zeroext i16 @v_mul_i16_zeroext(i16 zeroext %num, i16 zeroext %den) {
110 ; GFX7-LABEL: v_mul_i16_zeroext:
111 ; GFX7:       ; %bb.0:
112 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
113 ; GFX7-NEXT:    v_mul_u32_u24_e32 v0, v0, v1
114 ; GFX7-NEXT:    v_and_b32_e32 v0, 0xffff, v0
115 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
117 ; GFX8-LABEL: v_mul_i16_zeroext:
118 ; GFX8:       ; %bb.0:
119 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
120 ; GFX8-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
121 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX9-LABEL: v_mul_i16_zeroext:
124 ; GFX9:       ; %bb.0:
125 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX9-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
127 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
129 ; GFX10-LABEL: v_mul_i16_zeroext:
130 ; GFX10:       ; %bb.0:
131 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
132 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
133 ; GFX10-NEXT:    v_mul_lo_u16 v0, v0, v1
134 ; GFX10-NEXT:    v_bfe_u32 v0, v0, 0, 16
135 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
136   %result = mul i16 %num, %den
137   ret i16 %result
140 define amdgpu_ps signext i16 @s_mul_i16_signext(i16 inreg signext %num, i16 inreg signext %den) {
141 ; GFX7-LABEL: s_mul_i16_signext:
142 ; GFX7:       ; %bb.0:
143 ; GFX7-NEXT:    s_mul_i32 s0, s0, s1
144 ; GFX7-NEXT:    s_sext_i32_i16 s0, s0
145 ; GFX7-NEXT:    ; return to shader part epilog
147 ; GFX8-LABEL: s_mul_i16_signext:
148 ; GFX8:       ; %bb.0:
149 ; GFX8-NEXT:    s_mov_b32 s2, 0xffff
150 ; GFX8-NEXT:    s_and_b32 s0, s0, s2
151 ; GFX8-NEXT:    s_and_b32 s1, s1, s2
152 ; GFX8-NEXT:    s_mul_i32 s0, s0, s1
153 ; GFX8-NEXT:    s_sext_i32_i16 s0, s0
154 ; GFX8-NEXT:    ; return to shader part epilog
156 ; GFX9-LABEL: s_mul_i16_signext:
157 ; GFX9:       ; %bb.0:
158 ; GFX9-NEXT:    s_mov_b32 s2, 0xffff
159 ; GFX9-NEXT:    s_and_b32 s0, s0, s2
160 ; GFX9-NEXT:    s_and_b32 s1, s1, s2
161 ; GFX9-NEXT:    s_mul_i32 s0, s0, s1
162 ; GFX9-NEXT:    s_sext_i32_i16 s0, s0
163 ; GFX9-NEXT:    ; return to shader part epilog
165 ; GFX10-LABEL: s_mul_i16_signext:
166 ; GFX10:       ; %bb.0:
167 ; GFX10-NEXT:    s_mov_b32 s2, 0xffff
168 ; GFX10-NEXT:    s_and_b32 s0, s0, s2
169 ; GFX10-NEXT:    s_and_b32 s1, s1, s2
170 ; GFX10-NEXT:    s_mul_i32 s0, s0, s1
171 ; GFX10-NEXT:    s_sext_i32_i16 s0, s0
172 ; GFX10-NEXT:    ; return to shader part epilog
173   %result = mul i16 %num, %den
174   ret i16 %result
177 define signext i16 @v_mul_i16_signext(i16 signext %num, i16 signext %den) {
178 ; GFX7-LABEL: v_mul_i16_signext:
179 ; GFX7:       ; %bb.0:
180 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181 ; GFX7-NEXT:    s_mov_b32 s4, 0xffff
182 ; GFX7-NEXT:    v_and_b32_e32 v0, s4, v0
183 ; GFX7-NEXT:    v_and_b32_e32 v1, s4, v1
184 ; GFX7-NEXT:    v_mul_u32_u24_e32 v0, v0, v1
185 ; GFX7-NEXT:    v_bfe_i32 v0, v0, 0, 16
186 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
188 ; GFX8-LABEL: v_mul_i16_signext:
189 ; GFX8:       ; %bb.0:
190 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
191 ; GFX8-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
192 ; GFX8-NEXT:    v_bfe_i32 v0, v0, 0, 16
193 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
195 ; GFX9-LABEL: v_mul_i16_signext:
196 ; GFX9:       ; %bb.0:
197 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
198 ; GFX9-NEXT:    v_mul_lo_u16_e32 v0, v0, v1
199 ; GFX9-NEXT:    v_bfe_i32 v0, v0, 0, 16
200 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
202 ; GFX10-LABEL: v_mul_i16_signext:
203 ; GFX10:       ; %bb.0:
204 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
206 ; GFX10-NEXT:    v_mul_lo_u16 v0, v0, v1
207 ; GFX10-NEXT:    v_bfe_i32 v0, v0, 0, 16
208 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
209   %result = mul i16 %num, %den
210   ret i16 %result
213 define amdgpu_ps i32 @s_mul_i32(i32 inreg %num, i32 inreg %den) {
214 ; GCN-LABEL: s_mul_i32:
215 ; GCN:       ; %bb.0:
216 ; GCN-NEXT:    s_mul_i32 s0, s0, s1
217 ; GCN-NEXT:    ; return to shader part epilog
219 ; GFX10-LABEL: s_mul_i32:
220 ; GFX10:       ; %bb.0:
221 ; GFX10-NEXT:    s_mul_i32 s0, s0, s1
222 ; GFX10-NEXT:    ; return to shader part epilog
223   %result = mul i32 %num, %den
224   ret i32 %result
227 define i32 @v_mul_i32(i32 %num, i32 %den) {
228 ; GCN-LABEL: v_mul_i32:
229 ; GCN:       ; %bb.0:
230 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
231 ; GCN-NEXT:    v_mul_lo_u32 v0, v0, v1
232 ; GCN-NEXT:    s_setpc_b64 s[30:31]
234 ; GFX10-LABEL: v_mul_i32:
235 ; GFX10:       ; %bb.0:
236 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
237 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
238 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v1
239 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
240   %result = mul i32 %num, %den
241   ret i32 %result
244 define amdgpu_ps <2 x i32> @s_mul_v2i32(<2 x i32> inreg %num, <2 x i32> inreg %den) {
245 ; GCN-LABEL: s_mul_v2i32:
246 ; GCN:       ; %bb.0:
247 ; GCN-NEXT:    s_mul_i32 s0, s0, s2
248 ; GCN-NEXT:    s_mul_i32 s1, s1, s3
249 ; GCN-NEXT:    ; return to shader part epilog
251 ; GFX10-LABEL: s_mul_v2i32:
252 ; GFX10:       ; %bb.0:
253 ; GFX10-NEXT:    s_mul_i32 s0, s0, s2
254 ; GFX10-NEXT:    s_mul_i32 s1, s1, s3
255 ; GFX10-NEXT:    ; return to shader part epilog
256   %result = mul <2 x i32> %num, %den
257   ret <2 x i32> %result
260 define <2 x i32> @v_mul_v2i32(<2 x i32> %num, <2 x i32> %den) {
261 ; GCN-LABEL: v_mul_v2i32:
262 ; GCN:       ; %bb.0:
263 ; GCN-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
264 ; GCN-NEXT:    v_mul_lo_u32 v0, v0, v2
265 ; GCN-NEXT:    v_mul_lo_u32 v1, v1, v3
266 ; GCN-NEXT:    s_setpc_b64 s[30:31]
268 ; GFX10-LABEL: v_mul_v2i32:
269 ; GFX10:       ; %bb.0:
270 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
271 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
272 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v2
273 ; GFX10-NEXT:    v_mul_lo_u32 v1, v1, v3
274 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
275   %result = mul <2 x i32> %num, %den
276   ret <2 x i32> %result
279 define amdgpu_cs i33 @s_mul_i33(i33 inreg %num,  i33 inreg %den) {
280 ; GFX7-LABEL: s_mul_i33:
281 ; GFX7:       ; %bb.0:
282 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
283 ; GFX7-NEXT:    v_mul_hi_u32 v0, s0, v0
284 ; GFX7-NEXT:    s_mul_i32 s4, s0, s2
285 ; GFX7-NEXT:    s_mul_i32 s1, s1, s2
286 ; GFX7-NEXT:    s_mul_i32 s0, s0, s3
287 ; GFX7-NEXT:    s_add_i32 s1, s1, s0
288 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s1, v0
289 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
290 ; GFX7-NEXT:    s_mov_b32 s0, s4
291 ; GFX7-NEXT:    ; return to shader part epilog
293 ; GFX8-LABEL: s_mul_i33:
294 ; GFX8:       ; %bb.0:
295 ; GFX8-NEXT:    v_mov_b32_e32 v0, s2
296 ; GFX8-NEXT:    v_mul_hi_u32 v0, s0, v0
297 ; GFX8-NEXT:    s_mul_i32 s4, s0, s2
298 ; GFX8-NEXT:    s_mul_i32 s1, s1, s2
299 ; GFX8-NEXT:    s_mul_i32 s0, s0, s3
300 ; GFX8-NEXT:    s_add_i32 s1, s1, s0
301 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s1, v0
302 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
303 ; GFX8-NEXT:    s_mov_b32 s0, s4
304 ; GFX8-NEXT:    ; return to shader part epilog
306 ; GFX9-LABEL: s_mul_i33:
307 ; GFX9:       ; %bb.0:
308 ; GFX9-NEXT:    s_mul_i32 s1, s1, s2
309 ; GFX9-NEXT:    s_mul_i32 s3, s0, s3
310 ; GFX9-NEXT:    s_mul_i32 s4, s0, s2
311 ; GFX9-NEXT:    s_mul_hi_u32 s0, s0, s2
312 ; GFX9-NEXT:    s_add_i32 s1, s1, s3
313 ; GFX9-NEXT:    s_add_i32 s1, s1, s0
314 ; GFX9-NEXT:    s_mov_b32 s0, s4
315 ; GFX9-NEXT:    ; return to shader part epilog
317 ; GFX10-LABEL: s_mul_i33:
318 ; GFX10:       ; %bb.0:
319 ; GFX10-NEXT:    s_mul_i32 s1, s1, s2
320 ; GFX10-NEXT:    s_mul_i32 s3, s0, s3
321 ; GFX10-NEXT:    s_mul_hi_u32 s4, s0, s2
322 ; GFX10-NEXT:    s_add_i32 s1, s1, s3
323 ; GFX10-NEXT:    s_mul_i32 s0, s0, s2
324 ; GFX10-NEXT:    s_add_i32 s1, s1, s4
325 ; GFX10-NEXT:    ; return to shader part epilog
326   %result = mul i33 %num, %den
327   ret i33 %result
330 define amdgpu_ps i64 @s_mul_i64(i64 inreg %num, i64 inreg %den) {
331 ; GFX7-LABEL: s_mul_i64:
332 ; GFX7:       ; %bb.0:
333 ; GFX7-NEXT:    v_mov_b32_e32 v0, s2
334 ; GFX7-NEXT:    v_mul_hi_u32 v0, s0, v0
335 ; GFX7-NEXT:    s_mul_i32 s4, s0, s2
336 ; GFX7-NEXT:    s_mul_i32 s1, s1, s2
337 ; GFX7-NEXT:    s_mul_i32 s0, s0, s3
338 ; GFX7-NEXT:    s_add_i32 s1, s1, s0
339 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s1, v0
340 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
341 ; GFX7-NEXT:    s_mov_b32 s0, s4
342 ; GFX7-NEXT:    ; return to shader part epilog
344 ; GFX8-LABEL: s_mul_i64:
345 ; GFX8:       ; %bb.0:
346 ; GFX8-NEXT:    v_mov_b32_e32 v0, s2
347 ; GFX8-NEXT:    v_mul_hi_u32 v0, s0, v0
348 ; GFX8-NEXT:    s_mul_i32 s4, s0, s2
349 ; GFX8-NEXT:    s_mul_i32 s1, s1, s2
350 ; GFX8-NEXT:    s_mul_i32 s0, s0, s3
351 ; GFX8-NEXT:    s_add_i32 s1, s1, s0
352 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s1, v0
353 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
354 ; GFX8-NEXT:    s_mov_b32 s0, s4
355 ; GFX8-NEXT:    ; return to shader part epilog
357 ; GFX9-LABEL: s_mul_i64:
358 ; GFX9:       ; %bb.0:
359 ; GFX9-NEXT:    s_mul_i32 s1, s1, s2
360 ; GFX9-NEXT:    s_mul_i32 s3, s0, s3
361 ; GFX9-NEXT:    s_mul_i32 s4, s0, s2
362 ; GFX9-NEXT:    s_mul_hi_u32 s0, s0, s2
363 ; GFX9-NEXT:    s_add_i32 s1, s1, s3
364 ; GFX9-NEXT:    s_add_i32 s1, s1, s0
365 ; GFX9-NEXT:    s_mov_b32 s0, s4
366 ; GFX9-NEXT:    ; return to shader part epilog
368 ; GFX10-LABEL: s_mul_i64:
369 ; GFX10:       ; %bb.0:
370 ; GFX10-NEXT:    s_mul_i32 s1, s1, s2
371 ; GFX10-NEXT:    s_mul_i32 s3, s0, s3
372 ; GFX10-NEXT:    s_mul_hi_u32 s4, s0, s2
373 ; GFX10-NEXT:    s_add_i32 s1, s1, s3
374 ; GFX10-NEXT:    s_mul_i32 s0, s0, s2
375 ; GFX10-NEXT:    s_add_i32 s1, s1, s4
376 ; GFX10-NEXT:    ; return to shader part epilog
377   %result = mul i64 %num, %den
378   ret i64 %result
381 define i64 @v_mul_i64(i64 %num, i64 %den) {
382 ; GFX7-LABEL: v_mul_i64:
383 ; GFX7:       ; %bb.0:
384 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
385 ; GFX7-NEXT:    v_mul_lo_u32 v1, v1, v2
386 ; GFX7-NEXT:    v_mul_lo_u32 v4, v0, v3
387 ; GFX7-NEXT:    v_mul_lo_u32 v3, v0, v2
388 ; GFX7-NEXT:    v_mul_hi_u32 v0, v0, v2
389 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v4
390 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v0
391 ; GFX7-NEXT:    v_mov_b32_e32 v0, v3
392 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
394 ; GFX8-LABEL: v_mul_i64:
395 ; GFX8:       ; %bb.0:
396 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
397 ; GFX8-NEXT:    v_mul_lo_u32 v1, v1, v2
398 ; GFX8-NEXT:    v_mul_lo_u32 v4, v0, v3
399 ; GFX8-NEXT:    v_mul_lo_u32 v3, v0, v2
400 ; GFX8-NEXT:    v_mul_hi_u32 v0, v0, v2
401 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v4
402 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v0
403 ; GFX8-NEXT:    v_mov_b32_e32 v0, v3
404 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
406 ; GFX9-LABEL: v_mul_i64:
407 ; GFX9:       ; %bb.0:
408 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
409 ; GFX9-NEXT:    v_mul_lo_u32 v1, v1, v2
410 ; GFX9-NEXT:    v_mul_lo_u32 v3, v0, v3
411 ; GFX9-NEXT:    v_mul_hi_u32 v4, v0, v2
412 ; GFX9-NEXT:    v_mul_lo_u32 v0, v0, v2
413 ; GFX9-NEXT:    v_add3_u32 v1, v1, v3, v4
414 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
416 ; GFX10-LABEL: v_mul_i64:
417 ; GFX10:       ; %bb.0:
418 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
419 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
420 ; GFX10-NEXT:    v_mul_lo_u32 v1, v1, v2
421 ; GFX10-NEXT:    v_mul_lo_u32 v3, v0, v3
422 ; GFX10-NEXT:    v_mul_hi_u32 v4, v0, v2
423 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v2
424 ; GFX10-NEXT:    v_add3_u32 v1, v1, v3, v4
425 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
426   %result = mul i64 %num, %den
427   ret i64 %result
430 define amdgpu_ps <3 x i32> @s_mul_i96(i96 inreg %num, i96 inreg %den) {
431 ; GFX7-LABEL: s_mul_i96:
432 ; GFX7:       ; %bb.0:
433 ; GFX7-NEXT:    v_mov_b32_e32 v0, s3
434 ; GFX7-NEXT:    v_mul_hi_u32 v0, s0, v0
435 ; GFX7-NEXT:    s_mul_i32 s7, s1, s3
436 ; GFX7-NEXT:    s_mul_i32 s8, s0, s4
437 ; GFX7-NEXT:    v_mov_b32_e32 v2, s1
438 ; GFX7-NEXT:    s_add_u32 s7, s7, s8
439 ; GFX7-NEXT:    v_mul_hi_u32 v2, v2, s3
440 ; GFX7-NEXT:    v_mov_b32_e32 v3, s4
441 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s7, v0
442 ; GFX7-NEXT:    s_mul_i32 s2, s2, s3
443 ; GFX7-NEXT:    s_mul_i32 s7, s1, s4
444 ; GFX7-NEXT:    v_mul_hi_u32 v3, s0, v3
445 ; GFX7-NEXT:    s_mul_i32 s6, s0, s3
446 ; GFX7-NEXT:    s_cselect_b32 s8, 1, 0
447 ; GFX7-NEXT:    s_mul_i32 s5, s0, s5
448 ; GFX7-NEXT:    s_add_i32 s0, s2, s7
449 ; GFX7-NEXT:    s_add_i32 s0, s0, s5
450 ; GFX7-NEXT:    s_and_b32 s8, s8, 1
451 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
452 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, s0, v2
453 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, s8, v1
454 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v2, v3
455 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
456 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
457 ; GFX7-NEXT:    v_readfirstlane_b32 s2, v1
458 ; GFX7-NEXT:    s_mov_b32 s0, s6
459 ; GFX7-NEXT:    ; return to shader part epilog
461 ; GFX8-LABEL: s_mul_i96:
462 ; GFX8:       ; %bb.0:
463 ; GFX8-NEXT:    v_mov_b32_e32 v0, s3
464 ; GFX8-NEXT:    v_mul_hi_u32 v0, s0, v0
465 ; GFX8-NEXT:    s_mul_i32 s7, s1, s3
466 ; GFX8-NEXT:    s_mul_i32 s8, s0, s4
467 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
468 ; GFX8-NEXT:    s_add_u32 s7, s7, s8
469 ; GFX8-NEXT:    v_mul_hi_u32 v2, v2, s3
470 ; GFX8-NEXT:    v_mov_b32_e32 v3, s4
471 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s7, v0
472 ; GFX8-NEXT:    s_mul_i32 s2, s2, s3
473 ; GFX8-NEXT:    s_mul_i32 s7, s1, s4
474 ; GFX8-NEXT:    v_mul_hi_u32 v3, s0, v3
475 ; GFX8-NEXT:    s_mul_i32 s6, s0, s3
476 ; GFX8-NEXT:    s_cselect_b32 s8, 1, 0
477 ; GFX8-NEXT:    s_mul_i32 s5, s0, s5
478 ; GFX8-NEXT:    s_add_i32 s0, s2, s7
479 ; GFX8-NEXT:    s_add_i32 s0, s0, s5
480 ; GFX8-NEXT:    s_and_b32 s8, s8, 1
481 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
482 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s0, v2
483 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s8, v1
484 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v3
485 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
486 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
487 ; GFX8-NEXT:    v_readfirstlane_b32 s2, v1
488 ; GFX8-NEXT:    s_mov_b32 s0, s6
489 ; GFX8-NEXT:    ; return to shader part epilog
491 ; GFX9-LABEL: s_mul_i96:
492 ; GFX9:       ; %bb.0:
493 ; GFX9-NEXT:    s_mul_i32 s7, s1, s3
494 ; GFX9-NEXT:    s_mul_i32 s8, s0, s4
495 ; GFX9-NEXT:    s_add_u32 s7, s7, s8
496 ; GFX9-NEXT:    s_cselect_b32 s8, 1, 0
497 ; GFX9-NEXT:    s_mul_hi_u32 s9, s0, s3
498 ; GFX9-NEXT:    s_and_b32 s8, s8, 1
499 ; GFX9-NEXT:    s_add_u32 s7, s7, s9
500 ; GFX9-NEXT:    s_cselect_b32 s9, 1, 0
501 ; GFX9-NEXT:    s_and_b32 s9, s9, 1
502 ; GFX9-NEXT:    s_add_i32 s8, s8, s9
503 ; GFX9-NEXT:    s_mul_i32 s2, s2, s3
504 ; GFX9-NEXT:    s_mul_i32 s9, s1, s4
505 ; GFX9-NEXT:    s_mul_i32 s5, s0, s5
506 ; GFX9-NEXT:    s_add_i32 s2, s2, s9
507 ; GFX9-NEXT:    s_mul_hi_u32 s1, s1, s3
508 ; GFX9-NEXT:    s_add_i32 s2, s2, s5
509 ; GFX9-NEXT:    s_mul_i32 s6, s0, s3
510 ; GFX9-NEXT:    s_mul_hi_u32 s0, s0, s4
511 ; GFX9-NEXT:    s_add_i32 s1, s2, s1
512 ; GFX9-NEXT:    s_add_i32 s0, s1, s0
513 ; GFX9-NEXT:    s_add_i32 s2, s0, s8
514 ; GFX9-NEXT:    s_mov_b32 s0, s6
515 ; GFX9-NEXT:    s_mov_b32 s1, s7
516 ; GFX9-NEXT:    ; return to shader part epilog
518 ; GFX10-LABEL: s_mul_i96:
519 ; GFX10:       ; %bb.0:
520 ; GFX10-NEXT:    s_mul_i32 s6, s1, s3
521 ; GFX10-NEXT:    s_mul_i32 s7, s0, s4
522 ; GFX10-NEXT:    s_mul_hi_u32 s8, s0, s3
523 ; GFX10-NEXT:    s_add_u32 s6, s6, s7
524 ; GFX10-NEXT:    s_cselect_b32 s7, 1, 0
525 ; GFX10-NEXT:    s_mul_i32 s2, s2, s3
526 ; GFX10-NEXT:    s_and_b32 s7, s7, 1
527 ; GFX10-NEXT:    s_mul_i32 s9, s1, s4
528 ; GFX10-NEXT:    s_add_u32 s6, s6, s8
529 ; GFX10-NEXT:    s_cselect_b32 s8, 1, 0
530 ; GFX10-NEXT:    s_mul_i32 s5, s0, s5
531 ; GFX10-NEXT:    s_add_i32 s2, s2, s9
532 ; GFX10-NEXT:    s_mul_hi_u32 s1, s1, s3
533 ; GFX10-NEXT:    s_add_i32 s2, s2, s5
534 ; GFX10-NEXT:    s_and_b32 s8, s8, 1
535 ; GFX10-NEXT:    s_mul_hi_u32 s4, s0, s4
536 ; GFX10-NEXT:    s_add_i32 s1, s2, s1
537 ; GFX10-NEXT:    s_add_i32 s7, s7, s8
538 ; GFX10-NEXT:    s_add_i32 s1, s1, s4
539 ; GFX10-NEXT:    s_mul_i32 s0, s0, s3
540 ; GFX10-NEXT:    s_add_i32 s2, s1, s7
541 ; GFX10-NEXT:    s_mov_b32 s1, s6
542 ; GFX10-NEXT:    ; return to shader part epilog
543   %result = mul i96 %num, %den
544   %cast = bitcast i96 %result to <3 x i32>
545   ret <3 x i32> %cast
548 define i96 @v_mul_i96(i96 %num, i96 %den) {
549 ; GFX7-LABEL: v_mul_i96:
550 ; GFX7:       ; %bb.0:
551 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
552 ; GFX7-NEXT:    v_mul_lo_u32 v7, v1, v3
553 ; GFX7-NEXT:    v_mul_lo_u32 v8, v0, v4
554 ; GFX7-NEXT:    v_mul_hi_u32 v9, v0, v3
555 ; GFX7-NEXT:    v_mul_lo_u32 v2, v2, v3
556 ; GFX7-NEXT:    v_mul_lo_u32 v5, v0, v5
557 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
558 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
559 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v9
560 ; GFX7-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
561 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v8, v9
562 ; GFX7-NEXT:    v_mul_lo_u32 v9, v1, v4
563 ; GFX7-NEXT:    v_mul_hi_u32 v1, v1, v3
564 ; GFX7-NEXT:    v_mul_lo_u32 v6, v0, v3
565 ; GFX7-NEXT:    v_mul_hi_u32 v0, v0, v4
566 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v2, v9
567 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v2, v5
568 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
569 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
570 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v0, v8
571 ; GFX7-NEXT:    v_mov_b32_e32 v0, v6
572 ; GFX7-NEXT:    v_mov_b32_e32 v1, v7
573 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
575 ; GFX8-LABEL: v_mul_i96:
576 ; GFX8:       ; %bb.0:
577 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
578 ; GFX8-NEXT:    v_mul_lo_u32 v7, v1, v3
579 ; GFX8-NEXT:    v_mul_lo_u32 v8, v0, v4
580 ; GFX8-NEXT:    v_mul_hi_u32 v9, v0, v3
581 ; GFX8-NEXT:    v_mul_lo_u32 v2, v2, v3
582 ; GFX8-NEXT:    v_mul_lo_u32 v5, v0, v5
583 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v8
584 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
585 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v9
586 ; GFX8-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
587 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v9
588 ; GFX8-NEXT:    v_mul_lo_u32 v9, v1, v4
589 ; GFX8-NEXT:    v_mul_hi_u32 v1, v1, v3
590 ; GFX8-NEXT:    v_mul_lo_u32 v6, v0, v3
591 ; GFX8-NEXT:    v_mul_hi_u32 v0, v0, v4
592 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v9
593 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v5
594 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
595 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v1, v0
596 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v0, v8
597 ; GFX8-NEXT:    v_mov_b32_e32 v0, v6
598 ; GFX8-NEXT:    v_mov_b32_e32 v1, v7
599 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
601 ; GFX9-LABEL: v_mul_i96:
602 ; GFX9:       ; %bb.0:
603 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
604 ; GFX9-NEXT:    v_mul_lo_u32 v7, v1, v3
605 ; GFX9-NEXT:    v_mul_lo_u32 v8, v0, v4
606 ; GFX9-NEXT:    v_mul_hi_u32 v9, v0, v3
607 ; GFX9-NEXT:    v_mul_lo_u32 v2, v2, v3
608 ; GFX9-NEXT:    v_mul_lo_u32 v10, v1, v4
609 ; GFX9-NEXT:    v_mul_lo_u32 v5, v0, v5
610 ; GFX9-NEXT:    v_mul_hi_u32 v1, v1, v3
611 ; GFX9-NEXT:    v_mul_lo_u32 v6, v0, v3
612 ; GFX9-NEXT:    v_add_co_u32_e32 v7, vcc, v7, v8
613 ; GFX9-NEXT:    v_mul_hi_u32 v0, v0, v4
614 ; GFX9-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
615 ; GFX9-NEXT:    v_add_co_u32_e32 v7, vcc, v7, v9
616 ; GFX9-NEXT:    v_cndmask_b32_e64 v9, 0, 1, vcc
617 ; GFX9-NEXT:    v_add_u32_e32 v2, v2, v10
618 ; GFX9-NEXT:    v_add_u32_e32 v3, v8, v9
619 ; GFX9-NEXT:    v_add3_u32 v1, v2, v5, v1
620 ; GFX9-NEXT:    v_add3_u32 v2, v1, v0, v3
621 ; GFX9-NEXT:    v_mov_b32_e32 v0, v6
622 ; GFX9-NEXT:    v_mov_b32_e32 v1, v7
623 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
625 ; GFX10-LABEL: v_mul_i96:
626 ; GFX10:       ; %bb.0:
627 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
628 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
629 ; GFX10-NEXT:    v_mul_lo_u32 v6, v1, v3
630 ; GFX10-NEXT:    v_mul_lo_u32 v7, v0, v4
631 ; GFX10-NEXT:    v_mul_hi_u32 v8, v0, v3
632 ; GFX10-NEXT:    v_mul_lo_u32 v2, v2, v3
633 ; GFX10-NEXT:    v_mul_lo_u32 v9, v1, v4
634 ; GFX10-NEXT:    v_mul_lo_u32 v5, v0, v5
635 ; GFX10-NEXT:    v_mul_hi_u32 v4, v0, v4
636 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v3
637 ; GFX10-NEXT:    v_add_co_u32 v6, s4, v6, v7
638 ; GFX10-NEXT:    v_mul_hi_u32 v7, v1, v3
639 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, 0, 1, s4
640 ; GFX10-NEXT:    v_add_nc_u32_e32 v2, v2, v9
641 ; GFX10-NEXT:    v_add_co_u32 v1, s4, v6, v8
642 ; GFX10-NEXT:    v_cndmask_b32_e64 v6, 0, 1, s4
643 ; GFX10-NEXT:    v_add3_u32 v2, v2, v5, v7
644 ; GFX10-NEXT:    v_add_nc_u32_e32 v3, v10, v6
645 ; GFX10-NEXT:    v_add3_u32 v2, v2, v4, v3
646 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
647   %result = mul i96 %num, %den
648   ret i96 %result
651 define amdgpu_ps <4 x i32> @s_mul_i128(i128 inreg %num, i128 inreg %den) {
652 ; GFX7-LABEL: s_mul_i128:
653 ; GFX7:       ; %bb.0:
654 ; GFX7-NEXT:    v_mov_b32_e32 v0, s4
655 ; GFX7-NEXT:    v_mul_hi_u32 v0, s0, v0
656 ; GFX7-NEXT:    s_mul_i32 s9, s1, s4
657 ; GFX7-NEXT:    s_mul_i32 s10, s0, s5
658 ; GFX7-NEXT:    s_add_u32 s9, s9, s10
659 ; GFX7-NEXT:    s_cselect_b32 s10, 1, 0
660 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s9, v0
661 ; GFX7-NEXT:    s_and_b32 s10, s10, 1
662 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
663 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, s10, v1
664 ; GFX7-NEXT:    s_mul_i32 s9, s2, s4
665 ; GFX7-NEXT:    s_mul_i32 s10, s1, s5
666 ; GFX7-NEXT:    v_mov_b32_e32 v2, s1
667 ; GFX7-NEXT:    s_add_u32 s9, s9, s10
668 ; GFX7-NEXT:    v_mul_hi_u32 v2, v2, s4
669 ; GFX7-NEXT:    s_cselect_b32 s10, 1, 0
670 ; GFX7-NEXT:    s_mul_i32 s11, s0, s6
671 ; GFX7-NEXT:    s_and_b32 s10, s10, 1
672 ; GFX7-NEXT:    v_mov_b32_e32 v3, s5
673 ; GFX7-NEXT:    s_add_u32 s9, s9, s11
674 ; GFX7-NEXT:    v_mul_hi_u32 v4, s0, v3
675 ; GFX7-NEXT:    s_cselect_b32 s11, 1, 0
676 ; GFX7-NEXT:    s_and_b32 s11, s11, 1
677 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, s9, v2
678 ; GFX7-NEXT:    s_add_i32 s10, s10, s11
679 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
680 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, s10, v5
681 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
682 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
683 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
684 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
685 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
686 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v4, v2
687 ; GFX7-NEXT:    v_mov_b32_e32 v4, s2
688 ; GFX7-NEXT:    s_mul_i32 s3, s3, s4
689 ; GFX7-NEXT:    s_mul_i32 s5, s2, s5
690 ; GFX7-NEXT:    v_mul_hi_u32 v4, v4, s4
691 ; GFX7-NEXT:    v_mov_b32_e32 v5, s6
692 ; GFX7-NEXT:    s_mul_i32 s8, s0, s4
693 ; GFX7-NEXT:    s_mul_i32 s9, s1, s6
694 ; GFX7-NEXT:    s_mul_i32 s7, s0, s7
695 ; GFX7-NEXT:    v_mul_hi_u32 v3, s1, v3
696 ; GFX7-NEXT:    v_mul_hi_u32 v5, s0, v5
697 ; GFX7-NEXT:    s_add_i32 s0, s3, s5
698 ; GFX7-NEXT:    s_add_i32 s0, s0, s9
699 ; GFX7-NEXT:    s_add_i32 s0, s0, s7
700 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, s0, v4
701 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
702 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v3, v5
703 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
704 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
705 ; GFX7-NEXT:    v_readfirstlane_b32 s2, v1
706 ; GFX7-NEXT:    v_readfirstlane_b32 s3, v2
707 ; GFX7-NEXT:    s_mov_b32 s0, s8
708 ; GFX7-NEXT:    ; return to shader part epilog
710 ; GFX8-LABEL: s_mul_i128:
711 ; GFX8:       ; %bb.0:
712 ; GFX8-NEXT:    v_mov_b32_e32 v0, s4
713 ; GFX8-NEXT:    v_mul_hi_u32 v0, s0, v0
714 ; GFX8-NEXT:    s_mul_i32 s9, s1, s4
715 ; GFX8-NEXT:    s_mul_i32 s10, s0, s5
716 ; GFX8-NEXT:    s_add_u32 s9, s9, s10
717 ; GFX8-NEXT:    s_cselect_b32 s10, 1, 0
718 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s9, v0
719 ; GFX8-NEXT:    s_and_b32 s10, s10, 1
720 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
721 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s10, v1
722 ; GFX8-NEXT:    s_mul_i32 s9, s2, s4
723 ; GFX8-NEXT:    s_mul_i32 s10, s1, s5
724 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
725 ; GFX8-NEXT:    s_add_u32 s9, s9, s10
726 ; GFX8-NEXT:    v_mul_hi_u32 v2, v2, s4
727 ; GFX8-NEXT:    s_cselect_b32 s10, 1, 0
728 ; GFX8-NEXT:    s_mul_i32 s11, s0, s6
729 ; GFX8-NEXT:    s_and_b32 s10, s10, 1
730 ; GFX8-NEXT:    v_mov_b32_e32 v3, s5
731 ; GFX8-NEXT:    s_add_u32 s9, s9, s11
732 ; GFX8-NEXT:    v_mul_hi_u32 v4, s0, v3
733 ; GFX8-NEXT:    s_cselect_b32 s11, 1, 0
734 ; GFX8-NEXT:    s_and_b32 s11, s11, 1
735 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s9, v2
736 ; GFX8-NEXT:    s_add_i32 s10, s10, s11
737 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
738 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s10, v5
739 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v4
740 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
741 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v5, v4
742 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
743 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
744 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v4, v2
745 ; GFX8-NEXT:    v_mov_b32_e32 v4, s2
746 ; GFX8-NEXT:    s_mul_i32 s3, s3, s4
747 ; GFX8-NEXT:    s_mul_i32 s5, s2, s5
748 ; GFX8-NEXT:    v_mul_hi_u32 v4, v4, s4
749 ; GFX8-NEXT:    v_mov_b32_e32 v5, s6
750 ; GFX8-NEXT:    s_mul_i32 s8, s0, s4
751 ; GFX8-NEXT:    s_mul_i32 s9, s1, s6
752 ; GFX8-NEXT:    s_mul_i32 s7, s0, s7
753 ; GFX8-NEXT:    v_mul_hi_u32 v3, s1, v3
754 ; GFX8-NEXT:    v_mul_hi_u32 v5, s0, v5
755 ; GFX8-NEXT:    s_add_i32 s0, s3, s5
756 ; GFX8-NEXT:    s_add_i32 s0, s0, s9
757 ; GFX8-NEXT:    s_add_i32 s0, s0, s7
758 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, s0, v4
759 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v4, v3
760 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v5
761 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v3, v2
762 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
763 ; GFX8-NEXT:    v_readfirstlane_b32 s2, v1
764 ; GFX8-NEXT:    v_readfirstlane_b32 s3, v2
765 ; GFX8-NEXT:    s_mov_b32 s0, s8
766 ; GFX8-NEXT:    ; return to shader part epilog
768 ; GFX9-LABEL: s_mul_i128:
769 ; GFX9:       ; %bb.0:
770 ; GFX9-NEXT:    s_mul_i32 s9, s1, s4
771 ; GFX9-NEXT:    s_mul_i32 s10, s0, s5
772 ; GFX9-NEXT:    s_add_u32 s9, s9, s10
773 ; GFX9-NEXT:    s_cselect_b32 s10, 1, 0
774 ; GFX9-NEXT:    s_mul_hi_u32 s11, s0, s4
775 ; GFX9-NEXT:    s_and_b32 s10, s10, 1
776 ; GFX9-NEXT:    s_add_u32 s9, s9, s11
777 ; GFX9-NEXT:    s_cselect_b32 s11, 1, 0
778 ; GFX9-NEXT:    s_and_b32 s11, s11, 1
779 ; GFX9-NEXT:    s_add_i32 s10, s10, s11
780 ; GFX9-NEXT:    s_mul_i32 s11, s2, s4
781 ; GFX9-NEXT:    s_mul_i32 s12, s1, s5
782 ; GFX9-NEXT:    s_add_u32 s11, s11, s12
783 ; GFX9-NEXT:    s_cselect_b32 s12, 1, 0
784 ; GFX9-NEXT:    s_mul_i32 s13, s0, s6
785 ; GFX9-NEXT:    s_and_b32 s12, s12, 1
786 ; GFX9-NEXT:    s_add_u32 s11, s11, s13
787 ; GFX9-NEXT:    s_cselect_b32 s13, 1, 0
788 ; GFX9-NEXT:    s_and_b32 s13, s13, 1
789 ; GFX9-NEXT:    s_mul_hi_u32 s14, s1, s4
790 ; GFX9-NEXT:    s_add_i32 s12, s12, s13
791 ; GFX9-NEXT:    s_add_u32 s11, s11, s14
792 ; GFX9-NEXT:    s_cselect_b32 s13, 1, 0
793 ; GFX9-NEXT:    s_and_b32 s13, s13, 1
794 ; GFX9-NEXT:    s_mul_hi_u32 s15, s0, s5
795 ; GFX9-NEXT:    s_add_i32 s12, s12, s13
796 ; GFX9-NEXT:    s_add_u32 s11, s11, s15
797 ; GFX9-NEXT:    s_cselect_b32 s13, 1, 0
798 ; GFX9-NEXT:    s_and_b32 s13, s13, 1
799 ; GFX9-NEXT:    s_add_i32 s12, s12, s13
800 ; GFX9-NEXT:    s_add_u32 s10, s11, s10
801 ; GFX9-NEXT:    s_cselect_b32 s11, 1, 0
802 ; GFX9-NEXT:    s_and_b32 s11, s11, 1
803 ; GFX9-NEXT:    s_add_i32 s12, s12, s11
804 ; GFX9-NEXT:    s_mul_i32 s3, s3, s4
805 ; GFX9-NEXT:    s_mul_i32 s11, s2, s5
806 ; GFX9-NEXT:    s_mul_i32 s13, s1, s6
807 ; GFX9-NEXT:    s_add_i32 s3, s3, s11
808 ; GFX9-NEXT:    s_mul_i32 s7, s0, s7
809 ; GFX9-NEXT:    s_add_i32 s3, s3, s13
810 ; GFX9-NEXT:    s_mul_hi_u32 s2, s2, s4
811 ; GFX9-NEXT:    s_add_i32 s3, s3, s7
812 ; GFX9-NEXT:    s_mul_hi_u32 s1, s1, s5
813 ; GFX9-NEXT:    s_add_i32 s2, s3, s2
814 ; GFX9-NEXT:    s_mul_i32 s8, s0, s4
815 ; GFX9-NEXT:    s_mul_hi_u32 s0, s0, s6
816 ; GFX9-NEXT:    s_add_i32 s1, s2, s1
817 ; GFX9-NEXT:    s_add_i32 s0, s1, s0
818 ; GFX9-NEXT:    s_add_i32 s3, s0, s12
819 ; GFX9-NEXT:    s_mov_b32 s0, s8
820 ; GFX9-NEXT:    s_mov_b32 s1, s9
821 ; GFX9-NEXT:    s_mov_b32 s2, s10
822 ; GFX9-NEXT:    ; return to shader part epilog
824 ; GFX10-LABEL: s_mul_i128:
825 ; GFX10:       ; %bb.0:
826 ; GFX10-NEXT:    s_mul_i32 s8, s1, s4
827 ; GFX10-NEXT:    s_mul_i32 s9, s0, s5
828 ; GFX10-NEXT:    s_mul_hi_u32 s10, s0, s4
829 ; GFX10-NEXT:    s_add_u32 s8, s8, s9
830 ; GFX10-NEXT:    s_cselect_b32 s9, 1, 0
831 ; GFX10-NEXT:    s_mul_i32 s11, s1, s5
832 ; GFX10-NEXT:    s_and_b32 s9, s9, 1
833 ; GFX10-NEXT:    s_add_u32 s8, s8, s10
834 ; GFX10-NEXT:    s_cselect_b32 s10, 1, 0
835 ; GFX10-NEXT:    s_mul_i32 s12, s0, s6
836 ; GFX10-NEXT:    s_and_b32 s10, s10, 1
837 ; GFX10-NEXT:    s_mul_hi_u32 s13, s1, s4
838 ; GFX10-NEXT:    s_add_i32 s9, s9, s10
839 ; GFX10-NEXT:    s_mul_i32 s10, s2, s4
840 ; GFX10-NEXT:    s_mul_i32 s3, s3, s4
841 ; GFX10-NEXT:    s_add_u32 s10, s10, s11
842 ; GFX10-NEXT:    s_cselect_b32 s11, 1, 0
843 ; GFX10-NEXT:    s_mul_i32 s7, s0, s7
844 ; GFX10-NEXT:    s_and_b32 s11, s11, 1
845 ; GFX10-NEXT:    s_add_u32 s10, s10, s12
846 ; GFX10-NEXT:    s_cselect_b32 s12, 1, 0
847 ; GFX10-NEXT:    s_and_b32 s12, s12, 1
848 ; GFX10-NEXT:    s_add_i32 s11, s11, s12
849 ; GFX10-NEXT:    s_add_u32 s10, s10, s13
850 ; GFX10-NEXT:    s_cselect_b32 s12, 1, 0
851 ; GFX10-NEXT:    s_mul_hi_u32 s13, s0, s5
852 ; GFX10-NEXT:    s_and_b32 s12, s12, 1
853 ; GFX10-NEXT:    s_add_i32 s11, s11, s12
854 ; GFX10-NEXT:    s_add_u32 s10, s10, s13
855 ; GFX10-NEXT:    s_cselect_b32 s12, 1, 0
856 ; GFX10-NEXT:    s_mul_i32 s13, s1, s6
857 ; GFX10-NEXT:    s_and_b32 s12, s12, 1
858 ; GFX10-NEXT:    s_mul_hi_u32 s1, s1, s5
859 ; GFX10-NEXT:    s_add_i32 s11, s11, s12
860 ; GFX10-NEXT:    s_mul_i32 s12, s2, s5
861 ; GFX10-NEXT:    s_add_u32 s9, s10, s9
862 ; GFX10-NEXT:    s_cselect_b32 s10, 1, 0
863 ; GFX10-NEXT:    s_add_i32 s3, s3, s12
864 ; GFX10-NEXT:    s_mul_hi_u32 s2, s2, s4
865 ; GFX10-NEXT:    s_add_i32 s3, s3, s13
866 ; GFX10-NEXT:    s_and_b32 s10, s10, 1
867 ; GFX10-NEXT:    s_add_i32 s3, s3, s7
868 ; GFX10-NEXT:    s_add_i32 s11, s11, s10
869 ; GFX10-NEXT:    s_add_i32 s2, s3, s2
870 ; GFX10-NEXT:    s_mul_hi_u32 s3, s0, s6
871 ; GFX10-NEXT:    s_add_i32 s1, s2, s1
872 ; GFX10-NEXT:    s_mul_i32 s0, s0, s4
873 ; GFX10-NEXT:    s_add_i32 s1, s1, s3
874 ; GFX10-NEXT:    s_mov_b32 s2, s9
875 ; GFX10-NEXT:    s_add_i32 s3, s1, s11
876 ; GFX10-NEXT:    s_mov_b32 s1, s8
877 ; GFX10-NEXT:    ; return to shader part epilog
878   %result = mul i128 %num, %den
879   %cast = bitcast i128 %result to <4 x i32>
880   ret <4 x i32> %cast
883 define i128 @v_mul_i128(i128 %num, i128 %den) {
884 ; GFX7-LABEL: v_mul_i128:
885 ; GFX7:       ; %bb.0:
886 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
887 ; GFX7-NEXT:    v_mul_lo_u32 v9, v1, v4
888 ; GFX7-NEXT:    v_mul_lo_u32 v10, v0, v5
889 ; GFX7-NEXT:    v_mul_hi_u32 v11, v0, v4
890 ; GFX7-NEXT:    v_mul_lo_u32 v12, v1, v5
891 ; GFX7-NEXT:    v_mul_lo_u32 v13, v0, v6
892 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, v9, v10
893 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
894 ; GFX7-NEXT:    v_add_i32_e32 v9, vcc, v9, v11
895 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
896 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
897 ; GFX7-NEXT:    v_mul_lo_u32 v11, v2, v4
898 ; GFX7-NEXT:    v_mul_hi_u32 v14, v1, v4
899 ; GFX7-NEXT:    v_mul_hi_u32 v15, v0, v5
900 ; GFX7-NEXT:    v_mul_lo_u32 v3, v3, v4
901 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v11, v12
902 ; GFX7-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
903 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v11, v13
904 ; GFX7-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
905 ; GFX7-NEXT:    v_add_i32_e32 v12, vcc, v12, v13
906 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v11, v14
907 ; GFX7-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
908 ; GFX7-NEXT:    v_add_i32_e32 v12, vcc, v12, v13
909 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v11, v15
910 ; GFX7-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
911 ; GFX7-NEXT:    v_add_i32_e32 v12, vcc, v12, v13
912 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v11, v10
913 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
914 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v12, v11
915 ; GFX7-NEXT:    v_mul_lo_u32 v12, v2, v5
916 ; GFX7-NEXT:    v_mul_lo_u32 v13, v1, v6
917 ; GFX7-NEXT:    v_mul_lo_u32 v7, v0, v7
918 ; GFX7-NEXT:    v_mul_hi_u32 v2, v2, v4
919 ; GFX7-NEXT:    v_mul_hi_u32 v1, v1, v5
920 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v3, v12
921 ; GFX7-NEXT:    v_mul_lo_u32 v8, v0, v4
922 ; GFX7-NEXT:    v_mul_hi_u32 v0, v0, v6
923 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v3, v13
924 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
925 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
926 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
927 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
928 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v0, v11
929 ; GFX7-NEXT:    v_mov_b32_e32 v0, v8
930 ; GFX7-NEXT:    v_mov_b32_e32 v1, v9
931 ; GFX7-NEXT:    v_mov_b32_e32 v2, v10
932 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
934 ; GFX8-LABEL: v_mul_i128:
935 ; GFX8:       ; %bb.0:
936 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
937 ; GFX8-NEXT:    v_mul_lo_u32 v9, v1, v4
938 ; GFX8-NEXT:    v_mul_lo_u32 v10, v0, v5
939 ; GFX8-NEXT:    v_mul_hi_u32 v11, v0, v4
940 ; GFX8-NEXT:    v_mul_lo_u32 v12, v1, v5
941 ; GFX8-NEXT:    v_mul_lo_u32 v13, v0, v6
942 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v10
943 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
944 ; GFX8-NEXT:    v_add_u32_e32 v9, vcc, v9, v11
945 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
946 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v11
947 ; GFX8-NEXT:    v_mul_lo_u32 v11, v2, v4
948 ; GFX8-NEXT:    v_mul_hi_u32 v14, v1, v4
949 ; GFX8-NEXT:    v_mul_hi_u32 v15, v0, v5
950 ; GFX8-NEXT:    v_mul_lo_u32 v3, v3, v4
951 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v12
952 ; GFX8-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
953 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v13
954 ; GFX8-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
955 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v13
956 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v14
957 ; GFX8-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
958 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v13
959 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v11, v15
960 ; GFX8-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
961 ; GFX8-NEXT:    v_add_u32_e32 v12, vcc, v12, v13
962 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v11, v10
963 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
964 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v12, v11
965 ; GFX8-NEXT:    v_mul_lo_u32 v12, v2, v5
966 ; GFX8-NEXT:    v_mul_lo_u32 v13, v1, v6
967 ; GFX8-NEXT:    v_mul_lo_u32 v7, v0, v7
968 ; GFX8-NEXT:    v_mul_hi_u32 v2, v2, v4
969 ; GFX8-NEXT:    v_mul_hi_u32 v1, v1, v5
970 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v12
971 ; GFX8-NEXT:    v_mul_lo_u32 v8, v0, v4
972 ; GFX8-NEXT:    v_mul_hi_u32 v0, v0, v6
973 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v13
974 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v7
975 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v3, v2
976 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
977 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v1, v0
978 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v0, v11
979 ; GFX8-NEXT:    v_mov_b32_e32 v0, v8
980 ; GFX8-NEXT:    v_mov_b32_e32 v1, v9
981 ; GFX8-NEXT:    v_mov_b32_e32 v2, v10
982 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
984 ; GFX9-LABEL: v_mul_i128:
985 ; GFX9:       ; %bb.0:
986 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
987 ; GFX9-NEXT:    v_mul_lo_u32 v9, v1, v4
988 ; GFX9-NEXT:    v_mul_lo_u32 v10, v0, v5
989 ; GFX9-NEXT:    v_mul_hi_u32 v11, v0, v4
990 ; GFX9-NEXT:    v_mul_lo_u32 v12, v1, v5
991 ; GFX9-NEXT:    v_mul_lo_u32 v13, v0, v6
992 ; GFX9-NEXT:    v_add_co_u32_e32 v9, vcc, v9, v10
993 ; GFX9-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
994 ; GFX9-NEXT:    v_add_co_u32_e32 v9, vcc, v9, v11
995 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
996 ; GFX9-NEXT:    v_add_u32_e32 v10, v10, v11
997 ; GFX9-NEXT:    v_mul_lo_u32 v11, v2, v4
998 ; GFX9-NEXT:    v_mul_hi_u32 v14, v1, v4
999 ; GFX9-NEXT:    v_mul_hi_u32 v15, v0, v5
1000 ; GFX9-NEXT:    v_mul_lo_u32 v3, v3, v4
1001 ; GFX9-NEXT:    v_add_co_u32_e32 v11, vcc, v11, v12
1002 ; GFX9-NEXT:    v_cndmask_b32_e64 v12, 0, 1, vcc
1003 ; GFX9-NEXT:    v_add_co_u32_e32 v11, vcc, v11, v13
1004 ; GFX9-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
1005 ; GFX9-NEXT:    v_add_co_u32_e32 v11, vcc, v11, v14
1006 ; GFX9-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
1007 ; GFX9-NEXT:    v_add_co_u32_e32 v11, vcc, v11, v15
1008 ; GFX9-NEXT:    v_add3_u32 v12, v12, v13, v14
1009 ; GFX9-NEXT:    v_cndmask_b32_e64 v13, 0, 1, vcc
1010 ; GFX9-NEXT:    v_add_co_u32_e32 v10, vcc, v11, v10
1011 ; GFX9-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1012 ; GFX9-NEXT:    v_add3_u32 v11, v12, v13, v11
1013 ; GFX9-NEXT:    v_mul_lo_u32 v12, v2, v5
1014 ; GFX9-NEXT:    v_mul_lo_u32 v13, v1, v6
1015 ; GFX9-NEXT:    v_mul_lo_u32 v7, v0, v7
1016 ; GFX9-NEXT:    v_mul_hi_u32 v2, v2, v4
1017 ; GFX9-NEXT:    v_mul_hi_u32 v1, v1, v5
1018 ; GFX9-NEXT:    v_mul_lo_u32 v8, v0, v4
1019 ; GFX9-NEXT:    v_mul_hi_u32 v0, v0, v6
1020 ; GFX9-NEXT:    v_add_u32_e32 v3, v3, v12
1021 ; GFX9-NEXT:    v_add3_u32 v3, v3, v13, v7
1022 ; GFX9-NEXT:    v_add3_u32 v1, v3, v2, v1
1023 ; GFX9-NEXT:    v_add3_u32 v3, v1, v0, v11
1024 ; GFX9-NEXT:    v_mov_b32_e32 v0, v8
1025 ; GFX9-NEXT:    v_mov_b32_e32 v1, v9
1026 ; GFX9-NEXT:    v_mov_b32_e32 v2, v10
1027 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1029 ; GFX10-LABEL: v_mul_i128:
1030 ; GFX10:       ; %bb.0:
1031 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1032 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
1033 ; GFX10-NEXT:    v_mul_lo_u32 v8, v2, v4
1034 ; GFX10-NEXT:    v_mul_lo_u32 v9, v1, v5
1035 ; GFX10-NEXT:    v_mul_lo_u32 v10, v1, v4
1036 ; GFX10-NEXT:    v_mul_lo_u32 v11, v0, v5
1037 ; GFX10-NEXT:    v_mul_hi_u32 v12, v0, v4
1038 ; GFX10-NEXT:    v_mul_lo_u32 v13, v0, v6
1039 ; GFX10-NEXT:    v_mul_hi_u32 v15, v0, v5
1040 ; GFX10-NEXT:    v_mul_lo_u32 v3, v3, v4
1041 ; GFX10-NEXT:    v_mul_lo_u32 v7, v0, v7
1042 ; GFX10-NEXT:    v_add_co_u32 v8, s4, v8, v9
1043 ; GFX10-NEXT:    v_add_co_u32 v9, s5, v10, v11
1044 ; GFX10-NEXT:    v_mul_hi_u32 v11, v1, v4
1045 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, 0, 1, s5
1046 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, 0, 1, s4
1047 ; GFX10-NEXT:    v_add_co_u32 v13, s4, v8, v13
1048 ; GFX10-NEXT:    v_add_co_u32 v8, s5, v9, v12
1049 ; GFX10-NEXT:    v_cndmask_b32_e64 v9, 0, 1, s5
1050 ; GFX10-NEXT:    v_cndmask_b32_e64 v12, 0, 1, s4
1051 ; GFX10-NEXT:    v_add_co_u32 v11, s4, v13, v11
1052 ; GFX10-NEXT:    v_cndmask_b32_e64 v13, 0, 1, s4
1053 ; GFX10-NEXT:    v_add_nc_u32_e32 v9, v10, v9
1054 ; GFX10-NEXT:    v_mul_lo_u32 v10, v2, v5
1055 ; GFX10-NEXT:    v_add_co_u32 v11, s4, v11, v15
1056 ; GFX10-NEXT:    v_add3_u32 v12, v14, v12, v13
1057 ; GFX10-NEXT:    v_mul_lo_u32 v13, v1, v6
1058 ; GFX10-NEXT:    v_mul_hi_u32 v15, v2, v4
1059 ; GFX10-NEXT:    v_mul_hi_u32 v1, v1, v5
1060 ; GFX10-NEXT:    v_cndmask_b32_e64 v14, 0, 1, s4
1061 ; GFX10-NEXT:    v_add_nc_u32_e32 v3, v3, v10
1062 ; GFX10-NEXT:    v_add_co_u32 v2, s4, v11, v9
1063 ; GFX10-NEXT:    v_cndmask_b32_e64 v5, 0, 1, s4
1064 ; GFX10-NEXT:    v_mul_hi_u32 v6, v0, v6
1065 ; GFX10-NEXT:    v_add3_u32 v3, v3, v13, v7
1066 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v4
1067 ; GFX10-NEXT:    v_add3_u32 v4, v12, v14, v5
1068 ; GFX10-NEXT:    v_add3_u32 v1, v3, v15, v1
1069 ; GFX10-NEXT:    v_add3_u32 v3, v1, v6, v4
1070 ; GFX10-NEXT:    v_mov_b32_e32 v1, v8
1071 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
1072   %result = mul i128 %num, %den
1073   ret i128 %result
1076 define amdgpu_ps <8 x i32> @s_mul_i256(i256 inreg %num, i256 inreg %den) {
1077 ; GFX7-LABEL: s_mul_i256:
1078 ; GFX7:       ; %bb.0:
1079 ; GFX7-NEXT:    s_mov_b32 s16, s0
1080 ; GFX7-NEXT:    v_mov_b32_e32 v0, s8
1081 ; GFX7-NEXT:    v_mul_hi_u32 v0, s16, v0
1082 ; GFX7-NEXT:    s_mul_i32 s17, s1, s8
1083 ; GFX7-NEXT:    s_mul_i32 s18, s16, s9
1084 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1085 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1086 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, s17, v0
1087 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1088 ; GFX7-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1089 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, s18, v1
1090 ; GFX7-NEXT:    s_mul_i32 s17, s2, s8
1091 ; GFX7-NEXT:    s_mul_i32 s18, s1, s9
1092 ; GFX7-NEXT:    v_mov_b32_e32 v2, s1
1093 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1094 ; GFX7-NEXT:    v_mul_hi_u32 v2, v2, s8
1095 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1096 ; GFX7-NEXT:    s_mul_i32 s19, s16, s10
1097 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1098 ; GFX7-NEXT:    v_mov_b32_e32 v3, s9
1099 ; GFX7-NEXT:    s_add_u32 s17, s17, s19
1100 ; GFX7-NEXT:    v_mul_hi_u32 v4, s16, v3
1101 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1102 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1103 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, s17, v2
1104 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1105 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1106 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, s18, v5
1107 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v2, v4
1108 ; GFX7-NEXT:    s_mul_i32 s17, s3, s8
1109 ; GFX7-NEXT:    s_mul_i32 s18, s2, s9
1110 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1111 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1112 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
1113 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1114 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
1115 ; GFX7-NEXT:    s_mul_i32 s19, s1, s10
1116 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1117 ; GFX7-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1118 ; GFX7-NEXT:    s_add_u32 s17, s17, s19
1119 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v4, v2
1120 ; GFX7-NEXT:    v_mov_b32_e32 v4, s2
1121 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1122 ; GFX7-NEXT:    v_mul_hi_u32 v5, v4, s8
1123 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1124 ; GFX7-NEXT:    s_mul_i32 s20, s16, s11
1125 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1126 ; GFX7-NEXT:    s_add_u32 s17, s17, s20
1127 ; GFX7-NEXT:    v_mul_hi_u32 v3, s1, v3
1128 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1129 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1130 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, s17, v5
1131 ; GFX7-NEXT:    v_mov_b32_e32 v6, s10
1132 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1133 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1134 ; GFX7-NEXT:    v_mul_hi_u32 v7, s16, v6
1135 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, s18, v8
1136 ; GFX7-NEXT:    s_mul_i32 s17, s4, s8
1137 ; GFX7-NEXT:    s_mul_i32 s18, s3, s9
1138 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v5, v3
1139 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1140 ; GFX7-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1141 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1142 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v8, v5
1143 ; GFX7-NEXT:    s_mul_i32 s19, s2, s10
1144 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1145 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v3, v7
1146 ; GFX7-NEXT:    s_add_u32 s17, s17, s19
1147 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1148 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1149 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v5, v7
1150 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1151 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
1152 ; GFX7-NEXT:    s_mul_i32 s20, s1, s11
1153 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1154 ; GFX7-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1155 ; GFX7-NEXT:    s_add_u32 s17, s17, s20
1156 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v5, v3
1157 ; GFX7-NEXT:    v_mov_b32_e32 v5, s3
1158 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1159 ; GFX7-NEXT:    v_mul_hi_u32 v7, v5, s8
1160 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1161 ; GFX7-NEXT:    s_mul_i32 s21, s16, s12
1162 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1163 ; GFX7-NEXT:    s_add_u32 s17, s17, s21
1164 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1165 ; GFX7-NEXT:    v_mul_hi_u32 v4, v4, s9
1166 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1167 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, s17, v7
1168 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1169 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1170 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, s18, v11
1171 ; GFX7-NEXT:    s_mul_i32 s17, s5, s8
1172 ; GFX7-NEXT:    s_mul_i32 s18, s4, s9
1173 ; GFX7-NEXT:    v_mul_hi_u32 v8, s1, v6
1174 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1175 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v7, v4
1176 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1177 ; GFX7-NEXT:    v_mov_b32_e32 v9, s11
1178 ; GFX7-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1179 ; GFX7-NEXT:    s_mul_i32 s19, s3, s10
1180 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1181 ; GFX7-NEXT:    v_mul_hi_u32 v10, s16, v9
1182 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v11, v7
1183 ; GFX7-NEXT:    s_add_u32 s17, s17, s19
1184 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v4, v8
1185 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1186 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1187 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1188 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1189 ; GFX7-NEXT:    s_mul_i32 s20, s2, s11
1190 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1191 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v4, v10
1192 ; GFX7-NEXT:    s_add_u32 s17, s17, s20
1193 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1194 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1195 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v8
1196 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1197 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
1198 ; GFX7-NEXT:    s_mul_i32 s21, s1, s12
1199 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1200 ; GFX7-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1201 ; GFX7-NEXT:    s_add_u32 s17, s17, s21
1202 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v7, v4
1203 ; GFX7-NEXT:    v_mov_b32_e32 v7, s4
1204 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1205 ; GFX7-NEXT:    v_mul_hi_u32 v8, v7, s8
1206 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1207 ; GFX7-NEXT:    s_mul_i32 s22, s16, s13
1208 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1209 ; GFX7-NEXT:    s_add_u32 s17, s17, s22
1210 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1211 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1212 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, s17, v8
1213 ; GFX7-NEXT:    v_mul_hi_u32 v10, v5, s9
1214 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1215 ; GFX7-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
1216 ; GFX7-NEXT:    v_add_i32_e32 v14, vcc, s18, v14
1217 ; GFX7-NEXT:    s_mul_i32 s17, s6, s8
1218 ; GFX7-NEXT:    s_mul_i32 s18, s5, s9
1219 ; GFX7-NEXT:    s_add_u32 s17, s17, s18
1220 ; GFX7-NEXT:    v_mul_hi_u32 v6, s2, v6
1221 ; GFX7-NEXT:    s_cselect_b32 s18, 1, 0
1222 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v8, v10
1223 ; GFX7-NEXT:    s_mul_i32 s19, s4, s10
1224 ; GFX7-NEXT:    s_and_b32 s18, s18, 1
1225 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1226 ; GFX7-NEXT:    s_add_u32 s17, s17, s19
1227 ; GFX7-NEXT:    v_mul_hi_u32 v11, s1, v9
1228 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v14, v10
1229 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1230 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
1231 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1232 ; GFX7-NEXT:    v_mov_b32_e32 v12, s12
1233 ; GFX7-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1234 ; GFX7-NEXT:    s_mul_i32 s20, s3, s11
1235 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1236 ; GFX7-NEXT:    v_mul_hi_u32 v13, s16, v12
1237 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v10, v8
1238 ; GFX7-NEXT:    s_add_u32 s17, s17, s20
1239 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v6, v11
1240 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1241 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1242 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1243 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v8, v10
1244 ; GFX7-NEXT:    s_mul_i32 s21, s2, s12
1245 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1246 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v6, v13
1247 ; GFX7-NEXT:    s_add_u32 s17, s17, s21
1248 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1249 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1250 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v8, v10
1251 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1252 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v6, v4
1253 ; GFX7-NEXT:    s_mul_i32 s22, s1, s13
1254 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1255 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1256 ; GFX7-NEXT:    s_add_u32 s17, s17, s22
1257 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v8, v6
1258 ; GFX7-NEXT:    v_mov_b32_e32 v8, s5
1259 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1260 ; GFX7-NEXT:    v_mul_hi_u32 v10, v8, s8
1261 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1262 ; GFX7-NEXT:    s_mul_i32 s23, s16, s14
1263 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1264 ; GFX7-NEXT:    s_add_u32 s17, s17, s23
1265 ; GFX7-NEXT:    v_mul_hi_u32 v11, v7, s9
1266 ; GFX7-NEXT:    s_cselect_b32 s19, 1, 0
1267 ; GFX7-NEXT:    s_and_b32 s19, s19, 1
1268 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, s17, v10
1269 ; GFX7-NEXT:    s_add_i32 s18, s18, s19
1270 ; GFX7-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
1271 ; GFX7-NEXT:    v_mul_hi_u32 v5, v5, s10
1272 ; GFX7-NEXT:    v_add_i32_e32 v17, vcc, s18, v17
1273 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
1274 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1275 ; GFX7-NEXT:    v_mul_hi_u32 v13, s2, v9
1276 ; GFX7-NEXT:    v_add_i32_e32 v11, vcc, v17, v11
1277 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v10, v5
1278 ; GFX7-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1279 ; GFX7-NEXT:    v_mul_hi_u32 v14, s1, v12
1280 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v11, v10
1281 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v5, v13
1282 ; GFX7-NEXT:    v_mov_b32_e32 v15, s13
1283 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1284 ; GFX7-NEXT:    v_mul_hi_u32 v16, s16, v15
1285 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
1286 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v5, v14
1287 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1288 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
1289 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v5, v16
1290 ; GFX7-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1291 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, v10, v11
1292 ; GFX7-NEXT:    s_mul_i32 s7, s7, s8
1293 ; GFX7-NEXT:    s_mul_i32 s17, s6, s9
1294 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v5, v6
1295 ; GFX7-NEXT:    s_mul_i32 s5, s5, s10
1296 ; GFX7-NEXT:    s_mul_i32 s4, s4, s11
1297 ; GFX7-NEXT:    s_mul_i32 s11, s3, s12
1298 ; GFX7-NEXT:    s_mul_i32 s12, s2, s13
1299 ; GFX7-NEXT:    s_mul_i32 s13, s1, s14
1300 ; GFX7-NEXT:    v_mul_hi_u32 v11, s2, v12
1301 ; GFX7-NEXT:    v_mul_hi_u32 v12, s1, v15
1302 ; GFX7-NEXT:    s_add_i32 s1, s7, s17
1303 ; GFX7-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1304 ; GFX7-NEXT:    s_add_i32 s1, s1, s5
1305 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v10, v6
1306 ; GFX7-NEXT:    v_mov_b32_e32 v10, s6
1307 ; GFX7-NEXT:    s_add_i32 s1, s1, s4
1308 ; GFX7-NEXT:    v_mul_hi_u32 v10, v10, s8
1309 ; GFX7-NEXT:    s_add_i32 s1, s1, s11
1310 ; GFX7-NEXT:    v_mul_hi_u32 v8, v8, s9
1311 ; GFX7-NEXT:    s_add_i32 s1, s1, s12
1312 ; GFX7-NEXT:    s_mul_i32 s15, s16, s15
1313 ; GFX7-NEXT:    v_mul_hi_u32 v7, v7, s10
1314 ; GFX7-NEXT:    s_add_i32 s1, s1, s13
1315 ; GFX7-NEXT:    v_mul_hi_u32 v9, s3, v9
1316 ; GFX7-NEXT:    s_add_i32 s1, s1, s15
1317 ; GFX7-NEXT:    v_add_i32_e32 v10, vcc, s1, v10
1318 ; GFX7-NEXT:    v_mov_b32_e32 v13, s14
1319 ; GFX7-NEXT:    v_add_i32_e32 v8, vcc, v10, v8
1320 ; GFX7-NEXT:    v_mul_hi_u32 v13, s16, v13
1321 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v8, v7
1322 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v9
1323 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v11
1324 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v12
1325 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v7, v13
1326 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
1327 ; GFX7-NEXT:    s_mul_i32 s0, s0, s8
1328 ; GFX7-NEXT:    v_readfirstlane_b32 s1, v0
1329 ; GFX7-NEXT:    v_readfirstlane_b32 s2, v1
1330 ; GFX7-NEXT:    v_readfirstlane_b32 s3, v2
1331 ; GFX7-NEXT:    v_readfirstlane_b32 s4, v3
1332 ; GFX7-NEXT:    v_readfirstlane_b32 s5, v4
1333 ; GFX7-NEXT:    v_readfirstlane_b32 s6, v5
1334 ; GFX7-NEXT:    v_readfirstlane_b32 s7, v6
1335 ; GFX7-NEXT:    ; return to shader part epilog
1337 ; GFX8-LABEL: s_mul_i256:
1338 ; GFX8:       ; %bb.0:
1339 ; GFX8-NEXT:    s_mov_b32 s16, s0
1340 ; GFX8-NEXT:    v_mov_b32_e32 v0, s8
1341 ; GFX8-NEXT:    v_mul_hi_u32 v0, s16, v0
1342 ; GFX8-NEXT:    s_mul_i32 s17, s1, s8
1343 ; GFX8-NEXT:    s_mul_i32 s18, s16, s9
1344 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1345 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1346 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s17, v0
1347 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1348 ; GFX8-NEXT:    v_cndmask_b32_e64 v1, 0, 1, vcc
1349 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, s18, v1
1350 ; GFX8-NEXT:    s_mul_i32 s17, s2, s8
1351 ; GFX8-NEXT:    s_mul_i32 s18, s1, s9
1352 ; GFX8-NEXT:    v_mov_b32_e32 v2, s1
1353 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1354 ; GFX8-NEXT:    v_mul_hi_u32 v2, v2, s8
1355 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1356 ; GFX8-NEXT:    s_mul_i32 s19, s16, s10
1357 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1358 ; GFX8-NEXT:    v_mov_b32_e32 v3, s9
1359 ; GFX8-NEXT:    s_add_u32 s17, s17, s19
1360 ; GFX8-NEXT:    v_mul_hi_u32 v4, s16, v3
1361 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1362 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1363 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s17, v2
1364 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1365 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1366 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s18, v5
1367 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v2, v4
1368 ; GFX8-NEXT:    s_mul_i32 s17, s3, s8
1369 ; GFX8-NEXT:    s_mul_i32 s18, s2, s9
1370 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1371 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1372 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v5, v4
1373 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1374 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
1375 ; GFX8-NEXT:    s_mul_i32 s19, s1, s10
1376 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1377 ; GFX8-NEXT:    v_cndmask_b32_e64 v2, 0, 1, vcc
1378 ; GFX8-NEXT:    s_add_u32 s17, s17, s19
1379 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v4, v2
1380 ; GFX8-NEXT:    v_mov_b32_e32 v4, s2
1381 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1382 ; GFX8-NEXT:    v_mul_hi_u32 v5, v4, s8
1383 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1384 ; GFX8-NEXT:    s_mul_i32 s20, s16, s11
1385 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1386 ; GFX8-NEXT:    s_add_u32 s17, s17, s20
1387 ; GFX8-NEXT:    v_mul_hi_u32 v3, s1, v3
1388 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1389 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1390 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, s17, v5
1391 ; GFX8-NEXT:    v_mov_b32_e32 v6, s10
1392 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1393 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1394 ; GFX8-NEXT:    v_mul_hi_u32 v7, s16, v6
1395 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s18, v8
1396 ; GFX8-NEXT:    s_mul_i32 s17, s4, s8
1397 ; GFX8-NEXT:    s_mul_i32 s18, s3, s9
1398 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v5, v3
1399 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1400 ; GFX8-NEXT:    v_cndmask_b32_e64 v5, 0, 1, vcc
1401 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1402 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v8, v5
1403 ; GFX8-NEXT:    s_mul_i32 s19, s2, s10
1404 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1405 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v3, v7
1406 ; GFX8-NEXT:    s_add_u32 s17, s17, s19
1407 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1408 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1409 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v7
1410 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1411 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v3, v2
1412 ; GFX8-NEXT:    s_mul_i32 s20, s1, s11
1413 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1414 ; GFX8-NEXT:    v_cndmask_b32_e64 v3, 0, 1, vcc
1415 ; GFX8-NEXT:    s_add_u32 s17, s17, s20
1416 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v5, v3
1417 ; GFX8-NEXT:    v_mov_b32_e32 v5, s3
1418 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1419 ; GFX8-NEXT:    v_mul_hi_u32 v7, v5, s8
1420 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1421 ; GFX8-NEXT:    s_mul_i32 s21, s16, s12
1422 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1423 ; GFX8-NEXT:    s_add_u32 s17, s17, s21
1424 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1425 ; GFX8-NEXT:    v_mul_hi_u32 v4, v4, s9
1426 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1427 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, s17, v7
1428 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1429 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1430 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, s18, v11
1431 ; GFX8-NEXT:    s_mul_i32 s17, s5, s8
1432 ; GFX8-NEXT:    s_mul_i32 s18, s4, s9
1433 ; GFX8-NEXT:    v_mul_hi_u32 v8, s1, v6
1434 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1435 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v7, v4
1436 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1437 ; GFX8-NEXT:    v_mov_b32_e32 v9, s11
1438 ; GFX8-NEXT:    v_cndmask_b32_e64 v7, 0, 1, vcc
1439 ; GFX8-NEXT:    s_mul_i32 s19, s3, s10
1440 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1441 ; GFX8-NEXT:    v_mul_hi_u32 v10, s16, v9
1442 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v11, v7
1443 ; GFX8-NEXT:    s_add_u32 s17, s17, s19
1444 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v8
1445 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1446 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1447 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1448 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v8
1449 ; GFX8-NEXT:    s_mul_i32 s20, s2, s11
1450 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1451 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v4, v10
1452 ; GFX8-NEXT:    s_add_u32 s17, s17, s20
1453 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1454 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1455 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v8
1456 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1457 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v4, v3
1458 ; GFX8-NEXT:    s_mul_i32 s21, s1, s12
1459 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1460 ; GFX8-NEXT:    v_cndmask_b32_e64 v4, 0, 1, vcc
1461 ; GFX8-NEXT:    s_add_u32 s17, s17, s21
1462 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v7, v4
1463 ; GFX8-NEXT:    v_mov_b32_e32 v7, s4
1464 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1465 ; GFX8-NEXT:    v_mul_hi_u32 v8, v7, s8
1466 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1467 ; GFX8-NEXT:    s_mul_i32 s22, s16, s13
1468 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1469 ; GFX8-NEXT:    s_add_u32 s17, s17, s22
1470 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1471 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1472 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, s17, v8
1473 ; GFX8-NEXT:    v_mul_hi_u32 v10, v5, s9
1474 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1475 ; GFX8-NEXT:    v_cndmask_b32_e64 v14, 0, 1, vcc
1476 ; GFX8-NEXT:    v_add_u32_e32 v14, vcc, s18, v14
1477 ; GFX8-NEXT:    s_mul_i32 s17, s6, s8
1478 ; GFX8-NEXT:    s_mul_i32 s18, s5, s9
1479 ; GFX8-NEXT:    s_add_u32 s17, s17, s18
1480 ; GFX8-NEXT:    v_mul_hi_u32 v6, s2, v6
1481 ; GFX8-NEXT:    s_cselect_b32 s18, 1, 0
1482 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v10
1483 ; GFX8-NEXT:    s_mul_i32 s19, s4, s10
1484 ; GFX8-NEXT:    s_and_b32 s18, s18, 1
1485 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1486 ; GFX8-NEXT:    s_add_u32 s17, s17, s19
1487 ; GFX8-NEXT:    v_mul_hi_u32 v11, s1, v9
1488 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v14, v10
1489 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1490 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v8, v6
1491 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1492 ; GFX8-NEXT:    v_mov_b32_e32 v12, s12
1493 ; GFX8-NEXT:    v_cndmask_b32_e64 v8, 0, 1, vcc
1494 ; GFX8-NEXT:    s_mul_i32 s20, s3, s11
1495 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1496 ; GFX8-NEXT:    v_mul_hi_u32 v13, s16, v12
1497 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v10, v8
1498 ; GFX8-NEXT:    s_add_u32 s17, s17, s20
1499 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v11
1500 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1501 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1502 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1503 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v10
1504 ; GFX8-NEXT:    s_mul_i32 s21, s2, s12
1505 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1506 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v6, v13
1507 ; GFX8-NEXT:    s_add_u32 s17, s17, s21
1508 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1509 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1510 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v8, v10
1511 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1512 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v6, v4
1513 ; GFX8-NEXT:    s_mul_i32 s22, s1, s13
1514 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1515 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1516 ; GFX8-NEXT:    s_add_u32 s17, s17, s22
1517 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v8, v6
1518 ; GFX8-NEXT:    v_mov_b32_e32 v8, s5
1519 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1520 ; GFX8-NEXT:    v_mul_hi_u32 v10, v8, s8
1521 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1522 ; GFX8-NEXT:    s_mul_i32 s23, s16, s14
1523 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1524 ; GFX8-NEXT:    s_add_u32 s17, s17, s23
1525 ; GFX8-NEXT:    v_mul_hi_u32 v11, v7, s9
1526 ; GFX8-NEXT:    s_cselect_b32 s19, 1, 0
1527 ; GFX8-NEXT:    s_and_b32 s19, s19, 1
1528 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s17, v10
1529 ; GFX8-NEXT:    s_add_i32 s18, s18, s19
1530 ; GFX8-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
1531 ; GFX8-NEXT:    v_mul_hi_u32 v5, v5, s10
1532 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, s18, v17
1533 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v11
1534 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1535 ; GFX8-NEXT:    v_mul_hi_u32 v13, s2, v9
1536 ; GFX8-NEXT:    v_add_u32_e32 v11, vcc, v17, v11
1537 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v10, v5
1538 ; GFX8-NEXT:    v_cndmask_b32_e64 v10, 0, 1, vcc
1539 ; GFX8-NEXT:    v_mul_hi_u32 v14, s1, v12
1540 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v11, v10
1541 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v13
1542 ; GFX8-NEXT:    v_mov_b32_e32 v15, s13
1543 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1544 ; GFX8-NEXT:    v_mul_hi_u32 v16, s16, v15
1545 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v11
1546 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v14
1547 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1548 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v11
1549 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v16
1550 ; GFX8-NEXT:    v_cndmask_b32_e64 v11, 0, 1, vcc
1551 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, v10, v11
1552 ; GFX8-NEXT:    s_mul_i32 s7, s7, s8
1553 ; GFX8-NEXT:    s_mul_i32 s17, s6, s9
1554 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v5, v6
1555 ; GFX8-NEXT:    s_mul_i32 s5, s5, s10
1556 ; GFX8-NEXT:    s_mul_i32 s4, s4, s11
1557 ; GFX8-NEXT:    s_mul_i32 s11, s3, s12
1558 ; GFX8-NEXT:    s_mul_i32 s12, s2, s13
1559 ; GFX8-NEXT:    s_mul_i32 s13, s1, s14
1560 ; GFX8-NEXT:    v_mul_hi_u32 v11, s2, v12
1561 ; GFX8-NEXT:    v_mul_hi_u32 v12, s1, v15
1562 ; GFX8-NEXT:    s_add_i32 s1, s7, s17
1563 ; GFX8-NEXT:    v_cndmask_b32_e64 v6, 0, 1, vcc
1564 ; GFX8-NEXT:    s_add_i32 s1, s1, s5
1565 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v10, v6
1566 ; GFX8-NEXT:    v_mov_b32_e32 v10, s6
1567 ; GFX8-NEXT:    s_add_i32 s1, s1, s4
1568 ; GFX8-NEXT:    v_mul_hi_u32 v10, v10, s8
1569 ; GFX8-NEXT:    s_add_i32 s1, s1, s11
1570 ; GFX8-NEXT:    v_mul_hi_u32 v8, v8, s9
1571 ; GFX8-NEXT:    s_add_i32 s1, s1, s12
1572 ; GFX8-NEXT:    s_mul_i32 s15, s16, s15
1573 ; GFX8-NEXT:    v_mul_hi_u32 v7, v7, s10
1574 ; GFX8-NEXT:    s_add_i32 s1, s1, s13
1575 ; GFX8-NEXT:    v_mul_hi_u32 v9, s3, v9
1576 ; GFX8-NEXT:    s_add_i32 s1, s1, s15
1577 ; GFX8-NEXT:    v_add_u32_e32 v10, vcc, s1, v10
1578 ; GFX8-NEXT:    v_mov_b32_e32 v13, s14
1579 ; GFX8-NEXT:    v_add_u32_e32 v8, vcc, v10, v8
1580 ; GFX8-NEXT:    v_mul_hi_u32 v13, s16, v13
1581 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v8, v7
1582 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v9
1583 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v11
1584 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v12
1585 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v7, v13
1586 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v7, v6
1587 ; GFX8-NEXT:    s_mul_i32 s0, s0, s8
1588 ; GFX8-NEXT:    v_readfirstlane_b32 s1, v0
1589 ; GFX8-NEXT:    v_readfirstlane_b32 s2, v1
1590 ; GFX8-NEXT:    v_readfirstlane_b32 s3, v2
1591 ; GFX8-NEXT:    v_readfirstlane_b32 s4, v3
1592 ; GFX8-NEXT:    v_readfirstlane_b32 s5, v4
1593 ; GFX8-NEXT:    v_readfirstlane_b32 s6, v5
1594 ; GFX8-NEXT:    v_readfirstlane_b32 s7, v6
1595 ; GFX8-NEXT:    ; return to shader part epilog
1597 ; GFX9-LABEL: s_mul_i256:
1598 ; GFX9:       ; %bb.0:
1599 ; GFX9-NEXT:    s_mov_b32 s16, s0
1600 ; GFX9-NEXT:    s_mul_i32 s17, s1, s8
1601 ; GFX9-NEXT:    s_mul_i32 s18, s16, s9
1602 ; GFX9-NEXT:    s_add_u32 s17, s17, s18
1603 ; GFX9-NEXT:    s_cselect_b32 s18, 1, 0
1604 ; GFX9-NEXT:    s_mul_hi_u32 s19, s16, s8
1605 ; GFX9-NEXT:    s_and_b32 s18, s18, 1
1606 ; GFX9-NEXT:    s_add_u32 s17, s17, s19
1607 ; GFX9-NEXT:    s_cselect_b32 s19, 1, 0
1608 ; GFX9-NEXT:    s_and_b32 s19, s19, 1
1609 ; GFX9-NEXT:    s_add_i32 s18, s18, s19
1610 ; GFX9-NEXT:    s_mul_i32 s19, s2, s8
1611 ; GFX9-NEXT:    s_mul_i32 s20, s1, s9
1612 ; GFX9-NEXT:    s_add_u32 s19, s19, s20
1613 ; GFX9-NEXT:    s_cselect_b32 s20, 1, 0
1614 ; GFX9-NEXT:    s_mul_i32 s21, s16, s10
1615 ; GFX9-NEXT:    s_and_b32 s20, s20, 1
1616 ; GFX9-NEXT:    s_add_u32 s19, s19, s21
1617 ; GFX9-NEXT:    s_cselect_b32 s21, 1, 0
1618 ; GFX9-NEXT:    s_and_b32 s21, s21, 1
1619 ; GFX9-NEXT:    s_mul_hi_u32 s22, s1, s8
1620 ; GFX9-NEXT:    s_add_i32 s20, s20, s21
1621 ; GFX9-NEXT:    s_add_u32 s19, s19, s22
1622 ; GFX9-NEXT:    s_cselect_b32 s21, 1, 0
1623 ; GFX9-NEXT:    s_and_b32 s21, s21, 1
1624 ; GFX9-NEXT:    s_mul_hi_u32 s23, s16, s9
1625 ; GFX9-NEXT:    s_add_i32 s20, s20, s21
1626 ; GFX9-NEXT:    s_add_u32 s19, s19, s23
1627 ; GFX9-NEXT:    s_cselect_b32 s21, 1, 0
1628 ; GFX9-NEXT:    s_and_b32 s21, s21, 1
1629 ; GFX9-NEXT:    s_add_i32 s20, s20, s21
1630 ; GFX9-NEXT:    s_add_u32 s18, s19, s18
1631 ; GFX9-NEXT:    s_cselect_b32 s19, 1, 0
1632 ; GFX9-NEXT:    s_and_b32 s19, s19, 1
1633 ; GFX9-NEXT:    s_add_i32 s20, s20, s19
1634 ; GFX9-NEXT:    s_mul_i32 s19, s3, s8
1635 ; GFX9-NEXT:    s_mul_i32 s21, s2, s9
1636 ; GFX9-NEXT:    s_add_u32 s19, s19, s21
1637 ; GFX9-NEXT:    s_cselect_b32 s21, 1, 0
1638 ; GFX9-NEXT:    s_mul_i32 s22, s1, s10
1639 ; GFX9-NEXT:    s_and_b32 s21, s21, 1
1640 ; GFX9-NEXT:    s_add_u32 s19, s19, s22
1641 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1642 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1643 ; GFX9-NEXT:    s_mul_i32 s23, s16, s11
1644 ; GFX9-NEXT:    s_add_i32 s21, s21, s22
1645 ; GFX9-NEXT:    s_add_u32 s19, s19, s23
1646 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1647 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1648 ; GFX9-NEXT:    s_mul_hi_u32 s24, s2, s8
1649 ; GFX9-NEXT:    s_add_i32 s21, s21, s22
1650 ; GFX9-NEXT:    s_add_u32 s19, s19, s24
1651 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1652 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1653 ; GFX9-NEXT:    s_mul_hi_u32 s25, s1, s9
1654 ; GFX9-NEXT:    s_add_i32 s21, s21, s22
1655 ; GFX9-NEXT:    s_add_u32 s19, s19, s25
1656 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1657 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1658 ; GFX9-NEXT:    s_mul_hi_u32 s26, s16, s10
1659 ; GFX9-NEXT:    s_add_i32 s21, s21, s22
1660 ; GFX9-NEXT:    s_add_u32 s19, s19, s26
1661 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1662 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1663 ; GFX9-NEXT:    s_add_i32 s21, s21, s22
1664 ; GFX9-NEXT:    s_add_u32 s19, s19, s20
1665 ; GFX9-NEXT:    s_cselect_b32 s20, 1, 0
1666 ; GFX9-NEXT:    s_and_b32 s20, s20, 1
1667 ; GFX9-NEXT:    s_add_i32 s21, s21, s20
1668 ; GFX9-NEXT:    s_mul_i32 s20, s4, s8
1669 ; GFX9-NEXT:    s_mul_i32 s22, s3, s9
1670 ; GFX9-NEXT:    s_add_u32 s20, s20, s22
1671 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1672 ; GFX9-NEXT:    s_mul_i32 s23, s2, s10
1673 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1674 ; GFX9-NEXT:    s_add_u32 s20, s20, s23
1675 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1676 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1677 ; GFX9-NEXT:    s_mul_i32 s24, s1, s11
1678 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1679 ; GFX9-NEXT:    s_add_u32 s20, s20, s24
1680 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1681 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1682 ; GFX9-NEXT:    s_mul_i32 s25, s16, s12
1683 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1684 ; GFX9-NEXT:    s_add_u32 s20, s20, s25
1685 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1686 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1687 ; GFX9-NEXT:    s_mul_hi_u32 s26, s3, s8
1688 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1689 ; GFX9-NEXT:    s_add_u32 s20, s20, s26
1690 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1691 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1692 ; GFX9-NEXT:    s_mul_hi_u32 s27, s2, s9
1693 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1694 ; GFX9-NEXT:    s_add_u32 s20, s20, s27
1695 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1696 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1697 ; GFX9-NEXT:    s_mul_hi_u32 s28, s1, s10
1698 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1699 ; GFX9-NEXT:    s_add_u32 s20, s20, s28
1700 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1701 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1702 ; GFX9-NEXT:    s_mul_hi_u32 s29, s16, s11
1703 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1704 ; GFX9-NEXT:    s_add_u32 s20, s20, s29
1705 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1706 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1707 ; GFX9-NEXT:    s_add_i32 s22, s22, s23
1708 ; GFX9-NEXT:    s_add_u32 s20, s20, s21
1709 ; GFX9-NEXT:    s_cselect_b32 s21, 1, 0
1710 ; GFX9-NEXT:    s_and_b32 s21, s21, 1
1711 ; GFX9-NEXT:    s_add_i32 s22, s22, s21
1712 ; GFX9-NEXT:    s_mul_i32 s21, s5, s8
1713 ; GFX9-NEXT:    s_mul_i32 s23, s4, s9
1714 ; GFX9-NEXT:    s_add_u32 s21, s21, s23
1715 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1716 ; GFX9-NEXT:    s_mul_i32 s24, s3, s10
1717 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1718 ; GFX9-NEXT:    s_add_u32 s21, s21, s24
1719 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1720 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1721 ; GFX9-NEXT:    s_mul_i32 s25, s2, s11
1722 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1723 ; GFX9-NEXT:    s_add_u32 s21, s21, s25
1724 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1725 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1726 ; GFX9-NEXT:    s_mul_i32 s26, s1, s12
1727 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1728 ; GFX9-NEXT:    s_add_u32 s21, s21, s26
1729 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1730 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1731 ; GFX9-NEXT:    s_mul_i32 s27, s16, s13
1732 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1733 ; GFX9-NEXT:    s_add_u32 s21, s21, s27
1734 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1735 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1736 ; GFX9-NEXT:    s_mul_hi_u32 s28, s4, s8
1737 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1738 ; GFX9-NEXT:    s_add_u32 s21, s21, s28
1739 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1740 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1741 ; GFX9-NEXT:    s_mul_hi_u32 s29, s3, s9
1742 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1743 ; GFX9-NEXT:    s_add_u32 s21, s21, s29
1744 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1745 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1746 ; GFX9-NEXT:    s_mul_hi_u32 s30, s2, s10
1747 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1748 ; GFX9-NEXT:    s_add_u32 s21, s21, s30
1749 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1750 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1751 ; GFX9-NEXT:    s_mul_hi_u32 s31, s1, s11
1752 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1753 ; GFX9-NEXT:    s_add_u32 s21, s21, s31
1754 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1755 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1756 ; GFX9-NEXT:    s_mul_hi_u32 s33, s16, s12
1757 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1758 ; GFX9-NEXT:    s_add_u32 s21, s21, s33
1759 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1760 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1761 ; GFX9-NEXT:    s_add_i32 s23, s23, s24
1762 ; GFX9-NEXT:    s_add_u32 s21, s21, s22
1763 ; GFX9-NEXT:    s_cselect_b32 s22, 1, 0
1764 ; GFX9-NEXT:    s_and_b32 s22, s22, 1
1765 ; GFX9-NEXT:    s_add_i32 s23, s23, s22
1766 ; GFX9-NEXT:    s_mul_i32 s22, s6, s8
1767 ; GFX9-NEXT:    s_mul_i32 s24, s5, s9
1768 ; GFX9-NEXT:    s_add_u32 s22, s22, s24
1769 ; GFX9-NEXT:    s_cselect_b32 s24, 1, 0
1770 ; GFX9-NEXT:    s_mul_i32 s25, s4, s10
1771 ; GFX9-NEXT:    s_and_b32 s24, s24, 1
1772 ; GFX9-NEXT:    s_add_u32 s22, s22, s25
1773 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1774 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1775 ; GFX9-NEXT:    s_mul_i32 s26, s3, s11
1776 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1777 ; GFX9-NEXT:    s_add_u32 s22, s22, s26
1778 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1779 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1780 ; GFX9-NEXT:    s_mul_i32 s27, s2, s12
1781 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1782 ; GFX9-NEXT:    s_add_u32 s22, s22, s27
1783 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1784 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1785 ; GFX9-NEXT:    s_mul_i32 s28, s1, s13
1786 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1787 ; GFX9-NEXT:    s_add_u32 s22, s22, s28
1788 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1789 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1790 ; GFX9-NEXT:    s_mul_i32 s29, s16, s14
1791 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1792 ; GFX9-NEXT:    s_add_u32 s22, s22, s29
1793 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1794 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1795 ; GFX9-NEXT:    s_mul_hi_u32 s30, s5, s8
1796 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1797 ; GFX9-NEXT:    s_add_u32 s22, s22, s30
1798 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1799 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1800 ; GFX9-NEXT:    s_mul_hi_u32 s31, s4, s9
1801 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1802 ; GFX9-NEXT:    s_add_u32 s22, s22, s31
1803 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1804 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1805 ; GFX9-NEXT:    s_mul_hi_u32 s33, s3, s10
1806 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1807 ; GFX9-NEXT:    s_add_u32 s22, s22, s33
1808 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1809 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1810 ; GFX9-NEXT:    s_mul_hi_u32 s34, s2, s11
1811 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1812 ; GFX9-NEXT:    s_add_u32 s22, s22, s34
1813 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1814 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1815 ; GFX9-NEXT:    s_mul_hi_u32 s35, s1, s12
1816 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1817 ; GFX9-NEXT:    s_add_u32 s22, s22, s35
1818 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1819 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1820 ; GFX9-NEXT:    s_mul_hi_u32 s36, s16, s13
1821 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1822 ; GFX9-NEXT:    s_add_u32 s22, s22, s36
1823 ; GFX9-NEXT:    s_cselect_b32 s25, 1, 0
1824 ; GFX9-NEXT:    s_and_b32 s25, s25, 1
1825 ; GFX9-NEXT:    s_add_i32 s24, s24, s25
1826 ; GFX9-NEXT:    s_add_u32 s22, s22, s23
1827 ; GFX9-NEXT:    s_cselect_b32 s23, 1, 0
1828 ; GFX9-NEXT:    s_and_b32 s23, s23, 1
1829 ; GFX9-NEXT:    s_add_i32 s24, s24, s23
1830 ; GFX9-NEXT:    s_mul_i32 s7, s7, s8
1831 ; GFX9-NEXT:    s_mul_i32 s23, s6, s9
1832 ; GFX9-NEXT:    s_mul_i32 s25, s5, s10
1833 ; GFX9-NEXT:    s_add_i32 s7, s7, s23
1834 ; GFX9-NEXT:    s_mul_i32 s26, s4, s11
1835 ; GFX9-NEXT:    s_add_i32 s7, s7, s25
1836 ; GFX9-NEXT:    s_mul_i32 s27, s3, s12
1837 ; GFX9-NEXT:    s_add_i32 s7, s7, s26
1838 ; GFX9-NEXT:    s_mul_i32 s28, s2, s13
1839 ; GFX9-NEXT:    s_add_i32 s7, s7, s27
1840 ; GFX9-NEXT:    s_mul_i32 s29, s1, s14
1841 ; GFX9-NEXT:    s_add_i32 s7, s7, s28
1842 ; GFX9-NEXT:    s_mul_i32 s15, s16, s15
1843 ; GFX9-NEXT:    s_add_i32 s7, s7, s29
1844 ; GFX9-NEXT:    s_mul_hi_u32 s6, s6, s8
1845 ; GFX9-NEXT:    s_add_i32 s7, s7, s15
1846 ; GFX9-NEXT:    s_mul_hi_u32 s5, s5, s9
1847 ; GFX9-NEXT:    s_add_i32 s6, s7, s6
1848 ; GFX9-NEXT:    s_mul_hi_u32 s4, s4, s10
1849 ; GFX9-NEXT:    s_add_i32 s5, s6, s5
1850 ; GFX9-NEXT:    s_mul_hi_u32 s3, s3, s11
1851 ; GFX9-NEXT:    s_add_i32 s4, s5, s4
1852 ; GFX9-NEXT:    s_mul_hi_u32 s2, s2, s12
1853 ; GFX9-NEXT:    s_add_i32 s3, s4, s3
1854 ; GFX9-NEXT:    s_mul_hi_u32 s1, s1, s13
1855 ; GFX9-NEXT:    s_add_i32 s2, s3, s2
1856 ; GFX9-NEXT:    s_mul_i32 s0, s0, s8
1857 ; GFX9-NEXT:    s_mul_hi_u32 s8, s16, s14
1858 ; GFX9-NEXT:    s_add_i32 s1, s2, s1
1859 ; GFX9-NEXT:    s_add_i32 s1, s1, s8
1860 ; GFX9-NEXT:    s_add_i32 s7, s1, s24
1861 ; GFX9-NEXT:    s_mov_b32 s1, s17
1862 ; GFX9-NEXT:    s_mov_b32 s2, s18
1863 ; GFX9-NEXT:    s_mov_b32 s3, s19
1864 ; GFX9-NEXT:    s_mov_b32 s4, s20
1865 ; GFX9-NEXT:    s_mov_b32 s5, s21
1866 ; GFX9-NEXT:    s_mov_b32 s6, s22
1867 ; GFX9-NEXT:    ; return to shader part epilog
1869 ; GFX10-LABEL: s_mul_i256:
1870 ; GFX10:       ; %bb.0:
1871 ; GFX10-NEXT:    s_mul_i32 s16, s1, s8
1872 ; GFX10-NEXT:    s_mul_i32 s17, s0, s9
1873 ; GFX10-NEXT:    s_mul_hi_u32 s18, s0, s8
1874 ; GFX10-NEXT:    s_add_u32 s16, s16, s17
1875 ; GFX10-NEXT:    s_cselect_b32 s17, 1, 0
1876 ; GFX10-NEXT:    s_mul_i32 s19, s1, s9
1877 ; GFX10-NEXT:    s_and_b32 s17, s17, 1
1878 ; GFX10-NEXT:    s_add_u32 s16, s16, s18
1879 ; GFX10-NEXT:    s_cselect_b32 s18, 1, 0
1880 ; GFX10-NEXT:    s_mul_i32 s20, s0, s10
1881 ; GFX10-NEXT:    s_and_b32 s18, s18, 1
1882 ; GFX10-NEXT:    s_mul_hi_u32 s21, s1, s8
1883 ; GFX10-NEXT:    s_add_i32 s17, s17, s18
1884 ; GFX10-NEXT:    s_mul_i32 s18, s2, s8
1885 ; GFX10-NEXT:    s_mul_i32 s22, s0, s11
1886 ; GFX10-NEXT:    s_add_u32 s18, s18, s19
1887 ; GFX10-NEXT:    s_cselect_b32 s19, 1, 0
1888 ; GFX10-NEXT:    s_mul_i32 s23, s1, s11
1889 ; GFX10-NEXT:    s_and_b32 s19, s19, 1
1890 ; GFX10-NEXT:    s_add_u32 s18, s18, s20
1891 ; GFX10-NEXT:    s_cselect_b32 s20, 1, 0
1892 ; GFX10-NEXT:    s_mul_i32 s24, s0, s12
1893 ; GFX10-NEXT:    s_and_b32 s20, s20, 1
1894 ; GFX10-NEXT:    s_mul_i32 s25, s4, s9
1895 ; GFX10-NEXT:    s_add_i32 s19, s19, s20
1896 ; GFX10-NEXT:    s_add_u32 s18, s18, s21
1897 ; GFX10-NEXT:    s_cselect_b32 s20, 1, 0
1898 ; GFX10-NEXT:    s_mul_hi_u32 s21, s0, s9
1899 ; GFX10-NEXT:    s_and_b32 s20, s20, 1
1900 ; GFX10-NEXT:    s_mul_i32 s26, s2, s11
1901 ; GFX10-NEXT:    s_add_i32 s19, s19, s20
1902 ; GFX10-NEXT:    s_add_u32 s18, s18, s21
1903 ; GFX10-NEXT:    s_cselect_b32 s20, 1, 0
1904 ; GFX10-NEXT:    s_mul_i32 s21, s1, s10
1905 ; GFX10-NEXT:    s_and_b32 s20, s20, 1
1906 ; GFX10-NEXT:    s_mul_i32 s27, s0, s13
1907 ; GFX10-NEXT:    s_add_i32 s19, s19, s20
1908 ; GFX10-NEXT:    s_add_u32 s17, s18, s17
1909 ; GFX10-NEXT:    s_cselect_b32 s18, 1, 0
1910 ; GFX10-NEXT:    s_mul_i32 s20, s2, s9
1911 ; GFX10-NEXT:    s_and_b32 s18, s18, 1
1912 ; GFX10-NEXT:    s_mul_hi_u32 s28, s3, s9
1913 ; GFX10-NEXT:    s_add_i32 s19, s19, s18
1914 ; GFX10-NEXT:    s_mul_i32 s18, s3, s8
1915 ; GFX10-NEXT:    s_mul_i32 s7, s7, s8
1916 ; GFX10-NEXT:    s_add_u32 s18, s18, s20
1917 ; GFX10-NEXT:    s_cselect_b32 s20, 1, 0
1918 ; GFX10-NEXT:    s_mul_i32 s15, s0, s15
1919 ; GFX10-NEXT:    s_and_b32 s20, s20, 1
1920 ; GFX10-NEXT:    s_add_u32 s18, s18, s21
1921 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1922 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1923 ; GFX10-NEXT:    s_add_i32 s20, s20, s21
1924 ; GFX10-NEXT:    s_add_u32 s18, s18, s22
1925 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1926 ; GFX10-NEXT:    s_mul_hi_u32 s22, s2, s8
1927 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1928 ; GFX10-NEXT:    s_add_i32 s20, s20, s21
1929 ; GFX10-NEXT:    s_add_u32 s18, s18, s22
1930 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1931 ; GFX10-NEXT:    s_mul_hi_u32 s22, s1, s9
1932 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1933 ; GFX10-NEXT:    s_add_i32 s20, s20, s21
1934 ; GFX10-NEXT:    s_add_u32 s18, s18, s22
1935 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1936 ; GFX10-NEXT:    s_mul_hi_u32 s22, s0, s10
1937 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1938 ; GFX10-NEXT:    s_add_i32 s20, s20, s21
1939 ; GFX10-NEXT:    s_add_u32 s18, s18, s22
1940 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1941 ; GFX10-NEXT:    s_mul_i32 s22, s2, s10
1942 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1943 ; GFX10-NEXT:    s_add_i32 s20, s20, s21
1944 ; GFX10-NEXT:    s_add_u32 s18, s18, s19
1945 ; GFX10-NEXT:    s_cselect_b32 s19, 1, 0
1946 ; GFX10-NEXT:    s_mul_i32 s21, s3, s9
1947 ; GFX10-NEXT:    s_and_b32 s19, s19, 1
1948 ; GFX10-NEXT:    s_add_i32 s20, s20, s19
1949 ; GFX10-NEXT:    s_mul_i32 s19, s4, s8
1950 ; GFX10-NEXT:    s_add_u32 s19, s19, s21
1951 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
1952 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
1953 ; GFX10-NEXT:    s_add_u32 s19, s19, s22
1954 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1955 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1956 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1957 ; GFX10-NEXT:    s_add_u32 s19, s19, s23
1958 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1959 ; GFX10-NEXT:    s_mul_hi_u32 s23, s3, s8
1960 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1961 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1962 ; GFX10-NEXT:    s_add_u32 s19, s19, s24
1963 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1964 ; GFX10-NEXT:    s_mul_hi_u32 s24, s2, s9
1965 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1966 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1967 ; GFX10-NEXT:    s_add_u32 s19, s19, s23
1968 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1969 ; GFX10-NEXT:    s_mul_hi_u32 s23, s1, s10
1970 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1971 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1972 ; GFX10-NEXT:    s_add_u32 s19, s19, s24
1973 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1974 ; GFX10-NEXT:    s_mul_hi_u32 s24, s0, s11
1975 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1976 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1977 ; GFX10-NEXT:    s_add_u32 s19, s19, s23
1978 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1979 ; GFX10-NEXT:    s_mul_i32 s23, s5, s8
1980 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1981 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1982 ; GFX10-NEXT:    s_add_u32 s19, s19, s24
1983 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
1984 ; GFX10-NEXT:    s_mul_i32 s24, s3, s10
1985 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
1986 ; GFX10-NEXT:    s_add_i32 s21, s21, s22
1987 ; GFX10-NEXT:    s_add_u32 s19, s19, s20
1988 ; GFX10-NEXT:    s_cselect_b32 s20, 1, 0
1989 ; GFX10-NEXT:    s_mul_i32 s22, s1, s12
1990 ; GFX10-NEXT:    s_and_b32 s20, s20, 1
1991 ; GFX10-NEXT:    s_add_i32 s21, s21, s20
1992 ; GFX10-NEXT:    s_add_u32 s23, s23, s25
1993 ; GFX10-NEXT:    s_cselect_b32 s25, 1, 0
1994 ; GFX10-NEXT:    s_mul_hi_u32 s20, s4, s8
1995 ; GFX10-NEXT:    s_and_b32 s25, s25, 1
1996 ; GFX10-NEXT:    s_add_u32 s23, s23, s24
1997 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
1998 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
1999 ; GFX10-NEXT:    s_add_i32 s24, s25, s24
2000 ; GFX10-NEXT:    s_add_u32 s23, s23, s26
2001 ; GFX10-NEXT:    s_cselect_b32 s25, 1, 0
2002 ; GFX10-NEXT:    s_mul_hi_u32 s26, s2, s10
2003 ; GFX10-NEXT:    s_and_b32 s25, s25, 1
2004 ; GFX10-NEXT:    s_add_i32 s24, s24, s25
2005 ; GFX10-NEXT:    s_add_u32 s22, s23, s22
2006 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2007 ; GFX10-NEXT:    s_mul_hi_u32 s25, s1, s11
2008 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2009 ; GFX10-NEXT:    s_add_i32 s23, s24, s23
2010 ; GFX10-NEXT:    s_add_u32 s22, s22, s27
2011 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2012 ; GFX10-NEXT:    s_mul_hi_u32 s27, s0, s12
2013 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2014 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2015 ; GFX10-NEXT:    s_add_u32 s20, s22, s20
2016 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
2017 ; GFX10-NEXT:    s_mul_i32 s24, s6, s8
2018 ; GFX10-NEXT:    s_and_b32 s22, s22, 1
2019 ; GFX10-NEXT:    s_add_i32 s22, s23, s22
2020 ; GFX10-NEXT:    s_add_u32 s20, s20, s28
2021 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2022 ; GFX10-NEXT:    s_mul_i32 s28, s5, s9
2023 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2024 ; GFX10-NEXT:    s_add_i32 s22, s22, s23
2025 ; GFX10-NEXT:    s_add_u32 s20, s20, s26
2026 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2027 ; GFX10-NEXT:    s_mul_i32 s26, s4, s10
2028 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2029 ; GFX10-NEXT:    s_add_i32 s22, s22, s23
2030 ; GFX10-NEXT:    s_add_u32 s20, s20, s25
2031 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2032 ; GFX10-NEXT:    s_mul_i32 s25, s3, s11
2033 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2034 ; GFX10-NEXT:    s_add_i32 s22, s22, s23
2035 ; GFX10-NEXT:    s_add_u32 s20, s20, s27
2036 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2037 ; GFX10-NEXT:    s_mul_i32 s27, s2, s12
2038 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2039 ; GFX10-NEXT:    s_add_i32 s22, s22, s23
2040 ; GFX10-NEXT:    s_add_u32 s20, s20, s21
2041 ; GFX10-NEXT:    s_cselect_b32 s21, 1, 0
2042 ; GFX10-NEXT:    s_mul_i32 s23, s1, s13
2043 ; GFX10-NEXT:    s_and_b32 s21, s21, 1
2044 ; GFX10-NEXT:    s_add_i32 s22, s22, s21
2045 ; GFX10-NEXT:    s_add_u32 s21, s24, s28
2046 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2047 ; GFX10-NEXT:    s_mul_i32 s28, s0, s14
2048 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2049 ; GFX10-NEXT:    s_add_u32 s21, s21, s26
2050 ; GFX10-NEXT:    s_cselect_b32 s26, 1, 0
2051 ; GFX10-NEXT:    s_and_b32 s26, s26, 1
2052 ; GFX10-NEXT:    s_add_i32 s24, s24, s26
2053 ; GFX10-NEXT:    s_add_u32 s21, s21, s25
2054 ; GFX10-NEXT:    s_cselect_b32 s25, 1, 0
2055 ; GFX10-NEXT:    s_mul_hi_u32 s26, s5, s8
2056 ; GFX10-NEXT:    s_and_b32 s25, s25, 1
2057 ; GFX10-NEXT:    s_add_i32 s24, s24, s25
2058 ; GFX10-NEXT:    s_add_u32 s21, s21, s27
2059 ; GFX10-NEXT:    s_cselect_b32 s25, 1, 0
2060 ; GFX10-NEXT:    s_mul_hi_u32 s27, s4, s9
2061 ; GFX10-NEXT:    s_and_b32 s25, s25, 1
2062 ; GFX10-NEXT:    s_add_i32 s24, s24, s25
2063 ; GFX10-NEXT:    s_add_u32 s21, s21, s23
2064 ; GFX10-NEXT:    s_cselect_b32 s23, 1, 0
2065 ; GFX10-NEXT:    s_mul_hi_u32 s25, s3, s10
2066 ; GFX10-NEXT:    s_and_b32 s23, s23, 1
2067 ; GFX10-NEXT:    s_add_i32 s23, s24, s23
2068 ; GFX10-NEXT:    s_add_u32 s21, s21, s28
2069 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2070 ; GFX10-NEXT:    s_mul_hi_u32 s28, s2, s11
2071 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2072 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2073 ; GFX10-NEXT:    s_add_u32 s21, s21, s26
2074 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2075 ; GFX10-NEXT:    s_mul_hi_u32 s26, s1, s12
2076 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2077 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2078 ; GFX10-NEXT:    s_add_u32 s21, s21, s27
2079 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2080 ; GFX10-NEXT:    s_mul_hi_u32 s27, s0, s13
2081 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2082 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2083 ; GFX10-NEXT:    s_add_u32 s21, s21, s25
2084 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2085 ; GFX10-NEXT:    s_mul_i32 s25, s6, s9
2086 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2087 ; GFX10-NEXT:    s_mul_hi_u32 s6, s6, s8
2088 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2089 ; GFX10-NEXT:    s_add_u32 s21, s21, s28
2090 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2091 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2092 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2093 ; GFX10-NEXT:    s_add_u32 s21, s21, s26
2094 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2095 ; GFX10-NEXT:    s_mul_i32 s26, s5, s10
2096 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2097 ; GFX10-NEXT:    s_mul_hi_u32 s5, s5, s9
2098 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2099 ; GFX10-NEXT:    s_add_u32 s21, s21, s27
2100 ; GFX10-NEXT:    s_cselect_b32 s24, 1, 0
2101 ; GFX10-NEXT:    s_mul_i32 s27, s4, s11
2102 ; GFX10-NEXT:    s_and_b32 s24, s24, 1
2103 ; GFX10-NEXT:    s_mul_hi_u32 s4, s4, s10
2104 ; GFX10-NEXT:    s_add_i32 s23, s23, s24
2105 ; GFX10-NEXT:    s_add_u32 s21, s21, s22
2106 ; GFX10-NEXT:    s_cselect_b32 s22, 1, 0
2107 ; GFX10-NEXT:    s_add_i32 s7, s7, s25
2108 ; GFX10-NEXT:    s_mul_i32 s24, s3, s12
2109 ; GFX10-NEXT:    s_add_i32 s7, s7, s26
2110 ; GFX10-NEXT:    s_mul_i32 s25, s2, s13
2111 ; GFX10-NEXT:    s_add_i32 s7, s7, s27
2112 ; GFX10-NEXT:    s_mul_i32 s26, s1, s14
2113 ; GFX10-NEXT:    s_add_i32 s7, s7, s24
2114 ; GFX10-NEXT:    s_mul_hi_u32 s3, s3, s11
2115 ; GFX10-NEXT:    s_add_i32 s7, s7, s25
2116 ; GFX10-NEXT:    s_mul_hi_u32 s2, s2, s12
2117 ; GFX10-NEXT:    s_add_i32 s7, s7, s26
2118 ; GFX10-NEXT:    s_mul_hi_u32 s1, s1, s13
2119 ; GFX10-NEXT:    s_add_i32 s7, s7, s15
2120 ; GFX10-NEXT:    s_add_i32 s6, s7, s6
2121 ; GFX10-NEXT:    s_add_i32 s5, s6, s5
2122 ; GFX10-NEXT:    s_mov_b32 s6, s21
2123 ; GFX10-NEXT:    s_add_i32 s4, s5, s4
2124 ; GFX10-NEXT:    s_mov_b32 s5, s20
2125 ; GFX10-NEXT:    s_add_i32 s3, s4, s3
2126 ; GFX10-NEXT:    s_mul_hi_u32 s4, s0, s14
2127 ; GFX10-NEXT:    s_add_i32 s2, s3, s2
2128 ; GFX10-NEXT:    s_and_b32 s3, s22, 1
2129 ; GFX10-NEXT:    s_add_i32 s1, s2, s1
2130 ; GFX10-NEXT:    s_add_i32 s23, s23, s3
2131 ; GFX10-NEXT:    s_add_i32 s1, s1, s4
2132 ; GFX10-NEXT:    s_mul_i32 s0, s0, s8
2133 ; GFX10-NEXT:    s_add_i32 s7, s1, s23
2134 ; GFX10-NEXT:    s_mov_b32 s1, s16
2135 ; GFX10-NEXT:    s_mov_b32 s2, s17
2136 ; GFX10-NEXT:    s_mov_b32 s3, s18
2137 ; GFX10-NEXT:    s_mov_b32 s4, s19
2138 ; GFX10-NEXT:    ; return to shader part epilog
2139   %result = mul i256 %num, %den
2140   %cast = bitcast i256 %result to <8 x i32>
2141   ret <8 x i32> %cast
2144 define i256 @v_mul_i256(i256 %num, i256 %den) {
2145 ; GFX7-LABEL: v_mul_i256:
2146 ; GFX7:       ; %bb.0:
2147 ; GFX7-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2148 ; GFX7-NEXT:    v_mul_lo_u32 v16, v1, v8
2149 ; GFX7-NEXT:    v_mul_lo_u32 v17, v0, v9
2150 ; GFX7-NEXT:    v_mul_hi_u32 v18, v0, v8
2151 ; GFX7-NEXT:    v_mul_lo_u32 v19, v2, v8
2152 ; GFX7-NEXT:    v_mul_lo_u32 v20, v1, v9
2153 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, v16, v17
2154 ; GFX7-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
2155 ; GFX7-NEXT:    v_add_i32_e32 v16, vcc, v16, v18
2156 ; GFX7-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2157 ; GFX7-NEXT:    v_add_i32_e32 v17, vcc, v17, v18
2158 ; GFX7-NEXT:    v_mul_lo_u32 v18, v0, v10
2159 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v20
2160 ; GFX7-NEXT:    v_mul_hi_u32 v21, v1, v8
2161 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2162 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, v19, v18
2163 ; GFX7-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2164 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v20, v19
2165 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, v18, v21
2166 ; GFX7-NEXT:    v_mul_hi_u32 v21, v0, v9
2167 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2168 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v20
2169 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, v18, v21
2170 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2171 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v20
2172 ; GFX7-NEXT:    v_add_i32_e32 v17, vcc, v18, v17
2173 ; GFX7-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2174 ; GFX7-NEXT:    v_mul_lo_u32 v20, v3, v8
2175 ; GFX7-NEXT:    v_mul_lo_u32 v21, v2, v9
2176 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, v19, v18
2177 ; GFX7-NEXT:    v_mul_lo_u32 v19, v1, v10
2178 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v21
2179 ; GFX7-NEXT:    v_mul_lo_u32 v22, v0, v11
2180 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2181 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v20, v19
2182 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2183 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v21, v20
2184 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v22
2185 ; GFX7-NEXT:    v_mul_hi_u32 v22, v2, v8
2186 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2187 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v21
2188 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v22
2189 ; GFX7-NEXT:    v_mul_hi_u32 v22, v1, v9
2190 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2191 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v21
2192 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v22
2193 ; GFX7-NEXT:    v_mul_hi_u32 v22, v0, v10
2194 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2195 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v21
2196 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v19, v22
2197 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2198 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v21
2199 ; GFX7-NEXT:    v_add_i32_e32 v18, vcc, v19, v18
2200 ; GFX7-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2201 ; GFX7-NEXT:    v_mul_lo_u32 v21, v4, v8
2202 ; GFX7-NEXT:    v_mul_lo_u32 v22, v3, v9
2203 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v20, v19
2204 ; GFX7-NEXT:    v_mul_lo_u32 v20, v2, v10
2205 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2206 ; GFX7-NEXT:    v_mul_lo_u32 v23, v1, v11
2207 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2208 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v21, v20
2209 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2210 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v22, v21
2211 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2212 ; GFX7-NEXT:    v_mul_lo_u32 v23, v0, v12
2213 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2214 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2215 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2216 ; GFX7-NEXT:    v_mul_hi_u32 v23, v3, v8
2217 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2218 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2219 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2220 ; GFX7-NEXT:    v_mul_hi_u32 v23, v2, v9
2221 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2222 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2223 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2224 ; GFX7-NEXT:    v_mul_hi_u32 v23, v1, v10
2225 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2226 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2227 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2228 ; GFX7-NEXT:    v_mul_hi_u32 v23, v0, v11
2229 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2230 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2231 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v20, v23
2232 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2233 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v22
2234 ; GFX7-NEXT:    v_add_i32_e32 v19, vcc, v20, v19
2235 ; GFX7-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2236 ; GFX7-NEXT:    v_mul_lo_u32 v22, v5, v8
2237 ; GFX7-NEXT:    v_mul_lo_u32 v23, v4, v9
2238 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v21, v20
2239 ; GFX7-NEXT:    v_mul_lo_u32 v21, v3, v10
2240 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2241 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2242 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v22, v21
2243 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2244 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v23, v22
2245 ; GFX7-NEXT:    v_mul_lo_u32 v23, v2, v11
2246 ; GFX7-NEXT:    v_mul_lo_u32 v7, v7, v8
2247 ; GFX7-NEXT:    v_mul_lo_u32 v15, v0, v15
2248 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2249 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2250 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2251 ; GFX7-NEXT:    v_mul_lo_u32 v23, v1, v12
2252 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2253 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2254 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2255 ; GFX7-NEXT:    v_mul_lo_u32 v23, v0, v13
2256 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2257 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2258 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2259 ; GFX7-NEXT:    v_mul_hi_u32 v23, v4, v8
2260 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2261 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2262 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2263 ; GFX7-NEXT:    v_mul_hi_u32 v23, v3, v9
2264 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2265 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2266 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2267 ; GFX7-NEXT:    v_mul_hi_u32 v23, v2, v10
2268 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2269 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2270 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2271 ; GFX7-NEXT:    v_mul_hi_u32 v23, v1, v11
2272 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2273 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2274 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2275 ; GFX7-NEXT:    v_mul_hi_u32 v23, v0, v12
2276 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v21, v23
2277 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2278 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2279 ; GFX7-NEXT:    v_add_i32_e32 v20, vcc, v21, v20
2280 ; GFX7-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2281 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v22, v21
2282 ; GFX7-NEXT:    v_mul_lo_u32 v22, v6, v8
2283 ; GFX7-NEXT:    v_mul_lo_u32 v23, v5, v9
2284 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2285 ; GFX7-NEXT:    v_mul_lo_u32 v23, v4, v10
2286 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2287 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v23
2288 ; GFX7-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2289 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v24, v23
2290 ; GFX7-NEXT:    v_mul_lo_u32 v24, v3, v11
2291 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2292 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2293 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2294 ; GFX7-NEXT:    v_mul_lo_u32 v24, v2, v12
2295 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2296 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2297 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2298 ; GFX7-NEXT:    v_mul_lo_u32 v24, v1, v13
2299 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2300 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2301 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2302 ; GFX7-NEXT:    v_mul_lo_u32 v24, v0, v14
2303 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2304 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2305 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2306 ; GFX7-NEXT:    v_mul_hi_u32 v24, v5, v8
2307 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2308 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2309 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2310 ; GFX7-NEXT:    v_mul_hi_u32 v24, v4, v9
2311 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2312 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2313 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2314 ; GFX7-NEXT:    v_mul_hi_u32 v24, v3, v10
2315 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2316 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2317 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2318 ; GFX7-NEXT:    v_mul_hi_u32 v24, v2, v11
2319 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2320 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2321 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2322 ; GFX7-NEXT:    v_mul_hi_u32 v24, v1, v12
2323 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2324 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2325 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2326 ; GFX7-NEXT:    v_mul_hi_u32 v24, v0, v13
2327 ; GFX7-NEXT:    v_add_i32_e32 v22, vcc, v22, v24
2328 ; GFX7-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2329 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v24
2330 ; GFX7-NEXT:    v_add_i32_e32 v21, vcc, v22, v21
2331 ; GFX7-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2332 ; GFX7-NEXT:    v_add_i32_e32 v23, vcc, v23, v22
2333 ; GFX7-NEXT:    v_mul_lo_u32 v22, v0, v8
2334 ; GFX7-NEXT:    v_mul_hi_u32 v8, v6, v8
2335 ; GFX7-NEXT:    v_mul_lo_u32 v6, v6, v9
2336 ; GFX7-NEXT:    v_mul_hi_u32 v9, v5, v9
2337 ; GFX7-NEXT:    v_mul_lo_u32 v5, v5, v10
2338 ; GFX7-NEXT:    v_mul_hi_u32 v10, v4, v10
2339 ; GFX7-NEXT:    v_mul_lo_u32 v4, v4, v11
2340 ; GFX7-NEXT:    v_mul_hi_u32 v11, v3, v11
2341 ; GFX7-NEXT:    v_mul_lo_u32 v3, v3, v12
2342 ; GFX7-NEXT:    v_mul_hi_u32 v12, v2, v12
2343 ; GFX7-NEXT:    v_mul_lo_u32 v2, v2, v13
2344 ; GFX7-NEXT:    v_add_i32_e32 v6, vcc, v7, v6
2345 ; GFX7-NEXT:    v_mul_hi_u32 v13, v1, v13
2346 ; GFX7-NEXT:    v_mul_lo_u32 v1, v1, v14
2347 ; GFX7-NEXT:    v_add_i32_e32 v5, vcc, v6, v5
2348 ; GFX7-NEXT:    v_add_i32_e32 v4, vcc, v5, v4
2349 ; GFX7-NEXT:    v_add_i32_e32 v3, vcc, v4, v3
2350 ; GFX7-NEXT:    v_add_i32_e32 v2, vcc, v3, v2
2351 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v2, v1
2352 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v15
2353 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v8
2354 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v9
2355 ; GFX7-NEXT:    v_mul_hi_u32 v0, v0, v14
2356 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v10
2357 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v11
2358 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v12
2359 ; GFX7-NEXT:    v_add_i32_e32 v1, vcc, v1, v13
2360 ; GFX7-NEXT:    v_add_i32_e32 v0, vcc, v1, v0
2361 ; GFX7-NEXT:    v_add_i32_e32 v7, vcc, v0, v23
2362 ; GFX7-NEXT:    v_mov_b32_e32 v0, v22
2363 ; GFX7-NEXT:    v_mov_b32_e32 v1, v16
2364 ; GFX7-NEXT:    v_mov_b32_e32 v2, v17
2365 ; GFX7-NEXT:    v_mov_b32_e32 v3, v18
2366 ; GFX7-NEXT:    v_mov_b32_e32 v4, v19
2367 ; GFX7-NEXT:    v_mov_b32_e32 v5, v20
2368 ; GFX7-NEXT:    v_mov_b32_e32 v6, v21
2369 ; GFX7-NEXT:    s_setpc_b64 s[30:31]
2371 ; GFX8-LABEL: v_mul_i256:
2372 ; GFX8:       ; %bb.0:
2373 ; GFX8-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2374 ; GFX8-NEXT:    v_mul_lo_u32 v16, v1, v8
2375 ; GFX8-NEXT:    v_mul_lo_u32 v17, v0, v9
2376 ; GFX8-NEXT:    v_mul_hi_u32 v18, v0, v8
2377 ; GFX8-NEXT:    v_mul_lo_u32 v19, v2, v8
2378 ; GFX8-NEXT:    v_mul_lo_u32 v20, v1, v9
2379 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v17
2380 ; GFX8-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
2381 ; GFX8-NEXT:    v_add_u32_e32 v16, vcc, v16, v18
2382 ; GFX8-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2383 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v17, v18
2384 ; GFX8-NEXT:    v_mul_lo_u32 v18, v0, v10
2385 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v20
2386 ; GFX8-NEXT:    v_mul_hi_u32 v21, v1, v8
2387 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2388 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v19, v18
2389 ; GFX8-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2390 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v20, v19
2391 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v21
2392 ; GFX8-NEXT:    v_mul_hi_u32 v21, v0, v9
2393 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2394 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v20
2395 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v18, v21
2396 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2397 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v20
2398 ; GFX8-NEXT:    v_add_u32_e32 v17, vcc, v18, v17
2399 ; GFX8-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2400 ; GFX8-NEXT:    v_mul_lo_u32 v20, v3, v8
2401 ; GFX8-NEXT:    v_mul_lo_u32 v21, v2, v9
2402 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v19, v18
2403 ; GFX8-NEXT:    v_mul_lo_u32 v19, v1, v10
2404 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v21
2405 ; GFX8-NEXT:    v_mul_lo_u32 v22, v0, v11
2406 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2407 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v20, v19
2408 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2409 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v21, v20
2410 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v22
2411 ; GFX8-NEXT:    v_mul_hi_u32 v22, v2, v8
2412 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2413 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v21
2414 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v22
2415 ; GFX8-NEXT:    v_mul_hi_u32 v22, v1, v9
2416 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2417 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v21
2418 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v22
2419 ; GFX8-NEXT:    v_mul_hi_u32 v22, v0, v10
2420 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2421 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v21
2422 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v19, v22
2423 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2424 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v21
2425 ; GFX8-NEXT:    v_add_u32_e32 v18, vcc, v19, v18
2426 ; GFX8-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2427 ; GFX8-NEXT:    v_mul_lo_u32 v21, v4, v8
2428 ; GFX8-NEXT:    v_mul_lo_u32 v22, v3, v9
2429 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v20, v19
2430 ; GFX8-NEXT:    v_mul_lo_u32 v20, v2, v10
2431 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2432 ; GFX8-NEXT:    v_mul_lo_u32 v23, v1, v11
2433 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2434 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v21, v20
2435 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2436 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v22, v21
2437 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2438 ; GFX8-NEXT:    v_mul_lo_u32 v23, v0, v12
2439 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2440 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2441 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2442 ; GFX8-NEXT:    v_mul_hi_u32 v23, v3, v8
2443 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2444 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2445 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2446 ; GFX8-NEXT:    v_mul_hi_u32 v23, v2, v9
2447 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2448 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2449 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2450 ; GFX8-NEXT:    v_mul_hi_u32 v23, v1, v10
2451 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2452 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2453 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2454 ; GFX8-NEXT:    v_mul_hi_u32 v23, v0, v11
2455 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2456 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2457 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v20, v23
2458 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2459 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v22
2460 ; GFX8-NEXT:    v_add_u32_e32 v19, vcc, v20, v19
2461 ; GFX8-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2462 ; GFX8-NEXT:    v_mul_lo_u32 v22, v5, v8
2463 ; GFX8-NEXT:    v_mul_lo_u32 v23, v4, v9
2464 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v21, v20
2465 ; GFX8-NEXT:    v_mul_lo_u32 v21, v3, v10
2466 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2467 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2468 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v22, v21
2469 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2470 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v23, v22
2471 ; GFX8-NEXT:    v_mul_lo_u32 v23, v2, v11
2472 ; GFX8-NEXT:    v_mul_lo_u32 v7, v7, v8
2473 ; GFX8-NEXT:    v_mul_lo_u32 v15, v0, v15
2474 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2475 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2476 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2477 ; GFX8-NEXT:    v_mul_lo_u32 v23, v1, v12
2478 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2479 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2480 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2481 ; GFX8-NEXT:    v_mul_lo_u32 v23, v0, v13
2482 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2483 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2484 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2485 ; GFX8-NEXT:    v_mul_hi_u32 v23, v4, v8
2486 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2487 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2488 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2489 ; GFX8-NEXT:    v_mul_hi_u32 v23, v3, v9
2490 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2491 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2492 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2493 ; GFX8-NEXT:    v_mul_hi_u32 v23, v2, v10
2494 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2495 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2496 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2497 ; GFX8-NEXT:    v_mul_hi_u32 v23, v1, v11
2498 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2499 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2500 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2501 ; GFX8-NEXT:    v_mul_hi_u32 v23, v0, v12
2502 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v21, v23
2503 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2504 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2505 ; GFX8-NEXT:    v_add_u32_e32 v20, vcc, v21, v20
2506 ; GFX8-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2507 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v22, v21
2508 ; GFX8-NEXT:    v_mul_lo_u32 v22, v6, v8
2509 ; GFX8-NEXT:    v_mul_lo_u32 v23, v5, v9
2510 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2511 ; GFX8-NEXT:    v_mul_lo_u32 v23, v4, v10
2512 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2513 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v23
2514 ; GFX8-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2515 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v24, v23
2516 ; GFX8-NEXT:    v_mul_lo_u32 v24, v3, v11
2517 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2518 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2519 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2520 ; GFX8-NEXT:    v_mul_lo_u32 v24, v2, v12
2521 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2522 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2523 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2524 ; GFX8-NEXT:    v_mul_lo_u32 v24, v1, v13
2525 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2526 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2527 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2528 ; GFX8-NEXT:    v_mul_lo_u32 v24, v0, v14
2529 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2530 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2531 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2532 ; GFX8-NEXT:    v_mul_hi_u32 v24, v5, v8
2533 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2534 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2535 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2536 ; GFX8-NEXT:    v_mul_hi_u32 v24, v4, v9
2537 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2538 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2539 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2540 ; GFX8-NEXT:    v_mul_hi_u32 v24, v3, v10
2541 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2542 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2543 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2544 ; GFX8-NEXT:    v_mul_hi_u32 v24, v2, v11
2545 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2546 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2547 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2548 ; GFX8-NEXT:    v_mul_hi_u32 v24, v1, v12
2549 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2550 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2551 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2552 ; GFX8-NEXT:    v_mul_hi_u32 v24, v0, v13
2553 ; GFX8-NEXT:    v_add_u32_e32 v22, vcc, v22, v24
2554 ; GFX8-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2555 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v24
2556 ; GFX8-NEXT:    v_add_u32_e32 v21, vcc, v22, v21
2557 ; GFX8-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2558 ; GFX8-NEXT:    v_add_u32_e32 v23, vcc, v23, v22
2559 ; GFX8-NEXT:    v_mul_lo_u32 v22, v0, v8
2560 ; GFX8-NEXT:    v_mul_hi_u32 v8, v6, v8
2561 ; GFX8-NEXT:    v_mul_lo_u32 v6, v6, v9
2562 ; GFX8-NEXT:    v_mul_hi_u32 v9, v5, v9
2563 ; GFX8-NEXT:    v_mul_lo_u32 v5, v5, v10
2564 ; GFX8-NEXT:    v_mul_hi_u32 v10, v4, v10
2565 ; GFX8-NEXT:    v_mul_lo_u32 v4, v4, v11
2566 ; GFX8-NEXT:    v_mul_hi_u32 v11, v3, v11
2567 ; GFX8-NEXT:    v_mul_lo_u32 v3, v3, v12
2568 ; GFX8-NEXT:    v_mul_hi_u32 v12, v2, v12
2569 ; GFX8-NEXT:    v_mul_lo_u32 v2, v2, v13
2570 ; GFX8-NEXT:    v_add_u32_e32 v6, vcc, v7, v6
2571 ; GFX8-NEXT:    v_mul_hi_u32 v13, v1, v13
2572 ; GFX8-NEXT:    v_mul_lo_u32 v1, v1, v14
2573 ; GFX8-NEXT:    v_add_u32_e32 v5, vcc, v6, v5
2574 ; GFX8-NEXT:    v_add_u32_e32 v4, vcc, v5, v4
2575 ; GFX8-NEXT:    v_add_u32_e32 v3, vcc, v4, v3
2576 ; GFX8-NEXT:    v_add_u32_e32 v2, vcc, v3, v2
2577 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v2, v1
2578 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v15
2579 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v8
2580 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v9
2581 ; GFX8-NEXT:    v_mul_hi_u32 v0, v0, v14
2582 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v10
2583 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v11
2584 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v12
2585 ; GFX8-NEXT:    v_add_u32_e32 v1, vcc, v1, v13
2586 ; GFX8-NEXT:    v_add_u32_e32 v0, vcc, v1, v0
2587 ; GFX8-NEXT:    v_add_u32_e32 v7, vcc, v0, v23
2588 ; GFX8-NEXT:    v_mov_b32_e32 v0, v22
2589 ; GFX8-NEXT:    v_mov_b32_e32 v1, v16
2590 ; GFX8-NEXT:    v_mov_b32_e32 v2, v17
2591 ; GFX8-NEXT:    v_mov_b32_e32 v3, v18
2592 ; GFX8-NEXT:    v_mov_b32_e32 v4, v19
2593 ; GFX8-NEXT:    v_mov_b32_e32 v5, v20
2594 ; GFX8-NEXT:    v_mov_b32_e32 v6, v21
2595 ; GFX8-NEXT:    s_setpc_b64 s[30:31]
2597 ; GFX9-LABEL: v_mul_i256:
2598 ; GFX9:       ; %bb.0:
2599 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2600 ; GFX9-NEXT:    v_mul_lo_u32 v16, v2, v8
2601 ; GFX9-NEXT:    v_mul_lo_u32 v17, v1, v9
2602 ; GFX9-NEXT:    v_mul_lo_u32 v18, v0, v10
2603 ; GFX9-NEXT:    v_mul_hi_u32 v19, v1, v8
2604 ; GFX9-NEXT:    v_mul_lo_u32 v20, v1, v8
2605 ; GFX9-NEXT:    v_add_co_u32_e32 v16, vcc, v16, v17
2606 ; GFX9-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
2607 ; GFX9-NEXT:    v_add_co_u32_e32 v16, vcc, v16, v18
2608 ; GFX9-NEXT:    v_cndmask_b32_e64 v18, 0, 1, vcc
2609 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v16, v19
2610 ; GFX9-NEXT:    v_mul_lo_u32 v21, v0, v9
2611 ; GFX9-NEXT:    v_cndmask_b32_e64 v16, 0, 1, vcc
2612 ; GFX9-NEXT:    v_add3_u32 v18, v17, v18, v16
2613 ; GFX9-NEXT:    v_mul_hi_u32 v16, v0, v8
2614 ; GFX9-NEXT:    v_add_co_u32_e32 v17, vcc, v20, v21
2615 ; GFX9-NEXT:    v_mul_hi_u32 v21, v0, v9
2616 ; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2617 ; GFX9-NEXT:    v_add_co_u32_e32 v16, vcc, v17, v16
2618 ; GFX9-NEXT:    v_cndmask_b32_e64 v17, 0, 1, vcc
2619 ; GFX9-NEXT:    v_add_u32_e32 v17, v20, v17
2620 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v19, v21
2621 ; GFX9-NEXT:    v_mul_lo_u32 v21, v3, v8
2622 ; GFX9-NEXT:    v_mul_lo_u32 v22, v2, v9
2623 ; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2624 ; GFX9-NEXT:    v_add_co_u32_e32 v17, vcc, v19, v17
2625 ; GFX9-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2626 ; GFX9-NEXT:    v_add3_u32 v18, v18, v20, v19
2627 ; GFX9-NEXT:    v_mul_lo_u32 v19, v1, v10
2628 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v21, v22
2629 ; GFX9-NEXT:    v_mul_lo_u32 v22, v0, v11
2630 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2631 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v20, v19
2632 ; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2633 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v19, v22
2634 ; GFX9-NEXT:    v_mul_hi_u32 v23, v2, v8
2635 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2636 ; GFX9-NEXT:    v_add3_u32 v20, v21, v20, v22
2637 ; GFX9-NEXT:    v_mul_hi_u32 v21, v1, v9
2638 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v19, v23
2639 ; GFX9-NEXT:    v_mul_hi_u32 v23, v0, v10
2640 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2641 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v19, v21
2642 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2643 ; GFX9-NEXT:    v_add3_u32 v20, v20, v22, v21
2644 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v19, v23
2645 ; GFX9-NEXT:    v_mul_lo_u32 v22, v4, v8
2646 ; GFX9-NEXT:    v_mul_lo_u32 v23, v3, v9
2647 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2648 ; GFX9-NEXT:    v_add_co_u32_e32 v18, vcc, v19, v18
2649 ; GFX9-NEXT:    v_cndmask_b32_e64 v19, 0, 1, vcc
2650 ; GFX9-NEXT:    v_add3_u32 v19, v20, v21, v19
2651 ; GFX9-NEXT:    v_mul_lo_u32 v20, v2, v10
2652 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v22, v23
2653 ; GFX9-NEXT:    v_mul_lo_u32 v23, v1, v11
2654 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2655 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v21, v20
2656 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2657 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v23
2658 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2659 ; GFX9-NEXT:    v_add3_u32 v21, v22, v21, v23
2660 ; GFX9-NEXT:    v_mul_lo_u32 v22, v0, v12
2661 ; GFX9-NEXT:    v_mul_hi_u32 v23, v3, v8
2662 ; GFX9-NEXT:    v_mul_lo_u32 v7, v7, v8
2663 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v22
2664 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2665 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v23
2666 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2667 ; GFX9-NEXT:    v_add3_u32 v21, v21, v22, v23
2668 ; GFX9-NEXT:    v_mul_hi_u32 v22, v2, v9
2669 ; GFX9-NEXT:    v_mul_hi_u32 v23, v1, v10
2670 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v22
2671 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2672 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v23
2673 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2674 ; GFX9-NEXT:    v_add3_u32 v21, v21, v22, v23
2675 ; GFX9-NEXT:    v_mul_hi_u32 v22, v0, v11
2676 ; GFX9-NEXT:    v_mul_lo_u32 v23, v3, v10
2677 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v20, v22
2678 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2679 ; GFX9-NEXT:    v_add_co_u32_e32 v19, vcc, v20, v19
2680 ; GFX9-NEXT:    v_cndmask_b32_e64 v20, 0, 1, vcc
2681 ; GFX9-NEXT:    v_add3_u32 v20, v21, v22, v20
2682 ; GFX9-NEXT:    v_mul_lo_u32 v21, v5, v8
2683 ; GFX9-NEXT:    v_mul_lo_u32 v22, v4, v9
2684 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v22
2685 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2686 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2687 ; GFX9-NEXT:    v_mul_lo_u32 v23, v2, v11
2688 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2689 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2690 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2691 ; GFX9-NEXT:    v_add3_u32 v22, v22, v24, v23
2692 ; GFX9-NEXT:    v_mul_lo_u32 v23, v1, v12
2693 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2694 ; GFX9-NEXT:    v_mul_lo_u32 v23, v0, v13
2695 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2696 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2697 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2698 ; GFX9-NEXT:    v_add3_u32 v22, v22, v24, v23
2699 ; GFX9-NEXT:    v_mul_hi_u32 v23, v4, v8
2700 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2701 ; GFX9-NEXT:    v_mul_hi_u32 v23, v3, v9
2702 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2703 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2704 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2705 ; GFX9-NEXT:    v_add3_u32 v22, v22, v24, v23
2706 ; GFX9-NEXT:    v_mul_hi_u32 v23, v2, v10
2707 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2708 ; GFX9-NEXT:    v_mul_hi_u32 v23, v1, v11
2709 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2710 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2711 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2712 ; GFX9-NEXT:    v_add3_u32 v22, v22, v24, v23
2713 ; GFX9-NEXT:    v_mul_hi_u32 v23, v0, v12
2714 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v21, v23
2715 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2716 ; GFX9-NEXT:    v_add_co_u32_e32 v20, vcc, v21, v20
2717 ; GFX9-NEXT:    v_cndmask_b32_e64 v21, 0, 1, vcc
2718 ; GFX9-NEXT:    v_add3_u32 v21, v22, v23, v21
2719 ; GFX9-NEXT:    v_mul_lo_u32 v22, v6, v8
2720 ; GFX9-NEXT:    v_mul_lo_u32 v23, v5, v9
2721 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v23
2722 ; GFX9-NEXT:    v_mul_lo_u32 v23, v4, v10
2723 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2724 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v23
2725 ; GFX9-NEXT:    v_mul_lo_u32 v23, v3, v11
2726 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, 1, vcc
2727 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v23
2728 ; GFX9-NEXT:    v_cndmask_b32_e64 v23, 0, 1, vcc
2729 ; GFX9-NEXT:    v_add3_u32 v23, v24, v25, v23
2730 ; GFX9-NEXT:    v_mul_lo_u32 v24, v2, v12
2731 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2732 ; GFX9-NEXT:    v_mul_lo_u32 v24, v1, v13
2733 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, 1, vcc
2734 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2735 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2736 ; GFX9-NEXT:    v_add3_u32 v23, v23, v25, v24
2737 ; GFX9-NEXT:    v_mul_lo_u32 v24, v0, v14
2738 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2739 ; GFX9-NEXT:    v_mul_hi_u32 v24, v5, v8
2740 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, 1, vcc
2741 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2742 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2743 ; GFX9-NEXT:    v_add3_u32 v23, v23, v25, v24
2744 ; GFX9-NEXT:    v_mul_hi_u32 v24, v4, v9
2745 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2746 ; GFX9-NEXT:    v_mul_hi_u32 v24, v3, v10
2747 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, 1, vcc
2748 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2749 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2750 ; GFX9-NEXT:    v_add3_u32 v23, v23, v25, v24
2751 ; GFX9-NEXT:    v_mul_hi_u32 v24, v2, v11
2752 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2753 ; GFX9-NEXT:    v_mul_hi_u32 v24, v1, v12
2754 ; GFX9-NEXT:    v_cndmask_b32_e64 v25, 0, 1, vcc
2755 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2756 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2757 ; GFX9-NEXT:    v_add3_u32 v23, v23, v25, v24
2758 ; GFX9-NEXT:    v_mul_hi_u32 v24, v0, v13
2759 ; GFX9-NEXT:    v_add_co_u32_e32 v22, vcc, v22, v24
2760 ; GFX9-NEXT:    v_cndmask_b32_e64 v24, 0, 1, vcc
2761 ; GFX9-NEXT:    v_add_co_u32_e32 v21, vcc, v22, v21
2762 ; GFX9-NEXT:    v_cndmask_b32_e64 v22, 0, 1, vcc
2763 ; GFX9-NEXT:    v_add3_u32 v22, v23, v24, v22
2764 ; GFX9-NEXT:    v_mul_lo_u32 v23, v6, v9
2765 ; GFX9-NEXT:    v_mul_lo_u32 v24, v4, v11
2766 ; GFX9-NEXT:    v_mul_hi_u32 v4, v4, v10
2767 ; GFX9-NEXT:    v_mul_hi_u32 v6, v6, v8
2768 ; GFX9-NEXT:    v_add_u32_e32 v7, v7, v23
2769 ; GFX9-NEXT:    v_mul_lo_u32 v23, v5, v10
2770 ; GFX9-NEXT:    v_mul_hi_u32 v5, v5, v9
2771 ; GFX9-NEXT:    v_mul_hi_u32 v9, v3, v11
2772 ; GFX9-NEXT:    v_mul_lo_u32 v3, v3, v12
2773 ; GFX9-NEXT:    v_mul_hi_u32 v10, v2, v12
2774 ; GFX9-NEXT:    v_mul_lo_u32 v2, v2, v13
2775 ; GFX9-NEXT:    v_mul_hi_u32 v11, v1, v13
2776 ; GFX9-NEXT:    v_mul_lo_u32 v12, v1, v14
2777 ; GFX9-NEXT:    v_mul_lo_u32 v13, v0, v15
2778 ; GFX9-NEXT:    v_add3_u32 v7, v7, v23, v24
2779 ; GFX9-NEXT:    v_add3_u32 v2, v7, v3, v2
2780 ; GFX9-NEXT:    v_mul_lo_u32 v1, v0, v8
2781 ; GFX9-NEXT:    v_mul_hi_u32 v0, v0, v14
2782 ; GFX9-NEXT:    v_add3_u32 v2, v2, v12, v13
2783 ; GFX9-NEXT:    v_add3_u32 v2, v2, v6, v5
2784 ; GFX9-NEXT:    v_add3_u32 v2, v2, v4, v9
2785 ; GFX9-NEXT:    v_add3_u32 v2, v2, v10, v11
2786 ; GFX9-NEXT:    v_add3_u32 v7, v2, v0, v22
2787 ; GFX9-NEXT:    v_mov_b32_e32 v0, v1
2788 ; GFX9-NEXT:    v_mov_b32_e32 v1, v16
2789 ; GFX9-NEXT:    v_mov_b32_e32 v2, v17
2790 ; GFX9-NEXT:    v_mov_b32_e32 v3, v18
2791 ; GFX9-NEXT:    v_mov_b32_e32 v4, v19
2792 ; GFX9-NEXT:    v_mov_b32_e32 v5, v20
2793 ; GFX9-NEXT:    v_mov_b32_e32 v6, v21
2794 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2796 ; GFX10-LABEL: v_mul_i256:
2797 ; GFX10:       ; %bb.0:
2798 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2799 ; GFX10-NEXT:    s_waitcnt_vscnt null, 0x0
2800 ; GFX10-NEXT:    v_mul_lo_u32 v16, v1, v8
2801 ; GFX10-NEXT:    v_mul_lo_u32 v17, v0, v9
2802 ; GFX10-NEXT:    v_mul_hi_u32 v18, v0, v8
2803 ; GFX10-NEXT:    v_mul_lo_u32 v19, v2, v8
2804 ; GFX10-NEXT:    v_mul_lo_u32 v20, v1, v9
2805 ; GFX10-NEXT:    v_mul_hi_u32 v21, v1, v8
2806 ; GFX10-NEXT:    v_mul_lo_u32 v22, v3, v8
2807 ; GFX10-NEXT:    v_mul_lo_u32 v25, v1, v10
2808 ; GFX10-NEXT:    v_mul_hi_u32 v23, v0, v9
2809 ; GFX10-NEXT:    v_add_co_u32 v16, s4, v16, v17
2810 ; GFX10-NEXT:    v_cndmask_b32_e64 v17, 0, 1, s4
2811 ; GFX10-NEXT:    v_mul_hi_u32 v27, v0, v10
2812 ; GFX10-NEXT:    v_mul_hi_u32 v29, v3, v9
2813 ; GFX10-NEXT:    v_add_co_u32 v16, s4, v16, v18
2814 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, 0, 1, s4
2815 ; GFX10-NEXT:    v_add_co_u32 v19, s4, v19, v20
2816 ; GFX10-NEXT:    v_mul_lo_u32 v20, v2, v9
2817 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2818 ; GFX10-NEXT:    v_add_nc_u32_e32 v17, v17, v18
2819 ; GFX10-NEXT:    v_mul_lo_u32 v18, v0, v10
2820 ; GFX10-NEXT:    v_mul_hi_u32 v31, v4, v9
2821 ; GFX10-NEXT:    v_mul_lo_u32 v7, v7, v8
2822 ; GFX10-NEXT:    v_mul_lo_u32 v15, v0, v15
2823 ; GFX10-NEXT:    v_add_co_u32 v18, s4, v19, v18
2824 ; GFX10-NEXT:    v_cndmask_b32_e64 v19, 0, 1, s4
2825 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v22, v20
2826 ; GFX10-NEXT:    v_add_co_u32 v18, s5, v18, v21
2827 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, 0, 1, s5
2828 ; GFX10-NEXT:    v_mul_lo_u32 v22, v0, v11
2829 ; GFX10-NEXT:    v_cndmask_b32_e64 v26, 0, 1, s4
2830 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v20, v25
2831 ; GFX10-NEXT:    v_add3_u32 v19, v24, v19, v21
2832 ; GFX10-NEXT:    v_mul_hi_u32 v21, v2, v8
2833 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2834 ; GFX10-NEXT:    v_add_co_u32 v18, s5, v18, v23
2835 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v20, v22
2836 ; GFX10-NEXT:    v_mul_hi_u32 v23, v1, v9
2837 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2838 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, 0, 1, s5
2839 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v20, v21
2840 ; GFX10-NEXT:    v_add_co_u32 v17, s5, v18, v17
2841 ; GFX10-NEXT:    v_add3_u32 v21, v26, v24, v25
2842 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2843 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v20, v23
2844 ; GFX10-NEXT:    v_cndmask_b32_e64 v18, 0, 1, s5
2845 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, 0, 1, s4
2846 ; GFX10-NEXT:    v_mul_lo_u32 v25, v4, v8
2847 ; GFX10-NEXT:    v_mul_lo_u32 v26, v3, v9
2848 ; GFX10-NEXT:    v_add_co_u32 v20, s5, v20, v27
2849 ; GFX10-NEXT:    v_add3_u32 v18, v19, v22, v18
2850 ; GFX10-NEXT:    v_add3_u32 v19, v21, v24, v23
2851 ; GFX10-NEXT:    v_mul_lo_u32 v21, v2, v10
2852 ; GFX10-NEXT:    v_mul_lo_u32 v24, v1, v11
2853 ; GFX10-NEXT:    v_cndmask_b32_e64 v23, 0, 1, s5
2854 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v25, v26
2855 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2856 ; GFX10-NEXT:    v_mul_hi_u32 v26, v3, v8
2857 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v22, v21
2858 ; GFX10-NEXT:    v_mul_lo_u32 v22, v0, v12
2859 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, 0, 1, s4
2860 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v24
2861 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2862 ; GFX10-NEXT:    v_add_co_u32 v18, s4, v20, v18
2863 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, 0, 1, s4
2864 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v22
2865 ; GFX10-NEXT:    v_mul_hi_u32 v22, v2, v9
2866 ; GFX10-NEXT:    v_add3_u32 v24, v25, v27, v24
2867 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2868 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v26
2869 ; GFX10-NEXT:    v_cndmask_b32_e64 v26, 0, 1, s4
2870 ; GFX10-NEXT:    v_add3_u32 v19, v19, v23, v20
2871 ; GFX10-NEXT:    v_mul_hi_u32 v20, v1, v10
2872 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v22
2873 ; GFX10-NEXT:    v_add3_u32 v23, v24, v25, v26
2874 ; GFX10-NEXT:    v_mul_lo_u32 v22, v5, v8
2875 ; GFX10-NEXT:    v_mul_lo_u32 v24, v4, v9
2876 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2877 ; GFX10-NEXT:    v_mul_lo_u32 v26, v3, v10
2878 ; GFX10-NEXT:    v_add_co_u32 v20, s4, v21, v20
2879 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, 0, 1, s4
2880 ; GFX10-NEXT:    v_mul_hi_u32 v27, v0, v11
2881 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v22, v24
2882 ; GFX10-NEXT:    v_add3_u32 v21, v23, v25, v21
2883 ; GFX10-NEXT:    v_mul_lo_u32 v23, v2, v11
2884 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2885 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v22, v26
2886 ; GFX10-NEXT:    v_mul_lo_u32 v26, v1, v12
2887 ; GFX10-NEXT:    v_add_co_u32 v20, s5, v20, v27
2888 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, 0, 1, s4
2889 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v22, v23
2890 ; GFX10-NEXT:    v_mul_lo_u32 v23, v0, v13
2891 ; GFX10-NEXT:    v_cndmask_b32_e64 v28, 0, 1, s4
2892 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s5
2893 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v22, v26
2894 ; GFX10-NEXT:    v_mul_hi_u32 v26, v4, v8
2895 ; GFX10-NEXT:    v_add_co_u32 v19, s5, v20, v19
2896 ; GFX10-NEXT:    v_cndmask_b32_e64 v20, 0, 1, s5
2897 ; GFX10-NEXT:    v_cndmask_b32_e64 v30, 0, 1, s4
2898 ; GFX10-NEXT:    v_add_co_u32 v22, s4, v22, v23
2899 ; GFX10-NEXT:    v_add3_u32 v23, v24, v27, v28
2900 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2901 ; GFX10-NEXT:    v_add3_u32 v20, v21, v25, v20
2902 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v22, v26
2903 ; GFX10-NEXT:    v_mul_hi_u32 v22, v2, v10
2904 ; GFX10-NEXT:    v_add3_u32 v23, v23, v30, v24
2905 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2906 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v29
2907 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2908 ; GFX10-NEXT:    v_mul_hi_u32 v26, v1, v11
2909 ; GFX10-NEXT:    v_mul_lo_u32 v27, v6, v8
2910 ; GFX10-NEXT:    v_mul_lo_u32 v28, v5, v9
2911 ; GFX10-NEXT:    v_add_co_u32 v21, s4, v21, v22
2912 ; GFX10-NEXT:    v_add3_u32 v23, v23, v24, v25
2913 ; GFX10-NEXT:    v_mul_lo_u32 v24, v4, v10
2914 ; GFX10-NEXT:    v_cndmask_b32_e64 v22, 0, 1, s4
2915 ; GFX10-NEXT:    v_add_co_u32 v21, s5, v21, v26
2916 ; GFX10-NEXT:    v_add_co_u32 v25, s4, v27, v28
2917 ; GFX10-NEXT:    v_cndmask_b32_e64 v26, 0, 1, s5
2918 ; GFX10-NEXT:    v_mul_lo_u32 v27, v3, v11
2919 ; GFX10-NEXT:    v_cndmask_b32_e64 v28, 0, 1, s4
2920 ; GFX10-NEXT:    v_add_co_u32 v24, s4, v25, v24
2921 ; GFX10-NEXT:    v_mul_hi_u32 v29, v0, v12
2922 ; GFX10-NEXT:    v_add3_u32 v22, v23, v22, v26
2923 ; GFX10-NEXT:    v_mul_lo_u32 v23, v2, v12
2924 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2925 ; GFX10-NEXT:    v_add_co_u32 v24, s4, v24, v27
2926 ; GFX10-NEXT:    v_mul_lo_u32 v27, v1, v13
2927 ; GFX10-NEXT:    v_add_co_u32 v21, s5, v21, v29
2928 ; GFX10-NEXT:    v_cndmask_b32_e64 v29, 0, 1, s4
2929 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v24, v23
2930 ; GFX10-NEXT:    v_mul_lo_u32 v24, v0, v14
2931 ; GFX10-NEXT:    v_cndmask_b32_e64 v30, 0, 1, s4
2932 ; GFX10-NEXT:    v_cndmask_b32_e64 v26, 0, 1, s5
2933 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v27
2934 ; GFX10-NEXT:    v_mul_hi_u32 v27, v5, v8
2935 ; GFX10-NEXT:    v_cndmask_b32_e64 v32, 0, 1, s4
2936 ; GFX10-NEXT:    v_add_co_u32 v20, s5, v21, v20
2937 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v24
2938 ; GFX10-NEXT:    v_add3_u32 v24, v28, v25, v29
2939 ; GFX10-NEXT:    v_cndmask_b32_e64 v28, 0, 1, s4
2940 ; GFX10-NEXT:    v_mul_hi_u32 v25, v3, v10
2941 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v27
2942 ; GFX10-NEXT:    v_cndmask_b32_e64 v21, 0, 1, s5
2943 ; GFX10-NEXT:    v_add3_u32 v24, v24, v30, v32
2944 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, 0, 1, s4
2945 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v31
2946 ; GFX10-NEXT:    v_add3_u32 v21, v22, v26, v21
2947 ; GFX10-NEXT:    v_mul_hi_u32 v26, v2, v11
2948 ; GFX10-NEXT:    v_add3_u32 v22, v24, v28, v27
2949 ; GFX10-NEXT:    v_cndmask_b32_e64 v24, 0, 1, s4
2950 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v25
2951 ; GFX10-NEXT:    v_cndmask_b32_e64 v25, 0, 1, s4
2952 ; GFX10-NEXT:    v_mul_lo_u32 v28, v6, v9
2953 ; GFX10-NEXT:    v_mul_lo_u32 v29, v3, v12
2954 ; GFX10-NEXT:    v_mul_hi_u32 v27, v1, v12
2955 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v26
2956 ; GFX10-NEXT:    v_add3_u32 v22, v22, v24, v25
2957 ; GFX10-NEXT:    v_mul_lo_u32 v24, v5, v10
2958 ; GFX10-NEXT:    v_mul_lo_u32 v25, v4, v11
2959 ; GFX10-NEXT:    v_add_nc_u32_e32 v7, v7, v28
2960 ; GFX10-NEXT:    v_mul_lo_u32 v28, v2, v13
2961 ; GFX10-NEXT:    v_mul_hi_u32 v6, v6, v8
2962 ; GFX10-NEXT:    v_mul_hi_u32 v5, v5, v9
2963 ; GFX10-NEXT:    v_cndmask_b32_e64 v26, 0, 1, s4
2964 ; GFX10-NEXT:    v_add_co_u32 v23, s4, v23, v27
2965 ; GFX10-NEXT:    v_add3_u32 v7, v7, v24, v25
2966 ; GFX10-NEXT:    v_mul_lo_u32 v24, v1, v14
2967 ; GFX10-NEXT:    v_mul_hi_u32 v25, v0, v13
2968 ; GFX10-NEXT:    v_mul_hi_u32 v4, v4, v10
2969 ; GFX10-NEXT:    v_mul_hi_u32 v3, v3, v11
2970 ; GFX10-NEXT:    v_add3_u32 v7, v7, v29, v28
2971 ; GFX10-NEXT:    v_cndmask_b32_e64 v27, 0, 1, s4
2972 ; GFX10-NEXT:    v_mul_hi_u32 v2, v2, v12
2973 ; GFX10-NEXT:    v_mul_hi_u32 v1, v1, v13
2974 ; GFX10-NEXT:    v_add3_u32 v7, v7, v24, v15
2975 ; GFX10-NEXT:    v_add_co_u32 v9, s4, v23, v25
2976 ; GFX10-NEXT:    v_cndmask_b32_e64 v10, 0, 1, s4
2977 ; GFX10-NEXT:    v_add3_u32 v22, v22, v26, v27
2978 ; GFX10-NEXT:    v_add3_u32 v5, v7, v6, v5
2979 ; GFX10-NEXT:    v_add_co_u32 v6, s4, v9, v21
2980 ; GFX10-NEXT:    v_cndmask_b32_e64 v7, 0, 1, s4
2981 ; GFX10-NEXT:    v_add3_u32 v3, v5, v4, v3
2982 ; GFX10-NEXT:    v_mul_hi_u32 v4, v0, v14
2983 ; GFX10-NEXT:    v_mul_lo_u32 v0, v0, v8
2984 ; GFX10-NEXT:    v_add3_u32 v5, v22, v10, v7
2985 ; GFX10-NEXT:    v_add3_u32 v1, v3, v2, v1
2986 ; GFX10-NEXT:    v_mov_b32_e32 v2, v17
2987 ; GFX10-NEXT:    v_mov_b32_e32 v3, v18
2988 ; GFX10-NEXT:    v_add3_u32 v7, v1, v4, v5
2989 ; GFX10-NEXT:    v_mov_b32_e32 v1, v16
2990 ; GFX10-NEXT:    v_mov_b32_e32 v4, v19
2991 ; GFX10-NEXT:    v_mov_b32_e32 v5, v20
2992 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
2993   %result = mul i256 %num, %den
2994   ret i256 %result