1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV32
3; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX2-RV64
4; RUN: llc -mtriple=riscv32 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV32
5; RUN: llc -mtriple=riscv64 -mattr=+m,+experimental-v -riscv-v-vector-bits-min=128 -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=LMULMAX1-RV64
6
7define void @cttz_v16i8(<16 x i8>* %x, <16 x i8>* %y) {
8; LMULMAX2-RV32-LABEL: cttz_v16i8:
9; LMULMAX2-RV32:       # %bb.0:
10; LMULMAX2-RV32-NEXT:    addi sp, sp, -32
11; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 32
12; LMULMAX2-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
13; LMULMAX2-RV32-NEXT:    vle8.v v25, (a0)
14; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
15; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
16; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
17; LMULMAX2-RV32-NEXT:    not a1, a1
18; LMULMAX2-RV32-NEXT:    and a2, a1, a2
19; LMULMAX2-RV32-NEXT:    srli a3, a2, 1
20; LMULMAX2-RV32-NEXT:    lui a1, 349525
21; LMULMAX2-RV32-NEXT:    addi a6, a1, 1365
22; LMULMAX2-RV32-NEXT:    and a3, a3, a6
23; LMULMAX2-RV32-NEXT:    sub a3, a2, a3
24; LMULMAX2-RV32-NEXT:    lui a2, 209715
25; LMULMAX2-RV32-NEXT:    addi a2, a2, 819
26; LMULMAX2-RV32-NEXT:    and a4, a3, a2
27; LMULMAX2-RV32-NEXT:    srli a3, a3, 2
28; LMULMAX2-RV32-NEXT:    and a3, a3, a2
29; LMULMAX2-RV32-NEXT:    add a3, a4, a3
30; LMULMAX2-RV32-NEXT:    srli a4, a3, 4
31; LMULMAX2-RV32-NEXT:    add a4, a3, a4
32; LMULMAX2-RV32-NEXT:    lui a3, 61681
33; LMULMAX2-RV32-NEXT:    addi a3, a3, -241
34; LMULMAX2-RV32-NEXT:    and a5, a4, a3
35; LMULMAX2-RV32-NEXT:    lui a4, 4112
36; LMULMAX2-RV32-NEXT:    addi a4, a4, 257
37; LMULMAX2-RV32-NEXT:    mul a5, a5, a4
38; LMULMAX2-RV32-NEXT:    srli a5, a5, 24
39; LMULMAX2-RV32-NEXT:    sb a5, 16(sp)
40; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
41; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 15
42; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v26
43; LMULMAX2-RV32-NEXT:    ori a5, a5, 256
44; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
45; LMULMAX2-RV32-NEXT:    not a5, a5
46; LMULMAX2-RV32-NEXT:    and a1, a5, a1
47; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
48; LMULMAX2-RV32-NEXT:    and a5, a5, a6
49; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
50; LMULMAX2-RV32-NEXT:    and a5, a1, a2
51; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
52; LMULMAX2-RV32-NEXT:    and a1, a1, a2
53; LMULMAX2-RV32-NEXT:    add a1, a5, a1
54; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
55; LMULMAX2-RV32-NEXT:    add a1, a1, a5
56; LMULMAX2-RV32-NEXT:    and a1, a1, a3
57; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
58; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
59; LMULMAX2-RV32-NEXT:    sb a1, 31(sp)
60; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 14
61; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
62; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
63; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
64; LMULMAX2-RV32-NEXT:    not a1, a1
65; LMULMAX2-RV32-NEXT:    and a1, a1, a5
66; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
67; LMULMAX2-RV32-NEXT:    and a5, a5, a6
68; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
69; LMULMAX2-RV32-NEXT:    and a5, a1, a2
70; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
71; LMULMAX2-RV32-NEXT:    and a1, a1, a2
72; LMULMAX2-RV32-NEXT:    add a1, a5, a1
73; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
74; LMULMAX2-RV32-NEXT:    add a1, a1, a5
75; LMULMAX2-RV32-NEXT:    and a1, a1, a3
76; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
77; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
78; LMULMAX2-RV32-NEXT:    sb a1, 30(sp)
79; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 13
80; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
81; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
82; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
83; LMULMAX2-RV32-NEXT:    not a1, a1
84; LMULMAX2-RV32-NEXT:    and a1, a1, a5
85; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
86; LMULMAX2-RV32-NEXT:    and a5, a5, a6
87; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
88; LMULMAX2-RV32-NEXT:    and a5, a1, a2
89; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
90; LMULMAX2-RV32-NEXT:    and a1, a1, a2
91; LMULMAX2-RV32-NEXT:    add a1, a5, a1
92; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
93; LMULMAX2-RV32-NEXT:    add a1, a1, a5
94; LMULMAX2-RV32-NEXT:    and a1, a1, a3
95; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
96; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
97; LMULMAX2-RV32-NEXT:    sb a1, 29(sp)
98; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 12
99; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
100; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
101; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
102; LMULMAX2-RV32-NEXT:    not a1, a1
103; LMULMAX2-RV32-NEXT:    and a1, a1, a5
104; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
105; LMULMAX2-RV32-NEXT:    and a5, a5, a6
106; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
107; LMULMAX2-RV32-NEXT:    and a5, a1, a2
108; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
109; LMULMAX2-RV32-NEXT:    and a1, a1, a2
110; LMULMAX2-RV32-NEXT:    add a1, a5, a1
111; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
112; LMULMAX2-RV32-NEXT:    add a1, a1, a5
113; LMULMAX2-RV32-NEXT:    and a1, a1, a3
114; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
115; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
116; LMULMAX2-RV32-NEXT:    sb a1, 28(sp)
117; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 11
118; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
119; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
120; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
121; LMULMAX2-RV32-NEXT:    not a1, a1
122; LMULMAX2-RV32-NEXT:    and a1, a1, a5
123; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
124; LMULMAX2-RV32-NEXT:    and a5, a5, a6
125; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
126; LMULMAX2-RV32-NEXT:    and a5, a1, a2
127; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
128; LMULMAX2-RV32-NEXT:    and a1, a1, a2
129; LMULMAX2-RV32-NEXT:    add a1, a5, a1
130; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
131; LMULMAX2-RV32-NEXT:    add a1, a1, a5
132; LMULMAX2-RV32-NEXT:    and a1, a1, a3
133; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
134; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
135; LMULMAX2-RV32-NEXT:    sb a1, 27(sp)
136; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 10
137; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
138; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
139; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
140; LMULMAX2-RV32-NEXT:    not a1, a1
141; LMULMAX2-RV32-NEXT:    and a1, a1, a5
142; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
143; LMULMAX2-RV32-NEXT:    and a5, a5, a6
144; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
145; LMULMAX2-RV32-NEXT:    and a5, a1, a2
146; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
147; LMULMAX2-RV32-NEXT:    and a1, a1, a2
148; LMULMAX2-RV32-NEXT:    add a1, a5, a1
149; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
150; LMULMAX2-RV32-NEXT:    add a1, a1, a5
151; LMULMAX2-RV32-NEXT:    and a1, a1, a3
152; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
153; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
154; LMULMAX2-RV32-NEXT:    sb a1, 26(sp)
155; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 9
156; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
157; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
158; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
159; LMULMAX2-RV32-NEXT:    not a1, a1
160; LMULMAX2-RV32-NEXT:    and a1, a1, a5
161; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
162; LMULMAX2-RV32-NEXT:    and a5, a5, a6
163; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
164; LMULMAX2-RV32-NEXT:    and a5, a1, a2
165; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
166; LMULMAX2-RV32-NEXT:    and a1, a1, a2
167; LMULMAX2-RV32-NEXT:    add a1, a5, a1
168; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
169; LMULMAX2-RV32-NEXT:    add a1, a1, a5
170; LMULMAX2-RV32-NEXT:    and a1, a1, a3
171; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
172; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
173; LMULMAX2-RV32-NEXT:    sb a1, 25(sp)
174; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 8
175; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
176; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
177; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
178; LMULMAX2-RV32-NEXT:    not a1, a1
179; LMULMAX2-RV32-NEXT:    and a1, a1, a5
180; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
181; LMULMAX2-RV32-NEXT:    and a5, a5, a6
182; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
183; LMULMAX2-RV32-NEXT:    and a5, a1, a2
184; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
185; LMULMAX2-RV32-NEXT:    and a1, a1, a2
186; LMULMAX2-RV32-NEXT:    add a1, a5, a1
187; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
188; LMULMAX2-RV32-NEXT:    add a1, a1, a5
189; LMULMAX2-RV32-NEXT:    and a1, a1, a3
190; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
191; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
192; LMULMAX2-RV32-NEXT:    sb a1, 24(sp)
193; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 7
194; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
195; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
196; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
197; LMULMAX2-RV32-NEXT:    not a1, a1
198; LMULMAX2-RV32-NEXT:    and a1, a1, a5
199; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
200; LMULMAX2-RV32-NEXT:    and a5, a5, a6
201; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
202; LMULMAX2-RV32-NEXT:    and a5, a1, a2
203; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
204; LMULMAX2-RV32-NEXT:    and a1, a1, a2
205; LMULMAX2-RV32-NEXT:    add a1, a5, a1
206; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
207; LMULMAX2-RV32-NEXT:    add a1, a1, a5
208; LMULMAX2-RV32-NEXT:    and a1, a1, a3
209; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
210; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
211; LMULMAX2-RV32-NEXT:    sb a1, 23(sp)
212; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 6
213; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
214; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
215; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
216; LMULMAX2-RV32-NEXT:    not a1, a1
217; LMULMAX2-RV32-NEXT:    and a1, a1, a5
218; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
219; LMULMAX2-RV32-NEXT:    and a5, a5, a6
220; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
221; LMULMAX2-RV32-NEXT:    and a5, a1, a2
222; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
223; LMULMAX2-RV32-NEXT:    and a1, a1, a2
224; LMULMAX2-RV32-NEXT:    add a1, a5, a1
225; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
226; LMULMAX2-RV32-NEXT:    add a1, a1, a5
227; LMULMAX2-RV32-NEXT:    and a1, a1, a3
228; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
229; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
230; LMULMAX2-RV32-NEXT:    sb a1, 22(sp)
231; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 5
232; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
233; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
234; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
235; LMULMAX2-RV32-NEXT:    not a1, a1
236; LMULMAX2-RV32-NEXT:    and a1, a1, a5
237; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
238; LMULMAX2-RV32-NEXT:    and a5, a5, a6
239; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
240; LMULMAX2-RV32-NEXT:    and a5, a1, a2
241; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
242; LMULMAX2-RV32-NEXT:    and a1, a1, a2
243; LMULMAX2-RV32-NEXT:    add a1, a5, a1
244; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
245; LMULMAX2-RV32-NEXT:    add a1, a1, a5
246; LMULMAX2-RV32-NEXT:    and a1, a1, a3
247; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
248; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
249; LMULMAX2-RV32-NEXT:    sb a1, 21(sp)
250; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 4
251; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
252; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
253; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
254; LMULMAX2-RV32-NEXT:    not a1, a1
255; LMULMAX2-RV32-NEXT:    and a1, a1, a5
256; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
257; LMULMAX2-RV32-NEXT:    and a5, a5, a6
258; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
259; LMULMAX2-RV32-NEXT:    and a5, a1, a2
260; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
261; LMULMAX2-RV32-NEXT:    and a1, a1, a2
262; LMULMAX2-RV32-NEXT:    add a1, a5, a1
263; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
264; LMULMAX2-RV32-NEXT:    add a1, a1, a5
265; LMULMAX2-RV32-NEXT:    and a1, a1, a3
266; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
267; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
268; LMULMAX2-RV32-NEXT:    sb a1, 20(sp)
269; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 3
270; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
271; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
272; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
273; LMULMAX2-RV32-NEXT:    not a1, a1
274; LMULMAX2-RV32-NEXT:    and a1, a1, a5
275; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
276; LMULMAX2-RV32-NEXT:    and a5, a5, a6
277; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
278; LMULMAX2-RV32-NEXT:    and a5, a1, a2
279; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
280; LMULMAX2-RV32-NEXT:    and a1, a1, a2
281; LMULMAX2-RV32-NEXT:    add a1, a5, a1
282; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
283; LMULMAX2-RV32-NEXT:    add a1, a1, a5
284; LMULMAX2-RV32-NEXT:    and a1, a1, a3
285; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
286; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
287; LMULMAX2-RV32-NEXT:    sb a1, 19(sp)
288; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 2
289; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
290; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
291; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
292; LMULMAX2-RV32-NEXT:    not a1, a1
293; LMULMAX2-RV32-NEXT:    and a1, a1, a5
294; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
295; LMULMAX2-RV32-NEXT:    and a5, a5, a6
296; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
297; LMULMAX2-RV32-NEXT:    and a5, a1, a2
298; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
299; LMULMAX2-RV32-NEXT:    and a1, a1, a2
300; LMULMAX2-RV32-NEXT:    add a1, a5, a1
301; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
302; LMULMAX2-RV32-NEXT:    add a1, a1, a5
303; LMULMAX2-RV32-NEXT:    and a1, a1, a3
304; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
305; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
306; LMULMAX2-RV32-NEXT:    sb a1, 18(sp)
307; LMULMAX2-RV32-NEXT:    vslidedown.vi v25, v25, 1
308; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
309; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
310; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
311; LMULMAX2-RV32-NEXT:    not a1, a1
312; LMULMAX2-RV32-NEXT:    and a1, a1, a5
313; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
314; LMULMAX2-RV32-NEXT:    and a5, a5, a6
315; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
316; LMULMAX2-RV32-NEXT:    and a5, a1, a2
317; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
318; LMULMAX2-RV32-NEXT:    and a1, a1, a2
319; LMULMAX2-RV32-NEXT:    add a1, a5, a1
320; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
321; LMULMAX2-RV32-NEXT:    add a1, a1, a2
322; LMULMAX2-RV32-NEXT:    and a1, a1, a3
323; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
324; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
325; LMULMAX2-RV32-NEXT:    sb a1, 17(sp)
326; LMULMAX2-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
327; LMULMAX2-RV32-NEXT:    addi a1, sp, 16
328; LMULMAX2-RV32-NEXT:    vle8.v v25, (a1)
329; LMULMAX2-RV32-NEXT:    vse8.v v25, (a0)
330; LMULMAX2-RV32-NEXT:    addi sp, sp, 32
331; LMULMAX2-RV32-NEXT:    ret
332;
333; LMULMAX2-RV64-LABEL: cttz_v16i8:
334; LMULMAX2-RV64:       # %bb.0:
335; LMULMAX2-RV64-NEXT:    addi sp, sp, -32
336; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 32
337; LMULMAX2-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
338; LMULMAX2-RV64-NEXT:    vle8.v v25, (a0)
339; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
340; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 15
341; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
342; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
343; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
344; LMULMAX2-RV64-NEXT:    not a1, a1
345; LMULMAX2-RV64-NEXT:    and a2, a1, a2
346; LMULMAX2-RV64-NEXT:    srli a3, a2, 1
347; LMULMAX2-RV64-NEXT:    lui a1, 21845
348; LMULMAX2-RV64-NEXT:    addiw a1, a1, 1365
349; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
350; LMULMAX2-RV64-NEXT:    addi a1, a1, 1365
351; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
352; LMULMAX2-RV64-NEXT:    addi a1, a1, 1365
353; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
354; LMULMAX2-RV64-NEXT:    addi a6, a1, 1365
355; LMULMAX2-RV64-NEXT:    and a3, a3, a6
356; LMULMAX2-RV64-NEXT:    sub a3, a2, a3
357; LMULMAX2-RV64-NEXT:    lui a2, 13107
358; LMULMAX2-RV64-NEXT:    addiw a2, a2, 819
359; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
360; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
361; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
362; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
363; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
364; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
365; LMULMAX2-RV64-NEXT:    and a4, a3, a2
366; LMULMAX2-RV64-NEXT:    srli a3, a3, 2
367; LMULMAX2-RV64-NEXT:    and a3, a3, a2
368; LMULMAX2-RV64-NEXT:    add a3, a4, a3
369; LMULMAX2-RV64-NEXT:    srli a4, a3, 4
370; LMULMAX2-RV64-NEXT:    add a4, a3, a4
371; LMULMAX2-RV64-NEXT:    lui a3, 3855
372; LMULMAX2-RV64-NEXT:    addiw a3, a3, 241
373; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
374; LMULMAX2-RV64-NEXT:    addi a3, a3, -241
375; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
376; LMULMAX2-RV64-NEXT:    addi a3, a3, 241
377; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
378; LMULMAX2-RV64-NEXT:    addi a3, a3, -241
379; LMULMAX2-RV64-NEXT:    and a5, a4, a3
380; LMULMAX2-RV64-NEXT:    lui a4, 4112
381; LMULMAX2-RV64-NEXT:    addiw a4, a4, 257
382; LMULMAX2-RV64-NEXT:    slli a4, a4, 16
383; LMULMAX2-RV64-NEXT:    addi a4, a4, 257
384; LMULMAX2-RV64-NEXT:    slli a4, a4, 16
385; LMULMAX2-RV64-NEXT:    addi a4, a4, 257
386; LMULMAX2-RV64-NEXT:    mul a5, a5, a4
387; LMULMAX2-RV64-NEXT:    srli a5, a5, 56
388; LMULMAX2-RV64-NEXT:    sb a5, 31(sp)
389; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 14
390; LMULMAX2-RV64-NEXT:    vmv.x.s a5, v26
391; LMULMAX2-RV64-NEXT:    ori a5, a5, 256
392; LMULMAX2-RV64-NEXT:    addi a1, a5, -1
393; LMULMAX2-RV64-NEXT:    not a5, a5
394; LMULMAX2-RV64-NEXT:    and a1, a5, a1
395; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
396; LMULMAX2-RV64-NEXT:    and a5, a5, a6
397; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
398; LMULMAX2-RV64-NEXT:    and a5, a1, a2
399; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
400; LMULMAX2-RV64-NEXT:    and a1, a1, a2
401; LMULMAX2-RV64-NEXT:    add a1, a5, a1
402; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
403; LMULMAX2-RV64-NEXT:    add a1, a1, a5
404; LMULMAX2-RV64-NEXT:    and a1, a1, a3
405; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
406; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
407; LMULMAX2-RV64-NEXT:    sb a1, 30(sp)
408; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 13
409; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
410; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
411; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
412; LMULMAX2-RV64-NEXT:    not a1, a1
413; LMULMAX2-RV64-NEXT:    and a1, a1, a5
414; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
415; LMULMAX2-RV64-NEXT:    and a5, a5, a6
416; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
417; LMULMAX2-RV64-NEXT:    and a5, a1, a2
418; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
419; LMULMAX2-RV64-NEXT:    and a1, a1, a2
420; LMULMAX2-RV64-NEXT:    add a1, a5, a1
421; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
422; LMULMAX2-RV64-NEXT:    add a1, a1, a5
423; LMULMAX2-RV64-NEXT:    and a1, a1, a3
424; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
425; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
426; LMULMAX2-RV64-NEXT:    sb a1, 29(sp)
427; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 12
428; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
429; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
430; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
431; LMULMAX2-RV64-NEXT:    not a1, a1
432; LMULMAX2-RV64-NEXT:    and a1, a1, a5
433; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
434; LMULMAX2-RV64-NEXT:    and a5, a5, a6
435; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
436; LMULMAX2-RV64-NEXT:    and a5, a1, a2
437; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
438; LMULMAX2-RV64-NEXT:    and a1, a1, a2
439; LMULMAX2-RV64-NEXT:    add a1, a5, a1
440; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
441; LMULMAX2-RV64-NEXT:    add a1, a1, a5
442; LMULMAX2-RV64-NEXT:    and a1, a1, a3
443; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
444; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
445; LMULMAX2-RV64-NEXT:    sb a1, 28(sp)
446; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 11
447; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
448; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
449; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
450; LMULMAX2-RV64-NEXT:    not a1, a1
451; LMULMAX2-RV64-NEXT:    and a1, a1, a5
452; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
453; LMULMAX2-RV64-NEXT:    and a5, a5, a6
454; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
455; LMULMAX2-RV64-NEXT:    and a5, a1, a2
456; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
457; LMULMAX2-RV64-NEXT:    and a1, a1, a2
458; LMULMAX2-RV64-NEXT:    add a1, a5, a1
459; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
460; LMULMAX2-RV64-NEXT:    add a1, a1, a5
461; LMULMAX2-RV64-NEXT:    and a1, a1, a3
462; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
463; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
464; LMULMAX2-RV64-NEXT:    sb a1, 27(sp)
465; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 10
466; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
467; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
468; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
469; LMULMAX2-RV64-NEXT:    not a1, a1
470; LMULMAX2-RV64-NEXT:    and a1, a1, a5
471; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
472; LMULMAX2-RV64-NEXT:    and a5, a5, a6
473; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
474; LMULMAX2-RV64-NEXT:    and a5, a1, a2
475; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
476; LMULMAX2-RV64-NEXT:    and a1, a1, a2
477; LMULMAX2-RV64-NEXT:    add a1, a5, a1
478; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
479; LMULMAX2-RV64-NEXT:    add a1, a1, a5
480; LMULMAX2-RV64-NEXT:    and a1, a1, a3
481; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
482; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
483; LMULMAX2-RV64-NEXT:    sb a1, 26(sp)
484; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 9
485; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
486; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
487; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
488; LMULMAX2-RV64-NEXT:    not a1, a1
489; LMULMAX2-RV64-NEXT:    and a1, a1, a5
490; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
491; LMULMAX2-RV64-NEXT:    and a5, a5, a6
492; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
493; LMULMAX2-RV64-NEXT:    and a5, a1, a2
494; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
495; LMULMAX2-RV64-NEXT:    and a1, a1, a2
496; LMULMAX2-RV64-NEXT:    add a1, a5, a1
497; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
498; LMULMAX2-RV64-NEXT:    add a1, a1, a5
499; LMULMAX2-RV64-NEXT:    and a1, a1, a3
500; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
501; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
502; LMULMAX2-RV64-NEXT:    sb a1, 25(sp)
503; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 8
504; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
505; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
506; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
507; LMULMAX2-RV64-NEXT:    not a1, a1
508; LMULMAX2-RV64-NEXT:    and a1, a1, a5
509; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
510; LMULMAX2-RV64-NEXT:    and a5, a5, a6
511; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
512; LMULMAX2-RV64-NEXT:    and a5, a1, a2
513; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
514; LMULMAX2-RV64-NEXT:    and a1, a1, a2
515; LMULMAX2-RV64-NEXT:    add a1, a5, a1
516; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
517; LMULMAX2-RV64-NEXT:    add a1, a1, a5
518; LMULMAX2-RV64-NEXT:    and a1, a1, a3
519; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
520; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
521; LMULMAX2-RV64-NEXT:    sb a1, 24(sp)
522; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 7
523; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
524; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
525; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
526; LMULMAX2-RV64-NEXT:    not a1, a1
527; LMULMAX2-RV64-NEXT:    and a1, a1, a5
528; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
529; LMULMAX2-RV64-NEXT:    and a5, a5, a6
530; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
531; LMULMAX2-RV64-NEXT:    and a5, a1, a2
532; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
533; LMULMAX2-RV64-NEXT:    and a1, a1, a2
534; LMULMAX2-RV64-NEXT:    add a1, a5, a1
535; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
536; LMULMAX2-RV64-NEXT:    add a1, a1, a5
537; LMULMAX2-RV64-NEXT:    and a1, a1, a3
538; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
539; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
540; LMULMAX2-RV64-NEXT:    sb a1, 23(sp)
541; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 6
542; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
543; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
544; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
545; LMULMAX2-RV64-NEXT:    not a1, a1
546; LMULMAX2-RV64-NEXT:    and a1, a1, a5
547; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
548; LMULMAX2-RV64-NEXT:    and a5, a5, a6
549; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
550; LMULMAX2-RV64-NEXT:    and a5, a1, a2
551; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
552; LMULMAX2-RV64-NEXT:    and a1, a1, a2
553; LMULMAX2-RV64-NEXT:    add a1, a5, a1
554; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
555; LMULMAX2-RV64-NEXT:    add a1, a1, a5
556; LMULMAX2-RV64-NEXT:    and a1, a1, a3
557; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
558; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
559; LMULMAX2-RV64-NEXT:    sb a1, 22(sp)
560; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 5
561; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
562; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
563; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
564; LMULMAX2-RV64-NEXT:    not a1, a1
565; LMULMAX2-RV64-NEXT:    and a1, a1, a5
566; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
567; LMULMAX2-RV64-NEXT:    and a5, a5, a6
568; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
569; LMULMAX2-RV64-NEXT:    and a5, a1, a2
570; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
571; LMULMAX2-RV64-NEXT:    and a1, a1, a2
572; LMULMAX2-RV64-NEXT:    add a1, a5, a1
573; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
574; LMULMAX2-RV64-NEXT:    add a1, a1, a5
575; LMULMAX2-RV64-NEXT:    and a1, a1, a3
576; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
577; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
578; LMULMAX2-RV64-NEXT:    sb a1, 21(sp)
579; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 4
580; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
581; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
582; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
583; LMULMAX2-RV64-NEXT:    not a1, a1
584; LMULMAX2-RV64-NEXT:    and a1, a1, a5
585; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
586; LMULMAX2-RV64-NEXT:    and a5, a5, a6
587; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
588; LMULMAX2-RV64-NEXT:    and a5, a1, a2
589; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
590; LMULMAX2-RV64-NEXT:    and a1, a1, a2
591; LMULMAX2-RV64-NEXT:    add a1, a5, a1
592; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
593; LMULMAX2-RV64-NEXT:    add a1, a1, a5
594; LMULMAX2-RV64-NEXT:    and a1, a1, a3
595; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
596; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
597; LMULMAX2-RV64-NEXT:    sb a1, 20(sp)
598; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 3
599; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
600; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
601; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
602; LMULMAX2-RV64-NEXT:    not a1, a1
603; LMULMAX2-RV64-NEXT:    and a1, a1, a5
604; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
605; LMULMAX2-RV64-NEXT:    and a5, a5, a6
606; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
607; LMULMAX2-RV64-NEXT:    and a5, a1, a2
608; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
609; LMULMAX2-RV64-NEXT:    and a1, a1, a2
610; LMULMAX2-RV64-NEXT:    add a1, a5, a1
611; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
612; LMULMAX2-RV64-NEXT:    add a1, a1, a5
613; LMULMAX2-RV64-NEXT:    and a1, a1, a3
614; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
615; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
616; LMULMAX2-RV64-NEXT:    sb a1, 19(sp)
617; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 2
618; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
619; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
620; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
621; LMULMAX2-RV64-NEXT:    not a1, a1
622; LMULMAX2-RV64-NEXT:    and a1, a1, a5
623; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
624; LMULMAX2-RV64-NEXT:    and a5, a5, a6
625; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
626; LMULMAX2-RV64-NEXT:    and a5, a1, a2
627; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
628; LMULMAX2-RV64-NEXT:    and a1, a1, a2
629; LMULMAX2-RV64-NEXT:    add a1, a5, a1
630; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
631; LMULMAX2-RV64-NEXT:    add a1, a1, a5
632; LMULMAX2-RV64-NEXT:    and a1, a1, a3
633; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
634; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
635; LMULMAX2-RV64-NEXT:    sb a1, 18(sp)
636; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 1
637; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
638; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
639; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
640; LMULMAX2-RV64-NEXT:    not a1, a1
641; LMULMAX2-RV64-NEXT:    and a1, a1, a5
642; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
643; LMULMAX2-RV64-NEXT:    and a5, a5, a6
644; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
645; LMULMAX2-RV64-NEXT:    and a5, a1, a2
646; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
647; LMULMAX2-RV64-NEXT:    and a1, a1, a2
648; LMULMAX2-RV64-NEXT:    add a1, a5, a1
649; LMULMAX2-RV64-NEXT:    srli a5, a1, 4
650; LMULMAX2-RV64-NEXT:    add a1, a1, a5
651; LMULMAX2-RV64-NEXT:    and a1, a1, a3
652; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
653; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
654; LMULMAX2-RV64-NEXT:    sb a1, 17(sp)
655; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
656; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
657; LMULMAX2-RV64-NEXT:    addi a5, a1, -1
658; LMULMAX2-RV64-NEXT:    not a1, a1
659; LMULMAX2-RV64-NEXT:    and a1, a1, a5
660; LMULMAX2-RV64-NEXT:    srli a5, a1, 1
661; LMULMAX2-RV64-NEXT:    and a5, a5, a6
662; LMULMAX2-RV64-NEXT:    sub a1, a1, a5
663; LMULMAX2-RV64-NEXT:    and a5, a1, a2
664; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
665; LMULMAX2-RV64-NEXT:    and a1, a1, a2
666; LMULMAX2-RV64-NEXT:    add a1, a5, a1
667; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
668; LMULMAX2-RV64-NEXT:    add a1, a1, a2
669; LMULMAX2-RV64-NEXT:    and a1, a1, a3
670; LMULMAX2-RV64-NEXT:    mul a1, a1, a4
671; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
672; LMULMAX2-RV64-NEXT:    sb a1, 16(sp)
673; LMULMAX2-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
674; LMULMAX2-RV64-NEXT:    addi a1, sp, 16
675; LMULMAX2-RV64-NEXT:    vle8.v v25, (a1)
676; LMULMAX2-RV64-NEXT:    vse8.v v25, (a0)
677; LMULMAX2-RV64-NEXT:    addi sp, sp, 32
678; LMULMAX2-RV64-NEXT:    ret
679;
680; LMULMAX1-RV32-LABEL: cttz_v16i8:
681; LMULMAX1-RV32:       # %bb.0:
682; LMULMAX1-RV32-NEXT:    addi sp, sp, -32
683; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 32
684; LMULMAX1-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
685; LMULMAX1-RV32-NEXT:    vle8.v v25, (a0)
686; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
687; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
688; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
689; LMULMAX1-RV32-NEXT:    not a1, a1
690; LMULMAX1-RV32-NEXT:    and a2, a1, a2
691; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
692; LMULMAX1-RV32-NEXT:    lui a1, 349525
693; LMULMAX1-RV32-NEXT:    addi a6, a1, 1365
694; LMULMAX1-RV32-NEXT:    and a3, a3, a6
695; LMULMAX1-RV32-NEXT:    sub a3, a2, a3
696; LMULMAX1-RV32-NEXT:    lui a2, 209715
697; LMULMAX1-RV32-NEXT:    addi a2, a2, 819
698; LMULMAX1-RV32-NEXT:    and a4, a3, a2
699; LMULMAX1-RV32-NEXT:    srli a3, a3, 2
700; LMULMAX1-RV32-NEXT:    and a3, a3, a2
701; LMULMAX1-RV32-NEXT:    add a3, a4, a3
702; LMULMAX1-RV32-NEXT:    srli a4, a3, 4
703; LMULMAX1-RV32-NEXT:    add a4, a3, a4
704; LMULMAX1-RV32-NEXT:    lui a3, 61681
705; LMULMAX1-RV32-NEXT:    addi a3, a3, -241
706; LMULMAX1-RV32-NEXT:    and a5, a4, a3
707; LMULMAX1-RV32-NEXT:    lui a4, 4112
708; LMULMAX1-RV32-NEXT:    addi a4, a4, 257
709; LMULMAX1-RV32-NEXT:    mul a5, a5, a4
710; LMULMAX1-RV32-NEXT:    srli a5, a5, 24
711; LMULMAX1-RV32-NEXT:    sb a5, 16(sp)
712; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
713; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 15
714; LMULMAX1-RV32-NEXT:    vmv.x.s a5, v26
715; LMULMAX1-RV32-NEXT:    ori a5, a5, 256
716; LMULMAX1-RV32-NEXT:    addi a1, a5, -1
717; LMULMAX1-RV32-NEXT:    not a5, a5
718; LMULMAX1-RV32-NEXT:    and a1, a5, a1
719; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
720; LMULMAX1-RV32-NEXT:    and a5, a5, a6
721; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
722; LMULMAX1-RV32-NEXT:    and a5, a1, a2
723; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
724; LMULMAX1-RV32-NEXT:    and a1, a1, a2
725; LMULMAX1-RV32-NEXT:    add a1, a5, a1
726; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
727; LMULMAX1-RV32-NEXT:    add a1, a1, a5
728; LMULMAX1-RV32-NEXT:    and a1, a1, a3
729; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
730; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
731; LMULMAX1-RV32-NEXT:    sb a1, 31(sp)
732; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 14
733; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
734; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
735; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
736; LMULMAX1-RV32-NEXT:    not a1, a1
737; LMULMAX1-RV32-NEXT:    and a1, a1, a5
738; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
739; LMULMAX1-RV32-NEXT:    and a5, a5, a6
740; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
741; LMULMAX1-RV32-NEXT:    and a5, a1, a2
742; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
743; LMULMAX1-RV32-NEXT:    and a1, a1, a2
744; LMULMAX1-RV32-NEXT:    add a1, a5, a1
745; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
746; LMULMAX1-RV32-NEXT:    add a1, a1, a5
747; LMULMAX1-RV32-NEXT:    and a1, a1, a3
748; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
749; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
750; LMULMAX1-RV32-NEXT:    sb a1, 30(sp)
751; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 13
752; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
753; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
754; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
755; LMULMAX1-RV32-NEXT:    not a1, a1
756; LMULMAX1-RV32-NEXT:    and a1, a1, a5
757; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
758; LMULMAX1-RV32-NEXT:    and a5, a5, a6
759; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
760; LMULMAX1-RV32-NEXT:    and a5, a1, a2
761; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
762; LMULMAX1-RV32-NEXT:    and a1, a1, a2
763; LMULMAX1-RV32-NEXT:    add a1, a5, a1
764; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
765; LMULMAX1-RV32-NEXT:    add a1, a1, a5
766; LMULMAX1-RV32-NEXT:    and a1, a1, a3
767; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
768; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
769; LMULMAX1-RV32-NEXT:    sb a1, 29(sp)
770; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 12
771; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
772; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
773; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
774; LMULMAX1-RV32-NEXT:    not a1, a1
775; LMULMAX1-RV32-NEXT:    and a1, a1, a5
776; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
777; LMULMAX1-RV32-NEXT:    and a5, a5, a6
778; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
779; LMULMAX1-RV32-NEXT:    and a5, a1, a2
780; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
781; LMULMAX1-RV32-NEXT:    and a1, a1, a2
782; LMULMAX1-RV32-NEXT:    add a1, a5, a1
783; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
784; LMULMAX1-RV32-NEXT:    add a1, a1, a5
785; LMULMAX1-RV32-NEXT:    and a1, a1, a3
786; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
787; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
788; LMULMAX1-RV32-NEXT:    sb a1, 28(sp)
789; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 11
790; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
791; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
792; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
793; LMULMAX1-RV32-NEXT:    not a1, a1
794; LMULMAX1-RV32-NEXT:    and a1, a1, a5
795; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
796; LMULMAX1-RV32-NEXT:    and a5, a5, a6
797; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
798; LMULMAX1-RV32-NEXT:    and a5, a1, a2
799; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
800; LMULMAX1-RV32-NEXT:    and a1, a1, a2
801; LMULMAX1-RV32-NEXT:    add a1, a5, a1
802; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
803; LMULMAX1-RV32-NEXT:    add a1, a1, a5
804; LMULMAX1-RV32-NEXT:    and a1, a1, a3
805; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
806; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
807; LMULMAX1-RV32-NEXT:    sb a1, 27(sp)
808; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 10
809; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
810; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
811; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
812; LMULMAX1-RV32-NEXT:    not a1, a1
813; LMULMAX1-RV32-NEXT:    and a1, a1, a5
814; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
815; LMULMAX1-RV32-NEXT:    and a5, a5, a6
816; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
817; LMULMAX1-RV32-NEXT:    and a5, a1, a2
818; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
819; LMULMAX1-RV32-NEXT:    and a1, a1, a2
820; LMULMAX1-RV32-NEXT:    add a1, a5, a1
821; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
822; LMULMAX1-RV32-NEXT:    add a1, a1, a5
823; LMULMAX1-RV32-NEXT:    and a1, a1, a3
824; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
825; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
826; LMULMAX1-RV32-NEXT:    sb a1, 26(sp)
827; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 9
828; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
829; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
830; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
831; LMULMAX1-RV32-NEXT:    not a1, a1
832; LMULMAX1-RV32-NEXT:    and a1, a1, a5
833; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
834; LMULMAX1-RV32-NEXT:    and a5, a5, a6
835; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
836; LMULMAX1-RV32-NEXT:    and a5, a1, a2
837; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
838; LMULMAX1-RV32-NEXT:    and a1, a1, a2
839; LMULMAX1-RV32-NEXT:    add a1, a5, a1
840; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
841; LMULMAX1-RV32-NEXT:    add a1, a1, a5
842; LMULMAX1-RV32-NEXT:    and a1, a1, a3
843; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
844; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
845; LMULMAX1-RV32-NEXT:    sb a1, 25(sp)
846; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 8
847; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
848; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
849; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
850; LMULMAX1-RV32-NEXT:    not a1, a1
851; LMULMAX1-RV32-NEXT:    and a1, a1, a5
852; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
853; LMULMAX1-RV32-NEXT:    and a5, a5, a6
854; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
855; LMULMAX1-RV32-NEXT:    and a5, a1, a2
856; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
857; LMULMAX1-RV32-NEXT:    and a1, a1, a2
858; LMULMAX1-RV32-NEXT:    add a1, a5, a1
859; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
860; LMULMAX1-RV32-NEXT:    add a1, a1, a5
861; LMULMAX1-RV32-NEXT:    and a1, a1, a3
862; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
863; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
864; LMULMAX1-RV32-NEXT:    sb a1, 24(sp)
865; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 7
866; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
867; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
868; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
869; LMULMAX1-RV32-NEXT:    not a1, a1
870; LMULMAX1-RV32-NEXT:    and a1, a1, a5
871; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
872; LMULMAX1-RV32-NEXT:    and a5, a5, a6
873; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
874; LMULMAX1-RV32-NEXT:    and a5, a1, a2
875; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
876; LMULMAX1-RV32-NEXT:    and a1, a1, a2
877; LMULMAX1-RV32-NEXT:    add a1, a5, a1
878; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
879; LMULMAX1-RV32-NEXT:    add a1, a1, a5
880; LMULMAX1-RV32-NEXT:    and a1, a1, a3
881; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
882; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
883; LMULMAX1-RV32-NEXT:    sb a1, 23(sp)
884; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 6
885; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
886; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
887; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
888; LMULMAX1-RV32-NEXT:    not a1, a1
889; LMULMAX1-RV32-NEXT:    and a1, a1, a5
890; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
891; LMULMAX1-RV32-NEXT:    and a5, a5, a6
892; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
893; LMULMAX1-RV32-NEXT:    and a5, a1, a2
894; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
895; LMULMAX1-RV32-NEXT:    and a1, a1, a2
896; LMULMAX1-RV32-NEXT:    add a1, a5, a1
897; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
898; LMULMAX1-RV32-NEXT:    add a1, a1, a5
899; LMULMAX1-RV32-NEXT:    and a1, a1, a3
900; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
901; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
902; LMULMAX1-RV32-NEXT:    sb a1, 22(sp)
903; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 5
904; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
905; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
906; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
907; LMULMAX1-RV32-NEXT:    not a1, a1
908; LMULMAX1-RV32-NEXT:    and a1, a1, a5
909; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
910; LMULMAX1-RV32-NEXT:    and a5, a5, a6
911; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
912; LMULMAX1-RV32-NEXT:    and a5, a1, a2
913; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
914; LMULMAX1-RV32-NEXT:    and a1, a1, a2
915; LMULMAX1-RV32-NEXT:    add a1, a5, a1
916; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
917; LMULMAX1-RV32-NEXT:    add a1, a1, a5
918; LMULMAX1-RV32-NEXT:    and a1, a1, a3
919; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
920; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
921; LMULMAX1-RV32-NEXT:    sb a1, 21(sp)
922; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 4
923; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
924; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
925; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
926; LMULMAX1-RV32-NEXT:    not a1, a1
927; LMULMAX1-RV32-NEXT:    and a1, a1, a5
928; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
929; LMULMAX1-RV32-NEXT:    and a5, a5, a6
930; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
931; LMULMAX1-RV32-NEXT:    and a5, a1, a2
932; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
933; LMULMAX1-RV32-NEXT:    and a1, a1, a2
934; LMULMAX1-RV32-NEXT:    add a1, a5, a1
935; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
936; LMULMAX1-RV32-NEXT:    add a1, a1, a5
937; LMULMAX1-RV32-NEXT:    and a1, a1, a3
938; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
939; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
940; LMULMAX1-RV32-NEXT:    sb a1, 20(sp)
941; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
942; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
943; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
944; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
945; LMULMAX1-RV32-NEXT:    not a1, a1
946; LMULMAX1-RV32-NEXT:    and a1, a1, a5
947; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
948; LMULMAX1-RV32-NEXT:    and a5, a5, a6
949; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
950; LMULMAX1-RV32-NEXT:    and a5, a1, a2
951; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
952; LMULMAX1-RV32-NEXT:    and a1, a1, a2
953; LMULMAX1-RV32-NEXT:    add a1, a5, a1
954; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
955; LMULMAX1-RV32-NEXT:    add a1, a1, a5
956; LMULMAX1-RV32-NEXT:    and a1, a1, a3
957; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
958; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
959; LMULMAX1-RV32-NEXT:    sb a1, 19(sp)
960; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
961; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
962; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
963; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
964; LMULMAX1-RV32-NEXT:    not a1, a1
965; LMULMAX1-RV32-NEXT:    and a1, a1, a5
966; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
967; LMULMAX1-RV32-NEXT:    and a5, a5, a6
968; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
969; LMULMAX1-RV32-NEXT:    and a5, a1, a2
970; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
971; LMULMAX1-RV32-NEXT:    and a1, a1, a2
972; LMULMAX1-RV32-NEXT:    add a1, a5, a1
973; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
974; LMULMAX1-RV32-NEXT:    add a1, a1, a5
975; LMULMAX1-RV32-NEXT:    and a1, a1, a3
976; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
977; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
978; LMULMAX1-RV32-NEXT:    sb a1, 18(sp)
979; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
980; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
981; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
982; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
983; LMULMAX1-RV32-NEXT:    not a1, a1
984; LMULMAX1-RV32-NEXT:    and a1, a1, a5
985; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
986; LMULMAX1-RV32-NEXT:    and a5, a5, a6
987; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
988; LMULMAX1-RV32-NEXT:    and a5, a1, a2
989; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
990; LMULMAX1-RV32-NEXT:    and a1, a1, a2
991; LMULMAX1-RV32-NEXT:    add a1, a5, a1
992; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
993; LMULMAX1-RV32-NEXT:    add a1, a1, a2
994; LMULMAX1-RV32-NEXT:    and a1, a1, a3
995; LMULMAX1-RV32-NEXT:    mul a1, a1, a4
996; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
997; LMULMAX1-RV32-NEXT:    sb a1, 17(sp)
998; LMULMAX1-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
999; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
1000; LMULMAX1-RV32-NEXT:    vle8.v v25, (a1)
1001; LMULMAX1-RV32-NEXT:    vse8.v v25, (a0)
1002; LMULMAX1-RV32-NEXT:    addi sp, sp, 32
1003; LMULMAX1-RV32-NEXT:    ret
1004;
1005; LMULMAX1-RV64-LABEL: cttz_v16i8:
1006; LMULMAX1-RV64:       # %bb.0:
1007; LMULMAX1-RV64-NEXT:    addi sp, sp, -32
1008; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 32
1009; LMULMAX1-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
1010; LMULMAX1-RV64-NEXT:    vle8.v v25, (a0)
1011; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
1012; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 15
1013; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1014; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1015; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
1016; LMULMAX1-RV64-NEXT:    not a1, a1
1017; LMULMAX1-RV64-NEXT:    and a2, a1, a2
1018; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
1019; LMULMAX1-RV64-NEXT:    lui a1, 21845
1020; LMULMAX1-RV64-NEXT:    addiw a1, a1, 1365
1021; LMULMAX1-RV64-NEXT:    slli a1, a1, 12
1022; LMULMAX1-RV64-NEXT:    addi a1, a1, 1365
1023; LMULMAX1-RV64-NEXT:    slli a1, a1, 12
1024; LMULMAX1-RV64-NEXT:    addi a1, a1, 1365
1025; LMULMAX1-RV64-NEXT:    slli a1, a1, 12
1026; LMULMAX1-RV64-NEXT:    addi a6, a1, 1365
1027; LMULMAX1-RV64-NEXT:    and a3, a3, a6
1028; LMULMAX1-RV64-NEXT:    sub a3, a2, a3
1029; LMULMAX1-RV64-NEXT:    lui a2, 13107
1030; LMULMAX1-RV64-NEXT:    addiw a2, a2, 819
1031; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1032; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
1033; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1034; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
1035; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1036; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
1037; LMULMAX1-RV64-NEXT:    and a4, a3, a2
1038; LMULMAX1-RV64-NEXT:    srli a3, a3, 2
1039; LMULMAX1-RV64-NEXT:    and a3, a3, a2
1040; LMULMAX1-RV64-NEXT:    add a3, a4, a3
1041; LMULMAX1-RV64-NEXT:    srli a4, a3, 4
1042; LMULMAX1-RV64-NEXT:    add a4, a3, a4
1043; LMULMAX1-RV64-NEXT:    lui a3, 3855
1044; LMULMAX1-RV64-NEXT:    addiw a3, a3, 241
1045; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1046; LMULMAX1-RV64-NEXT:    addi a3, a3, -241
1047; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1048; LMULMAX1-RV64-NEXT:    addi a3, a3, 241
1049; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1050; LMULMAX1-RV64-NEXT:    addi a3, a3, -241
1051; LMULMAX1-RV64-NEXT:    and a5, a4, a3
1052; LMULMAX1-RV64-NEXT:    lui a4, 4112
1053; LMULMAX1-RV64-NEXT:    addiw a4, a4, 257
1054; LMULMAX1-RV64-NEXT:    slli a4, a4, 16
1055; LMULMAX1-RV64-NEXT:    addi a4, a4, 257
1056; LMULMAX1-RV64-NEXT:    slli a4, a4, 16
1057; LMULMAX1-RV64-NEXT:    addi a4, a4, 257
1058; LMULMAX1-RV64-NEXT:    mul a5, a5, a4
1059; LMULMAX1-RV64-NEXT:    srli a5, a5, 56
1060; LMULMAX1-RV64-NEXT:    sb a5, 31(sp)
1061; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 14
1062; LMULMAX1-RV64-NEXT:    vmv.x.s a5, v26
1063; LMULMAX1-RV64-NEXT:    ori a5, a5, 256
1064; LMULMAX1-RV64-NEXT:    addi a1, a5, -1
1065; LMULMAX1-RV64-NEXT:    not a5, a5
1066; LMULMAX1-RV64-NEXT:    and a1, a5, a1
1067; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1068; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1069; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1070; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1071; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1072; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1073; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1074; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1075; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1076; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1077; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1078; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1079; LMULMAX1-RV64-NEXT:    sb a1, 30(sp)
1080; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 13
1081; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1082; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1083; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1084; LMULMAX1-RV64-NEXT:    not a1, a1
1085; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1086; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1087; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1088; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1089; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1090; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1091; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1092; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1093; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1094; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1095; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1096; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1097; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1098; LMULMAX1-RV64-NEXT:    sb a1, 29(sp)
1099; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 12
1100; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1101; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1102; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1103; LMULMAX1-RV64-NEXT:    not a1, a1
1104; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1105; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1106; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1107; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1108; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1109; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1110; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1111; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1112; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1113; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1114; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1115; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1116; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1117; LMULMAX1-RV64-NEXT:    sb a1, 28(sp)
1118; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 11
1119; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1120; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1121; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1122; LMULMAX1-RV64-NEXT:    not a1, a1
1123; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1124; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1125; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1126; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1127; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1128; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1129; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1130; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1131; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1132; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1133; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1134; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1135; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1136; LMULMAX1-RV64-NEXT:    sb a1, 27(sp)
1137; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 10
1138; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1139; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1140; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1141; LMULMAX1-RV64-NEXT:    not a1, a1
1142; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1143; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1144; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1145; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1146; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1147; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1148; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1149; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1150; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1151; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1152; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1153; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1154; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1155; LMULMAX1-RV64-NEXT:    sb a1, 26(sp)
1156; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 9
1157; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1158; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1159; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1160; LMULMAX1-RV64-NEXT:    not a1, a1
1161; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1162; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1163; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1164; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1165; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1166; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1167; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1168; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1169; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1170; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1171; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1172; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1173; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1174; LMULMAX1-RV64-NEXT:    sb a1, 25(sp)
1175; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 8
1176; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1177; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1178; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1179; LMULMAX1-RV64-NEXT:    not a1, a1
1180; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1181; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1182; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1183; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1184; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1185; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1186; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1187; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1188; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1189; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1190; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1191; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1192; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1193; LMULMAX1-RV64-NEXT:    sb a1, 24(sp)
1194; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
1195; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1196; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1197; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1198; LMULMAX1-RV64-NEXT:    not a1, a1
1199; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1200; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1201; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1202; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1203; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1204; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1205; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1206; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1207; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1208; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1209; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1210; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1211; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1212; LMULMAX1-RV64-NEXT:    sb a1, 23(sp)
1213; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
1214; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1215; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1216; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1217; LMULMAX1-RV64-NEXT:    not a1, a1
1218; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1219; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1220; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1221; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1222; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1223; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1224; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1225; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1226; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1227; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1228; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1229; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1230; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1231; LMULMAX1-RV64-NEXT:    sb a1, 22(sp)
1232; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
1233; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1234; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1235; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1236; LMULMAX1-RV64-NEXT:    not a1, a1
1237; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1238; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1239; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1240; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1241; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1242; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1243; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1244; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1245; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1246; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1247; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1248; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1249; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1250; LMULMAX1-RV64-NEXT:    sb a1, 21(sp)
1251; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
1252; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1253; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1254; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1255; LMULMAX1-RV64-NEXT:    not a1, a1
1256; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1257; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1258; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1259; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1260; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1261; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1262; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1263; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1264; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1265; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1266; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1267; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1268; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1269; LMULMAX1-RV64-NEXT:    sb a1, 20(sp)
1270; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
1271; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1272; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1273; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1274; LMULMAX1-RV64-NEXT:    not a1, a1
1275; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1276; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1277; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1278; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1279; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1280; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1281; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1282; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1283; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1284; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1285; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1286; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1287; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1288; LMULMAX1-RV64-NEXT:    sb a1, 19(sp)
1289; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
1290; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1291; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1292; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1293; LMULMAX1-RV64-NEXT:    not a1, a1
1294; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1295; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1296; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1297; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1298; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1299; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1300; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1301; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1302; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1303; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1304; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1305; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1306; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1307; LMULMAX1-RV64-NEXT:    sb a1, 18(sp)
1308; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
1309; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1310; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1311; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1312; LMULMAX1-RV64-NEXT:    not a1, a1
1313; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1314; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1315; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1316; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1317; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1318; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1319; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1320; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1321; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
1322; LMULMAX1-RV64-NEXT:    add a1, a1, a5
1323; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1324; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1325; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1326; LMULMAX1-RV64-NEXT:    sb a1, 17(sp)
1327; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
1328; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
1329; LMULMAX1-RV64-NEXT:    addi a5, a1, -1
1330; LMULMAX1-RV64-NEXT:    not a1, a1
1331; LMULMAX1-RV64-NEXT:    and a1, a1, a5
1332; LMULMAX1-RV64-NEXT:    srli a5, a1, 1
1333; LMULMAX1-RV64-NEXT:    and a5, a5, a6
1334; LMULMAX1-RV64-NEXT:    sub a1, a1, a5
1335; LMULMAX1-RV64-NEXT:    and a5, a1, a2
1336; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1337; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1338; LMULMAX1-RV64-NEXT:    add a1, a5, a1
1339; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
1340; LMULMAX1-RV64-NEXT:    add a1, a1, a2
1341; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1342; LMULMAX1-RV64-NEXT:    mul a1, a1, a4
1343; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1344; LMULMAX1-RV64-NEXT:    sb a1, 16(sp)
1345; LMULMAX1-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
1346; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
1347; LMULMAX1-RV64-NEXT:    vle8.v v25, (a1)
1348; LMULMAX1-RV64-NEXT:    vse8.v v25, (a0)
1349; LMULMAX1-RV64-NEXT:    addi sp, sp, 32
1350; LMULMAX1-RV64-NEXT:    ret
1351  %a = load <16 x i8>, <16 x i8>* %x
1352  %b = load <16 x i8>, <16 x i8>* %y
1353  %c = call <16 x i8> @llvm.cttz.v16i8(<16 x i8> %a, i1 false)
1354  store <16 x i8> %c, <16 x i8>* %x
1355  ret void
1356}
1357declare <16 x i8> @llvm.cttz.v16i8(<16 x i8>, i1)
1358
1359define void @cttz_v8i16(<8 x i16>* %x, <8 x i16>* %y) {
1360; LMULMAX2-RV32-LABEL: cttz_v8i16:
1361; LMULMAX2-RV32:       # %bb.0:
1362; LMULMAX2-RV32-NEXT:    addi sp, sp, -32
1363; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 32
1364; LMULMAX2-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1365; LMULMAX2-RV32-NEXT:    vle16.v v25, (a0)
1366; LMULMAX2-RV32-NEXT:    vmv.x.s a2, v25
1367; LMULMAX2-RV32-NEXT:    lui a6, 16
1368; LMULMAX2-RV32-NEXT:    or a2, a2, a6
1369; LMULMAX2-RV32-NEXT:    addi a3, a2, -1
1370; LMULMAX2-RV32-NEXT:    not a2, a2
1371; LMULMAX2-RV32-NEXT:    and a3, a2, a3
1372; LMULMAX2-RV32-NEXT:    srli a4, a3, 1
1373; LMULMAX2-RV32-NEXT:    lui a2, 349525
1374; LMULMAX2-RV32-NEXT:    addi a7, a2, 1365
1375; LMULMAX2-RV32-NEXT:    and a4, a4, a7
1376; LMULMAX2-RV32-NEXT:    sub a4, a3, a4
1377; LMULMAX2-RV32-NEXT:    lui a3, 209715
1378; LMULMAX2-RV32-NEXT:    addi a3, a3, 819
1379; LMULMAX2-RV32-NEXT:    and a5, a4, a3
1380; LMULMAX2-RV32-NEXT:    srli a4, a4, 2
1381; LMULMAX2-RV32-NEXT:    and a4, a4, a3
1382; LMULMAX2-RV32-NEXT:    add a4, a5, a4
1383; LMULMAX2-RV32-NEXT:    srli a5, a4, 4
1384; LMULMAX2-RV32-NEXT:    add a5, a4, a5
1385; LMULMAX2-RV32-NEXT:    lui a4, 61681
1386; LMULMAX2-RV32-NEXT:    addi a4, a4, -241
1387; LMULMAX2-RV32-NEXT:    and a1, a5, a4
1388; LMULMAX2-RV32-NEXT:    lui a5, 4112
1389; LMULMAX2-RV32-NEXT:    addi a5, a5, 257
1390; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1391; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1392; LMULMAX2-RV32-NEXT:    sh a1, 16(sp)
1393; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
1394; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 7
1395; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1396; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1397; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1398; LMULMAX2-RV32-NEXT:    not a1, a1
1399; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1400; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1401; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1402; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1403; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1404; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1405; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1406; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1407; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1408; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1409; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1410; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1411; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1412; LMULMAX2-RV32-NEXT:    sh a1, 30(sp)
1413; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 6
1414; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1415; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1416; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1417; LMULMAX2-RV32-NEXT:    not a1, a1
1418; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1419; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1420; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1421; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1422; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1423; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1424; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1425; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1426; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1427; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1428; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1429; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1430; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1431; LMULMAX2-RV32-NEXT:    sh a1, 28(sp)
1432; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 5
1433; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1434; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1435; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1436; LMULMAX2-RV32-NEXT:    not a1, a1
1437; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1438; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1439; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1440; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1441; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1442; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1443; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1444; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1445; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1446; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1447; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1448; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1449; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1450; LMULMAX2-RV32-NEXT:    sh a1, 26(sp)
1451; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 4
1452; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1453; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1454; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1455; LMULMAX2-RV32-NEXT:    not a1, a1
1456; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1457; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1458; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1459; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1460; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1461; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1462; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1463; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1464; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1465; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1466; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1467; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1468; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1469; LMULMAX2-RV32-NEXT:    sh a1, 24(sp)
1470; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 3
1471; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1472; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1473; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1474; LMULMAX2-RV32-NEXT:    not a1, a1
1475; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1476; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1477; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1478; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1479; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1480; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1481; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1482; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1483; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1484; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1485; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1486; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1487; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1488; LMULMAX2-RV32-NEXT:    sh a1, 22(sp)
1489; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 2
1490; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
1491; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1492; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1493; LMULMAX2-RV32-NEXT:    not a1, a1
1494; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1495; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1496; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1497; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1498; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1499; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1500; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1501; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1502; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1503; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1504; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1505; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1506; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1507; LMULMAX2-RV32-NEXT:    sh a1, 20(sp)
1508; LMULMAX2-RV32-NEXT:    vslidedown.vi v25, v25, 1
1509; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
1510; LMULMAX2-RV32-NEXT:    or a1, a1, a6
1511; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
1512; LMULMAX2-RV32-NEXT:    not a1, a1
1513; LMULMAX2-RV32-NEXT:    and a1, a1, a2
1514; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
1515; LMULMAX2-RV32-NEXT:    and a2, a2, a7
1516; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
1517; LMULMAX2-RV32-NEXT:    and a2, a1, a3
1518; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
1519; LMULMAX2-RV32-NEXT:    and a1, a1, a3
1520; LMULMAX2-RV32-NEXT:    add a1, a2, a1
1521; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
1522; LMULMAX2-RV32-NEXT:    add a1, a1, a2
1523; LMULMAX2-RV32-NEXT:    and a1, a1, a4
1524; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
1525; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
1526; LMULMAX2-RV32-NEXT:    sh a1, 18(sp)
1527; LMULMAX2-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1528; LMULMAX2-RV32-NEXT:    addi a1, sp, 16
1529; LMULMAX2-RV32-NEXT:    vle16.v v25, (a1)
1530; LMULMAX2-RV32-NEXT:    vse16.v v25, (a0)
1531; LMULMAX2-RV32-NEXT:    addi sp, sp, 32
1532; LMULMAX2-RV32-NEXT:    ret
1533;
1534; LMULMAX2-RV64-LABEL: cttz_v8i16:
1535; LMULMAX2-RV64:       # %bb.0:
1536; LMULMAX2-RV64-NEXT:    addi sp, sp, -32
1537; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 32
1538; LMULMAX2-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1539; LMULMAX2-RV64-NEXT:    vle16.v v25, (a0)
1540; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
1541; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 7
1542; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v26
1543; LMULMAX2-RV64-NEXT:    lui a6, 16
1544; LMULMAX2-RV64-NEXT:    or a2, a2, a6
1545; LMULMAX2-RV64-NEXT:    addi a3, a2, -1
1546; LMULMAX2-RV64-NEXT:    not a2, a2
1547; LMULMAX2-RV64-NEXT:    and a3, a2, a3
1548; LMULMAX2-RV64-NEXT:    srli a4, a3, 1
1549; LMULMAX2-RV64-NEXT:    lui a2, 21845
1550; LMULMAX2-RV64-NEXT:    addiw a2, a2, 1365
1551; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
1552; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
1553; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
1554; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
1555; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
1556; LMULMAX2-RV64-NEXT:    addi a7, a2, 1365
1557; LMULMAX2-RV64-NEXT:    and a4, a4, a7
1558; LMULMAX2-RV64-NEXT:    sub a4, a3, a4
1559; LMULMAX2-RV64-NEXT:    lui a3, 13107
1560; LMULMAX2-RV64-NEXT:    addiw a3, a3, 819
1561; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
1562; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
1563; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
1564; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
1565; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
1566; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
1567; LMULMAX2-RV64-NEXT:    and a5, a4, a3
1568; LMULMAX2-RV64-NEXT:    srli a4, a4, 2
1569; LMULMAX2-RV64-NEXT:    and a4, a4, a3
1570; LMULMAX2-RV64-NEXT:    add a4, a5, a4
1571; LMULMAX2-RV64-NEXT:    srli a5, a4, 4
1572; LMULMAX2-RV64-NEXT:    add a5, a4, a5
1573; LMULMAX2-RV64-NEXT:    lui a4, 3855
1574; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
1575; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
1576; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
1577; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
1578; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
1579; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
1580; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
1581; LMULMAX2-RV64-NEXT:    and a1, a5, a4
1582; LMULMAX2-RV64-NEXT:    lui a5, 4112
1583; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
1584; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
1585; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
1586; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
1587; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
1588; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1589; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1590; LMULMAX2-RV64-NEXT:    sh a1, 30(sp)
1591; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 6
1592; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1593; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1594; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1595; LMULMAX2-RV64-NEXT:    not a1, a1
1596; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1597; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1598; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1599; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1600; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1601; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1602; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1603; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1604; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1605; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1606; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1607; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1608; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1609; LMULMAX2-RV64-NEXT:    sh a1, 28(sp)
1610; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 5
1611; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1612; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1613; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1614; LMULMAX2-RV64-NEXT:    not a1, a1
1615; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1616; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1617; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1618; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1619; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1620; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1621; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1622; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1623; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1624; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1625; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1626; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1627; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1628; LMULMAX2-RV64-NEXT:    sh a1, 26(sp)
1629; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 4
1630; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1631; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1632; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1633; LMULMAX2-RV64-NEXT:    not a1, a1
1634; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1635; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1636; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1637; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1638; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1639; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1640; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1641; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1642; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1643; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1644; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1645; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1646; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1647; LMULMAX2-RV64-NEXT:    sh a1, 24(sp)
1648; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 3
1649; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1650; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1651; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1652; LMULMAX2-RV64-NEXT:    not a1, a1
1653; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1654; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1655; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1656; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1657; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1658; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1659; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1660; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1661; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1662; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1663; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1664; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1665; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1666; LMULMAX2-RV64-NEXT:    sh a1, 22(sp)
1667; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 2
1668; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1669; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1670; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1671; LMULMAX2-RV64-NEXT:    not a1, a1
1672; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1673; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1674; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1675; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1676; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1677; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1678; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1679; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1680; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1681; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1682; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1683; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1684; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1685; LMULMAX2-RV64-NEXT:    sh a1, 20(sp)
1686; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 1
1687; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
1688; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1689; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1690; LMULMAX2-RV64-NEXT:    not a1, a1
1691; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1692; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1693; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1694; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1695; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1696; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1697; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1698; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1699; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1700; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1701; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1702; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1703; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1704; LMULMAX2-RV64-NEXT:    sh a1, 18(sp)
1705; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
1706; LMULMAX2-RV64-NEXT:    or a1, a1, a6
1707; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
1708; LMULMAX2-RV64-NEXT:    not a1, a1
1709; LMULMAX2-RV64-NEXT:    and a1, a1, a2
1710; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
1711; LMULMAX2-RV64-NEXT:    and a2, a2, a7
1712; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
1713; LMULMAX2-RV64-NEXT:    and a2, a1, a3
1714; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
1715; LMULMAX2-RV64-NEXT:    and a1, a1, a3
1716; LMULMAX2-RV64-NEXT:    add a1, a2, a1
1717; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
1718; LMULMAX2-RV64-NEXT:    add a1, a1, a2
1719; LMULMAX2-RV64-NEXT:    and a1, a1, a4
1720; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
1721; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
1722; LMULMAX2-RV64-NEXT:    sh a1, 16(sp)
1723; LMULMAX2-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1724; LMULMAX2-RV64-NEXT:    addi a1, sp, 16
1725; LMULMAX2-RV64-NEXT:    vle16.v v25, (a1)
1726; LMULMAX2-RV64-NEXT:    vse16.v v25, (a0)
1727; LMULMAX2-RV64-NEXT:    addi sp, sp, 32
1728; LMULMAX2-RV64-NEXT:    ret
1729;
1730; LMULMAX1-RV32-LABEL: cttz_v8i16:
1731; LMULMAX1-RV32:       # %bb.0:
1732; LMULMAX1-RV32-NEXT:    addi sp, sp, -32
1733; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 32
1734; LMULMAX1-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1735; LMULMAX1-RV32-NEXT:    vle16.v v25, (a0)
1736; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v25
1737; LMULMAX1-RV32-NEXT:    lui a6, 16
1738; LMULMAX1-RV32-NEXT:    or a2, a2, a6
1739; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
1740; LMULMAX1-RV32-NEXT:    not a2, a2
1741; LMULMAX1-RV32-NEXT:    and a3, a2, a3
1742; LMULMAX1-RV32-NEXT:    srli a4, a3, 1
1743; LMULMAX1-RV32-NEXT:    lui a2, 349525
1744; LMULMAX1-RV32-NEXT:    addi a7, a2, 1365
1745; LMULMAX1-RV32-NEXT:    and a4, a4, a7
1746; LMULMAX1-RV32-NEXT:    sub a4, a3, a4
1747; LMULMAX1-RV32-NEXT:    lui a3, 209715
1748; LMULMAX1-RV32-NEXT:    addi a3, a3, 819
1749; LMULMAX1-RV32-NEXT:    and a5, a4, a3
1750; LMULMAX1-RV32-NEXT:    srli a4, a4, 2
1751; LMULMAX1-RV32-NEXT:    and a4, a4, a3
1752; LMULMAX1-RV32-NEXT:    add a4, a5, a4
1753; LMULMAX1-RV32-NEXT:    srli a5, a4, 4
1754; LMULMAX1-RV32-NEXT:    add a5, a4, a5
1755; LMULMAX1-RV32-NEXT:    lui a4, 61681
1756; LMULMAX1-RV32-NEXT:    addi a4, a4, -241
1757; LMULMAX1-RV32-NEXT:    and a1, a5, a4
1758; LMULMAX1-RV32-NEXT:    lui a5, 4112
1759; LMULMAX1-RV32-NEXT:    addi a5, a5, 257
1760; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1761; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1762; LMULMAX1-RV32-NEXT:    sh a1, 16(sp)
1763; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
1764; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 7
1765; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1766; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1767; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1768; LMULMAX1-RV32-NEXT:    not a1, a1
1769; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1770; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1771; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1772; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1773; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1774; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1775; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1776; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1777; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1778; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1779; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1780; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1781; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1782; LMULMAX1-RV32-NEXT:    sh a1, 30(sp)
1783; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 6
1784; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1785; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1786; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1787; LMULMAX1-RV32-NEXT:    not a1, a1
1788; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1789; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1790; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1791; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1792; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1793; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1794; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1795; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1796; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1797; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1798; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1799; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1800; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1801; LMULMAX1-RV32-NEXT:    sh a1, 28(sp)
1802; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 5
1803; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1804; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1805; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1806; LMULMAX1-RV32-NEXT:    not a1, a1
1807; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1808; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1809; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1810; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1811; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1812; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1813; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1814; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1815; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1816; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1817; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1818; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1819; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1820; LMULMAX1-RV32-NEXT:    sh a1, 26(sp)
1821; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 4
1822; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1823; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1824; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1825; LMULMAX1-RV32-NEXT:    not a1, a1
1826; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1827; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1828; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1829; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1830; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1831; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1832; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1833; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1834; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1835; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1836; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1837; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1838; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1839; LMULMAX1-RV32-NEXT:    sh a1, 24(sp)
1840; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
1841; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1842; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1843; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1844; LMULMAX1-RV32-NEXT:    not a1, a1
1845; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1846; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1847; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1848; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1849; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1850; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1851; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1852; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1853; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1854; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1855; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1856; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1857; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1858; LMULMAX1-RV32-NEXT:    sh a1, 22(sp)
1859; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
1860; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
1861; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1862; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1863; LMULMAX1-RV32-NEXT:    not a1, a1
1864; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1865; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1866; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1867; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1868; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1869; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1870; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1871; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1872; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1873; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1874; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1875; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1876; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1877; LMULMAX1-RV32-NEXT:    sh a1, 20(sp)
1878; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
1879; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
1880; LMULMAX1-RV32-NEXT:    or a1, a1, a6
1881; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
1882; LMULMAX1-RV32-NEXT:    not a1, a1
1883; LMULMAX1-RV32-NEXT:    and a1, a1, a2
1884; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
1885; LMULMAX1-RV32-NEXT:    and a2, a2, a7
1886; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
1887; LMULMAX1-RV32-NEXT:    and a2, a1, a3
1888; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
1889; LMULMAX1-RV32-NEXT:    and a1, a1, a3
1890; LMULMAX1-RV32-NEXT:    add a1, a2, a1
1891; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
1892; LMULMAX1-RV32-NEXT:    add a1, a1, a2
1893; LMULMAX1-RV32-NEXT:    and a1, a1, a4
1894; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
1895; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
1896; LMULMAX1-RV32-NEXT:    sh a1, 18(sp)
1897; LMULMAX1-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1898; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
1899; LMULMAX1-RV32-NEXT:    vle16.v v25, (a1)
1900; LMULMAX1-RV32-NEXT:    vse16.v v25, (a0)
1901; LMULMAX1-RV32-NEXT:    addi sp, sp, 32
1902; LMULMAX1-RV32-NEXT:    ret
1903;
1904; LMULMAX1-RV64-LABEL: cttz_v8i16:
1905; LMULMAX1-RV64:       # %bb.0:
1906; LMULMAX1-RV64-NEXT:    addi sp, sp, -32
1907; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 32
1908; LMULMAX1-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
1909; LMULMAX1-RV64-NEXT:    vle16.v v25, (a0)
1910; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
1911; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
1912; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
1913; LMULMAX1-RV64-NEXT:    lui a6, 16
1914; LMULMAX1-RV64-NEXT:    or a2, a2, a6
1915; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
1916; LMULMAX1-RV64-NEXT:    not a2, a2
1917; LMULMAX1-RV64-NEXT:    and a3, a2, a3
1918; LMULMAX1-RV64-NEXT:    srli a4, a3, 1
1919; LMULMAX1-RV64-NEXT:    lui a2, 21845
1920; LMULMAX1-RV64-NEXT:    addiw a2, a2, 1365
1921; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1922; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
1923; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1924; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
1925; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
1926; LMULMAX1-RV64-NEXT:    addi a7, a2, 1365
1927; LMULMAX1-RV64-NEXT:    and a4, a4, a7
1928; LMULMAX1-RV64-NEXT:    sub a4, a3, a4
1929; LMULMAX1-RV64-NEXT:    lui a3, 13107
1930; LMULMAX1-RV64-NEXT:    addiw a3, a3, 819
1931; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1932; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
1933; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1934; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
1935; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
1936; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
1937; LMULMAX1-RV64-NEXT:    and a5, a4, a3
1938; LMULMAX1-RV64-NEXT:    srli a4, a4, 2
1939; LMULMAX1-RV64-NEXT:    and a4, a4, a3
1940; LMULMAX1-RV64-NEXT:    add a4, a5, a4
1941; LMULMAX1-RV64-NEXT:    srli a5, a4, 4
1942; LMULMAX1-RV64-NEXT:    add a5, a4, a5
1943; LMULMAX1-RV64-NEXT:    lui a4, 3855
1944; LMULMAX1-RV64-NEXT:    addiw a4, a4, 241
1945; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
1946; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
1947; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
1948; LMULMAX1-RV64-NEXT:    addi a4, a4, 241
1949; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
1950; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
1951; LMULMAX1-RV64-NEXT:    and a1, a5, a4
1952; LMULMAX1-RV64-NEXT:    lui a5, 4112
1953; LMULMAX1-RV64-NEXT:    addiw a5, a5, 257
1954; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
1955; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
1956; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
1957; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
1958; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
1959; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1960; LMULMAX1-RV64-NEXT:    sh a1, 30(sp)
1961; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
1962; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1963; LMULMAX1-RV64-NEXT:    or a1, a1, a6
1964; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
1965; LMULMAX1-RV64-NEXT:    not a1, a1
1966; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1967; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
1968; LMULMAX1-RV64-NEXT:    and a2, a2, a7
1969; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
1970; LMULMAX1-RV64-NEXT:    and a2, a1, a3
1971; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1972; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1973; LMULMAX1-RV64-NEXT:    add a1, a2, a1
1974; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
1975; LMULMAX1-RV64-NEXT:    add a1, a1, a2
1976; LMULMAX1-RV64-NEXT:    and a1, a1, a4
1977; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
1978; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1979; LMULMAX1-RV64-NEXT:    sh a1, 28(sp)
1980; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
1981; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
1982; LMULMAX1-RV64-NEXT:    or a1, a1, a6
1983; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
1984; LMULMAX1-RV64-NEXT:    not a1, a1
1985; LMULMAX1-RV64-NEXT:    and a1, a1, a2
1986; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
1987; LMULMAX1-RV64-NEXT:    and a2, a2, a7
1988; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
1989; LMULMAX1-RV64-NEXT:    and a2, a1, a3
1990; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
1991; LMULMAX1-RV64-NEXT:    and a1, a1, a3
1992; LMULMAX1-RV64-NEXT:    add a1, a2, a1
1993; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
1994; LMULMAX1-RV64-NEXT:    add a1, a1, a2
1995; LMULMAX1-RV64-NEXT:    and a1, a1, a4
1996; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
1997; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
1998; LMULMAX1-RV64-NEXT:    sh a1, 26(sp)
1999; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
2000; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
2001; LMULMAX1-RV64-NEXT:    or a1, a1, a6
2002; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2003; LMULMAX1-RV64-NEXT:    not a1, a1
2004; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2005; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2006; LMULMAX1-RV64-NEXT:    and a2, a2, a7
2007; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2008; LMULMAX1-RV64-NEXT:    and a2, a1, a3
2009; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2010; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2011; LMULMAX1-RV64-NEXT:    add a1, a2, a1
2012; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2013; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2014; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2015; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2016; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2017; LMULMAX1-RV64-NEXT:    sh a1, 24(sp)
2018; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
2019; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
2020; LMULMAX1-RV64-NEXT:    or a1, a1, a6
2021; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2022; LMULMAX1-RV64-NEXT:    not a1, a1
2023; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2024; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2025; LMULMAX1-RV64-NEXT:    and a2, a2, a7
2026; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2027; LMULMAX1-RV64-NEXT:    and a2, a1, a3
2028; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2029; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2030; LMULMAX1-RV64-NEXT:    add a1, a2, a1
2031; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2032; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2033; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2034; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2035; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2036; LMULMAX1-RV64-NEXT:    sh a1, 22(sp)
2037; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
2038; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
2039; LMULMAX1-RV64-NEXT:    or a1, a1, a6
2040; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2041; LMULMAX1-RV64-NEXT:    not a1, a1
2042; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2043; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2044; LMULMAX1-RV64-NEXT:    and a2, a2, a7
2045; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2046; LMULMAX1-RV64-NEXT:    and a2, a1, a3
2047; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2048; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2049; LMULMAX1-RV64-NEXT:    add a1, a2, a1
2050; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2051; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2052; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2053; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2054; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2055; LMULMAX1-RV64-NEXT:    sh a1, 20(sp)
2056; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
2057; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
2058; LMULMAX1-RV64-NEXT:    or a1, a1, a6
2059; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2060; LMULMAX1-RV64-NEXT:    not a1, a1
2061; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2062; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2063; LMULMAX1-RV64-NEXT:    and a2, a2, a7
2064; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2065; LMULMAX1-RV64-NEXT:    and a2, a1, a3
2066; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2067; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2068; LMULMAX1-RV64-NEXT:    add a1, a2, a1
2069; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2070; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2071; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2072; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2073; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2074; LMULMAX1-RV64-NEXT:    sh a1, 18(sp)
2075; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
2076; LMULMAX1-RV64-NEXT:    or a1, a1, a6
2077; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2078; LMULMAX1-RV64-NEXT:    not a1, a1
2079; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2080; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2081; LMULMAX1-RV64-NEXT:    and a2, a2, a7
2082; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2083; LMULMAX1-RV64-NEXT:    and a2, a1, a3
2084; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2085; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2086; LMULMAX1-RV64-NEXT:    add a1, a2, a1
2087; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2088; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2089; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2090; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2091; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2092; LMULMAX1-RV64-NEXT:    sh a1, 16(sp)
2093; LMULMAX1-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
2094; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
2095; LMULMAX1-RV64-NEXT:    vle16.v v25, (a1)
2096; LMULMAX1-RV64-NEXT:    vse16.v v25, (a0)
2097; LMULMAX1-RV64-NEXT:    addi sp, sp, 32
2098; LMULMAX1-RV64-NEXT:    ret
2099  %a = load <8 x i16>, <8 x i16>* %x
2100  %b = load <8 x i16>, <8 x i16>* %y
2101  %c = call <8 x i16> @llvm.cttz.v8i16(<8 x i16> %a, i1 false)
2102  store <8 x i16> %c, <8 x i16>* %x
2103  ret void
2104}
2105declare <8 x i16> @llvm.cttz.v8i16(<8 x i16>, i1)
2106
2107define void @cttz_v4i32(<4 x i32>* %x, <4 x i32>* %y) {
2108; LMULMAX2-RV32-LABEL: cttz_v4i32:
2109; LMULMAX2-RV32:       # %bb.0:
2110; LMULMAX2-RV32-NEXT:    addi sp, sp, -32
2111; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 32
2112; LMULMAX2-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2113; LMULMAX2-RV32-NEXT:    vle32.v v25, (a0)
2114; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
2115; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
2116; LMULMAX2-RV32-NEXT:    not a1, a1
2117; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2118; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
2119; LMULMAX2-RV32-NEXT:    lui a3, 349525
2120; LMULMAX2-RV32-NEXT:    addi a6, a3, 1365
2121; LMULMAX2-RV32-NEXT:    and a2, a2, a6
2122; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
2123; LMULMAX2-RV32-NEXT:    lui a2, 209715
2124; LMULMAX2-RV32-NEXT:    addi a2, a2, 819
2125; LMULMAX2-RV32-NEXT:    and a4, a1, a2
2126; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2127; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2128; LMULMAX2-RV32-NEXT:    add a1, a4, a1
2129; LMULMAX2-RV32-NEXT:    srli a4, a1, 4
2130; LMULMAX2-RV32-NEXT:    add a1, a1, a4
2131; LMULMAX2-RV32-NEXT:    lui a4, 61681
2132; LMULMAX2-RV32-NEXT:    addi a4, a4, -241
2133; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2134; LMULMAX2-RV32-NEXT:    lui a5, 4112
2135; LMULMAX2-RV32-NEXT:    addi a5, a5, 257
2136; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2137; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2138; LMULMAX2-RV32-NEXT:    sw a1, 16(sp)
2139; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
2140; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 3
2141; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
2142; LMULMAX2-RV32-NEXT:    addi a3, a1, -1
2143; LMULMAX2-RV32-NEXT:    not a1, a1
2144; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2145; LMULMAX2-RV32-NEXT:    srli a3, a1, 1
2146; LMULMAX2-RV32-NEXT:    and a3, a3, a6
2147; LMULMAX2-RV32-NEXT:    sub a1, a1, a3
2148; LMULMAX2-RV32-NEXT:    and a3, a1, a2
2149; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2150; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2151; LMULMAX2-RV32-NEXT:    add a1, a3, a1
2152; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
2153; LMULMAX2-RV32-NEXT:    add a1, a1, a3
2154; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2155; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2156; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2157; LMULMAX2-RV32-NEXT:    sw a1, 28(sp)
2158; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v25, 2
2159; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
2160; LMULMAX2-RV32-NEXT:    addi a3, a1, -1
2161; LMULMAX2-RV32-NEXT:    not a1, a1
2162; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2163; LMULMAX2-RV32-NEXT:    srli a3, a1, 1
2164; LMULMAX2-RV32-NEXT:    and a3, a3, a6
2165; LMULMAX2-RV32-NEXT:    sub a1, a1, a3
2166; LMULMAX2-RV32-NEXT:    and a3, a1, a2
2167; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2168; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2169; LMULMAX2-RV32-NEXT:    add a1, a3, a1
2170; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
2171; LMULMAX2-RV32-NEXT:    add a1, a1, a3
2172; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2173; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2174; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2175; LMULMAX2-RV32-NEXT:    sw a1, 24(sp)
2176; LMULMAX2-RV32-NEXT:    vslidedown.vi v25, v25, 1
2177; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
2178; LMULMAX2-RV32-NEXT:    addi a3, a1, -1
2179; LMULMAX2-RV32-NEXT:    not a1, a1
2180; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2181; LMULMAX2-RV32-NEXT:    srli a3, a1, 1
2182; LMULMAX2-RV32-NEXT:    and a3, a3, a6
2183; LMULMAX2-RV32-NEXT:    sub a1, a1, a3
2184; LMULMAX2-RV32-NEXT:    and a3, a1, a2
2185; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2186; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2187; LMULMAX2-RV32-NEXT:    add a1, a3, a1
2188; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
2189; LMULMAX2-RV32-NEXT:    add a1, a1, a2
2190; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2191; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2192; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2193; LMULMAX2-RV32-NEXT:    sw a1, 20(sp)
2194; LMULMAX2-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2195; LMULMAX2-RV32-NEXT:    addi a1, sp, 16
2196; LMULMAX2-RV32-NEXT:    vle32.v v25, (a1)
2197; LMULMAX2-RV32-NEXT:    vse32.v v25, (a0)
2198; LMULMAX2-RV32-NEXT:    addi sp, sp, 32
2199; LMULMAX2-RV32-NEXT:    ret
2200;
2201; LMULMAX2-RV64-LABEL: cttz_v4i32:
2202; LMULMAX2-RV64:       # %bb.0:
2203; LMULMAX2-RV64-NEXT:    addi sp, sp, -32
2204; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 32
2205; LMULMAX2-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2206; LMULMAX2-RV64-NEXT:    vle32.v v25, (a0)
2207; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
2208; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 3
2209; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v26
2210; LMULMAX2-RV64-NEXT:    addi a1, zero, 1
2211; LMULMAX2-RV64-NEXT:    slli a6, a1, 32
2212; LMULMAX2-RV64-NEXT:    or a2, a2, a6
2213; LMULMAX2-RV64-NEXT:    addi a3, a2, -1
2214; LMULMAX2-RV64-NEXT:    not a2, a2
2215; LMULMAX2-RV64-NEXT:    and a3, a2, a3
2216; LMULMAX2-RV64-NEXT:    srli a4, a3, 1
2217; LMULMAX2-RV64-NEXT:    lui a2, 21845
2218; LMULMAX2-RV64-NEXT:    addiw a2, a2, 1365
2219; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2220; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
2221; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2222; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
2223; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2224; LMULMAX2-RV64-NEXT:    addi a7, a2, 1365
2225; LMULMAX2-RV64-NEXT:    and a4, a4, a7
2226; LMULMAX2-RV64-NEXT:    sub a4, a3, a4
2227; LMULMAX2-RV64-NEXT:    lui a3, 13107
2228; LMULMAX2-RV64-NEXT:    addiw a3, a3, 819
2229; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2230; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
2231; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2232; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
2233; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2234; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
2235; LMULMAX2-RV64-NEXT:    and a5, a4, a3
2236; LMULMAX2-RV64-NEXT:    srli a4, a4, 2
2237; LMULMAX2-RV64-NEXT:    and a4, a4, a3
2238; LMULMAX2-RV64-NEXT:    add a4, a5, a4
2239; LMULMAX2-RV64-NEXT:    srli a5, a4, 4
2240; LMULMAX2-RV64-NEXT:    add a4, a4, a5
2241; LMULMAX2-RV64-NEXT:    lui a5, 3855
2242; LMULMAX2-RV64-NEXT:    addiw a5, a5, 241
2243; LMULMAX2-RV64-NEXT:    slli a5, a5, 12
2244; LMULMAX2-RV64-NEXT:    addi a5, a5, -241
2245; LMULMAX2-RV64-NEXT:    slli a5, a5, 12
2246; LMULMAX2-RV64-NEXT:    addi a5, a5, 241
2247; LMULMAX2-RV64-NEXT:    slli a5, a5, 12
2248; LMULMAX2-RV64-NEXT:    addi a5, a5, -241
2249; LMULMAX2-RV64-NEXT:    and a4, a4, a5
2250; LMULMAX2-RV64-NEXT:    lui a1, 4112
2251; LMULMAX2-RV64-NEXT:    addiw a1, a1, 257
2252; LMULMAX2-RV64-NEXT:    slli a1, a1, 16
2253; LMULMAX2-RV64-NEXT:    addi a1, a1, 257
2254; LMULMAX2-RV64-NEXT:    slli a1, a1, 16
2255; LMULMAX2-RV64-NEXT:    addi a1, a1, 257
2256; LMULMAX2-RV64-NEXT:    mul a4, a4, a1
2257; LMULMAX2-RV64-NEXT:    srli a4, a4, 56
2258; LMULMAX2-RV64-NEXT:    sw a4, 28(sp)
2259; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 2
2260; LMULMAX2-RV64-NEXT:    vmv.x.s a4, v26
2261; LMULMAX2-RV64-NEXT:    or a4, a4, a6
2262; LMULMAX2-RV64-NEXT:    addi a2, a4, -1
2263; LMULMAX2-RV64-NEXT:    not a4, a4
2264; LMULMAX2-RV64-NEXT:    and a2, a4, a2
2265; LMULMAX2-RV64-NEXT:    srli a4, a2, 1
2266; LMULMAX2-RV64-NEXT:    and a4, a4, a7
2267; LMULMAX2-RV64-NEXT:    sub a2, a2, a4
2268; LMULMAX2-RV64-NEXT:    and a4, a2, a3
2269; LMULMAX2-RV64-NEXT:    srli a2, a2, 2
2270; LMULMAX2-RV64-NEXT:    and a2, a2, a3
2271; LMULMAX2-RV64-NEXT:    add a2, a4, a2
2272; LMULMAX2-RV64-NEXT:    srli a4, a2, 4
2273; LMULMAX2-RV64-NEXT:    add a2, a2, a4
2274; LMULMAX2-RV64-NEXT:    and a2, a2, a5
2275; LMULMAX2-RV64-NEXT:    mul a2, a2, a1
2276; LMULMAX2-RV64-NEXT:    srli a2, a2, 56
2277; LMULMAX2-RV64-NEXT:    sw a2, 24(sp)
2278; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 1
2279; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v26
2280; LMULMAX2-RV64-NEXT:    or a2, a2, a6
2281; LMULMAX2-RV64-NEXT:    addi a4, a2, -1
2282; LMULMAX2-RV64-NEXT:    not a2, a2
2283; LMULMAX2-RV64-NEXT:    and a2, a2, a4
2284; LMULMAX2-RV64-NEXT:    srli a4, a2, 1
2285; LMULMAX2-RV64-NEXT:    and a4, a4, a7
2286; LMULMAX2-RV64-NEXT:    sub a2, a2, a4
2287; LMULMAX2-RV64-NEXT:    and a4, a2, a3
2288; LMULMAX2-RV64-NEXT:    srli a2, a2, 2
2289; LMULMAX2-RV64-NEXT:    and a2, a2, a3
2290; LMULMAX2-RV64-NEXT:    add a2, a4, a2
2291; LMULMAX2-RV64-NEXT:    srli a4, a2, 4
2292; LMULMAX2-RV64-NEXT:    add a2, a2, a4
2293; LMULMAX2-RV64-NEXT:    and a2, a2, a5
2294; LMULMAX2-RV64-NEXT:    mul a2, a2, a1
2295; LMULMAX2-RV64-NEXT:    srli a2, a2, 56
2296; LMULMAX2-RV64-NEXT:    sw a2, 20(sp)
2297; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v25
2298; LMULMAX2-RV64-NEXT:    or a2, a2, a6
2299; LMULMAX2-RV64-NEXT:    addi a4, a2, -1
2300; LMULMAX2-RV64-NEXT:    not a2, a2
2301; LMULMAX2-RV64-NEXT:    and a2, a2, a4
2302; LMULMAX2-RV64-NEXT:    srli a4, a2, 1
2303; LMULMAX2-RV64-NEXT:    and a4, a4, a7
2304; LMULMAX2-RV64-NEXT:    sub a2, a2, a4
2305; LMULMAX2-RV64-NEXT:    and a4, a2, a3
2306; LMULMAX2-RV64-NEXT:    srli a2, a2, 2
2307; LMULMAX2-RV64-NEXT:    and a2, a2, a3
2308; LMULMAX2-RV64-NEXT:    add a2, a4, a2
2309; LMULMAX2-RV64-NEXT:    srli a3, a2, 4
2310; LMULMAX2-RV64-NEXT:    add a2, a2, a3
2311; LMULMAX2-RV64-NEXT:    and a2, a2, a5
2312; LMULMAX2-RV64-NEXT:    mul a1, a2, a1
2313; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
2314; LMULMAX2-RV64-NEXT:    sw a1, 16(sp)
2315; LMULMAX2-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2316; LMULMAX2-RV64-NEXT:    addi a1, sp, 16
2317; LMULMAX2-RV64-NEXT:    vle32.v v25, (a1)
2318; LMULMAX2-RV64-NEXT:    vse32.v v25, (a0)
2319; LMULMAX2-RV64-NEXT:    addi sp, sp, 32
2320; LMULMAX2-RV64-NEXT:    ret
2321;
2322; LMULMAX1-RV32-LABEL: cttz_v4i32:
2323; LMULMAX1-RV32:       # %bb.0:
2324; LMULMAX1-RV32-NEXT:    addi sp, sp, -32
2325; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 32
2326; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2327; LMULMAX1-RV32-NEXT:    vle32.v v25, (a0)
2328; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
2329; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
2330; LMULMAX1-RV32-NEXT:    not a1, a1
2331; LMULMAX1-RV32-NEXT:    and a1, a1, a2
2332; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
2333; LMULMAX1-RV32-NEXT:    lui a3, 349525
2334; LMULMAX1-RV32-NEXT:    addi a6, a3, 1365
2335; LMULMAX1-RV32-NEXT:    and a2, a2, a6
2336; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
2337; LMULMAX1-RV32-NEXT:    lui a2, 209715
2338; LMULMAX1-RV32-NEXT:    addi a2, a2, 819
2339; LMULMAX1-RV32-NEXT:    and a4, a1, a2
2340; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2341; LMULMAX1-RV32-NEXT:    and a1, a1, a2
2342; LMULMAX1-RV32-NEXT:    add a1, a4, a1
2343; LMULMAX1-RV32-NEXT:    srli a4, a1, 4
2344; LMULMAX1-RV32-NEXT:    add a1, a1, a4
2345; LMULMAX1-RV32-NEXT:    lui a4, 61681
2346; LMULMAX1-RV32-NEXT:    addi a4, a4, -241
2347; LMULMAX1-RV32-NEXT:    and a1, a1, a4
2348; LMULMAX1-RV32-NEXT:    lui a5, 4112
2349; LMULMAX1-RV32-NEXT:    addi a5, a5, 257
2350; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
2351; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2352; LMULMAX1-RV32-NEXT:    sw a1, 16(sp)
2353; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
2354; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
2355; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
2356; LMULMAX1-RV32-NEXT:    addi a3, a1, -1
2357; LMULMAX1-RV32-NEXT:    not a1, a1
2358; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2359; LMULMAX1-RV32-NEXT:    srli a3, a1, 1
2360; LMULMAX1-RV32-NEXT:    and a3, a3, a6
2361; LMULMAX1-RV32-NEXT:    sub a1, a1, a3
2362; LMULMAX1-RV32-NEXT:    and a3, a1, a2
2363; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2364; LMULMAX1-RV32-NEXT:    and a1, a1, a2
2365; LMULMAX1-RV32-NEXT:    add a1, a3, a1
2366; LMULMAX1-RV32-NEXT:    srli a3, a1, 4
2367; LMULMAX1-RV32-NEXT:    add a1, a1, a3
2368; LMULMAX1-RV32-NEXT:    and a1, a1, a4
2369; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
2370; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2371; LMULMAX1-RV32-NEXT:    sw a1, 28(sp)
2372; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
2373; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
2374; LMULMAX1-RV32-NEXT:    addi a3, a1, -1
2375; LMULMAX1-RV32-NEXT:    not a1, a1
2376; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2377; LMULMAX1-RV32-NEXT:    srli a3, a1, 1
2378; LMULMAX1-RV32-NEXT:    and a3, a3, a6
2379; LMULMAX1-RV32-NEXT:    sub a1, a1, a3
2380; LMULMAX1-RV32-NEXT:    and a3, a1, a2
2381; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2382; LMULMAX1-RV32-NEXT:    and a1, a1, a2
2383; LMULMAX1-RV32-NEXT:    add a1, a3, a1
2384; LMULMAX1-RV32-NEXT:    srli a3, a1, 4
2385; LMULMAX1-RV32-NEXT:    add a1, a1, a3
2386; LMULMAX1-RV32-NEXT:    and a1, a1, a4
2387; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
2388; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2389; LMULMAX1-RV32-NEXT:    sw a1, 24(sp)
2390; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
2391; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
2392; LMULMAX1-RV32-NEXT:    addi a3, a1, -1
2393; LMULMAX1-RV32-NEXT:    not a1, a1
2394; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2395; LMULMAX1-RV32-NEXT:    srli a3, a1, 1
2396; LMULMAX1-RV32-NEXT:    and a3, a3, a6
2397; LMULMAX1-RV32-NEXT:    sub a1, a1, a3
2398; LMULMAX1-RV32-NEXT:    and a3, a1, a2
2399; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2400; LMULMAX1-RV32-NEXT:    and a1, a1, a2
2401; LMULMAX1-RV32-NEXT:    add a1, a3, a1
2402; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
2403; LMULMAX1-RV32-NEXT:    add a1, a1, a2
2404; LMULMAX1-RV32-NEXT:    and a1, a1, a4
2405; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
2406; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2407; LMULMAX1-RV32-NEXT:    sw a1, 20(sp)
2408; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2409; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
2410; LMULMAX1-RV32-NEXT:    vle32.v v25, (a1)
2411; LMULMAX1-RV32-NEXT:    vse32.v v25, (a0)
2412; LMULMAX1-RV32-NEXT:    addi sp, sp, 32
2413; LMULMAX1-RV32-NEXT:    ret
2414;
2415; LMULMAX1-RV64-LABEL: cttz_v4i32:
2416; LMULMAX1-RV64:       # %bb.0:
2417; LMULMAX1-RV64-NEXT:    addi sp, sp, -32
2418; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 32
2419; LMULMAX1-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2420; LMULMAX1-RV64-NEXT:    vle32.v v25, (a0)
2421; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
2422; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
2423; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
2424; LMULMAX1-RV64-NEXT:    addi a1, zero, 1
2425; LMULMAX1-RV64-NEXT:    slli a6, a1, 32
2426; LMULMAX1-RV64-NEXT:    or a2, a2, a6
2427; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
2428; LMULMAX1-RV64-NEXT:    not a2, a2
2429; LMULMAX1-RV64-NEXT:    and a3, a2, a3
2430; LMULMAX1-RV64-NEXT:    srli a4, a3, 1
2431; LMULMAX1-RV64-NEXT:    lui a2, 21845
2432; LMULMAX1-RV64-NEXT:    addiw a2, a2, 1365
2433; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2434; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
2435; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2436; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
2437; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2438; LMULMAX1-RV64-NEXT:    addi a7, a2, 1365
2439; LMULMAX1-RV64-NEXT:    and a4, a4, a7
2440; LMULMAX1-RV64-NEXT:    sub a4, a3, a4
2441; LMULMAX1-RV64-NEXT:    lui a3, 13107
2442; LMULMAX1-RV64-NEXT:    addiw a3, a3, 819
2443; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2444; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
2445; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2446; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
2447; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2448; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
2449; LMULMAX1-RV64-NEXT:    and a5, a4, a3
2450; LMULMAX1-RV64-NEXT:    srli a4, a4, 2
2451; LMULMAX1-RV64-NEXT:    and a4, a4, a3
2452; LMULMAX1-RV64-NEXT:    add a4, a5, a4
2453; LMULMAX1-RV64-NEXT:    srli a5, a4, 4
2454; LMULMAX1-RV64-NEXT:    add a4, a4, a5
2455; LMULMAX1-RV64-NEXT:    lui a5, 3855
2456; LMULMAX1-RV64-NEXT:    addiw a5, a5, 241
2457; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
2458; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
2459; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
2460; LMULMAX1-RV64-NEXT:    addi a5, a5, 241
2461; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
2462; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
2463; LMULMAX1-RV64-NEXT:    and a4, a4, a5
2464; LMULMAX1-RV64-NEXT:    lui a1, 4112
2465; LMULMAX1-RV64-NEXT:    addiw a1, a1, 257
2466; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
2467; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
2468; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
2469; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
2470; LMULMAX1-RV64-NEXT:    mul a4, a4, a1
2471; LMULMAX1-RV64-NEXT:    srli a4, a4, 56
2472; LMULMAX1-RV64-NEXT:    sw a4, 28(sp)
2473; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
2474; LMULMAX1-RV64-NEXT:    vmv.x.s a4, v26
2475; LMULMAX1-RV64-NEXT:    or a4, a4, a6
2476; LMULMAX1-RV64-NEXT:    addi a2, a4, -1
2477; LMULMAX1-RV64-NEXT:    not a4, a4
2478; LMULMAX1-RV64-NEXT:    and a2, a4, a2
2479; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
2480; LMULMAX1-RV64-NEXT:    and a4, a4, a7
2481; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
2482; LMULMAX1-RV64-NEXT:    and a4, a2, a3
2483; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
2484; LMULMAX1-RV64-NEXT:    and a2, a2, a3
2485; LMULMAX1-RV64-NEXT:    add a2, a4, a2
2486; LMULMAX1-RV64-NEXT:    srli a4, a2, 4
2487; LMULMAX1-RV64-NEXT:    add a2, a2, a4
2488; LMULMAX1-RV64-NEXT:    and a2, a2, a5
2489; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
2490; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
2491; LMULMAX1-RV64-NEXT:    sw a2, 24(sp)
2492; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
2493; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
2494; LMULMAX1-RV64-NEXT:    or a2, a2, a6
2495; LMULMAX1-RV64-NEXT:    addi a4, a2, -1
2496; LMULMAX1-RV64-NEXT:    not a2, a2
2497; LMULMAX1-RV64-NEXT:    and a2, a2, a4
2498; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
2499; LMULMAX1-RV64-NEXT:    and a4, a4, a7
2500; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
2501; LMULMAX1-RV64-NEXT:    and a4, a2, a3
2502; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
2503; LMULMAX1-RV64-NEXT:    and a2, a2, a3
2504; LMULMAX1-RV64-NEXT:    add a2, a4, a2
2505; LMULMAX1-RV64-NEXT:    srli a4, a2, 4
2506; LMULMAX1-RV64-NEXT:    add a2, a2, a4
2507; LMULMAX1-RV64-NEXT:    and a2, a2, a5
2508; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
2509; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
2510; LMULMAX1-RV64-NEXT:    sw a2, 20(sp)
2511; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
2512; LMULMAX1-RV64-NEXT:    or a2, a2, a6
2513; LMULMAX1-RV64-NEXT:    addi a4, a2, -1
2514; LMULMAX1-RV64-NEXT:    not a2, a2
2515; LMULMAX1-RV64-NEXT:    and a2, a2, a4
2516; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
2517; LMULMAX1-RV64-NEXT:    and a4, a4, a7
2518; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
2519; LMULMAX1-RV64-NEXT:    and a4, a2, a3
2520; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
2521; LMULMAX1-RV64-NEXT:    and a2, a2, a3
2522; LMULMAX1-RV64-NEXT:    add a2, a4, a2
2523; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
2524; LMULMAX1-RV64-NEXT:    add a2, a2, a3
2525; LMULMAX1-RV64-NEXT:    and a2, a2, a5
2526; LMULMAX1-RV64-NEXT:    mul a1, a2, a1
2527; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2528; LMULMAX1-RV64-NEXT:    sw a1, 16(sp)
2529; LMULMAX1-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2530; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
2531; LMULMAX1-RV64-NEXT:    vle32.v v25, (a1)
2532; LMULMAX1-RV64-NEXT:    vse32.v v25, (a0)
2533; LMULMAX1-RV64-NEXT:    addi sp, sp, 32
2534; LMULMAX1-RV64-NEXT:    ret
2535  %a = load <4 x i32>, <4 x i32>* %x
2536  %b = load <4 x i32>, <4 x i32>* %y
2537  %c = call <4 x i32> @llvm.cttz.v4i32(<4 x i32> %a, i1 false)
2538  store <4 x i32> %c, <4 x i32>* %x
2539  ret void
2540}
2541declare <4 x i32> @llvm.cttz.v4i32(<4 x i32>, i1)
2542
2543define void @cttz_v2i64(<2 x i64>* %x, <2 x i64>* %y) {
2544; LMULMAX2-RV32-LABEL: cttz_v2i64:
2545; LMULMAX2-RV32:       # %bb.0:
2546; LMULMAX2-RV32-NEXT:    addi sp, sp, -32
2547; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 32
2548; LMULMAX2-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2549; LMULMAX2-RV32-NEXT:    vle64.v v25, (a0)
2550; LMULMAX2-RV32-NEXT:    sw zero, 28(sp)
2551; LMULMAX2-RV32-NEXT:    sw zero, 20(sp)
2552; LMULMAX2-RV32-NEXT:    addi a6, zero, 32
2553; LMULMAX2-RV32-NEXT:    lui a1, 349525
2554; LMULMAX2-RV32-NEXT:    addi a4, a1, 1365
2555; LMULMAX2-RV32-NEXT:    lui a1, 209715
2556; LMULMAX2-RV32-NEXT:    addi a3, a1, 819
2557; LMULMAX2-RV32-NEXT:    lui a1, 61681
2558; LMULMAX2-RV32-NEXT:    addi a7, a1, -241
2559; LMULMAX2-RV32-NEXT:    lui a2, 4112
2560; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v25
2561; LMULMAX2-RV32-NEXT:    addi a2, a2, 257
2562; LMULMAX2-RV32-NEXT:    bnez a5, .LBB3_2
2563; LMULMAX2-RV32-NEXT:  # %bb.1:
2564; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2565; LMULMAX2-RV32-NEXT:    vsrl.vx v26, v25, a6
2566; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
2567; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
2568; LMULMAX2-RV32-NEXT:    not a1, a1
2569; LMULMAX2-RV32-NEXT:    and a1, a1, a5
2570; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
2571; LMULMAX2-RV32-NEXT:    and a5, a5, a4
2572; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
2573; LMULMAX2-RV32-NEXT:    and a5, a1, a3
2574; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2575; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2576; LMULMAX2-RV32-NEXT:    add a1, a5, a1
2577; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
2578; LMULMAX2-RV32-NEXT:    add a1, a1, a5
2579; LMULMAX2-RV32-NEXT:    and a1, a1, a7
2580; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
2581; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2582; LMULMAX2-RV32-NEXT:    addi a5, a1, 32
2583; LMULMAX2-RV32-NEXT:    j .LBB3_3
2584; LMULMAX2-RV32-NEXT:  .LBB3_2:
2585; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
2586; LMULMAX2-RV32-NEXT:    not a5, a5
2587; LMULMAX2-RV32-NEXT:    and a1, a5, a1
2588; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
2589; LMULMAX2-RV32-NEXT:    and a5, a5, a4
2590; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
2591; LMULMAX2-RV32-NEXT:    and a5, a1, a3
2592; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2593; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2594; LMULMAX2-RV32-NEXT:    add a1, a5, a1
2595; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
2596; LMULMAX2-RV32-NEXT:    add a1, a1, a5
2597; LMULMAX2-RV32-NEXT:    and a1, a1, a7
2598; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
2599; LMULMAX2-RV32-NEXT:    srli a5, a1, 24
2600; LMULMAX2-RV32-NEXT:  .LBB3_3:
2601; LMULMAX2-RV32-NEXT:    sw a5, 16(sp)
2602; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2603; LMULMAX2-RV32-NEXT:    vslidedown.vi v25, v25, 1
2604; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v25
2605; LMULMAX2-RV32-NEXT:    bnez a5, .LBB3_5
2606; LMULMAX2-RV32-NEXT:  # %bb.4:
2607; LMULMAX2-RV32-NEXT:    vsrl.vx v25, v25, a6
2608; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v25
2609; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
2610; LMULMAX2-RV32-NEXT:    not a1, a1
2611; LMULMAX2-RV32-NEXT:    and a1, a1, a5
2612; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
2613; LMULMAX2-RV32-NEXT:    and a4, a5, a4
2614; LMULMAX2-RV32-NEXT:    sub a1, a1, a4
2615; LMULMAX2-RV32-NEXT:    and a4, a1, a3
2616; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2617; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2618; LMULMAX2-RV32-NEXT:    add a1, a4, a1
2619; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
2620; LMULMAX2-RV32-NEXT:    add a1, a1, a3
2621; LMULMAX2-RV32-NEXT:    and a1, a1, a7
2622; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
2623; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2624; LMULMAX2-RV32-NEXT:    addi a1, a1, 32
2625; LMULMAX2-RV32-NEXT:    j .LBB3_6
2626; LMULMAX2-RV32-NEXT:  .LBB3_5:
2627; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
2628; LMULMAX2-RV32-NEXT:    not a5, a5
2629; LMULMAX2-RV32-NEXT:    and a1, a5, a1
2630; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
2631; LMULMAX2-RV32-NEXT:    and a4, a5, a4
2632; LMULMAX2-RV32-NEXT:    sub a1, a1, a4
2633; LMULMAX2-RV32-NEXT:    and a4, a1, a3
2634; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2635; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2636; LMULMAX2-RV32-NEXT:    add a1, a4, a1
2637; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
2638; LMULMAX2-RV32-NEXT:    add a1, a1, a3
2639; LMULMAX2-RV32-NEXT:    and a1, a1, a7
2640; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
2641; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2642; LMULMAX2-RV32-NEXT:  .LBB3_6:
2643; LMULMAX2-RV32-NEXT:    sw a1, 24(sp)
2644; LMULMAX2-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2645; LMULMAX2-RV32-NEXT:    addi a1, sp, 16
2646; LMULMAX2-RV32-NEXT:    vle32.v v25, (a1)
2647; LMULMAX2-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2648; LMULMAX2-RV32-NEXT:    vse64.v v25, (a0)
2649; LMULMAX2-RV32-NEXT:    addi sp, sp, 32
2650; LMULMAX2-RV32-NEXT:    ret
2651;
2652; LMULMAX2-RV64-LABEL: cttz_v2i64:
2653; LMULMAX2-RV64:       # %bb.0:
2654; LMULMAX2-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2655; LMULMAX2-RV64-NEXT:    vle64.v v25, (a0)
2656; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2657; LMULMAX2-RV64-NEXT:    vslidedown.vi v26, v25, 1
2658; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
2659; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
2660; LMULMAX2-RV64-NEXT:    not a1, a1
2661; LMULMAX2-RV64-NEXT:    and a1, a1, a2
2662; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
2663; LMULMAX2-RV64-NEXT:    lui a3, 21845
2664; LMULMAX2-RV64-NEXT:    addiw a3, a3, 1365
2665; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2666; LMULMAX2-RV64-NEXT:    addi a3, a3, 1365
2667; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2668; LMULMAX2-RV64-NEXT:    addi a3, a3, 1365
2669; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
2670; LMULMAX2-RV64-NEXT:    addi a6, a3, 1365
2671; LMULMAX2-RV64-NEXT:    and a2, a2, a6
2672; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
2673; LMULMAX2-RV64-NEXT:    lui a2, 13107
2674; LMULMAX2-RV64-NEXT:    addiw a2, a2, 819
2675; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2676; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
2677; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2678; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
2679; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
2680; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
2681; LMULMAX2-RV64-NEXT:    and a4, a1, a2
2682; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
2683; LMULMAX2-RV64-NEXT:    and a1, a1, a2
2684; LMULMAX2-RV64-NEXT:    add a1, a4, a1
2685; LMULMAX2-RV64-NEXT:    srli a4, a1, 4
2686; LMULMAX2-RV64-NEXT:    add a1, a1, a4
2687; LMULMAX2-RV64-NEXT:    lui a4, 3855
2688; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
2689; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
2690; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
2691; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
2692; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
2693; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
2694; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
2695; LMULMAX2-RV64-NEXT:    and a1, a1, a4
2696; LMULMAX2-RV64-NEXT:    lui a5, 4112
2697; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
2698; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
2699; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
2700; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
2701; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
2702; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
2703; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
2704; LMULMAX2-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2705; LMULMAX2-RV64-NEXT:    vmv.v.x v26, a1
2706; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v25
2707; LMULMAX2-RV64-NEXT:    addi a3, a1, -1
2708; LMULMAX2-RV64-NEXT:    not a1, a1
2709; LMULMAX2-RV64-NEXT:    and a1, a1, a3
2710; LMULMAX2-RV64-NEXT:    srli a3, a1, 1
2711; LMULMAX2-RV64-NEXT:    and a3, a3, a6
2712; LMULMAX2-RV64-NEXT:    sub a1, a1, a3
2713; LMULMAX2-RV64-NEXT:    and a3, a1, a2
2714; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
2715; LMULMAX2-RV64-NEXT:    and a1, a1, a2
2716; LMULMAX2-RV64-NEXT:    add a1, a3, a1
2717; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
2718; LMULMAX2-RV64-NEXT:    add a1, a1, a2
2719; LMULMAX2-RV64-NEXT:    and a1, a1, a4
2720; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
2721; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
2722; LMULMAX2-RV64-NEXT:    vsetvli zero, zero, e64, m1, tu, mu
2723; LMULMAX2-RV64-NEXT:    vmv.s.x v26, a1
2724; LMULMAX2-RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
2725; LMULMAX2-RV64-NEXT:    vse64.v v26, (a0)
2726; LMULMAX2-RV64-NEXT:    ret
2727;
2728; LMULMAX1-RV32-LABEL: cttz_v2i64:
2729; LMULMAX1-RV32:       # %bb.0:
2730; LMULMAX1-RV32-NEXT:    addi sp, sp, -32
2731; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 32
2732; LMULMAX1-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2733; LMULMAX1-RV32-NEXT:    vle64.v v25, (a0)
2734; LMULMAX1-RV32-NEXT:    sw zero, 28(sp)
2735; LMULMAX1-RV32-NEXT:    sw zero, 20(sp)
2736; LMULMAX1-RV32-NEXT:    addi a6, zero, 32
2737; LMULMAX1-RV32-NEXT:    lui a1, 349525
2738; LMULMAX1-RV32-NEXT:    addi a4, a1, 1365
2739; LMULMAX1-RV32-NEXT:    lui a1, 209715
2740; LMULMAX1-RV32-NEXT:    addi a3, a1, 819
2741; LMULMAX1-RV32-NEXT:    lui a1, 61681
2742; LMULMAX1-RV32-NEXT:    addi a7, a1, -241
2743; LMULMAX1-RV32-NEXT:    lui a2, 4112
2744; LMULMAX1-RV32-NEXT:    vmv.x.s a5, v25
2745; LMULMAX1-RV32-NEXT:    addi a2, a2, 257
2746; LMULMAX1-RV32-NEXT:    bnez a5, .LBB3_2
2747; LMULMAX1-RV32-NEXT:  # %bb.1:
2748; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2749; LMULMAX1-RV32-NEXT:    vsrl.vx v26, v25, a6
2750; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
2751; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
2752; LMULMAX1-RV32-NEXT:    not a1, a1
2753; LMULMAX1-RV32-NEXT:    and a1, a1, a5
2754; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
2755; LMULMAX1-RV32-NEXT:    and a5, a5, a4
2756; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
2757; LMULMAX1-RV32-NEXT:    and a5, a1, a3
2758; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2759; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2760; LMULMAX1-RV32-NEXT:    add a1, a5, a1
2761; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
2762; LMULMAX1-RV32-NEXT:    add a1, a1, a5
2763; LMULMAX1-RV32-NEXT:    and a1, a1, a7
2764; LMULMAX1-RV32-NEXT:    mul a1, a1, a2
2765; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2766; LMULMAX1-RV32-NEXT:    addi a5, a1, 32
2767; LMULMAX1-RV32-NEXT:    j .LBB3_3
2768; LMULMAX1-RV32-NEXT:  .LBB3_2:
2769; LMULMAX1-RV32-NEXT:    addi a1, a5, -1
2770; LMULMAX1-RV32-NEXT:    not a5, a5
2771; LMULMAX1-RV32-NEXT:    and a1, a5, a1
2772; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
2773; LMULMAX1-RV32-NEXT:    and a5, a5, a4
2774; LMULMAX1-RV32-NEXT:    sub a1, a1, a5
2775; LMULMAX1-RV32-NEXT:    and a5, a1, a3
2776; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2777; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2778; LMULMAX1-RV32-NEXT:    add a1, a5, a1
2779; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
2780; LMULMAX1-RV32-NEXT:    add a1, a1, a5
2781; LMULMAX1-RV32-NEXT:    and a1, a1, a7
2782; LMULMAX1-RV32-NEXT:    mul a1, a1, a2
2783; LMULMAX1-RV32-NEXT:    srli a5, a1, 24
2784; LMULMAX1-RV32-NEXT:  .LBB3_3:
2785; LMULMAX1-RV32-NEXT:    sw a5, 16(sp)
2786; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2787; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
2788; LMULMAX1-RV32-NEXT:    vmv.x.s a5, v25
2789; LMULMAX1-RV32-NEXT:    bnez a5, .LBB3_5
2790; LMULMAX1-RV32-NEXT:  # %bb.4:
2791; LMULMAX1-RV32-NEXT:    vsrl.vx v25, v25, a6
2792; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
2793; LMULMAX1-RV32-NEXT:    addi a5, a1, -1
2794; LMULMAX1-RV32-NEXT:    not a1, a1
2795; LMULMAX1-RV32-NEXT:    and a1, a1, a5
2796; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
2797; LMULMAX1-RV32-NEXT:    and a4, a5, a4
2798; LMULMAX1-RV32-NEXT:    sub a1, a1, a4
2799; LMULMAX1-RV32-NEXT:    and a4, a1, a3
2800; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2801; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2802; LMULMAX1-RV32-NEXT:    add a1, a4, a1
2803; LMULMAX1-RV32-NEXT:    srli a3, a1, 4
2804; LMULMAX1-RV32-NEXT:    add a1, a1, a3
2805; LMULMAX1-RV32-NEXT:    and a1, a1, a7
2806; LMULMAX1-RV32-NEXT:    mul a1, a1, a2
2807; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2808; LMULMAX1-RV32-NEXT:    addi a1, a1, 32
2809; LMULMAX1-RV32-NEXT:    j .LBB3_6
2810; LMULMAX1-RV32-NEXT:  .LBB3_5:
2811; LMULMAX1-RV32-NEXT:    addi a1, a5, -1
2812; LMULMAX1-RV32-NEXT:    not a5, a5
2813; LMULMAX1-RV32-NEXT:    and a1, a5, a1
2814; LMULMAX1-RV32-NEXT:    srli a5, a1, 1
2815; LMULMAX1-RV32-NEXT:    and a4, a5, a4
2816; LMULMAX1-RV32-NEXT:    sub a1, a1, a4
2817; LMULMAX1-RV32-NEXT:    and a4, a1, a3
2818; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
2819; LMULMAX1-RV32-NEXT:    and a1, a1, a3
2820; LMULMAX1-RV32-NEXT:    add a1, a4, a1
2821; LMULMAX1-RV32-NEXT:    srli a3, a1, 4
2822; LMULMAX1-RV32-NEXT:    add a1, a1, a3
2823; LMULMAX1-RV32-NEXT:    and a1, a1, a7
2824; LMULMAX1-RV32-NEXT:    mul a1, a1, a2
2825; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
2826; LMULMAX1-RV32-NEXT:  .LBB3_6:
2827; LMULMAX1-RV32-NEXT:    sw a1, 24(sp)
2828; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
2829; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
2830; LMULMAX1-RV32-NEXT:    vle32.v v25, (a1)
2831; LMULMAX1-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2832; LMULMAX1-RV32-NEXT:    vse64.v v25, (a0)
2833; LMULMAX1-RV32-NEXT:    addi sp, sp, 32
2834; LMULMAX1-RV32-NEXT:    ret
2835;
2836; LMULMAX1-RV64-LABEL: cttz_v2i64:
2837; LMULMAX1-RV64:       # %bb.0:
2838; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2839; LMULMAX1-RV64-NEXT:    vle64.v v25, (a0)
2840; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
2841; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
2842; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
2843; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
2844; LMULMAX1-RV64-NEXT:    not a1, a1
2845; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2846; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
2847; LMULMAX1-RV64-NEXT:    lui a3, 21845
2848; LMULMAX1-RV64-NEXT:    addiw a3, a3, 1365
2849; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2850; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
2851; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2852; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
2853; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
2854; LMULMAX1-RV64-NEXT:    addi a6, a3, 1365
2855; LMULMAX1-RV64-NEXT:    and a2, a2, a6
2856; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
2857; LMULMAX1-RV64-NEXT:    lui a2, 13107
2858; LMULMAX1-RV64-NEXT:    addiw a2, a2, 819
2859; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2860; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
2861; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2862; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
2863; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
2864; LMULMAX1-RV64-NEXT:    addi a2, a2, 819
2865; LMULMAX1-RV64-NEXT:    and a4, a1, a2
2866; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2867; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2868; LMULMAX1-RV64-NEXT:    add a1, a4, a1
2869; LMULMAX1-RV64-NEXT:    srli a4, a1, 4
2870; LMULMAX1-RV64-NEXT:    add a1, a1, a4
2871; LMULMAX1-RV64-NEXT:    lui a4, 3855
2872; LMULMAX1-RV64-NEXT:    addiw a4, a4, 241
2873; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
2874; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
2875; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
2876; LMULMAX1-RV64-NEXT:    addi a4, a4, 241
2877; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
2878; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
2879; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2880; LMULMAX1-RV64-NEXT:    lui a5, 4112
2881; LMULMAX1-RV64-NEXT:    addiw a5, a5, 257
2882; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
2883; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
2884; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
2885; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
2886; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2887; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2888; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
2889; LMULMAX1-RV64-NEXT:    vmv.v.x v26, a1
2890; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
2891; LMULMAX1-RV64-NEXT:    addi a3, a1, -1
2892; LMULMAX1-RV64-NEXT:    not a1, a1
2893; LMULMAX1-RV64-NEXT:    and a1, a1, a3
2894; LMULMAX1-RV64-NEXT:    srli a3, a1, 1
2895; LMULMAX1-RV64-NEXT:    and a3, a3, a6
2896; LMULMAX1-RV64-NEXT:    sub a1, a1, a3
2897; LMULMAX1-RV64-NEXT:    and a3, a1, a2
2898; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
2899; LMULMAX1-RV64-NEXT:    and a1, a1, a2
2900; LMULMAX1-RV64-NEXT:    add a1, a3, a1
2901; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
2902; LMULMAX1-RV64-NEXT:    add a1, a1, a2
2903; LMULMAX1-RV64-NEXT:    and a1, a1, a4
2904; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
2905; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
2906; LMULMAX1-RV64-NEXT:    vsetvli zero, zero, e64, m1, tu, mu
2907; LMULMAX1-RV64-NEXT:    vmv.s.x v26, a1
2908; LMULMAX1-RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
2909; LMULMAX1-RV64-NEXT:    vse64.v v26, (a0)
2910; LMULMAX1-RV64-NEXT:    ret
2911  %a = load <2 x i64>, <2 x i64>* %x
2912  %b = load <2 x i64>, <2 x i64>* %y
2913  %c = call <2 x i64> @llvm.cttz.v2i64(<2 x i64> %a, i1 false)
2914  store <2 x i64> %c, <2 x i64>* %x
2915  ret void
2916}
2917declare <2 x i64> @llvm.cttz.v2i64(<2 x i64>, i1)
2918
2919define void @cttz_v32i8(<32 x i8>* %x, <32 x i8>* %y) {
2920; LMULMAX2-RV32-LABEL: cttz_v32i8:
2921; LMULMAX2-RV32:       # %bb.0:
2922; LMULMAX2-RV32-NEXT:    addi sp, sp, -96
2923; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 96
2924; LMULMAX2-RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
2925; LMULMAX2-RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
2926; LMULMAX2-RV32-NEXT:    .cfi_offset ra, -4
2927; LMULMAX2-RV32-NEXT:    .cfi_offset s0, -8
2928; LMULMAX2-RV32-NEXT:    addi s0, sp, 96
2929; LMULMAX2-RV32-NEXT:    .cfi_def_cfa s0, 0
2930; LMULMAX2-RV32-NEXT:    andi sp, sp, -32
2931; LMULMAX2-RV32-NEXT:    addi a6, zero, 32
2932; LMULMAX2-RV32-NEXT:    vsetvli zero, a6, e8, m2, ta, mu
2933; LMULMAX2-RV32-NEXT:    vle8.v v26, (a0)
2934; LMULMAX2-RV32-NEXT:    vmv.x.s a2, v26
2935; LMULMAX2-RV32-NEXT:    ori a2, a2, 256
2936; LMULMAX2-RV32-NEXT:    addi a3, a2, -1
2937; LMULMAX2-RV32-NEXT:    not a2, a2
2938; LMULMAX2-RV32-NEXT:    and a3, a2, a3
2939; LMULMAX2-RV32-NEXT:    srli a4, a3, 1
2940; LMULMAX2-RV32-NEXT:    lui a2, 349525
2941; LMULMAX2-RV32-NEXT:    addi a7, a2, 1365
2942; LMULMAX2-RV32-NEXT:    and a4, a4, a7
2943; LMULMAX2-RV32-NEXT:    sub a4, a3, a4
2944; LMULMAX2-RV32-NEXT:    lui a3, 209715
2945; LMULMAX2-RV32-NEXT:    addi a3, a3, 819
2946; LMULMAX2-RV32-NEXT:    and a5, a4, a3
2947; LMULMAX2-RV32-NEXT:    srli a4, a4, 2
2948; LMULMAX2-RV32-NEXT:    and a4, a4, a3
2949; LMULMAX2-RV32-NEXT:    add a4, a5, a4
2950; LMULMAX2-RV32-NEXT:    srli a5, a4, 4
2951; LMULMAX2-RV32-NEXT:    add a5, a4, a5
2952; LMULMAX2-RV32-NEXT:    lui a4, 61681
2953; LMULMAX2-RV32-NEXT:    addi a4, a4, -241
2954; LMULMAX2-RV32-NEXT:    and a1, a5, a4
2955; LMULMAX2-RV32-NEXT:    lui a5, 4112
2956; LMULMAX2-RV32-NEXT:    addi a5, a5, 257
2957; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2958; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2959; LMULMAX2-RV32-NEXT:    sb a1, 32(sp)
2960; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e8, m2, ta, mu
2961; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 31
2962; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
2963; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
2964; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
2965; LMULMAX2-RV32-NEXT:    not a1, a1
2966; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2967; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
2968; LMULMAX2-RV32-NEXT:    and a2, a2, a7
2969; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
2970; LMULMAX2-RV32-NEXT:    and a2, a1, a3
2971; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2972; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2973; LMULMAX2-RV32-NEXT:    add a1, a2, a1
2974; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
2975; LMULMAX2-RV32-NEXT:    add a1, a1, a2
2976; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2977; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2978; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2979; LMULMAX2-RV32-NEXT:    sb a1, 63(sp)
2980; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 30
2981; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
2982; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
2983; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
2984; LMULMAX2-RV32-NEXT:    not a1, a1
2985; LMULMAX2-RV32-NEXT:    and a1, a1, a2
2986; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
2987; LMULMAX2-RV32-NEXT:    and a2, a2, a7
2988; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
2989; LMULMAX2-RV32-NEXT:    and a2, a1, a3
2990; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
2991; LMULMAX2-RV32-NEXT:    and a1, a1, a3
2992; LMULMAX2-RV32-NEXT:    add a1, a2, a1
2993; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
2994; LMULMAX2-RV32-NEXT:    add a1, a1, a2
2995; LMULMAX2-RV32-NEXT:    and a1, a1, a4
2996; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
2997; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
2998; LMULMAX2-RV32-NEXT:    sb a1, 62(sp)
2999; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 29
3000; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3001; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3002; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3003; LMULMAX2-RV32-NEXT:    not a1, a1
3004; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3005; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3006; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3007; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3008; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3009; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3010; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3011; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3012; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3013; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3014; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3015; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3016; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3017; LMULMAX2-RV32-NEXT:    sb a1, 61(sp)
3018; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 28
3019; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3020; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3021; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3022; LMULMAX2-RV32-NEXT:    not a1, a1
3023; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3024; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3025; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3026; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3027; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3028; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3029; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3030; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3031; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3032; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3033; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3034; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3035; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3036; LMULMAX2-RV32-NEXT:    sb a1, 60(sp)
3037; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 27
3038; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3039; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3040; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3041; LMULMAX2-RV32-NEXT:    not a1, a1
3042; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3043; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3044; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3045; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3046; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3047; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3048; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3049; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3050; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3051; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3052; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3053; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3054; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3055; LMULMAX2-RV32-NEXT:    sb a1, 59(sp)
3056; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 26
3057; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3058; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3059; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3060; LMULMAX2-RV32-NEXT:    not a1, a1
3061; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3062; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3063; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3064; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3065; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3066; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3067; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3068; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3069; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3070; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3071; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3072; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3073; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3074; LMULMAX2-RV32-NEXT:    sb a1, 58(sp)
3075; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 25
3076; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3077; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3078; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3079; LMULMAX2-RV32-NEXT:    not a1, a1
3080; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3081; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3082; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3083; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3084; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3085; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3086; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3087; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3088; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3089; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3090; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3091; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3092; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3093; LMULMAX2-RV32-NEXT:    sb a1, 57(sp)
3094; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 24
3095; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3096; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3097; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3098; LMULMAX2-RV32-NEXT:    not a1, a1
3099; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3100; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3101; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3102; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3103; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3104; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3105; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3106; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3107; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3108; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3109; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3110; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3111; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3112; LMULMAX2-RV32-NEXT:    sb a1, 56(sp)
3113; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 23
3114; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3115; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3116; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3117; LMULMAX2-RV32-NEXT:    not a1, a1
3118; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3119; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3120; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3121; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3122; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3123; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3124; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3125; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3126; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3127; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3128; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3129; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3130; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3131; LMULMAX2-RV32-NEXT:    sb a1, 55(sp)
3132; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 22
3133; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3134; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3135; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3136; LMULMAX2-RV32-NEXT:    not a1, a1
3137; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3138; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3139; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3140; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3141; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3142; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3143; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3144; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3145; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3146; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3147; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3148; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3149; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3150; LMULMAX2-RV32-NEXT:    sb a1, 54(sp)
3151; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 21
3152; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3153; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3154; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3155; LMULMAX2-RV32-NEXT:    not a1, a1
3156; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3157; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3158; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3159; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3160; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3161; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3162; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3163; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3164; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3165; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3166; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3167; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3168; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3169; LMULMAX2-RV32-NEXT:    sb a1, 53(sp)
3170; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 20
3171; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3172; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3173; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3174; LMULMAX2-RV32-NEXT:    not a1, a1
3175; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3176; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3177; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3178; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3179; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3180; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3181; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3182; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3183; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3184; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3185; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3186; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3187; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3188; LMULMAX2-RV32-NEXT:    sb a1, 52(sp)
3189; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 19
3190; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3191; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3192; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3193; LMULMAX2-RV32-NEXT:    not a1, a1
3194; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3195; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3196; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3197; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3198; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3199; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3200; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3201; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3202; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3203; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3204; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3205; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3206; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3207; LMULMAX2-RV32-NEXT:    sb a1, 51(sp)
3208; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 18
3209; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3210; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3211; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3212; LMULMAX2-RV32-NEXT:    not a1, a1
3213; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3214; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3215; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3216; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3217; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3218; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3219; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3220; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3221; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3222; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3223; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3224; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3225; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3226; LMULMAX2-RV32-NEXT:    sb a1, 50(sp)
3227; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 17
3228; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3229; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3230; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3231; LMULMAX2-RV32-NEXT:    not a1, a1
3232; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3233; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3234; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3235; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3236; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3237; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3238; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3239; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3240; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3241; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3242; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3243; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3244; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3245; LMULMAX2-RV32-NEXT:    sb a1, 49(sp)
3246; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 16
3247; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3248; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3249; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3250; LMULMAX2-RV32-NEXT:    not a1, a1
3251; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3252; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3253; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3254; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3255; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3256; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3257; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3258; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3259; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3260; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3261; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3262; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3263; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3264; LMULMAX2-RV32-NEXT:    sb a1, 48(sp)
3265; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 15
3266; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3267; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3268; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3269; LMULMAX2-RV32-NEXT:    not a1, a1
3270; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3271; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3272; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3273; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3274; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3275; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3276; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3277; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3278; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3279; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3280; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3281; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3282; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3283; LMULMAX2-RV32-NEXT:    sb a1, 47(sp)
3284; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 14
3285; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3286; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3287; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3288; LMULMAX2-RV32-NEXT:    not a1, a1
3289; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3290; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3291; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3292; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3293; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3294; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3295; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3296; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3297; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3298; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3299; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3300; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3301; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3302; LMULMAX2-RV32-NEXT:    sb a1, 46(sp)
3303; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 13
3304; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3305; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3306; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3307; LMULMAX2-RV32-NEXT:    not a1, a1
3308; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3309; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3310; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3311; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3312; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3313; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3314; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3315; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3316; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3317; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3318; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3319; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3320; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3321; LMULMAX2-RV32-NEXT:    sb a1, 45(sp)
3322; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 12
3323; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3324; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3325; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3326; LMULMAX2-RV32-NEXT:    not a1, a1
3327; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3328; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3329; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3330; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3331; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3332; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3333; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3334; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3335; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3336; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3337; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3338; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3339; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3340; LMULMAX2-RV32-NEXT:    sb a1, 44(sp)
3341; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 11
3342; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3343; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3344; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3345; LMULMAX2-RV32-NEXT:    not a1, a1
3346; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3347; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3348; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3349; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3350; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3351; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3352; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3353; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3354; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3355; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3356; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3357; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3358; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3359; LMULMAX2-RV32-NEXT:    sb a1, 43(sp)
3360; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 10
3361; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3362; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3363; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3364; LMULMAX2-RV32-NEXT:    not a1, a1
3365; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3366; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3367; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3368; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3369; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3370; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3371; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3372; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3373; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3374; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3375; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3376; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3377; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3378; LMULMAX2-RV32-NEXT:    sb a1, 42(sp)
3379; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 9
3380; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3381; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3382; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3383; LMULMAX2-RV32-NEXT:    not a1, a1
3384; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3385; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3386; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3387; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3388; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3389; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3390; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3391; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3392; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3393; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3394; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3395; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3396; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3397; LMULMAX2-RV32-NEXT:    sb a1, 41(sp)
3398; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 8
3399; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3400; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3401; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3402; LMULMAX2-RV32-NEXT:    not a1, a1
3403; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3404; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3405; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3406; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3407; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3408; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3409; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3410; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3411; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3412; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3413; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3414; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3415; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3416; LMULMAX2-RV32-NEXT:    sb a1, 40(sp)
3417; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 7
3418; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3419; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3420; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3421; LMULMAX2-RV32-NEXT:    not a1, a1
3422; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3423; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3424; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3425; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3426; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3427; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3428; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3429; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3430; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3431; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3432; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3433; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3434; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3435; LMULMAX2-RV32-NEXT:    sb a1, 39(sp)
3436; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 6
3437; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3438; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3439; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3440; LMULMAX2-RV32-NEXT:    not a1, a1
3441; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3442; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3443; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3444; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3445; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3446; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3447; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3448; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3449; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3450; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3451; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3452; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3453; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3454; LMULMAX2-RV32-NEXT:    sb a1, 38(sp)
3455; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 5
3456; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3457; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3458; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3459; LMULMAX2-RV32-NEXT:    not a1, a1
3460; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3461; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3462; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3463; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3464; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3465; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3466; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3467; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3468; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3469; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3470; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3471; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3472; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3473; LMULMAX2-RV32-NEXT:    sb a1, 37(sp)
3474; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 4
3475; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3476; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3477; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3478; LMULMAX2-RV32-NEXT:    not a1, a1
3479; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3480; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3481; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3482; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3483; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3484; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3485; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3486; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3487; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3488; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3489; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3490; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3491; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3492; LMULMAX2-RV32-NEXT:    sb a1, 36(sp)
3493; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 3
3494; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3495; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3496; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3497; LMULMAX2-RV32-NEXT:    not a1, a1
3498; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3499; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3500; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3501; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3502; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3503; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3504; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3505; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3506; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3507; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3508; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3509; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3510; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3511; LMULMAX2-RV32-NEXT:    sb a1, 35(sp)
3512; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 2
3513; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
3514; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3515; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3516; LMULMAX2-RV32-NEXT:    not a1, a1
3517; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3518; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3519; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3520; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3521; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3522; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3523; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3524; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3525; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3526; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3527; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3528; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3529; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3530; LMULMAX2-RV32-NEXT:    sb a1, 34(sp)
3531; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v26, 1
3532; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
3533; LMULMAX2-RV32-NEXT:    ori a1, a1, 256
3534; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
3535; LMULMAX2-RV32-NEXT:    not a1, a1
3536; LMULMAX2-RV32-NEXT:    and a1, a1, a2
3537; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
3538; LMULMAX2-RV32-NEXT:    and a2, a2, a7
3539; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
3540; LMULMAX2-RV32-NEXT:    and a2, a1, a3
3541; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
3542; LMULMAX2-RV32-NEXT:    and a1, a1, a3
3543; LMULMAX2-RV32-NEXT:    add a1, a2, a1
3544; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
3545; LMULMAX2-RV32-NEXT:    add a1, a1, a2
3546; LMULMAX2-RV32-NEXT:    and a1, a1, a4
3547; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
3548; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
3549; LMULMAX2-RV32-NEXT:    sb a1, 33(sp)
3550; LMULMAX2-RV32-NEXT:    vsetvli zero, a6, e8, m2, ta, mu
3551; LMULMAX2-RV32-NEXT:    addi a1, sp, 32
3552; LMULMAX2-RV32-NEXT:    vle8.v v26, (a1)
3553; LMULMAX2-RV32-NEXT:    vse8.v v26, (a0)
3554; LMULMAX2-RV32-NEXT:    addi sp, s0, -96
3555; LMULMAX2-RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
3556; LMULMAX2-RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
3557; LMULMAX2-RV32-NEXT:    addi sp, sp, 96
3558; LMULMAX2-RV32-NEXT:    ret
3559;
3560; LMULMAX2-RV64-LABEL: cttz_v32i8:
3561; LMULMAX2-RV64:       # %bb.0:
3562; LMULMAX2-RV64-NEXT:    addi sp, sp, -96
3563; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 96
3564; LMULMAX2-RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
3565; LMULMAX2-RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
3566; LMULMAX2-RV64-NEXT:    .cfi_offset ra, -8
3567; LMULMAX2-RV64-NEXT:    .cfi_offset s0, -16
3568; LMULMAX2-RV64-NEXT:    addi s0, sp, 96
3569; LMULMAX2-RV64-NEXT:    .cfi_def_cfa s0, 0
3570; LMULMAX2-RV64-NEXT:    andi sp, sp, -32
3571; LMULMAX2-RV64-NEXT:    addi a6, zero, 32
3572; LMULMAX2-RV64-NEXT:    vsetvli zero, a6, e8, m2, ta, mu
3573; LMULMAX2-RV64-NEXT:    vle8.v v26, (a0)
3574; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e8, m2, ta, mu
3575; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 31
3576; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v28
3577; LMULMAX2-RV64-NEXT:    ori a2, a2, 256
3578; LMULMAX2-RV64-NEXT:    addi a3, a2, -1
3579; LMULMAX2-RV64-NEXT:    not a2, a2
3580; LMULMAX2-RV64-NEXT:    and a3, a2, a3
3581; LMULMAX2-RV64-NEXT:    srli a4, a3, 1
3582; LMULMAX2-RV64-NEXT:    lui a2, 21845
3583; LMULMAX2-RV64-NEXT:    addiw a2, a2, 1365
3584; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
3585; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
3586; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
3587; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
3588; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
3589; LMULMAX2-RV64-NEXT:    addi a7, a2, 1365
3590; LMULMAX2-RV64-NEXT:    and a4, a4, a7
3591; LMULMAX2-RV64-NEXT:    sub a4, a3, a4
3592; LMULMAX2-RV64-NEXT:    lui a3, 13107
3593; LMULMAX2-RV64-NEXT:    addiw a3, a3, 819
3594; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
3595; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
3596; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
3597; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
3598; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
3599; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
3600; LMULMAX2-RV64-NEXT:    and a5, a4, a3
3601; LMULMAX2-RV64-NEXT:    srli a4, a4, 2
3602; LMULMAX2-RV64-NEXT:    and a4, a4, a3
3603; LMULMAX2-RV64-NEXT:    add a4, a5, a4
3604; LMULMAX2-RV64-NEXT:    srli a5, a4, 4
3605; LMULMAX2-RV64-NEXT:    add a5, a4, a5
3606; LMULMAX2-RV64-NEXT:    lui a4, 3855
3607; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
3608; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
3609; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
3610; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
3611; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
3612; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
3613; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
3614; LMULMAX2-RV64-NEXT:    and a1, a5, a4
3615; LMULMAX2-RV64-NEXT:    lui a5, 4112
3616; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
3617; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
3618; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
3619; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
3620; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
3621; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3622; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3623; LMULMAX2-RV64-NEXT:    sb a1, 63(sp)
3624; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 30
3625; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3626; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3627; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3628; LMULMAX2-RV64-NEXT:    not a1, a1
3629; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3630; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3631; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3632; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3633; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3634; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3635; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3636; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3637; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3638; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3639; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3640; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3641; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3642; LMULMAX2-RV64-NEXT:    sb a1, 62(sp)
3643; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 29
3644; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3645; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3646; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3647; LMULMAX2-RV64-NEXT:    not a1, a1
3648; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3649; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3650; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3651; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3652; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3653; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3654; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3655; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3656; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3657; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3658; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3659; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3660; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3661; LMULMAX2-RV64-NEXT:    sb a1, 61(sp)
3662; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 28
3663; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3664; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3665; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3666; LMULMAX2-RV64-NEXT:    not a1, a1
3667; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3668; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3669; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3670; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3671; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3672; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3673; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3674; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3675; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3676; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3677; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3678; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3679; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3680; LMULMAX2-RV64-NEXT:    sb a1, 60(sp)
3681; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 27
3682; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3683; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3684; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3685; LMULMAX2-RV64-NEXT:    not a1, a1
3686; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3687; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3688; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3689; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3690; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3691; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3692; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3693; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3694; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3695; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3696; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3697; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3698; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3699; LMULMAX2-RV64-NEXT:    sb a1, 59(sp)
3700; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 26
3701; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3702; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3703; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3704; LMULMAX2-RV64-NEXT:    not a1, a1
3705; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3706; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3707; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3708; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3709; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3710; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3711; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3712; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3713; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3714; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3715; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3716; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3717; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3718; LMULMAX2-RV64-NEXT:    sb a1, 58(sp)
3719; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 25
3720; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3721; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3722; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3723; LMULMAX2-RV64-NEXT:    not a1, a1
3724; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3725; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3726; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3727; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3728; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3729; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3730; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3731; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3732; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3733; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3734; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3735; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3736; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3737; LMULMAX2-RV64-NEXT:    sb a1, 57(sp)
3738; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 24
3739; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3740; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3741; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3742; LMULMAX2-RV64-NEXT:    not a1, a1
3743; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3744; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3745; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3746; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3747; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3748; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3749; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3750; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3751; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3752; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3753; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3754; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3755; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3756; LMULMAX2-RV64-NEXT:    sb a1, 56(sp)
3757; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 23
3758; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3759; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3760; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3761; LMULMAX2-RV64-NEXT:    not a1, a1
3762; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3763; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3764; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3765; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3766; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3767; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3768; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3769; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3770; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3771; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3772; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3773; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3774; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3775; LMULMAX2-RV64-NEXT:    sb a1, 55(sp)
3776; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 22
3777; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3778; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3779; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3780; LMULMAX2-RV64-NEXT:    not a1, a1
3781; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3782; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3783; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3784; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3785; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3786; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3787; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3788; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3789; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3790; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3791; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3792; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3793; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3794; LMULMAX2-RV64-NEXT:    sb a1, 54(sp)
3795; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 21
3796; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3797; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3798; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3799; LMULMAX2-RV64-NEXT:    not a1, a1
3800; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3801; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3802; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3803; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3804; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3805; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3806; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3807; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3808; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3809; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3810; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3811; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3812; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3813; LMULMAX2-RV64-NEXT:    sb a1, 53(sp)
3814; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 20
3815; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3816; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3817; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3818; LMULMAX2-RV64-NEXT:    not a1, a1
3819; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3820; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3821; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3822; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3823; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3824; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3825; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3826; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3827; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3828; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3829; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3830; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3831; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3832; LMULMAX2-RV64-NEXT:    sb a1, 52(sp)
3833; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 19
3834; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3835; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3836; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3837; LMULMAX2-RV64-NEXT:    not a1, a1
3838; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3839; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3840; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3841; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3842; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3843; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3844; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3845; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3846; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3847; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3848; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3849; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3850; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3851; LMULMAX2-RV64-NEXT:    sb a1, 51(sp)
3852; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 18
3853; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3854; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3855; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3856; LMULMAX2-RV64-NEXT:    not a1, a1
3857; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3858; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3859; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3860; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3861; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3862; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3863; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3864; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3865; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3866; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3867; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3868; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3869; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3870; LMULMAX2-RV64-NEXT:    sb a1, 50(sp)
3871; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 17
3872; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3873; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3874; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3875; LMULMAX2-RV64-NEXT:    not a1, a1
3876; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3877; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3878; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3879; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3880; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3881; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3882; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3883; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3884; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3885; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3886; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3887; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3888; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3889; LMULMAX2-RV64-NEXT:    sb a1, 49(sp)
3890; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 16
3891; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3892; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3893; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3894; LMULMAX2-RV64-NEXT:    not a1, a1
3895; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3896; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3897; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3898; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3899; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3900; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3901; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3902; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3903; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3904; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3905; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3906; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3907; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3908; LMULMAX2-RV64-NEXT:    sb a1, 48(sp)
3909; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 15
3910; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3911; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3912; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3913; LMULMAX2-RV64-NEXT:    not a1, a1
3914; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3915; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3916; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3917; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3918; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3919; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3920; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3921; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3922; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3923; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3924; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3925; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3926; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3927; LMULMAX2-RV64-NEXT:    sb a1, 47(sp)
3928; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 14
3929; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3930; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3931; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3932; LMULMAX2-RV64-NEXT:    not a1, a1
3933; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3934; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3935; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3936; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3937; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3938; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3939; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3940; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3941; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3942; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3943; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3944; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3945; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3946; LMULMAX2-RV64-NEXT:    sb a1, 46(sp)
3947; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 13
3948; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3949; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3950; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3951; LMULMAX2-RV64-NEXT:    not a1, a1
3952; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3953; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3954; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3955; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3956; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3957; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3958; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3959; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3960; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3961; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3962; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3963; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3964; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3965; LMULMAX2-RV64-NEXT:    sb a1, 45(sp)
3966; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 12
3967; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3968; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3969; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3970; LMULMAX2-RV64-NEXT:    not a1, a1
3971; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3972; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3973; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3974; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3975; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3976; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3977; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3978; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3979; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3980; LMULMAX2-RV64-NEXT:    add a1, a1, a2
3981; LMULMAX2-RV64-NEXT:    and a1, a1, a4
3982; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
3983; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
3984; LMULMAX2-RV64-NEXT:    sb a1, 44(sp)
3985; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 11
3986; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
3987; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
3988; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
3989; LMULMAX2-RV64-NEXT:    not a1, a1
3990; LMULMAX2-RV64-NEXT:    and a1, a1, a2
3991; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
3992; LMULMAX2-RV64-NEXT:    and a2, a2, a7
3993; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
3994; LMULMAX2-RV64-NEXT:    and a2, a1, a3
3995; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
3996; LMULMAX2-RV64-NEXT:    and a1, a1, a3
3997; LMULMAX2-RV64-NEXT:    add a1, a2, a1
3998; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
3999; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4000; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4001; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4002; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4003; LMULMAX2-RV64-NEXT:    sb a1, 43(sp)
4004; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 10
4005; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4006; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4007; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4008; LMULMAX2-RV64-NEXT:    not a1, a1
4009; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4010; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4011; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4012; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4013; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4014; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4015; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4016; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4017; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4018; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4019; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4020; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4021; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4022; LMULMAX2-RV64-NEXT:    sb a1, 42(sp)
4023; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 9
4024; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4025; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4026; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4027; LMULMAX2-RV64-NEXT:    not a1, a1
4028; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4029; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4030; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4031; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4032; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4033; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4034; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4035; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4036; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4037; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4038; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4039; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4040; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4041; LMULMAX2-RV64-NEXT:    sb a1, 41(sp)
4042; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 8
4043; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4044; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4045; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4046; LMULMAX2-RV64-NEXT:    not a1, a1
4047; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4048; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4049; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4050; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4051; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4052; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4053; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4054; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4055; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4056; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4057; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4058; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4059; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4060; LMULMAX2-RV64-NEXT:    sb a1, 40(sp)
4061; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 7
4062; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4063; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4064; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4065; LMULMAX2-RV64-NEXT:    not a1, a1
4066; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4067; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4068; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4069; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4070; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4071; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4072; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4073; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4074; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4075; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4076; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4077; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4078; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4079; LMULMAX2-RV64-NEXT:    sb a1, 39(sp)
4080; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 6
4081; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4082; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4083; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4084; LMULMAX2-RV64-NEXT:    not a1, a1
4085; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4086; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4087; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4088; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4089; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4090; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4091; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4092; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4093; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4094; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4095; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4096; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4097; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4098; LMULMAX2-RV64-NEXT:    sb a1, 38(sp)
4099; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 5
4100; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4101; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4102; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4103; LMULMAX2-RV64-NEXT:    not a1, a1
4104; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4105; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4106; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4107; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4108; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4109; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4110; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4111; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4112; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4113; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4114; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4115; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4116; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4117; LMULMAX2-RV64-NEXT:    sb a1, 37(sp)
4118; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 4
4119; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4120; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4121; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4122; LMULMAX2-RV64-NEXT:    not a1, a1
4123; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4124; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4125; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4126; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4127; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4128; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4129; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4130; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4131; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4132; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4133; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4134; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4135; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4136; LMULMAX2-RV64-NEXT:    sb a1, 36(sp)
4137; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
4138; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4139; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4140; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4141; LMULMAX2-RV64-NEXT:    not a1, a1
4142; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4143; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4144; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4145; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4146; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4147; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4148; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4149; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4150; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4151; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4152; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4153; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4154; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4155; LMULMAX2-RV64-NEXT:    sb a1, 35(sp)
4156; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
4157; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4158; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4159; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4160; LMULMAX2-RV64-NEXT:    not a1, a1
4161; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4162; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4163; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4164; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4165; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4166; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4167; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4168; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4169; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4170; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4171; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4172; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4173; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4174; LMULMAX2-RV64-NEXT:    sb a1, 34(sp)
4175; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 1
4176; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
4177; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4178; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4179; LMULMAX2-RV64-NEXT:    not a1, a1
4180; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4181; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4182; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4183; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4184; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4185; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4186; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4187; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4188; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4189; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4190; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4191; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4192; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4193; LMULMAX2-RV64-NEXT:    sb a1, 33(sp)
4194; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
4195; LMULMAX2-RV64-NEXT:    ori a1, a1, 256
4196; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
4197; LMULMAX2-RV64-NEXT:    not a1, a1
4198; LMULMAX2-RV64-NEXT:    and a1, a1, a2
4199; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
4200; LMULMAX2-RV64-NEXT:    and a2, a2, a7
4201; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
4202; LMULMAX2-RV64-NEXT:    and a2, a1, a3
4203; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
4204; LMULMAX2-RV64-NEXT:    and a1, a1, a3
4205; LMULMAX2-RV64-NEXT:    add a1, a2, a1
4206; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
4207; LMULMAX2-RV64-NEXT:    add a1, a1, a2
4208; LMULMAX2-RV64-NEXT:    and a1, a1, a4
4209; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
4210; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
4211; LMULMAX2-RV64-NEXT:    sb a1, 32(sp)
4212; LMULMAX2-RV64-NEXT:    vsetvli zero, a6, e8, m2, ta, mu
4213; LMULMAX2-RV64-NEXT:    addi a1, sp, 32
4214; LMULMAX2-RV64-NEXT:    vle8.v v26, (a1)
4215; LMULMAX2-RV64-NEXT:    vse8.v v26, (a0)
4216; LMULMAX2-RV64-NEXT:    addi sp, s0, -96
4217; LMULMAX2-RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
4218; LMULMAX2-RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
4219; LMULMAX2-RV64-NEXT:    addi sp, sp, 96
4220; LMULMAX2-RV64-NEXT:    ret
4221;
4222; LMULMAX1-RV32-LABEL: cttz_v32i8:
4223; LMULMAX1-RV32:       # %bb.0:
4224; LMULMAX1-RV32-NEXT:    addi sp, sp, -48
4225; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 48
4226; LMULMAX1-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
4227; LMULMAX1-RV32-NEXT:    addi a6, a0, 16
4228; LMULMAX1-RV32-NEXT:    vle8.v v26, (a6)
4229; LMULMAX1-RV32-NEXT:    vle8.v v25, (a0)
4230; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
4231; LMULMAX1-RV32-NEXT:    ori a2, a2, 256
4232; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
4233; LMULMAX1-RV32-NEXT:    not a2, a2
4234; LMULMAX1-RV32-NEXT:    and a3, a2, a3
4235; LMULMAX1-RV32-NEXT:    srli a4, a3, 1
4236; LMULMAX1-RV32-NEXT:    lui a2, 349525
4237; LMULMAX1-RV32-NEXT:    addi a7, a2, 1365
4238; LMULMAX1-RV32-NEXT:    and a4, a4, a7
4239; LMULMAX1-RV32-NEXT:    sub a4, a3, a4
4240; LMULMAX1-RV32-NEXT:    lui a3, 209715
4241; LMULMAX1-RV32-NEXT:    addi a3, a3, 819
4242; LMULMAX1-RV32-NEXT:    and a5, a4, a3
4243; LMULMAX1-RV32-NEXT:    srli a4, a4, 2
4244; LMULMAX1-RV32-NEXT:    and a4, a4, a3
4245; LMULMAX1-RV32-NEXT:    add a4, a5, a4
4246; LMULMAX1-RV32-NEXT:    srli a5, a4, 4
4247; LMULMAX1-RV32-NEXT:    add a5, a4, a5
4248; LMULMAX1-RV32-NEXT:    lui a4, 61681
4249; LMULMAX1-RV32-NEXT:    addi a4, a4, -241
4250; LMULMAX1-RV32-NEXT:    and a1, a5, a4
4251; LMULMAX1-RV32-NEXT:    lui a5, 4112
4252; LMULMAX1-RV32-NEXT:    addi a5, a5, 257
4253; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4254; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4255; LMULMAX1-RV32-NEXT:    sb a1, 32(sp)
4256; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
4257; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 15
4258; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4259; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4260; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4261; LMULMAX1-RV32-NEXT:    not a1, a1
4262; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4263; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4264; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4265; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4266; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4267; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4268; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4269; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4270; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4271; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4272; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4273; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4274; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4275; LMULMAX1-RV32-NEXT:    sb a1, 47(sp)
4276; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 14
4277; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4278; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4279; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4280; LMULMAX1-RV32-NEXT:    not a1, a1
4281; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4282; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4283; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4284; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4285; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4286; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4287; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4288; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4289; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4290; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4291; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4292; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4293; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4294; LMULMAX1-RV32-NEXT:    sb a1, 46(sp)
4295; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 13
4296; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4297; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4298; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4299; LMULMAX1-RV32-NEXT:    not a1, a1
4300; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4301; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4302; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4303; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4304; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4305; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4306; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4307; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4308; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4309; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4310; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4311; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4312; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4313; LMULMAX1-RV32-NEXT:    sb a1, 45(sp)
4314; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 12
4315; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4316; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4317; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4318; LMULMAX1-RV32-NEXT:    not a1, a1
4319; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4320; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4321; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4322; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4323; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4324; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4325; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4326; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4327; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4328; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4329; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4330; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4331; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4332; LMULMAX1-RV32-NEXT:    sb a1, 44(sp)
4333; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 11
4334; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4335; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4336; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4337; LMULMAX1-RV32-NEXT:    not a1, a1
4338; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4339; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4340; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4341; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4342; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4343; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4344; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4345; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4346; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4347; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4348; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4349; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4350; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4351; LMULMAX1-RV32-NEXT:    sb a1, 43(sp)
4352; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 10
4353; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4354; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4355; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4356; LMULMAX1-RV32-NEXT:    not a1, a1
4357; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4358; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4359; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4360; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4361; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4362; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4363; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4364; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4365; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4366; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4367; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4368; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4369; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4370; LMULMAX1-RV32-NEXT:    sb a1, 42(sp)
4371; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 9
4372; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4373; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4374; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4375; LMULMAX1-RV32-NEXT:    not a1, a1
4376; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4377; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4378; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4379; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4380; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4381; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4382; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4383; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4384; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4385; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4386; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4387; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4388; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4389; LMULMAX1-RV32-NEXT:    sb a1, 41(sp)
4390; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 8
4391; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4392; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4393; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4394; LMULMAX1-RV32-NEXT:    not a1, a1
4395; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4396; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4397; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4398; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4399; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4400; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4401; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4402; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4403; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4404; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4405; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4406; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4407; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4408; LMULMAX1-RV32-NEXT:    sb a1, 40(sp)
4409; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 7
4410; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4411; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4412; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4413; LMULMAX1-RV32-NEXT:    not a1, a1
4414; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4415; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4416; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4417; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4418; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4419; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4420; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4421; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4422; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4423; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4424; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4425; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4426; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4427; LMULMAX1-RV32-NEXT:    sb a1, 39(sp)
4428; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 6
4429; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4430; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4431; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4432; LMULMAX1-RV32-NEXT:    not a1, a1
4433; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4434; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4435; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4436; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4437; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4438; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4439; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4440; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4441; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4442; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4443; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4444; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4445; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4446; LMULMAX1-RV32-NEXT:    sb a1, 38(sp)
4447; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 5
4448; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4449; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4450; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4451; LMULMAX1-RV32-NEXT:    not a1, a1
4452; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4453; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4454; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4455; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4456; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4457; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4458; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4459; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4460; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4461; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4462; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4463; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4464; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4465; LMULMAX1-RV32-NEXT:    sb a1, 37(sp)
4466; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 4
4467; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4468; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4469; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4470; LMULMAX1-RV32-NEXT:    not a1, a1
4471; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4472; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4473; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4474; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4475; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4476; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4477; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4478; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4479; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4480; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4481; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4482; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4483; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4484; LMULMAX1-RV32-NEXT:    sb a1, 36(sp)
4485; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 3
4486; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4487; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4488; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4489; LMULMAX1-RV32-NEXT:    not a1, a1
4490; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4491; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4492; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4493; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4494; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4495; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4496; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4497; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4498; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4499; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4500; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4501; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4502; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4503; LMULMAX1-RV32-NEXT:    sb a1, 35(sp)
4504; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 2
4505; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
4506; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4507; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4508; LMULMAX1-RV32-NEXT:    not a1, a1
4509; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4510; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4511; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4512; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4513; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4514; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4515; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4516; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4517; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4518; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4519; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4520; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4521; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4522; LMULMAX1-RV32-NEXT:    sb a1, 34(sp)
4523; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v26, 1
4524; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4525; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4526; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4527; LMULMAX1-RV32-NEXT:    not a1, a1
4528; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4529; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4530; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4531; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4532; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4533; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4534; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4535; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4536; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4537; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4538; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4539; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4540; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4541; LMULMAX1-RV32-NEXT:    sb a1, 33(sp)
4542; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
4543; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4544; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4545; LMULMAX1-RV32-NEXT:    not a1, a1
4546; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4547; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4548; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4549; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4550; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4551; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4552; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4553; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4554; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4555; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4556; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4557; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4558; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4559; LMULMAX1-RV32-NEXT:    sb a1, 16(sp)
4560; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 15
4561; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4562; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4563; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4564; LMULMAX1-RV32-NEXT:    not a1, a1
4565; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4566; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4567; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4568; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4569; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4570; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4571; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4572; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4573; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4574; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4575; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4576; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4577; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4578; LMULMAX1-RV32-NEXT:    sb a1, 31(sp)
4579; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 14
4580; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4581; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4582; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4583; LMULMAX1-RV32-NEXT:    not a1, a1
4584; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4585; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4586; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4587; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4588; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4589; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4590; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4591; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4592; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4593; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4594; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4595; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4596; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4597; LMULMAX1-RV32-NEXT:    sb a1, 30(sp)
4598; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 13
4599; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4600; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4601; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4602; LMULMAX1-RV32-NEXT:    not a1, a1
4603; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4604; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4605; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4606; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4607; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4608; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4609; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4610; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4611; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4612; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4613; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4614; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4615; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4616; LMULMAX1-RV32-NEXT:    sb a1, 29(sp)
4617; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 12
4618; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4619; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4620; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4621; LMULMAX1-RV32-NEXT:    not a1, a1
4622; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4623; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4624; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4625; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4626; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4627; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4628; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4629; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4630; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4631; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4632; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4633; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4634; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4635; LMULMAX1-RV32-NEXT:    sb a1, 28(sp)
4636; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 11
4637; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4638; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4639; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4640; LMULMAX1-RV32-NEXT:    not a1, a1
4641; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4642; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4643; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4644; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4645; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4646; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4647; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4648; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4649; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4650; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4651; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4652; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4653; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4654; LMULMAX1-RV32-NEXT:    sb a1, 27(sp)
4655; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 10
4656; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4657; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4658; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4659; LMULMAX1-RV32-NEXT:    not a1, a1
4660; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4661; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4662; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4663; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4664; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4665; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4666; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4667; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4668; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4669; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4670; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4671; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4672; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4673; LMULMAX1-RV32-NEXT:    sb a1, 26(sp)
4674; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 9
4675; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4676; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4677; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4678; LMULMAX1-RV32-NEXT:    not a1, a1
4679; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4680; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4681; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4682; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4683; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4684; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4685; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4686; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4687; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4688; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4689; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4690; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4691; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4692; LMULMAX1-RV32-NEXT:    sb a1, 25(sp)
4693; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 8
4694; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4695; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4696; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4697; LMULMAX1-RV32-NEXT:    not a1, a1
4698; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4699; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4700; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4701; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4702; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4703; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4704; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4705; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4706; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4707; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4708; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4709; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4710; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4711; LMULMAX1-RV32-NEXT:    sb a1, 24(sp)
4712; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 7
4713; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4714; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4715; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4716; LMULMAX1-RV32-NEXT:    not a1, a1
4717; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4718; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4719; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4720; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4721; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4722; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4723; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4724; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4725; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4726; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4727; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4728; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4729; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4730; LMULMAX1-RV32-NEXT:    sb a1, 23(sp)
4731; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 6
4732; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4733; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4734; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4735; LMULMAX1-RV32-NEXT:    not a1, a1
4736; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4737; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4738; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4739; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4740; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4741; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4742; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4743; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4744; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4745; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4746; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4747; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4748; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4749; LMULMAX1-RV32-NEXT:    sb a1, 22(sp)
4750; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 5
4751; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4752; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4753; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4754; LMULMAX1-RV32-NEXT:    not a1, a1
4755; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4756; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4757; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4758; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4759; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4760; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4761; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4762; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4763; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4764; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4765; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4766; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4767; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4768; LMULMAX1-RV32-NEXT:    sb a1, 21(sp)
4769; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 4
4770; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4771; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4772; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4773; LMULMAX1-RV32-NEXT:    not a1, a1
4774; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4775; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4776; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4777; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4778; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4779; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4780; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4781; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4782; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4783; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4784; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4785; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4786; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4787; LMULMAX1-RV32-NEXT:    sb a1, 20(sp)
4788; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
4789; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4790; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4791; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4792; LMULMAX1-RV32-NEXT:    not a1, a1
4793; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4794; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4795; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4796; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4797; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4798; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4799; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4800; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4801; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4802; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4803; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4804; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4805; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4806; LMULMAX1-RV32-NEXT:    sb a1, 19(sp)
4807; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
4808; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
4809; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4810; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4811; LMULMAX1-RV32-NEXT:    not a1, a1
4812; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4813; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4814; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4815; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4816; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4817; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4818; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4819; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4820; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4821; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4822; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4823; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4824; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4825; LMULMAX1-RV32-NEXT:    sb a1, 18(sp)
4826; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
4827; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
4828; LMULMAX1-RV32-NEXT:    ori a1, a1, 256
4829; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
4830; LMULMAX1-RV32-NEXT:    not a1, a1
4831; LMULMAX1-RV32-NEXT:    and a1, a1, a2
4832; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
4833; LMULMAX1-RV32-NEXT:    and a2, a2, a7
4834; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
4835; LMULMAX1-RV32-NEXT:    and a2, a1, a3
4836; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
4837; LMULMAX1-RV32-NEXT:    and a1, a1, a3
4838; LMULMAX1-RV32-NEXT:    add a1, a2, a1
4839; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
4840; LMULMAX1-RV32-NEXT:    add a1, a1, a2
4841; LMULMAX1-RV32-NEXT:    and a1, a1, a4
4842; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
4843; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
4844; LMULMAX1-RV32-NEXT:    sb a1, 17(sp)
4845; LMULMAX1-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
4846; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
4847; LMULMAX1-RV32-NEXT:    vle8.v v25, (a1)
4848; LMULMAX1-RV32-NEXT:    addi a1, sp, 32
4849; LMULMAX1-RV32-NEXT:    vle8.v v26, (a1)
4850; LMULMAX1-RV32-NEXT:    vse8.v v25, (a0)
4851; LMULMAX1-RV32-NEXT:    vse8.v v26, (a6)
4852; LMULMAX1-RV32-NEXT:    addi sp, sp, 48
4853; LMULMAX1-RV32-NEXT:    ret
4854;
4855; LMULMAX1-RV64-LABEL: cttz_v32i8:
4856; LMULMAX1-RV64:       # %bb.0:
4857; LMULMAX1-RV64-NEXT:    addi sp, sp, -48
4858; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 48
4859; LMULMAX1-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
4860; LMULMAX1-RV64-NEXT:    addi a6, a0, 16
4861; LMULMAX1-RV64-NEXT:    vle8.v v26, (a6)
4862; LMULMAX1-RV64-NEXT:    vle8.v v25, (a0)
4863; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
4864; LMULMAX1-RV64-NEXT:    ori a2, a2, 256
4865; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
4866; LMULMAX1-RV64-NEXT:    not a2, a2
4867; LMULMAX1-RV64-NEXT:    and a3, a2, a3
4868; LMULMAX1-RV64-NEXT:    srli a4, a3, 1
4869; LMULMAX1-RV64-NEXT:    lui a2, 21845
4870; LMULMAX1-RV64-NEXT:    addiw a2, a2, 1365
4871; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
4872; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
4873; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
4874; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
4875; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
4876; LMULMAX1-RV64-NEXT:    addi a7, a2, 1365
4877; LMULMAX1-RV64-NEXT:    and a4, a4, a7
4878; LMULMAX1-RV64-NEXT:    sub a4, a3, a4
4879; LMULMAX1-RV64-NEXT:    lui a3, 13107
4880; LMULMAX1-RV64-NEXT:    addiw a3, a3, 819
4881; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
4882; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
4883; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
4884; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
4885; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
4886; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
4887; LMULMAX1-RV64-NEXT:    and a5, a4, a3
4888; LMULMAX1-RV64-NEXT:    srli a4, a4, 2
4889; LMULMAX1-RV64-NEXT:    and a4, a4, a3
4890; LMULMAX1-RV64-NEXT:    add a4, a5, a4
4891; LMULMAX1-RV64-NEXT:    srli a5, a4, 4
4892; LMULMAX1-RV64-NEXT:    add a5, a4, a5
4893; LMULMAX1-RV64-NEXT:    lui a4, 3855
4894; LMULMAX1-RV64-NEXT:    addiw a4, a4, 241
4895; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
4896; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
4897; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
4898; LMULMAX1-RV64-NEXT:    addi a4, a4, 241
4899; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
4900; LMULMAX1-RV64-NEXT:    addi a4, a4, -241
4901; LMULMAX1-RV64-NEXT:    and a1, a5, a4
4902; LMULMAX1-RV64-NEXT:    lui a5, 4112
4903; LMULMAX1-RV64-NEXT:    addiw a5, a5, 257
4904; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
4905; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
4906; LMULMAX1-RV64-NEXT:    slli a5, a5, 16
4907; LMULMAX1-RV64-NEXT:    addi a5, a5, 257
4908; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
4909; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
4910; LMULMAX1-RV64-NEXT:    sb a1, 32(sp)
4911; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e8, m1, ta, mu
4912; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 15
4913; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
4914; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
4915; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
4916; LMULMAX1-RV64-NEXT:    not a1, a1
4917; LMULMAX1-RV64-NEXT:    and a1, a1, a2
4918; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
4919; LMULMAX1-RV64-NEXT:    and a2, a2, a7
4920; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
4921; LMULMAX1-RV64-NEXT:    and a2, a1, a3
4922; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
4923; LMULMAX1-RV64-NEXT:    and a1, a1, a3
4924; LMULMAX1-RV64-NEXT:    add a1, a2, a1
4925; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
4926; LMULMAX1-RV64-NEXT:    add a1, a1, a2
4927; LMULMAX1-RV64-NEXT:    and a1, a1, a4
4928; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
4929; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
4930; LMULMAX1-RV64-NEXT:    sb a1, 47(sp)
4931; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 14
4932; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
4933; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
4934; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
4935; LMULMAX1-RV64-NEXT:    not a1, a1
4936; LMULMAX1-RV64-NEXT:    and a1, a1, a2
4937; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
4938; LMULMAX1-RV64-NEXT:    and a2, a2, a7
4939; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
4940; LMULMAX1-RV64-NEXT:    and a2, a1, a3
4941; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
4942; LMULMAX1-RV64-NEXT:    and a1, a1, a3
4943; LMULMAX1-RV64-NEXT:    add a1, a2, a1
4944; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
4945; LMULMAX1-RV64-NEXT:    add a1, a1, a2
4946; LMULMAX1-RV64-NEXT:    and a1, a1, a4
4947; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
4948; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
4949; LMULMAX1-RV64-NEXT:    sb a1, 46(sp)
4950; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 13
4951; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
4952; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
4953; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
4954; LMULMAX1-RV64-NEXT:    not a1, a1
4955; LMULMAX1-RV64-NEXT:    and a1, a1, a2
4956; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
4957; LMULMAX1-RV64-NEXT:    and a2, a2, a7
4958; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
4959; LMULMAX1-RV64-NEXT:    and a2, a1, a3
4960; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
4961; LMULMAX1-RV64-NEXT:    and a1, a1, a3
4962; LMULMAX1-RV64-NEXT:    add a1, a2, a1
4963; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
4964; LMULMAX1-RV64-NEXT:    add a1, a1, a2
4965; LMULMAX1-RV64-NEXT:    and a1, a1, a4
4966; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
4967; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
4968; LMULMAX1-RV64-NEXT:    sb a1, 45(sp)
4969; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 12
4970; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
4971; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
4972; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
4973; LMULMAX1-RV64-NEXT:    not a1, a1
4974; LMULMAX1-RV64-NEXT:    and a1, a1, a2
4975; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
4976; LMULMAX1-RV64-NEXT:    and a2, a2, a7
4977; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
4978; LMULMAX1-RV64-NEXT:    and a2, a1, a3
4979; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
4980; LMULMAX1-RV64-NEXT:    and a1, a1, a3
4981; LMULMAX1-RV64-NEXT:    add a1, a2, a1
4982; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
4983; LMULMAX1-RV64-NEXT:    add a1, a1, a2
4984; LMULMAX1-RV64-NEXT:    and a1, a1, a4
4985; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
4986; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
4987; LMULMAX1-RV64-NEXT:    sb a1, 44(sp)
4988; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 11
4989; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
4990; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
4991; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
4992; LMULMAX1-RV64-NEXT:    not a1, a1
4993; LMULMAX1-RV64-NEXT:    and a1, a1, a2
4994; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
4995; LMULMAX1-RV64-NEXT:    and a2, a2, a7
4996; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
4997; LMULMAX1-RV64-NEXT:    and a2, a1, a3
4998; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
4999; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5000; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5001; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5002; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5003; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5004; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5005; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5006; LMULMAX1-RV64-NEXT:    sb a1, 43(sp)
5007; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 10
5008; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5009; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5010; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5011; LMULMAX1-RV64-NEXT:    not a1, a1
5012; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5013; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5014; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5015; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5016; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5017; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5018; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5019; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5020; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5021; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5022; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5023; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5024; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5025; LMULMAX1-RV64-NEXT:    sb a1, 42(sp)
5026; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 9
5027; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5028; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5029; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5030; LMULMAX1-RV64-NEXT:    not a1, a1
5031; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5032; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5033; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5034; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5035; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5036; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5037; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5038; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5039; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5040; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5041; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5042; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5043; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5044; LMULMAX1-RV64-NEXT:    sb a1, 41(sp)
5045; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 8
5046; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5047; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5048; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5049; LMULMAX1-RV64-NEXT:    not a1, a1
5050; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5051; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5052; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5053; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5054; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5055; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5056; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5057; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5058; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5059; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5060; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5061; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5062; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5063; LMULMAX1-RV64-NEXT:    sb a1, 40(sp)
5064; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 7
5065; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5066; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5067; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5068; LMULMAX1-RV64-NEXT:    not a1, a1
5069; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5070; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5071; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5072; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5073; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5074; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5075; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5076; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5077; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5078; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5079; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5080; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5081; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5082; LMULMAX1-RV64-NEXT:    sb a1, 39(sp)
5083; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 6
5084; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5085; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5086; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5087; LMULMAX1-RV64-NEXT:    not a1, a1
5088; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5089; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5090; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5091; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5092; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5093; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5094; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5095; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5096; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5097; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5098; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5099; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5100; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5101; LMULMAX1-RV64-NEXT:    sb a1, 38(sp)
5102; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 5
5103; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5104; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5105; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5106; LMULMAX1-RV64-NEXT:    not a1, a1
5107; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5108; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5109; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5110; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5111; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5112; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5113; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5114; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5115; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5116; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5117; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5118; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5119; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5120; LMULMAX1-RV64-NEXT:    sb a1, 37(sp)
5121; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 4
5122; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5123; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5124; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5125; LMULMAX1-RV64-NEXT:    not a1, a1
5126; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5127; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5128; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5129; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5130; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5131; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5132; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5133; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5134; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5135; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5136; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5137; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5138; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5139; LMULMAX1-RV64-NEXT:    sb a1, 36(sp)
5140; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 3
5141; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5142; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5143; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5144; LMULMAX1-RV64-NEXT:    not a1, a1
5145; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5146; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5147; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5148; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5149; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5150; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5151; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5152; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5153; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5154; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5155; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5156; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5157; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5158; LMULMAX1-RV64-NEXT:    sb a1, 35(sp)
5159; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 2
5160; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v27
5161; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5162; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5163; LMULMAX1-RV64-NEXT:    not a1, a1
5164; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5165; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5166; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5167; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5168; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5169; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5170; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5171; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5172; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5173; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5174; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5175; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5176; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5177; LMULMAX1-RV64-NEXT:    sb a1, 34(sp)
5178; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v26, 1
5179; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5180; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5181; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5182; LMULMAX1-RV64-NEXT:    not a1, a1
5183; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5184; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5185; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5186; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5187; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5188; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5189; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5190; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5191; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5192; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5193; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5194; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5195; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5196; LMULMAX1-RV64-NEXT:    sb a1, 33(sp)
5197; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 15
5198; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5199; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5200; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5201; LMULMAX1-RV64-NEXT:    not a1, a1
5202; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5203; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5204; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5205; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5206; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5207; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5208; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5209; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5210; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5211; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5212; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5213; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5214; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5215; LMULMAX1-RV64-NEXT:    sb a1, 31(sp)
5216; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 14
5217; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5218; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5219; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5220; LMULMAX1-RV64-NEXT:    not a1, a1
5221; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5222; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5223; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5224; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5225; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5226; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5227; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5228; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5229; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5230; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5231; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5232; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5233; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5234; LMULMAX1-RV64-NEXT:    sb a1, 30(sp)
5235; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 13
5236; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5237; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5238; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5239; LMULMAX1-RV64-NEXT:    not a1, a1
5240; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5241; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5242; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5243; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5244; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5245; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5246; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5247; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5248; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5249; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5250; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5251; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5252; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5253; LMULMAX1-RV64-NEXT:    sb a1, 29(sp)
5254; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 12
5255; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5256; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5257; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5258; LMULMAX1-RV64-NEXT:    not a1, a1
5259; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5260; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5261; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5262; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5263; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5264; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5265; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5266; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5267; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5268; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5269; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5270; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5271; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5272; LMULMAX1-RV64-NEXT:    sb a1, 28(sp)
5273; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 11
5274; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5275; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5276; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5277; LMULMAX1-RV64-NEXT:    not a1, a1
5278; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5279; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5280; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5281; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5282; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5283; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5284; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5285; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5286; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5287; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5288; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5289; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5290; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5291; LMULMAX1-RV64-NEXT:    sb a1, 27(sp)
5292; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 10
5293; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5294; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5295; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5296; LMULMAX1-RV64-NEXT:    not a1, a1
5297; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5298; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5299; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5300; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5301; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5302; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5303; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5304; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5305; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5306; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5307; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5308; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5309; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5310; LMULMAX1-RV64-NEXT:    sb a1, 26(sp)
5311; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 9
5312; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5313; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5314; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5315; LMULMAX1-RV64-NEXT:    not a1, a1
5316; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5317; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5318; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5319; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5320; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5321; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5322; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5323; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5324; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5325; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5326; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5327; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5328; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5329; LMULMAX1-RV64-NEXT:    sb a1, 25(sp)
5330; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 8
5331; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5332; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5333; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5334; LMULMAX1-RV64-NEXT:    not a1, a1
5335; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5336; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5337; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5338; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5339; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5340; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5341; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5342; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5343; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5344; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5345; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5346; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5347; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5348; LMULMAX1-RV64-NEXT:    sb a1, 24(sp)
5349; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
5350; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5351; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5352; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5353; LMULMAX1-RV64-NEXT:    not a1, a1
5354; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5355; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5356; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5357; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5358; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5359; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5360; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5361; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5362; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5363; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5364; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5365; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5366; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5367; LMULMAX1-RV64-NEXT:    sb a1, 23(sp)
5368; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
5369; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5370; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5371; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5372; LMULMAX1-RV64-NEXT:    not a1, a1
5373; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5374; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5375; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5376; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5377; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5378; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5379; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5380; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5381; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5382; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5383; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5384; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5385; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5386; LMULMAX1-RV64-NEXT:    sb a1, 22(sp)
5387; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
5388; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5389; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5390; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5391; LMULMAX1-RV64-NEXT:    not a1, a1
5392; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5393; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5394; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5395; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5396; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5397; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5398; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5399; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5400; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5401; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5402; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5403; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5404; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5405; LMULMAX1-RV64-NEXT:    sb a1, 21(sp)
5406; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
5407; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5408; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5409; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5410; LMULMAX1-RV64-NEXT:    not a1, a1
5411; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5412; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5413; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5414; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5415; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5416; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5417; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5418; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5419; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5420; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5421; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5422; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5423; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5424; LMULMAX1-RV64-NEXT:    sb a1, 20(sp)
5425; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
5426; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5427; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5428; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5429; LMULMAX1-RV64-NEXT:    not a1, a1
5430; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5431; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5432; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5433; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5434; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5435; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5436; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5437; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5438; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5439; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5440; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5441; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5442; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5443; LMULMAX1-RV64-NEXT:    sb a1, 19(sp)
5444; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
5445; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5446; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5447; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5448; LMULMAX1-RV64-NEXT:    not a1, a1
5449; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5450; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5451; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5452; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5453; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5454; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5455; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5456; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5457; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5458; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5459; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5460; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5461; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5462; LMULMAX1-RV64-NEXT:    sb a1, 18(sp)
5463; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
5464; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
5465; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5466; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5467; LMULMAX1-RV64-NEXT:    not a1, a1
5468; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5469; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5470; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5471; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5472; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5473; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5474; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5475; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5476; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5477; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5478; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5479; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5480; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5481; LMULMAX1-RV64-NEXT:    sb a1, 17(sp)
5482; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v25
5483; LMULMAX1-RV64-NEXT:    ori a1, a1, 256
5484; LMULMAX1-RV64-NEXT:    addi a2, a1, -1
5485; LMULMAX1-RV64-NEXT:    not a1, a1
5486; LMULMAX1-RV64-NEXT:    and a1, a1, a2
5487; LMULMAX1-RV64-NEXT:    srli a2, a1, 1
5488; LMULMAX1-RV64-NEXT:    and a2, a2, a7
5489; LMULMAX1-RV64-NEXT:    sub a1, a1, a2
5490; LMULMAX1-RV64-NEXT:    and a2, a1, a3
5491; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
5492; LMULMAX1-RV64-NEXT:    and a1, a1, a3
5493; LMULMAX1-RV64-NEXT:    add a1, a2, a1
5494; LMULMAX1-RV64-NEXT:    srli a2, a1, 4
5495; LMULMAX1-RV64-NEXT:    add a1, a1, a2
5496; LMULMAX1-RV64-NEXT:    and a1, a1, a4
5497; LMULMAX1-RV64-NEXT:    mul a1, a1, a5
5498; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
5499; LMULMAX1-RV64-NEXT:    sb a1, 16(sp)
5500; LMULMAX1-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, mu
5501; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
5502; LMULMAX1-RV64-NEXT:    vle8.v v25, (a1)
5503; LMULMAX1-RV64-NEXT:    addi a1, sp, 32
5504; LMULMAX1-RV64-NEXT:    vle8.v v26, (a1)
5505; LMULMAX1-RV64-NEXT:    vse8.v v25, (a0)
5506; LMULMAX1-RV64-NEXT:    vse8.v v26, (a6)
5507; LMULMAX1-RV64-NEXT:    addi sp, sp, 48
5508; LMULMAX1-RV64-NEXT:    ret
5509  %a = load <32 x i8>, <32 x i8>* %x
5510  %b = load <32 x i8>, <32 x i8>* %y
5511  %c = call <32 x i8> @llvm.cttz.v32i8(<32 x i8> %a, i1 false)
5512  store <32 x i8> %c, <32 x i8>* %x
5513  ret void
5514}
5515declare <32 x i8> @llvm.cttz.v32i8(<32 x i8>, i1)
5516
5517define void @cttz_v16i16(<16 x i16>* %x, <16 x i16>* %y) {
5518; LMULMAX2-RV32-LABEL: cttz_v16i16:
5519; LMULMAX2-RV32:       # %bb.0:
5520; LMULMAX2-RV32-NEXT:    addi sp, sp, -96
5521; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 96
5522; LMULMAX2-RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
5523; LMULMAX2-RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
5524; LMULMAX2-RV32-NEXT:    .cfi_offset ra, -4
5525; LMULMAX2-RV32-NEXT:    .cfi_offset s0, -8
5526; LMULMAX2-RV32-NEXT:    addi s0, sp, 96
5527; LMULMAX2-RV32-NEXT:    .cfi_def_cfa s0, 0
5528; LMULMAX2-RV32-NEXT:    andi sp, sp, -32
5529; LMULMAX2-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
5530; LMULMAX2-RV32-NEXT:    vle16.v v26, (a0)
5531; LMULMAX2-RV32-NEXT:    vmv.x.s a2, v26
5532; LMULMAX2-RV32-NEXT:    lui a6, 16
5533; LMULMAX2-RV32-NEXT:    or a2, a2, a6
5534; LMULMAX2-RV32-NEXT:    addi a3, a2, -1
5535; LMULMAX2-RV32-NEXT:    not a2, a2
5536; LMULMAX2-RV32-NEXT:    and a3, a2, a3
5537; LMULMAX2-RV32-NEXT:    srli a4, a3, 1
5538; LMULMAX2-RV32-NEXT:    lui a2, 349525
5539; LMULMAX2-RV32-NEXT:    addi a7, a2, 1365
5540; LMULMAX2-RV32-NEXT:    and a4, a4, a7
5541; LMULMAX2-RV32-NEXT:    sub a4, a3, a4
5542; LMULMAX2-RV32-NEXT:    lui a3, 209715
5543; LMULMAX2-RV32-NEXT:    addi a3, a3, 819
5544; LMULMAX2-RV32-NEXT:    and a5, a4, a3
5545; LMULMAX2-RV32-NEXT:    srli a4, a4, 2
5546; LMULMAX2-RV32-NEXT:    and a4, a4, a3
5547; LMULMAX2-RV32-NEXT:    add a4, a5, a4
5548; LMULMAX2-RV32-NEXT:    srli a5, a4, 4
5549; LMULMAX2-RV32-NEXT:    add a5, a4, a5
5550; LMULMAX2-RV32-NEXT:    lui a4, 61681
5551; LMULMAX2-RV32-NEXT:    addi a4, a4, -241
5552; LMULMAX2-RV32-NEXT:    and a1, a5, a4
5553; LMULMAX2-RV32-NEXT:    lui a5, 4112
5554; LMULMAX2-RV32-NEXT:    addi a5, a5, 257
5555; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5556; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5557; LMULMAX2-RV32-NEXT:    sh a1, 32(sp)
5558; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e16, m2, ta, mu
5559; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 15
5560; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5561; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5562; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5563; LMULMAX2-RV32-NEXT:    not a1, a1
5564; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5565; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5566; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5567; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5568; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5569; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5570; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5571; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5572; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5573; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5574; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5575; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5576; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5577; LMULMAX2-RV32-NEXT:    sh a1, 62(sp)
5578; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 14
5579; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5580; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5581; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5582; LMULMAX2-RV32-NEXT:    not a1, a1
5583; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5584; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5585; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5586; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5587; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5588; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5589; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5590; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5591; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5592; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5593; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5594; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5595; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5596; LMULMAX2-RV32-NEXT:    sh a1, 60(sp)
5597; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 13
5598; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5599; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5600; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5601; LMULMAX2-RV32-NEXT:    not a1, a1
5602; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5603; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5604; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5605; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5606; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5607; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5608; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5609; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5610; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5611; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5612; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5613; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5614; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5615; LMULMAX2-RV32-NEXT:    sh a1, 58(sp)
5616; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 12
5617; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5618; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5619; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5620; LMULMAX2-RV32-NEXT:    not a1, a1
5621; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5622; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5623; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5624; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5625; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5626; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5627; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5628; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5629; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5630; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5631; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5632; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5633; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5634; LMULMAX2-RV32-NEXT:    sh a1, 56(sp)
5635; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 11
5636; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5637; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5638; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5639; LMULMAX2-RV32-NEXT:    not a1, a1
5640; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5641; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5642; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5643; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5644; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5645; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5646; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5647; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5648; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5649; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5650; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5651; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5652; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5653; LMULMAX2-RV32-NEXT:    sh a1, 54(sp)
5654; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 10
5655; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5656; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5657; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5658; LMULMAX2-RV32-NEXT:    not a1, a1
5659; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5660; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5661; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5662; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5663; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5664; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5665; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5666; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5667; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5668; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5669; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5670; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5671; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5672; LMULMAX2-RV32-NEXT:    sh a1, 52(sp)
5673; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 9
5674; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5675; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5676; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5677; LMULMAX2-RV32-NEXT:    not a1, a1
5678; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5679; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5680; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5681; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5682; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5683; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5684; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5685; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5686; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5687; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5688; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5689; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5690; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5691; LMULMAX2-RV32-NEXT:    sh a1, 50(sp)
5692; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 8
5693; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5694; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5695; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5696; LMULMAX2-RV32-NEXT:    not a1, a1
5697; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5698; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5699; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5700; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5701; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5702; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5703; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5704; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5705; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5706; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5707; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5708; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5709; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5710; LMULMAX2-RV32-NEXT:    sh a1, 48(sp)
5711; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 7
5712; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5713; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5714; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5715; LMULMAX2-RV32-NEXT:    not a1, a1
5716; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5717; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5718; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5719; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5720; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5721; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5722; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5723; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5724; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5725; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5726; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5727; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5728; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5729; LMULMAX2-RV32-NEXT:    sh a1, 46(sp)
5730; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 6
5731; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5732; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5733; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5734; LMULMAX2-RV32-NEXT:    not a1, a1
5735; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5736; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5737; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5738; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5739; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5740; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5741; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5742; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5743; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5744; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5745; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5746; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5747; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5748; LMULMAX2-RV32-NEXT:    sh a1, 44(sp)
5749; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 5
5750; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5751; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5752; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5753; LMULMAX2-RV32-NEXT:    not a1, a1
5754; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5755; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5756; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5757; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5758; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5759; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5760; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5761; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5762; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5763; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5764; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5765; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5766; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5767; LMULMAX2-RV32-NEXT:    sh a1, 42(sp)
5768; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 4
5769; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5770; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5771; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5772; LMULMAX2-RV32-NEXT:    not a1, a1
5773; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5774; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5775; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5776; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5777; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5778; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5779; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5780; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5781; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5782; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5783; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5784; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5785; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5786; LMULMAX2-RV32-NEXT:    sh a1, 40(sp)
5787; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 3
5788; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5789; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5790; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5791; LMULMAX2-RV32-NEXT:    not a1, a1
5792; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5793; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5794; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5795; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5796; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5797; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5798; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5799; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5800; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5801; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5802; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5803; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5804; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5805; LMULMAX2-RV32-NEXT:    sh a1, 38(sp)
5806; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 2
5807; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
5808; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5809; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5810; LMULMAX2-RV32-NEXT:    not a1, a1
5811; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5812; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5813; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5814; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5815; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5816; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5817; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5818; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5819; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5820; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5821; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5822; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5823; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5824; LMULMAX2-RV32-NEXT:    sh a1, 36(sp)
5825; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v26, 1
5826; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
5827; LMULMAX2-RV32-NEXT:    or a1, a1, a6
5828; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
5829; LMULMAX2-RV32-NEXT:    not a1, a1
5830; LMULMAX2-RV32-NEXT:    and a1, a1, a2
5831; LMULMAX2-RV32-NEXT:    srli a2, a1, 1
5832; LMULMAX2-RV32-NEXT:    and a2, a2, a7
5833; LMULMAX2-RV32-NEXT:    sub a1, a1, a2
5834; LMULMAX2-RV32-NEXT:    and a2, a1, a3
5835; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
5836; LMULMAX2-RV32-NEXT:    and a1, a1, a3
5837; LMULMAX2-RV32-NEXT:    add a1, a2, a1
5838; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
5839; LMULMAX2-RV32-NEXT:    add a1, a1, a2
5840; LMULMAX2-RV32-NEXT:    and a1, a1, a4
5841; LMULMAX2-RV32-NEXT:    mul a1, a1, a5
5842; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
5843; LMULMAX2-RV32-NEXT:    sh a1, 34(sp)
5844; LMULMAX2-RV32-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
5845; LMULMAX2-RV32-NEXT:    addi a1, sp, 32
5846; LMULMAX2-RV32-NEXT:    vle16.v v26, (a1)
5847; LMULMAX2-RV32-NEXT:    vse16.v v26, (a0)
5848; LMULMAX2-RV32-NEXT:    addi sp, s0, -96
5849; LMULMAX2-RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
5850; LMULMAX2-RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
5851; LMULMAX2-RV32-NEXT:    addi sp, sp, 96
5852; LMULMAX2-RV32-NEXT:    ret
5853;
5854; LMULMAX2-RV64-LABEL: cttz_v16i16:
5855; LMULMAX2-RV64:       # %bb.0:
5856; LMULMAX2-RV64-NEXT:    addi sp, sp, -96
5857; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 96
5858; LMULMAX2-RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
5859; LMULMAX2-RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
5860; LMULMAX2-RV64-NEXT:    .cfi_offset ra, -8
5861; LMULMAX2-RV64-NEXT:    .cfi_offset s0, -16
5862; LMULMAX2-RV64-NEXT:    addi s0, sp, 96
5863; LMULMAX2-RV64-NEXT:    .cfi_def_cfa s0, 0
5864; LMULMAX2-RV64-NEXT:    andi sp, sp, -32
5865; LMULMAX2-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
5866; LMULMAX2-RV64-NEXT:    vle16.v v26, (a0)
5867; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e16, m2, ta, mu
5868; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 15
5869; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v28
5870; LMULMAX2-RV64-NEXT:    lui a6, 16
5871; LMULMAX2-RV64-NEXT:    or a2, a2, a6
5872; LMULMAX2-RV64-NEXT:    addi a3, a2, -1
5873; LMULMAX2-RV64-NEXT:    not a2, a2
5874; LMULMAX2-RV64-NEXT:    and a3, a2, a3
5875; LMULMAX2-RV64-NEXT:    srli a4, a3, 1
5876; LMULMAX2-RV64-NEXT:    lui a2, 21845
5877; LMULMAX2-RV64-NEXT:    addiw a2, a2, 1365
5878; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
5879; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
5880; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
5881; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
5882; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
5883; LMULMAX2-RV64-NEXT:    addi a7, a2, 1365
5884; LMULMAX2-RV64-NEXT:    and a4, a4, a7
5885; LMULMAX2-RV64-NEXT:    sub a4, a3, a4
5886; LMULMAX2-RV64-NEXT:    lui a3, 13107
5887; LMULMAX2-RV64-NEXT:    addiw a3, a3, 819
5888; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
5889; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
5890; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
5891; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
5892; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
5893; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
5894; LMULMAX2-RV64-NEXT:    and a5, a4, a3
5895; LMULMAX2-RV64-NEXT:    srli a4, a4, 2
5896; LMULMAX2-RV64-NEXT:    and a4, a4, a3
5897; LMULMAX2-RV64-NEXT:    add a4, a5, a4
5898; LMULMAX2-RV64-NEXT:    srli a5, a4, 4
5899; LMULMAX2-RV64-NEXT:    add a5, a4, a5
5900; LMULMAX2-RV64-NEXT:    lui a4, 3855
5901; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
5902; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
5903; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
5904; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
5905; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
5906; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
5907; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
5908; LMULMAX2-RV64-NEXT:    and a1, a5, a4
5909; LMULMAX2-RV64-NEXT:    lui a5, 4112
5910; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
5911; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
5912; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
5913; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
5914; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
5915; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
5916; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
5917; LMULMAX2-RV64-NEXT:    sh a1, 62(sp)
5918; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 14
5919; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
5920; LMULMAX2-RV64-NEXT:    or a1, a1, a6
5921; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
5922; LMULMAX2-RV64-NEXT:    not a1, a1
5923; LMULMAX2-RV64-NEXT:    and a1, a1, a2
5924; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
5925; LMULMAX2-RV64-NEXT:    and a2, a2, a7
5926; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
5927; LMULMAX2-RV64-NEXT:    and a2, a1, a3
5928; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
5929; LMULMAX2-RV64-NEXT:    and a1, a1, a3
5930; LMULMAX2-RV64-NEXT:    add a1, a2, a1
5931; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
5932; LMULMAX2-RV64-NEXT:    add a1, a1, a2
5933; LMULMAX2-RV64-NEXT:    and a1, a1, a4
5934; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
5935; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
5936; LMULMAX2-RV64-NEXT:    sh a1, 60(sp)
5937; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 13
5938; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
5939; LMULMAX2-RV64-NEXT:    or a1, a1, a6
5940; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
5941; LMULMAX2-RV64-NEXT:    not a1, a1
5942; LMULMAX2-RV64-NEXT:    and a1, a1, a2
5943; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
5944; LMULMAX2-RV64-NEXT:    and a2, a2, a7
5945; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
5946; LMULMAX2-RV64-NEXT:    and a2, a1, a3
5947; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
5948; LMULMAX2-RV64-NEXT:    and a1, a1, a3
5949; LMULMAX2-RV64-NEXT:    add a1, a2, a1
5950; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
5951; LMULMAX2-RV64-NEXT:    add a1, a1, a2
5952; LMULMAX2-RV64-NEXT:    and a1, a1, a4
5953; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
5954; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
5955; LMULMAX2-RV64-NEXT:    sh a1, 58(sp)
5956; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 12
5957; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
5958; LMULMAX2-RV64-NEXT:    or a1, a1, a6
5959; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
5960; LMULMAX2-RV64-NEXT:    not a1, a1
5961; LMULMAX2-RV64-NEXT:    and a1, a1, a2
5962; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
5963; LMULMAX2-RV64-NEXT:    and a2, a2, a7
5964; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
5965; LMULMAX2-RV64-NEXT:    and a2, a1, a3
5966; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
5967; LMULMAX2-RV64-NEXT:    and a1, a1, a3
5968; LMULMAX2-RV64-NEXT:    add a1, a2, a1
5969; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
5970; LMULMAX2-RV64-NEXT:    add a1, a1, a2
5971; LMULMAX2-RV64-NEXT:    and a1, a1, a4
5972; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
5973; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
5974; LMULMAX2-RV64-NEXT:    sh a1, 56(sp)
5975; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 11
5976; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
5977; LMULMAX2-RV64-NEXT:    or a1, a1, a6
5978; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
5979; LMULMAX2-RV64-NEXT:    not a1, a1
5980; LMULMAX2-RV64-NEXT:    and a1, a1, a2
5981; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
5982; LMULMAX2-RV64-NEXT:    and a2, a2, a7
5983; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
5984; LMULMAX2-RV64-NEXT:    and a2, a1, a3
5985; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
5986; LMULMAX2-RV64-NEXT:    and a1, a1, a3
5987; LMULMAX2-RV64-NEXT:    add a1, a2, a1
5988; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
5989; LMULMAX2-RV64-NEXT:    add a1, a1, a2
5990; LMULMAX2-RV64-NEXT:    and a1, a1, a4
5991; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
5992; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
5993; LMULMAX2-RV64-NEXT:    sh a1, 54(sp)
5994; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 10
5995; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
5996; LMULMAX2-RV64-NEXT:    or a1, a1, a6
5997; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
5998; LMULMAX2-RV64-NEXT:    not a1, a1
5999; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6000; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6001; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6002; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6003; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6004; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6005; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6006; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6007; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6008; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6009; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6010; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6011; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6012; LMULMAX2-RV64-NEXT:    sh a1, 52(sp)
6013; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 9
6014; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6015; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6016; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6017; LMULMAX2-RV64-NEXT:    not a1, a1
6018; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6019; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6020; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6021; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6022; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6023; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6024; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6025; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6026; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6027; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6028; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6029; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6030; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6031; LMULMAX2-RV64-NEXT:    sh a1, 50(sp)
6032; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 8
6033; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6034; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6035; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6036; LMULMAX2-RV64-NEXT:    not a1, a1
6037; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6038; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6039; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6040; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6041; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6042; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6043; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6044; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6045; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6046; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6047; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6048; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6049; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6050; LMULMAX2-RV64-NEXT:    sh a1, 48(sp)
6051; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 7
6052; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6053; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6054; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6055; LMULMAX2-RV64-NEXT:    not a1, a1
6056; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6057; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6058; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6059; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6060; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6061; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6062; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6063; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6064; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6065; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6066; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6067; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6068; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6069; LMULMAX2-RV64-NEXT:    sh a1, 46(sp)
6070; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 6
6071; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6072; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6073; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6074; LMULMAX2-RV64-NEXT:    not a1, a1
6075; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6076; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6077; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6078; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6079; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6080; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6081; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6082; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6083; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6084; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6085; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6086; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6087; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6088; LMULMAX2-RV64-NEXT:    sh a1, 44(sp)
6089; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 5
6090; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6091; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6092; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6093; LMULMAX2-RV64-NEXT:    not a1, a1
6094; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6095; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6096; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6097; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6098; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6099; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6100; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6101; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6102; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6103; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6104; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6105; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6106; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6107; LMULMAX2-RV64-NEXT:    sh a1, 42(sp)
6108; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 4
6109; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6110; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6111; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6112; LMULMAX2-RV64-NEXT:    not a1, a1
6113; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6114; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6115; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6116; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6117; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6118; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6119; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6120; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6121; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6122; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6123; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6124; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6125; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6126; LMULMAX2-RV64-NEXT:    sh a1, 40(sp)
6127; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
6128; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6129; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6130; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6131; LMULMAX2-RV64-NEXT:    not a1, a1
6132; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6133; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6134; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6135; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6136; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6137; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6138; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6139; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6140; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6141; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6142; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6143; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6144; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6145; LMULMAX2-RV64-NEXT:    sh a1, 38(sp)
6146; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
6147; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6148; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6149; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6150; LMULMAX2-RV64-NEXT:    not a1, a1
6151; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6152; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6153; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6154; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6155; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6156; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6157; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6158; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6159; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6160; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6161; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6162; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6163; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6164; LMULMAX2-RV64-NEXT:    sh a1, 36(sp)
6165; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 1
6166; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
6167; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6168; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6169; LMULMAX2-RV64-NEXT:    not a1, a1
6170; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6171; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6172; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6173; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6174; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6175; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6176; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6177; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6178; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6179; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6180; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6181; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6182; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6183; LMULMAX2-RV64-NEXT:    sh a1, 34(sp)
6184; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
6185; LMULMAX2-RV64-NEXT:    or a1, a1, a6
6186; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
6187; LMULMAX2-RV64-NEXT:    not a1, a1
6188; LMULMAX2-RV64-NEXT:    and a1, a1, a2
6189; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
6190; LMULMAX2-RV64-NEXT:    and a2, a2, a7
6191; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
6192; LMULMAX2-RV64-NEXT:    and a2, a1, a3
6193; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
6194; LMULMAX2-RV64-NEXT:    and a1, a1, a3
6195; LMULMAX2-RV64-NEXT:    add a1, a2, a1
6196; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
6197; LMULMAX2-RV64-NEXT:    add a1, a1, a2
6198; LMULMAX2-RV64-NEXT:    and a1, a1, a4
6199; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
6200; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
6201; LMULMAX2-RV64-NEXT:    sh a1, 32(sp)
6202; LMULMAX2-RV64-NEXT:    vsetivli zero, 16, e16, m2, ta, mu
6203; LMULMAX2-RV64-NEXT:    addi a1, sp, 32
6204; LMULMAX2-RV64-NEXT:    vle16.v v26, (a1)
6205; LMULMAX2-RV64-NEXT:    vse16.v v26, (a0)
6206; LMULMAX2-RV64-NEXT:    addi sp, s0, -96
6207; LMULMAX2-RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
6208; LMULMAX2-RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
6209; LMULMAX2-RV64-NEXT:    addi sp, sp, 96
6210; LMULMAX2-RV64-NEXT:    ret
6211;
6212; LMULMAX1-RV32-LABEL: cttz_v16i16:
6213; LMULMAX1-RV32:       # %bb.0:
6214; LMULMAX1-RV32-NEXT:    addi sp, sp, -48
6215; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 48
6216; LMULMAX1-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
6217; LMULMAX1-RV32-NEXT:    addi a6, a0, 16
6218; LMULMAX1-RV32-NEXT:    vle16.v v26, (a6)
6219; LMULMAX1-RV32-NEXT:    vle16.v v25, (a0)
6220; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
6221; LMULMAX1-RV32-NEXT:    lui a7, 16
6222; LMULMAX1-RV32-NEXT:    or a1, a1, a7
6223; LMULMAX1-RV32-NEXT:    addi a3, a1, -1
6224; LMULMAX1-RV32-NEXT:    not a1, a1
6225; LMULMAX1-RV32-NEXT:    and a1, a1, a3
6226; LMULMAX1-RV32-NEXT:    srli a4, a1, 1
6227; LMULMAX1-RV32-NEXT:    lui a3, 349525
6228; LMULMAX1-RV32-NEXT:    addi t0, a3, 1365
6229; LMULMAX1-RV32-NEXT:    and a4, a4, t0
6230; LMULMAX1-RV32-NEXT:    sub a1, a1, a4
6231; LMULMAX1-RV32-NEXT:    lui a4, 209715
6232; LMULMAX1-RV32-NEXT:    addi a4, a4, 819
6233; LMULMAX1-RV32-NEXT:    and a5, a1, a4
6234; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
6235; LMULMAX1-RV32-NEXT:    and a1, a1, a4
6236; LMULMAX1-RV32-NEXT:    add a1, a5, a1
6237; LMULMAX1-RV32-NEXT:    srli a5, a1, 4
6238; LMULMAX1-RV32-NEXT:    add a1, a1, a5
6239; LMULMAX1-RV32-NEXT:    lui a5, 61681
6240; LMULMAX1-RV32-NEXT:    addi a5, a5, -241
6241; LMULMAX1-RV32-NEXT:    and a2, a1, a5
6242; LMULMAX1-RV32-NEXT:    lui a1, 4112
6243; LMULMAX1-RV32-NEXT:    addi a1, a1, 257
6244; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6245; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6246; LMULMAX1-RV32-NEXT:    sh a2, 32(sp)
6247; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
6248; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 7
6249; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6250; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6251; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6252; LMULMAX1-RV32-NEXT:    not a2, a2
6253; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6254; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6255; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6256; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6257; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6258; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6259; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6260; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6261; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6262; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6263; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6264; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6265; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6266; LMULMAX1-RV32-NEXT:    sh a2, 46(sp)
6267; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 6
6268; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6269; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6270; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6271; LMULMAX1-RV32-NEXT:    not a2, a2
6272; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6273; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6274; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6275; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6276; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6277; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6278; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6279; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6280; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6281; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6282; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6283; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6284; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6285; LMULMAX1-RV32-NEXT:    sh a2, 44(sp)
6286; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 5
6287; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6288; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6289; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6290; LMULMAX1-RV32-NEXT:    not a2, a2
6291; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6292; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6293; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6294; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6295; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6296; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6297; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6298; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6299; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6300; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6301; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6302; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6303; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6304; LMULMAX1-RV32-NEXT:    sh a2, 42(sp)
6305; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 4
6306; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6307; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6308; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6309; LMULMAX1-RV32-NEXT:    not a2, a2
6310; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6311; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6312; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6313; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6314; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6315; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6316; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6317; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6318; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6319; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6320; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6321; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6322; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6323; LMULMAX1-RV32-NEXT:    sh a2, 40(sp)
6324; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 3
6325; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6326; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6327; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6328; LMULMAX1-RV32-NEXT:    not a2, a2
6329; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6330; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6331; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6332; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6333; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6334; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6335; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6336; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6337; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6338; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6339; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6340; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6341; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6342; LMULMAX1-RV32-NEXT:    sh a2, 38(sp)
6343; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 2
6344; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v27
6345; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6346; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6347; LMULMAX1-RV32-NEXT:    not a2, a2
6348; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6349; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6350; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6351; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6352; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6353; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6354; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6355; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6356; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6357; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6358; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6359; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6360; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6361; LMULMAX1-RV32-NEXT:    sh a2, 36(sp)
6362; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v26, 1
6363; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6364; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6365; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6366; LMULMAX1-RV32-NEXT:    not a2, a2
6367; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6368; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6369; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6370; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6371; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6372; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6373; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6374; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6375; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6376; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6377; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6378; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6379; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6380; LMULMAX1-RV32-NEXT:    sh a2, 34(sp)
6381; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v25
6382; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6383; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6384; LMULMAX1-RV32-NEXT:    not a2, a2
6385; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6386; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6387; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6388; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6389; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6390; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6391; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6392; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6393; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6394; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6395; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6396; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6397; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6398; LMULMAX1-RV32-NEXT:    sh a2, 16(sp)
6399; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 7
6400; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6401; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6402; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6403; LMULMAX1-RV32-NEXT:    not a2, a2
6404; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6405; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6406; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6407; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6408; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6409; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6410; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6411; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6412; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6413; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6414; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6415; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6416; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6417; LMULMAX1-RV32-NEXT:    sh a2, 30(sp)
6418; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 6
6419; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6420; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6421; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6422; LMULMAX1-RV32-NEXT:    not a2, a2
6423; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6424; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6425; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6426; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6427; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6428; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6429; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6430; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6431; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6432; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6433; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6434; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6435; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6436; LMULMAX1-RV32-NEXT:    sh a2, 28(sp)
6437; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 5
6438; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6439; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6440; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6441; LMULMAX1-RV32-NEXT:    not a2, a2
6442; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6443; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6444; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6445; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6446; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6447; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6448; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6449; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6450; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6451; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6452; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6453; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6454; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6455; LMULMAX1-RV32-NEXT:    sh a2, 26(sp)
6456; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 4
6457; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6458; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6459; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6460; LMULMAX1-RV32-NEXT:    not a2, a2
6461; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6462; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6463; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6464; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6465; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6466; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6467; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6468; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6469; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6470; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6471; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6472; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6473; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6474; LMULMAX1-RV32-NEXT:    sh a2, 24(sp)
6475; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
6476; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6477; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6478; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6479; LMULMAX1-RV32-NEXT:    not a2, a2
6480; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6481; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6482; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6483; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6484; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6485; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6486; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6487; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6488; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6489; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6490; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6491; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6492; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6493; LMULMAX1-RV32-NEXT:    sh a2, 22(sp)
6494; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
6495; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
6496; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6497; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6498; LMULMAX1-RV32-NEXT:    not a2, a2
6499; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6500; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6501; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6502; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6503; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6504; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6505; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6506; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6507; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6508; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6509; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6510; LMULMAX1-RV32-NEXT:    mul a2, a2, a1
6511; LMULMAX1-RV32-NEXT:    srli a2, a2, 24
6512; LMULMAX1-RV32-NEXT:    sh a2, 20(sp)
6513; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
6514; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v25
6515; LMULMAX1-RV32-NEXT:    or a2, a2, a7
6516; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
6517; LMULMAX1-RV32-NEXT:    not a2, a2
6518; LMULMAX1-RV32-NEXT:    and a2, a2, a3
6519; LMULMAX1-RV32-NEXT:    srli a3, a2, 1
6520; LMULMAX1-RV32-NEXT:    and a3, a3, t0
6521; LMULMAX1-RV32-NEXT:    sub a2, a2, a3
6522; LMULMAX1-RV32-NEXT:    and a3, a2, a4
6523; LMULMAX1-RV32-NEXT:    srli a2, a2, 2
6524; LMULMAX1-RV32-NEXT:    and a2, a2, a4
6525; LMULMAX1-RV32-NEXT:    add a2, a3, a2
6526; LMULMAX1-RV32-NEXT:    srli a3, a2, 4
6527; LMULMAX1-RV32-NEXT:    add a2, a2, a3
6528; LMULMAX1-RV32-NEXT:    and a2, a2, a5
6529; LMULMAX1-RV32-NEXT:    mul a1, a2, a1
6530; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
6531; LMULMAX1-RV32-NEXT:    sh a1, 18(sp)
6532; LMULMAX1-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
6533; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
6534; LMULMAX1-RV32-NEXT:    vle16.v v25, (a1)
6535; LMULMAX1-RV32-NEXT:    addi a1, sp, 32
6536; LMULMAX1-RV32-NEXT:    vle16.v v26, (a1)
6537; LMULMAX1-RV32-NEXT:    vse16.v v25, (a0)
6538; LMULMAX1-RV32-NEXT:    vse16.v v26, (a6)
6539; LMULMAX1-RV32-NEXT:    addi sp, sp, 48
6540; LMULMAX1-RV32-NEXT:    ret
6541;
6542; LMULMAX1-RV64-LABEL: cttz_v16i16:
6543; LMULMAX1-RV64:       # %bb.0:
6544; LMULMAX1-RV64-NEXT:    addi sp, sp, -48
6545; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 48
6546; LMULMAX1-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
6547; LMULMAX1-RV64-NEXT:    addi a6, a0, 16
6548; LMULMAX1-RV64-NEXT:    vle16.v v26, (a6)
6549; LMULMAX1-RV64-NEXT:    vle16.v v25, (a0)
6550; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
6551; LMULMAX1-RV64-NEXT:    lui a7, 16
6552; LMULMAX1-RV64-NEXT:    or a1, a1, a7
6553; LMULMAX1-RV64-NEXT:    addi a3, a1, -1
6554; LMULMAX1-RV64-NEXT:    not a1, a1
6555; LMULMAX1-RV64-NEXT:    and a1, a1, a3
6556; LMULMAX1-RV64-NEXT:    srli a4, a1, 1
6557; LMULMAX1-RV64-NEXT:    lui a3, 21845
6558; LMULMAX1-RV64-NEXT:    addiw a3, a3, 1365
6559; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
6560; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
6561; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
6562; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
6563; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
6564; LMULMAX1-RV64-NEXT:    addi t0, a3, 1365
6565; LMULMAX1-RV64-NEXT:    and a4, a4, t0
6566; LMULMAX1-RV64-NEXT:    sub a1, a1, a4
6567; LMULMAX1-RV64-NEXT:    lui a4, 13107
6568; LMULMAX1-RV64-NEXT:    addiw a4, a4, 819
6569; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
6570; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
6571; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
6572; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
6573; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
6574; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
6575; LMULMAX1-RV64-NEXT:    and a5, a1, a4
6576; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
6577; LMULMAX1-RV64-NEXT:    and a1, a1, a4
6578; LMULMAX1-RV64-NEXT:    add a1, a5, a1
6579; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
6580; LMULMAX1-RV64-NEXT:    add a1, a1, a5
6581; LMULMAX1-RV64-NEXT:    lui a5, 3855
6582; LMULMAX1-RV64-NEXT:    addiw a5, a5, 241
6583; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
6584; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
6585; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
6586; LMULMAX1-RV64-NEXT:    addi a5, a5, 241
6587; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
6588; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
6589; LMULMAX1-RV64-NEXT:    and a2, a1, a5
6590; LMULMAX1-RV64-NEXT:    lui a1, 4112
6591; LMULMAX1-RV64-NEXT:    addiw a1, a1, 257
6592; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
6593; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
6594; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
6595; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
6596; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6597; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6598; LMULMAX1-RV64-NEXT:    sh a2, 32(sp)
6599; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e16, m1, ta, mu
6600; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 7
6601; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6602; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6603; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6604; LMULMAX1-RV64-NEXT:    not a2, a2
6605; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6606; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6607; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6608; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6609; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6610; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6611; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6612; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6613; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6614; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6615; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6616; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6617; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6618; LMULMAX1-RV64-NEXT:    sh a2, 46(sp)
6619; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 6
6620; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6621; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6622; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6623; LMULMAX1-RV64-NEXT:    not a2, a2
6624; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6625; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6626; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6627; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6628; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6629; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6630; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6631; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6632; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6633; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6634; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6635; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6636; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6637; LMULMAX1-RV64-NEXT:    sh a2, 44(sp)
6638; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 5
6639; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6640; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6641; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6642; LMULMAX1-RV64-NEXT:    not a2, a2
6643; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6644; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6645; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6646; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6647; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6648; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6649; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6650; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6651; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6652; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6653; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6654; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6655; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6656; LMULMAX1-RV64-NEXT:    sh a2, 42(sp)
6657; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 4
6658; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6659; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6660; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6661; LMULMAX1-RV64-NEXT:    not a2, a2
6662; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6663; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6664; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6665; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6666; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6667; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6668; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6669; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6670; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6671; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6672; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6673; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6674; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6675; LMULMAX1-RV64-NEXT:    sh a2, 40(sp)
6676; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 3
6677; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6678; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6679; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6680; LMULMAX1-RV64-NEXT:    not a2, a2
6681; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6682; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6683; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6684; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6685; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6686; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6687; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6688; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6689; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6690; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6691; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6692; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6693; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6694; LMULMAX1-RV64-NEXT:    sh a2, 38(sp)
6695; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 2
6696; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
6697; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6698; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6699; LMULMAX1-RV64-NEXT:    not a2, a2
6700; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6701; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6702; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6703; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6704; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6705; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6706; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6707; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6708; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6709; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6710; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6711; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6712; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6713; LMULMAX1-RV64-NEXT:    sh a2, 36(sp)
6714; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v26, 1
6715; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6716; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6717; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6718; LMULMAX1-RV64-NEXT:    not a2, a2
6719; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6720; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6721; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6722; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6723; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6724; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6725; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6726; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6727; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6728; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6729; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6730; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6731; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6732; LMULMAX1-RV64-NEXT:    sh a2, 34(sp)
6733; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 7
6734; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6735; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6736; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6737; LMULMAX1-RV64-NEXT:    not a2, a2
6738; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6739; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6740; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6741; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6742; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6743; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6744; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6745; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6746; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6747; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6748; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6749; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6750; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6751; LMULMAX1-RV64-NEXT:    sh a2, 30(sp)
6752; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 6
6753; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6754; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6755; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6756; LMULMAX1-RV64-NEXT:    not a2, a2
6757; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6758; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6759; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6760; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6761; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6762; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6763; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6764; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6765; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6766; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6767; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6768; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6769; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6770; LMULMAX1-RV64-NEXT:    sh a2, 28(sp)
6771; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 5
6772; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6773; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6774; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6775; LMULMAX1-RV64-NEXT:    not a2, a2
6776; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6777; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6778; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6779; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6780; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6781; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6782; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6783; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6784; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6785; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6786; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6787; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6788; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6789; LMULMAX1-RV64-NEXT:    sh a2, 26(sp)
6790; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 4
6791; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6792; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6793; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6794; LMULMAX1-RV64-NEXT:    not a2, a2
6795; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6796; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6797; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6798; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6799; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6800; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6801; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6802; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6803; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6804; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6805; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6806; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6807; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6808; LMULMAX1-RV64-NEXT:    sh a2, 24(sp)
6809; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
6810; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6811; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6812; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6813; LMULMAX1-RV64-NEXT:    not a2, a2
6814; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6815; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6816; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6817; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6818; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6819; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6820; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6821; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6822; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6823; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6824; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6825; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6826; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6827; LMULMAX1-RV64-NEXT:    sh a2, 22(sp)
6828; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
6829; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6830; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6831; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6832; LMULMAX1-RV64-NEXT:    not a2, a2
6833; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6834; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6835; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6836; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6837; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6838; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6839; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6840; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6841; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6842; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6843; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6844; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6845; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6846; LMULMAX1-RV64-NEXT:    sh a2, 20(sp)
6847; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
6848; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
6849; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6850; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6851; LMULMAX1-RV64-NEXT:    not a2, a2
6852; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6853; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6854; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6855; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6856; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6857; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6858; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6859; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6860; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6861; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6862; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6863; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
6864; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
6865; LMULMAX1-RV64-NEXT:    sh a2, 18(sp)
6866; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
6867; LMULMAX1-RV64-NEXT:    or a2, a2, a7
6868; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
6869; LMULMAX1-RV64-NEXT:    not a2, a2
6870; LMULMAX1-RV64-NEXT:    and a2, a2, a3
6871; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
6872; LMULMAX1-RV64-NEXT:    and a3, a3, t0
6873; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
6874; LMULMAX1-RV64-NEXT:    and a3, a2, a4
6875; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
6876; LMULMAX1-RV64-NEXT:    and a2, a2, a4
6877; LMULMAX1-RV64-NEXT:    add a2, a3, a2
6878; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
6879; LMULMAX1-RV64-NEXT:    add a2, a2, a3
6880; LMULMAX1-RV64-NEXT:    and a2, a2, a5
6881; LMULMAX1-RV64-NEXT:    mul a1, a2, a1
6882; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
6883; LMULMAX1-RV64-NEXT:    sh a1, 16(sp)
6884; LMULMAX1-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
6885; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
6886; LMULMAX1-RV64-NEXT:    vle16.v v25, (a1)
6887; LMULMAX1-RV64-NEXT:    addi a1, sp, 32
6888; LMULMAX1-RV64-NEXT:    vle16.v v26, (a1)
6889; LMULMAX1-RV64-NEXT:    vse16.v v25, (a0)
6890; LMULMAX1-RV64-NEXT:    vse16.v v26, (a6)
6891; LMULMAX1-RV64-NEXT:    addi sp, sp, 48
6892; LMULMAX1-RV64-NEXT:    ret
6893  %a = load <16 x i16>, <16 x i16>* %x
6894  %b = load <16 x i16>, <16 x i16>* %y
6895  %c = call <16 x i16> @llvm.cttz.v16i16(<16 x i16> %a, i1 false)
6896  store <16 x i16> %c, <16 x i16>* %x
6897  ret void
6898}
6899declare <16 x i16> @llvm.cttz.v16i16(<16 x i16>, i1)
6900
6901define void @cttz_v8i32(<8 x i32>* %x, <8 x i32>* %y) {
6902; LMULMAX2-RV32-LABEL: cttz_v8i32:
6903; LMULMAX2-RV32:       # %bb.0:
6904; LMULMAX2-RV32-NEXT:    addi sp, sp, -96
6905; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 96
6906; LMULMAX2-RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
6907; LMULMAX2-RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
6908; LMULMAX2-RV32-NEXT:    .cfi_offset ra, -4
6909; LMULMAX2-RV32-NEXT:    .cfi_offset s0, -8
6910; LMULMAX2-RV32-NEXT:    addi s0, sp, 96
6911; LMULMAX2-RV32-NEXT:    .cfi_def_cfa s0, 0
6912; LMULMAX2-RV32-NEXT:    andi sp, sp, -32
6913; LMULMAX2-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
6914; LMULMAX2-RV32-NEXT:    vle32.v v26, (a0)
6915; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
6916; LMULMAX2-RV32-NEXT:    addi a2, a1, -1
6917; LMULMAX2-RV32-NEXT:    not a1, a1
6918; LMULMAX2-RV32-NEXT:    and a2, a1, a2
6919; LMULMAX2-RV32-NEXT:    srli a3, a2, 1
6920; LMULMAX2-RV32-NEXT:    lui a1, 349525
6921; LMULMAX2-RV32-NEXT:    addi a6, a1, 1365
6922; LMULMAX2-RV32-NEXT:    and a3, a3, a6
6923; LMULMAX2-RV32-NEXT:    sub a3, a2, a3
6924; LMULMAX2-RV32-NEXT:    lui a2, 209715
6925; LMULMAX2-RV32-NEXT:    addi a2, a2, 819
6926; LMULMAX2-RV32-NEXT:    and a4, a3, a2
6927; LMULMAX2-RV32-NEXT:    srli a3, a3, 2
6928; LMULMAX2-RV32-NEXT:    and a3, a3, a2
6929; LMULMAX2-RV32-NEXT:    add a3, a4, a3
6930; LMULMAX2-RV32-NEXT:    srli a4, a3, 4
6931; LMULMAX2-RV32-NEXT:    add a4, a3, a4
6932; LMULMAX2-RV32-NEXT:    lui a3, 61681
6933; LMULMAX2-RV32-NEXT:    addi a3, a3, -241
6934; LMULMAX2-RV32-NEXT:    and a5, a4, a3
6935; LMULMAX2-RV32-NEXT:    lui a4, 4112
6936; LMULMAX2-RV32-NEXT:    addi a4, a4, 257
6937; LMULMAX2-RV32-NEXT:    mul a5, a5, a4
6938; LMULMAX2-RV32-NEXT:    srli a5, a5, 24
6939; LMULMAX2-RV32-NEXT:    sw a5, 32(sp)
6940; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e32, m2, ta, mu
6941; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 7
6942; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v28
6943; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
6944; LMULMAX2-RV32-NEXT:    not a5, a5
6945; LMULMAX2-RV32-NEXT:    and a1, a5, a1
6946; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
6947; LMULMAX2-RV32-NEXT:    and a5, a5, a6
6948; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
6949; LMULMAX2-RV32-NEXT:    and a5, a1, a2
6950; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
6951; LMULMAX2-RV32-NEXT:    and a1, a1, a2
6952; LMULMAX2-RV32-NEXT:    add a1, a5, a1
6953; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
6954; LMULMAX2-RV32-NEXT:    add a1, a1, a5
6955; LMULMAX2-RV32-NEXT:    and a1, a1, a3
6956; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
6957; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
6958; LMULMAX2-RV32-NEXT:    sw a1, 60(sp)
6959; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 6
6960; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
6961; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
6962; LMULMAX2-RV32-NEXT:    not a1, a1
6963; LMULMAX2-RV32-NEXT:    and a1, a1, a5
6964; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
6965; LMULMAX2-RV32-NEXT:    and a5, a5, a6
6966; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
6967; LMULMAX2-RV32-NEXT:    and a5, a1, a2
6968; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
6969; LMULMAX2-RV32-NEXT:    and a1, a1, a2
6970; LMULMAX2-RV32-NEXT:    add a1, a5, a1
6971; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
6972; LMULMAX2-RV32-NEXT:    add a1, a1, a5
6973; LMULMAX2-RV32-NEXT:    and a1, a1, a3
6974; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
6975; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
6976; LMULMAX2-RV32-NEXT:    sw a1, 56(sp)
6977; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 5
6978; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
6979; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
6980; LMULMAX2-RV32-NEXT:    not a1, a1
6981; LMULMAX2-RV32-NEXT:    and a1, a1, a5
6982; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
6983; LMULMAX2-RV32-NEXT:    and a5, a5, a6
6984; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
6985; LMULMAX2-RV32-NEXT:    and a5, a1, a2
6986; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
6987; LMULMAX2-RV32-NEXT:    and a1, a1, a2
6988; LMULMAX2-RV32-NEXT:    add a1, a5, a1
6989; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
6990; LMULMAX2-RV32-NEXT:    add a1, a1, a5
6991; LMULMAX2-RV32-NEXT:    and a1, a1, a3
6992; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
6993; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
6994; LMULMAX2-RV32-NEXT:    sw a1, 52(sp)
6995; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 4
6996; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
6997; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
6998; LMULMAX2-RV32-NEXT:    not a1, a1
6999; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7000; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7001; LMULMAX2-RV32-NEXT:    and a5, a5, a6
7002; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7003; LMULMAX2-RV32-NEXT:    and a5, a1, a2
7004; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7005; LMULMAX2-RV32-NEXT:    and a1, a1, a2
7006; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7007; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7008; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7009; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7010; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
7011; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7012; LMULMAX2-RV32-NEXT:    sw a1, 48(sp)
7013; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 3
7014; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7015; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7016; LMULMAX2-RV32-NEXT:    not a1, a1
7017; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7018; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7019; LMULMAX2-RV32-NEXT:    and a5, a5, a6
7020; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7021; LMULMAX2-RV32-NEXT:    and a5, a1, a2
7022; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7023; LMULMAX2-RV32-NEXT:    and a1, a1, a2
7024; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7025; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7026; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7027; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7028; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
7029; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7030; LMULMAX2-RV32-NEXT:    sw a1, 44(sp)
7031; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 2
7032; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7033; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7034; LMULMAX2-RV32-NEXT:    not a1, a1
7035; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7036; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7037; LMULMAX2-RV32-NEXT:    and a5, a5, a6
7038; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7039; LMULMAX2-RV32-NEXT:    and a5, a1, a2
7040; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7041; LMULMAX2-RV32-NEXT:    and a1, a1, a2
7042; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7043; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7044; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7045; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7046; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
7047; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7048; LMULMAX2-RV32-NEXT:    sw a1, 40(sp)
7049; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v26, 1
7050; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
7051; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7052; LMULMAX2-RV32-NEXT:    not a1, a1
7053; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7054; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7055; LMULMAX2-RV32-NEXT:    and a5, a5, a6
7056; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7057; LMULMAX2-RV32-NEXT:    and a5, a1, a2
7058; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7059; LMULMAX2-RV32-NEXT:    and a1, a1, a2
7060; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7061; LMULMAX2-RV32-NEXT:    srli a2, a1, 4
7062; LMULMAX2-RV32-NEXT:    add a1, a1, a2
7063; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7064; LMULMAX2-RV32-NEXT:    mul a1, a1, a4
7065; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7066; LMULMAX2-RV32-NEXT:    sw a1, 36(sp)
7067; LMULMAX2-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
7068; LMULMAX2-RV32-NEXT:    addi a1, sp, 32
7069; LMULMAX2-RV32-NEXT:    vle32.v v26, (a1)
7070; LMULMAX2-RV32-NEXT:    vse32.v v26, (a0)
7071; LMULMAX2-RV32-NEXT:    addi sp, s0, -96
7072; LMULMAX2-RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
7073; LMULMAX2-RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
7074; LMULMAX2-RV32-NEXT:    addi sp, sp, 96
7075; LMULMAX2-RV32-NEXT:    ret
7076;
7077; LMULMAX2-RV64-LABEL: cttz_v8i32:
7078; LMULMAX2-RV64:       # %bb.0:
7079; LMULMAX2-RV64-NEXT:    addi sp, sp, -96
7080; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 96
7081; LMULMAX2-RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
7082; LMULMAX2-RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
7083; LMULMAX2-RV64-NEXT:    .cfi_offset ra, -8
7084; LMULMAX2-RV64-NEXT:    .cfi_offset s0, -16
7085; LMULMAX2-RV64-NEXT:    addi s0, sp, 96
7086; LMULMAX2-RV64-NEXT:    .cfi_def_cfa s0, 0
7087; LMULMAX2-RV64-NEXT:    andi sp, sp, -32
7088; LMULMAX2-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
7089; LMULMAX2-RV64-NEXT:    vle32.v v26, (a0)
7090; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e32, m2, ta, mu
7091; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 7
7092; LMULMAX2-RV64-NEXT:    vmv.x.s a2, v28
7093; LMULMAX2-RV64-NEXT:    addi a1, zero, 1
7094; LMULMAX2-RV64-NEXT:    slli a6, a1, 32
7095; LMULMAX2-RV64-NEXT:    or a2, a2, a6
7096; LMULMAX2-RV64-NEXT:    addi a3, a2, -1
7097; LMULMAX2-RV64-NEXT:    not a2, a2
7098; LMULMAX2-RV64-NEXT:    and a3, a2, a3
7099; LMULMAX2-RV64-NEXT:    srli a4, a3, 1
7100; LMULMAX2-RV64-NEXT:    lui a2, 21845
7101; LMULMAX2-RV64-NEXT:    addiw a2, a2, 1365
7102; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7103; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
7104; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7105; LMULMAX2-RV64-NEXT:    addi a2, a2, 1365
7106; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7107; LMULMAX2-RV64-NEXT:    addi a7, a2, 1365
7108; LMULMAX2-RV64-NEXT:    and a4, a4, a7
7109; LMULMAX2-RV64-NEXT:    sub a4, a3, a4
7110; LMULMAX2-RV64-NEXT:    lui a3, 13107
7111; LMULMAX2-RV64-NEXT:    addiw a3, a3, 819
7112; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
7113; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
7114; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
7115; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
7116; LMULMAX2-RV64-NEXT:    slli a3, a3, 12
7117; LMULMAX2-RV64-NEXT:    addi a3, a3, 819
7118; LMULMAX2-RV64-NEXT:    and a5, a4, a3
7119; LMULMAX2-RV64-NEXT:    srli a4, a4, 2
7120; LMULMAX2-RV64-NEXT:    and a4, a4, a3
7121; LMULMAX2-RV64-NEXT:    add a4, a5, a4
7122; LMULMAX2-RV64-NEXT:    srli a5, a4, 4
7123; LMULMAX2-RV64-NEXT:    add a5, a4, a5
7124; LMULMAX2-RV64-NEXT:    lui a4, 3855
7125; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
7126; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7127; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
7128; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7129; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
7130; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7131; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
7132; LMULMAX2-RV64-NEXT:    and a1, a5, a4
7133; LMULMAX2-RV64-NEXT:    lui a5, 4112
7134; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
7135; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
7136; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
7137; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
7138; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
7139; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7140; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7141; LMULMAX2-RV64-NEXT:    sw a1, 60(sp)
7142; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 6
7143; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7144; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7145; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7146; LMULMAX2-RV64-NEXT:    not a1, a1
7147; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7148; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7149; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7150; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7151; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7152; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7153; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7154; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7155; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7156; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7157; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7158; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7159; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7160; LMULMAX2-RV64-NEXT:    sw a1, 56(sp)
7161; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 5
7162; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7163; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7164; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7165; LMULMAX2-RV64-NEXT:    not a1, a1
7166; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7167; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7168; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7169; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7170; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7171; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7172; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7173; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7174; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7175; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7176; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7177; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7178; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7179; LMULMAX2-RV64-NEXT:    sw a1, 52(sp)
7180; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 4
7181; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7182; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7183; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7184; LMULMAX2-RV64-NEXT:    not a1, a1
7185; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7186; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7187; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7188; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7189; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7190; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7191; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7192; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7193; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7194; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7195; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7196; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7197; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7198; LMULMAX2-RV64-NEXT:    sw a1, 48(sp)
7199; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
7200; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7201; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7202; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7203; LMULMAX2-RV64-NEXT:    not a1, a1
7204; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7205; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7206; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7207; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7208; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7209; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7210; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7211; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7212; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7213; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7214; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7215; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7216; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7217; LMULMAX2-RV64-NEXT:    sw a1, 44(sp)
7218; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
7219; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7220; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7221; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7222; LMULMAX2-RV64-NEXT:    not a1, a1
7223; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7224; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7225; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7226; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7227; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7228; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7229; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7230; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7231; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7232; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7233; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7234; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7235; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7236; LMULMAX2-RV64-NEXT:    sw a1, 40(sp)
7237; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 1
7238; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7239; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7240; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7241; LMULMAX2-RV64-NEXT:    not a1, a1
7242; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7243; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7244; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7245; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7246; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7247; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7248; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7249; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7250; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7251; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7252; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7253; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7254; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7255; LMULMAX2-RV64-NEXT:    sw a1, 36(sp)
7256; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
7257; LMULMAX2-RV64-NEXT:    or a1, a1, a6
7258; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7259; LMULMAX2-RV64-NEXT:    not a1, a1
7260; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7261; LMULMAX2-RV64-NEXT:    srli a2, a1, 1
7262; LMULMAX2-RV64-NEXT:    and a2, a2, a7
7263; LMULMAX2-RV64-NEXT:    sub a1, a1, a2
7264; LMULMAX2-RV64-NEXT:    and a2, a1, a3
7265; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7266; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7267; LMULMAX2-RV64-NEXT:    add a1, a2, a1
7268; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7269; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7270; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7271; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7272; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7273; LMULMAX2-RV64-NEXT:    sw a1, 32(sp)
7274; LMULMAX2-RV64-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
7275; LMULMAX2-RV64-NEXT:    addi a1, sp, 32
7276; LMULMAX2-RV64-NEXT:    vle32.v v26, (a1)
7277; LMULMAX2-RV64-NEXT:    vse32.v v26, (a0)
7278; LMULMAX2-RV64-NEXT:    addi sp, s0, -96
7279; LMULMAX2-RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
7280; LMULMAX2-RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
7281; LMULMAX2-RV64-NEXT:    addi sp, sp, 96
7282; LMULMAX2-RV64-NEXT:    ret
7283;
7284; LMULMAX1-RV32-LABEL: cttz_v8i32:
7285; LMULMAX1-RV32:       # %bb.0:
7286; LMULMAX1-RV32-NEXT:    addi sp, sp, -48
7287; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 48
7288; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7289; LMULMAX1-RV32-NEXT:    addi a6, a0, 16
7290; LMULMAX1-RV32-NEXT:    vle32.v v26, (a6)
7291; LMULMAX1-RV32-NEXT:    vle32.v v25, (a0)
7292; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v26
7293; LMULMAX1-RV32-NEXT:    addi a3, a2, -1
7294; LMULMAX1-RV32-NEXT:    not a2, a2
7295; LMULMAX1-RV32-NEXT:    and a3, a2, a3
7296; LMULMAX1-RV32-NEXT:    srli a4, a3, 1
7297; LMULMAX1-RV32-NEXT:    lui a2, 349525
7298; LMULMAX1-RV32-NEXT:    addi a7, a2, 1365
7299; LMULMAX1-RV32-NEXT:    and a4, a4, a7
7300; LMULMAX1-RV32-NEXT:    sub a4, a3, a4
7301; LMULMAX1-RV32-NEXT:    lui a3, 209715
7302; LMULMAX1-RV32-NEXT:    addi a3, a3, 819
7303; LMULMAX1-RV32-NEXT:    and a5, a4, a3
7304; LMULMAX1-RV32-NEXT:    srli a4, a4, 2
7305; LMULMAX1-RV32-NEXT:    and a4, a4, a3
7306; LMULMAX1-RV32-NEXT:    add a4, a5, a4
7307; LMULMAX1-RV32-NEXT:    srli a5, a4, 4
7308; LMULMAX1-RV32-NEXT:    add a5, a4, a5
7309; LMULMAX1-RV32-NEXT:    lui a4, 61681
7310; LMULMAX1-RV32-NEXT:    addi a4, a4, -241
7311; LMULMAX1-RV32-NEXT:    and a1, a5, a4
7312; LMULMAX1-RV32-NEXT:    lui a5, 4112
7313; LMULMAX1-RV32-NEXT:    addi a5, a5, 257
7314; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7315; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7316; LMULMAX1-RV32-NEXT:    sw a1, 32(sp)
7317; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
7318; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 3
7319; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
7320; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7321; LMULMAX1-RV32-NEXT:    not a1, a1
7322; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7323; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7324; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7325; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7326; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7327; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7328; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7329; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7330; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7331; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7332; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7333; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7334; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7335; LMULMAX1-RV32-NEXT:    sw a1, 44(sp)
7336; LMULMAX1-RV32-NEXT:    vslidedown.vi v27, v26, 2
7337; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
7338; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7339; LMULMAX1-RV32-NEXT:    not a1, a1
7340; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7341; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7342; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7343; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7344; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7345; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7346; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7347; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7348; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7349; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7350; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7351; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7352; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7353; LMULMAX1-RV32-NEXT:    sw a1, 40(sp)
7354; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v26, 1
7355; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
7356; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7357; LMULMAX1-RV32-NEXT:    not a1, a1
7358; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7359; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7360; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7361; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7362; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7363; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7364; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7365; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7366; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7367; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7368; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7369; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7370; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7371; LMULMAX1-RV32-NEXT:    sw a1, 36(sp)
7372; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
7373; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7374; LMULMAX1-RV32-NEXT:    not a1, a1
7375; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7376; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7377; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7378; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7379; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7380; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7381; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7382; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7383; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7384; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7385; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7386; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7387; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7388; LMULMAX1-RV32-NEXT:    sw a1, 16(sp)
7389; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 3
7390; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
7391; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7392; LMULMAX1-RV32-NEXT:    not a1, a1
7393; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7394; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7395; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7396; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7397; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7398; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7399; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7400; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7401; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7402; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7403; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7404; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7405; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7406; LMULMAX1-RV32-NEXT:    sw a1, 28(sp)
7407; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v25, 2
7408; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
7409; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7410; LMULMAX1-RV32-NEXT:    not a1, a1
7411; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7412; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7413; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7414; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7415; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7416; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7417; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7418; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7419; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7420; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7421; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7422; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7423; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7424; LMULMAX1-RV32-NEXT:    sw a1, 24(sp)
7425; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
7426; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
7427; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
7428; LMULMAX1-RV32-NEXT:    not a1, a1
7429; LMULMAX1-RV32-NEXT:    and a1, a1, a2
7430; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
7431; LMULMAX1-RV32-NEXT:    and a2, a2, a7
7432; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
7433; LMULMAX1-RV32-NEXT:    and a2, a1, a3
7434; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
7435; LMULMAX1-RV32-NEXT:    and a1, a1, a3
7436; LMULMAX1-RV32-NEXT:    add a1, a2, a1
7437; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
7438; LMULMAX1-RV32-NEXT:    add a1, a1, a2
7439; LMULMAX1-RV32-NEXT:    and a1, a1, a4
7440; LMULMAX1-RV32-NEXT:    mul a1, a1, a5
7441; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
7442; LMULMAX1-RV32-NEXT:    sw a1, 20(sp)
7443; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7444; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
7445; LMULMAX1-RV32-NEXT:    vle32.v v25, (a1)
7446; LMULMAX1-RV32-NEXT:    addi a1, sp, 32
7447; LMULMAX1-RV32-NEXT:    vle32.v v26, (a1)
7448; LMULMAX1-RV32-NEXT:    vse32.v v25, (a0)
7449; LMULMAX1-RV32-NEXT:    vse32.v v26, (a6)
7450; LMULMAX1-RV32-NEXT:    addi sp, sp, 48
7451; LMULMAX1-RV32-NEXT:    ret
7452;
7453; LMULMAX1-RV64-LABEL: cttz_v8i32:
7454; LMULMAX1-RV64:       # %bb.0:
7455; LMULMAX1-RV64-NEXT:    addi sp, sp, -48
7456; LMULMAX1-RV64-NEXT:    .cfi_def_cfa_offset 48
7457; LMULMAX1-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7458; LMULMAX1-RV64-NEXT:    addi a6, a0, 16
7459; LMULMAX1-RV64-NEXT:    vle32.v v26, (a6)
7460; LMULMAX1-RV64-NEXT:    vle32.v v25, (a0)
7461; LMULMAX1-RV64-NEXT:    vmv.x.s a1, v26
7462; LMULMAX1-RV64-NEXT:    addi a2, zero, 1
7463; LMULMAX1-RV64-NEXT:    slli a7, a2, 32
7464; LMULMAX1-RV64-NEXT:    or a1, a1, a7
7465; LMULMAX1-RV64-NEXT:    addi a3, a1, -1
7466; LMULMAX1-RV64-NEXT:    not a1, a1
7467; LMULMAX1-RV64-NEXT:    and a1, a1, a3
7468; LMULMAX1-RV64-NEXT:    srli a4, a1, 1
7469; LMULMAX1-RV64-NEXT:    lui a3, 21845
7470; LMULMAX1-RV64-NEXT:    addiw a3, a3, 1365
7471; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
7472; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
7473; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
7474; LMULMAX1-RV64-NEXT:    addi a3, a3, 1365
7475; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
7476; LMULMAX1-RV64-NEXT:    addi t0, a3, 1365
7477; LMULMAX1-RV64-NEXT:    and a4, a4, t0
7478; LMULMAX1-RV64-NEXT:    sub a1, a1, a4
7479; LMULMAX1-RV64-NEXT:    lui a4, 13107
7480; LMULMAX1-RV64-NEXT:    addiw a4, a4, 819
7481; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
7482; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
7483; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
7484; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
7485; LMULMAX1-RV64-NEXT:    slli a4, a4, 12
7486; LMULMAX1-RV64-NEXT:    addi a4, a4, 819
7487; LMULMAX1-RV64-NEXT:    and a5, a1, a4
7488; LMULMAX1-RV64-NEXT:    srli a1, a1, 2
7489; LMULMAX1-RV64-NEXT:    and a1, a1, a4
7490; LMULMAX1-RV64-NEXT:    add a1, a5, a1
7491; LMULMAX1-RV64-NEXT:    srli a5, a1, 4
7492; LMULMAX1-RV64-NEXT:    add a1, a1, a5
7493; LMULMAX1-RV64-NEXT:    lui a5, 3855
7494; LMULMAX1-RV64-NEXT:    addiw a5, a5, 241
7495; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
7496; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
7497; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
7498; LMULMAX1-RV64-NEXT:    addi a5, a5, 241
7499; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
7500; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
7501; LMULMAX1-RV64-NEXT:    and a2, a1, a5
7502; LMULMAX1-RV64-NEXT:    lui a1, 4112
7503; LMULMAX1-RV64-NEXT:    addiw a1, a1, 257
7504; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
7505; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
7506; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
7507; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
7508; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7509; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7510; LMULMAX1-RV64-NEXT:    sw a2, 32(sp)
7511; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e32, m1, ta, mu
7512; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 3
7513; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
7514; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7515; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7516; LMULMAX1-RV64-NEXT:    not a2, a2
7517; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7518; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7519; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7520; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7521; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7522; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7523; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7524; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7525; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7526; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7527; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7528; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7529; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7530; LMULMAX1-RV64-NEXT:    sw a2, 44(sp)
7531; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 2
7532; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
7533; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7534; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7535; LMULMAX1-RV64-NEXT:    not a2, a2
7536; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7537; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7538; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7539; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7540; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7541; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7542; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7543; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7544; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7545; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7546; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7547; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7548; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7549; LMULMAX1-RV64-NEXT:    sw a2, 40(sp)
7550; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v26, 1
7551; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
7552; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7553; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7554; LMULMAX1-RV64-NEXT:    not a2, a2
7555; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7556; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7557; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7558; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7559; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7560; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7561; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7562; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7563; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7564; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7565; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7566; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7567; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7568; LMULMAX1-RV64-NEXT:    sw a2, 36(sp)
7569; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 3
7570; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
7571; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7572; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7573; LMULMAX1-RV64-NEXT:    not a2, a2
7574; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7575; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7576; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7577; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7578; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7579; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7580; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7581; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7582; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7583; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7584; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7585; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7586; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7587; LMULMAX1-RV64-NEXT:    sw a2, 28(sp)
7588; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 2
7589; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
7590; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7591; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7592; LMULMAX1-RV64-NEXT:    not a2, a2
7593; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7594; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7595; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7596; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7597; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7598; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7599; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7600; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7601; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7602; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7603; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7604; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7605; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7606; LMULMAX1-RV64-NEXT:    sw a2, 24(sp)
7607; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
7608; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
7609; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7610; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7611; LMULMAX1-RV64-NEXT:    not a2, a2
7612; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7613; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7614; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7615; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7616; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7617; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7618; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7619; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7620; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7621; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7622; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7623; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
7624; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
7625; LMULMAX1-RV64-NEXT:    sw a2, 20(sp)
7626; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
7627; LMULMAX1-RV64-NEXT:    or a2, a2, a7
7628; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
7629; LMULMAX1-RV64-NEXT:    not a2, a2
7630; LMULMAX1-RV64-NEXT:    and a2, a2, a3
7631; LMULMAX1-RV64-NEXT:    srli a3, a2, 1
7632; LMULMAX1-RV64-NEXT:    and a3, a3, t0
7633; LMULMAX1-RV64-NEXT:    sub a2, a2, a3
7634; LMULMAX1-RV64-NEXT:    and a3, a2, a4
7635; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
7636; LMULMAX1-RV64-NEXT:    and a2, a2, a4
7637; LMULMAX1-RV64-NEXT:    add a2, a3, a2
7638; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
7639; LMULMAX1-RV64-NEXT:    add a2, a2, a3
7640; LMULMAX1-RV64-NEXT:    and a2, a2, a5
7641; LMULMAX1-RV64-NEXT:    mul a1, a2, a1
7642; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
7643; LMULMAX1-RV64-NEXT:    sw a1, 16(sp)
7644; LMULMAX1-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
7645; LMULMAX1-RV64-NEXT:    addi a1, sp, 16
7646; LMULMAX1-RV64-NEXT:    vle32.v v25, (a1)
7647; LMULMAX1-RV64-NEXT:    addi a1, sp, 32
7648; LMULMAX1-RV64-NEXT:    vle32.v v26, (a1)
7649; LMULMAX1-RV64-NEXT:    vse32.v v25, (a0)
7650; LMULMAX1-RV64-NEXT:    vse32.v v26, (a6)
7651; LMULMAX1-RV64-NEXT:    addi sp, sp, 48
7652; LMULMAX1-RV64-NEXT:    ret
7653  %a = load <8 x i32>, <8 x i32>* %x
7654  %b = load <8 x i32>, <8 x i32>* %y
7655  %c = call <8 x i32> @llvm.cttz.v8i32(<8 x i32> %a, i1 false)
7656  store <8 x i32> %c, <8 x i32>* %x
7657  ret void
7658}
7659declare <8 x i32> @llvm.cttz.v8i32(<8 x i32>, i1)
7660
7661define void @cttz_v4i64(<4 x i64>* %x, <4 x i64>* %y) {
7662; LMULMAX2-RV32-LABEL: cttz_v4i64:
7663; LMULMAX2-RV32:       # %bb.0:
7664; LMULMAX2-RV32-NEXT:    addi sp, sp, -96
7665; LMULMAX2-RV32-NEXT:    .cfi_def_cfa_offset 96
7666; LMULMAX2-RV32-NEXT:    sw ra, 92(sp) # 4-byte Folded Spill
7667; LMULMAX2-RV32-NEXT:    sw s0, 88(sp) # 4-byte Folded Spill
7668; LMULMAX2-RV32-NEXT:    .cfi_offset ra, -4
7669; LMULMAX2-RV32-NEXT:    .cfi_offset s0, -8
7670; LMULMAX2-RV32-NEXT:    addi s0, sp, 96
7671; LMULMAX2-RV32-NEXT:    .cfi_def_cfa s0, 0
7672; LMULMAX2-RV32-NEXT:    andi sp, sp, -32
7673; LMULMAX2-RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
7674; LMULMAX2-RV32-NEXT:    vle64.v v26, (a0)
7675; LMULMAX2-RV32-NEXT:    sw zero, 60(sp)
7676; LMULMAX2-RV32-NEXT:    sw zero, 52(sp)
7677; LMULMAX2-RV32-NEXT:    sw zero, 44(sp)
7678; LMULMAX2-RV32-NEXT:    sw zero, 36(sp)
7679; LMULMAX2-RV32-NEXT:    addi a6, zero, 32
7680; LMULMAX2-RV32-NEXT:    lui a1, 349525
7681; LMULMAX2-RV32-NEXT:    addi a4, a1, 1365
7682; LMULMAX2-RV32-NEXT:    lui a1, 209715
7683; LMULMAX2-RV32-NEXT:    addi a3, a1, 819
7684; LMULMAX2-RV32-NEXT:    lui a1, 61681
7685; LMULMAX2-RV32-NEXT:    addi a7, a1, -241
7686; LMULMAX2-RV32-NEXT:    lui a1, 4112
7687; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v26
7688; LMULMAX2-RV32-NEXT:    addi a2, a1, 257
7689; LMULMAX2-RV32-NEXT:    bnez a5, .LBB7_2
7690; LMULMAX2-RV32-NEXT:  # %bb.1:
7691; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e64, m2, ta, mu
7692; LMULMAX2-RV32-NEXT:    vsrl.vx v28, v26, a6
7693; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7694; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7695; LMULMAX2-RV32-NEXT:    not a1, a1
7696; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7697; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7698; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7699; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7700; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7701; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7702; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7703; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7704; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7705; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7706; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7707; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7708; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7709; LMULMAX2-RV32-NEXT:    addi a5, a1, 32
7710; LMULMAX2-RV32-NEXT:    j .LBB7_3
7711; LMULMAX2-RV32-NEXT:  .LBB7_2:
7712; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
7713; LMULMAX2-RV32-NEXT:    not a5, a5
7714; LMULMAX2-RV32-NEXT:    and a1, a5, a1
7715; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7716; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7717; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7718; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7719; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7720; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7721; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7722; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7723; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7724; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7725; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7726; LMULMAX2-RV32-NEXT:    srli a5, a1, 24
7727; LMULMAX2-RV32-NEXT:  .LBB7_3:
7728; LMULMAX2-RV32-NEXT:    sw a5, 32(sp)
7729; LMULMAX2-RV32-NEXT:    vsetivli zero, 1, e64, m2, ta, mu
7730; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 3
7731; LMULMAX2-RV32-NEXT:    vmv.x.s a5, v28
7732; LMULMAX2-RV32-NEXT:    bnez a5, .LBB7_5
7733; LMULMAX2-RV32-NEXT:  # %bb.4:
7734; LMULMAX2-RV32-NEXT:    vsrl.vx v28, v28, a6
7735; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7736; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7737; LMULMAX2-RV32-NEXT:    not a1, a1
7738; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7739; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7740; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7741; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7742; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7743; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7744; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7745; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7746; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7747; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7748; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7749; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7750; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7751; LMULMAX2-RV32-NEXT:    addi a5, a1, 32
7752; LMULMAX2-RV32-NEXT:    j .LBB7_6
7753; LMULMAX2-RV32-NEXT:  .LBB7_5:
7754; LMULMAX2-RV32-NEXT:    addi a1, a5, -1
7755; LMULMAX2-RV32-NEXT:    not a5, a5
7756; LMULMAX2-RV32-NEXT:    and a1, a5, a1
7757; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7758; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7759; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7760; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7761; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7762; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7763; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7764; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7765; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7766; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7767; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7768; LMULMAX2-RV32-NEXT:    srli a5, a1, 24
7769; LMULMAX2-RV32-NEXT:  .LBB7_6:
7770; LMULMAX2-RV32-NEXT:    vslidedown.vi v28, v26, 2
7771; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7772; LMULMAX2-RV32-NEXT:    sw a5, 56(sp)
7773; LMULMAX2-RV32-NEXT:    bnez a1, .LBB7_8
7774; LMULMAX2-RV32-NEXT:  # %bb.7:
7775; LMULMAX2-RV32-NEXT:    vsrl.vx v28, v28, a6
7776; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v28
7777; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7778; LMULMAX2-RV32-NEXT:    not a1, a1
7779; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7780; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7781; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7782; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7783; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7784; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7785; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7786; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7787; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7788; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7789; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7790; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7791; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7792; LMULMAX2-RV32-NEXT:    addi a5, a1, 32
7793; LMULMAX2-RV32-NEXT:    j .LBB7_9
7794; LMULMAX2-RV32-NEXT:  .LBB7_8:
7795; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7796; LMULMAX2-RV32-NEXT:    not a1, a1
7797; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7798; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7799; LMULMAX2-RV32-NEXT:    and a5, a5, a4
7800; LMULMAX2-RV32-NEXT:    sub a1, a1, a5
7801; LMULMAX2-RV32-NEXT:    and a5, a1, a3
7802; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7803; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7804; LMULMAX2-RV32-NEXT:    add a1, a5, a1
7805; LMULMAX2-RV32-NEXT:    srli a5, a1, 4
7806; LMULMAX2-RV32-NEXT:    add a1, a1, a5
7807; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7808; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7809; LMULMAX2-RV32-NEXT:    srli a5, a1, 24
7810; LMULMAX2-RV32-NEXT:  .LBB7_9:
7811; LMULMAX2-RV32-NEXT:    vslidedown.vi v26, v26, 1
7812; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
7813; LMULMAX2-RV32-NEXT:    sw a5, 48(sp)
7814; LMULMAX2-RV32-NEXT:    bnez a1, .LBB7_11
7815; LMULMAX2-RV32-NEXT:  # %bb.10:
7816; LMULMAX2-RV32-NEXT:    vsrl.vx v26, v26, a6
7817; LMULMAX2-RV32-NEXT:    vmv.x.s a1, v26
7818; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7819; LMULMAX2-RV32-NEXT:    not a1, a1
7820; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7821; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7822; LMULMAX2-RV32-NEXT:    and a4, a5, a4
7823; LMULMAX2-RV32-NEXT:    sub a1, a1, a4
7824; LMULMAX2-RV32-NEXT:    and a4, a1, a3
7825; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7826; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7827; LMULMAX2-RV32-NEXT:    add a1, a4, a1
7828; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
7829; LMULMAX2-RV32-NEXT:    add a1, a1, a3
7830; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7831; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7832; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7833; LMULMAX2-RV32-NEXT:    addi a1, a1, 32
7834; LMULMAX2-RV32-NEXT:    j .LBB7_12
7835; LMULMAX2-RV32-NEXT:  .LBB7_11:
7836; LMULMAX2-RV32-NEXT:    addi a5, a1, -1
7837; LMULMAX2-RV32-NEXT:    not a1, a1
7838; LMULMAX2-RV32-NEXT:    and a1, a1, a5
7839; LMULMAX2-RV32-NEXT:    srli a5, a1, 1
7840; LMULMAX2-RV32-NEXT:    and a4, a5, a4
7841; LMULMAX2-RV32-NEXT:    sub a1, a1, a4
7842; LMULMAX2-RV32-NEXT:    and a4, a1, a3
7843; LMULMAX2-RV32-NEXT:    srli a1, a1, 2
7844; LMULMAX2-RV32-NEXT:    and a1, a1, a3
7845; LMULMAX2-RV32-NEXT:    add a1, a4, a1
7846; LMULMAX2-RV32-NEXT:    srli a3, a1, 4
7847; LMULMAX2-RV32-NEXT:    add a1, a1, a3
7848; LMULMAX2-RV32-NEXT:    and a1, a1, a7
7849; LMULMAX2-RV32-NEXT:    mul a1, a1, a2
7850; LMULMAX2-RV32-NEXT:    srli a1, a1, 24
7851; LMULMAX2-RV32-NEXT:  .LBB7_12:
7852; LMULMAX2-RV32-NEXT:    sw a1, 40(sp)
7853; LMULMAX2-RV32-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
7854; LMULMAX2-RV32-NEXT:    addi a1, sp, 32
7855; LMULMAX2-RV32-NEXT:    vle32.v v26, (a1)
7856; LMULMAX2-RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
7857; LMULMAX2-RV32-NEXT:    vse64.v v26, (a0)
7858; LMULMAX2-RV32-NEXT:    addi sp, s0, -96
7859; LMULMAX2-RV32-NEXT:    lw s0, 88(sp) # 4-byte Folded Reload
7860; LMULMAX2-RV32-NEXT:    lw ra, 92(sp) # 4-byte Folded Reload
7861; LMULMAX2-RV32-NEXT:    addi sp, sp, 96
7862; LMULMAX2-RV32-NEXT:    ret
7863;
7864; LMULMAX2-RV64-LABEL: cttz_v4i64:
7865; LMULMAX2-RV64:       # %bb.0:
7866; LMULMAX2-RV64-NEXT:    addi sp, sp, -96
7867; LMULMAX2-RV64-NEXT:    .cfi_def_cfa_offset 96
7868; LMULMAX2-RV64-NEXT:    sd ra, 88(sp) # 8-byte Folded Spill
7869; LMULMAX2-RV64-NEXT:    sd s0, 80(sp) # 8-byte Folded Spill
7870; LMULMAX2-RV64-NEXT:    .cfi_offset ra, -8
7871; LMULMAX2-RV64-NEXT:    .cfi_offset s0, -16
7872; LMULMAX2-RV64-NEXT:    addi s0, sp, 96
7873; LMULMAX2-RV64-NEXT:    .cfi_def_cfa s0, 0
7874; LMULMAX2-RV64-NEXT:    andi sp, sp, -32
7875; LMULMAX2-RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
7876; LMULMAX2-RV64-NEXT:    vle64.v v26, (a0)
7877; LMULMAX2-RV64-NEXT:    vsetivli zero, 1, e64, m2, ta, mu
7878; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 3
7879; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7880; LMULMAX2-RV64-NEXT:    addi a2, a1, -1
7881; LMULMAX2-RV64-NEXT:    not a1, a1
7882; LMULMAX2-RV64-NEXT:    and a2, a1, a2
7883; LMULMAX2-RV64-NEXT:    srli a3, a2, 1
7884; LMULMAX2-RV64-NEXT:    lui a1, 21845
7885; LMULMAX2-RV64-NEXT:    addiw a1, a1, 1365
7886; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
7887; LMULMAX2-RV64-NEXT:    addi a1, a1, 1365
7888; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
7889; LMULMAX2-RV64-NEXT:    addi a1, a1, 1365
7890; LMULMAX2-RV64-NEXT:    slli a1, a1, 12
7891; LMULMAX2-RV64-NEXT:    addi a6, a1, 1365
7892; LMULMAX2-RV64-NEXT:    and a3, a3, a6
7893; LMULMAX2-RV64-NEXT:    sub a3, a2, a3
7894; LMULMAX2-RV64-NEXT:    lui a2, 13107
7895; LMULMAX2-RV64-NEXT:    addiw a2, a2, 819
7896; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7897; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
7898; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7899; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
7900; LMULMAX2-RV64-NEXT:    slli a2, a2, 12
7901; LMULMAX2-RV64-NEXT:    addi a2, a2, 819
7902; LMULMAX2-RV64-NEXT:    and a4, a3, a2
7903; LMULMAX2-RV64-NEXT:    srli a3, a3, 2
7904; LMULMAX2-RV64-NEXT:    and a3, a3, a2
7905; LMULMAX2-RV64-NEXT:    add a3, a4, a3
7906; LMULMAX2-RV64-NEXT:    srli a4, a3, 4
7907; LMULMAX2-RV64-NEXT:    add a3, a3, a4
7908; LMULMAX2-RV64-NEXT:    lui a4, 3855
7909; LMULMAX2-RV64-NEXT:    addiw a4, a4, 241
7910; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7911; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
7912; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7913; LMULMAX2-RV64-NEXT:    addi a4, a4, 241
7914; LMULMAX2-RV64-NEXT:    slli a4, a4, 12
7915; LMULMAX2-RV64-NEXT:    addi a4, a4, -241
7916; LMULMAX2-RV64-NEXT:    and a3, a3, a4
7917; LMULMAX2-RV64-NEXT:    lui a5, 4112
7918; LMULMAX2-RV64-NEXT:    addiw a5, a5, 257
7919; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
7920; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
7921; LMULMAX2-RV64-NEXT:    slli a5, a5, 16
7922; LMULMAX2-RV64-NEXT:    addi a5, a5, 257
7923; LMULMAX2-RV64-NEXT:    mul a3, a3, a5
7924; LMULMAX2-RV64-NEXT:    srli a3, a3, 56
7925; LMULMAX2-RV64-NEXT:    sd a3, 56(sp)
7926; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 2
7927; LMULMAX2-RV64-NEXT:    vmv.x.s a3, v28
7928; LMULMAX2-RV64-NEXT:    addi a1, a3, -1
7929; LMULMAX2-RV64-NEXT:    not a3, a3
7930; LMULMAX2-RV64-NEXT:    and a1, a3, a1
7931; LMULMAX2-RV64-NEXT:    srli a3, a1, 1
7932; LMULMAX2-RV64-NEXT:    and a3, a3, a6
7933; LMULMAX2-RV64-NEXT:    sub a1, a1, a3
7934; LMULMAX2-RV64-NEXT:    and a3, a1, a2
7935; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7936; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7937; LMULMAX2-RV64-NEXT:    add a1, a3, a1
7938; LMULMAX2-RV64-NEXT:    srli a3, a1, 4
7939; LMULMAX2-RV64-NEXT:    add a1, a1, a3
7940; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7941; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7942; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7943; LMULMAX2-RV64-NEXT:    sd a1, 48(sp)
7944; LMULMAX2-RV64-NEXT:    vslidedown.vi v28, v26, 1
7945; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v28
7946; LMULMAX2-RV64-NEXT:    addi a3, a1, -1
7947; LMULMAX2-RV64-NEXT:    not a1, a1
7948; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7949; LMULMAX2-RV64-NEXT:    srli a3, a1, 1
7950; LMULMAX2-RV64-NEXT:    and a3, a3, a6
7951; LMULMAX2-RV64-NEXT:    sub a1, a1, a3
7952; LMULMAX2-RV64-NEXT:    and a3, a1, a2
7953; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7954; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7955; LMULMAX2-RV64-NEXT:    add a1, a3, a1
7956; LMULMAX2-RV64-NEXT:    srli a3, a1, 4
7957; LMULMAX2-RV64-NEXT:    add a1, a1, a3
7958; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7959; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7960; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7961; LMULMAX2-RV64-NEXT:    sd a1, 40(sp)
7962; LMULMAX2-RV64-NEXT:    vmv.x.s a1, v26
7963; LMULMAX2-RV64-NEXT:    addi a3, a1, -1
7964; LMULMAX2-RV64-NEXT:    not a1, a1
7965; LMULMAX2-RV64-NEXT:    and a1, a1, a3
7966; LMULMAX2-RV64-NEXT:    srli a3, a1, 1
7967; LMULMAX2-RV64-NEXT:    and a3, a3, a6
7968; LMULMAX2-RV64-NEXT:    sub a1, a1, a3
7969; LMULMAX2-RV64-NEXT:    and a3, a1, a2
7970; LMULMAX2-RV64-NEXT:    srli a1, a1, 2
7971; LMULMAX2-RV64-NEXT:    and a1, a1, a2
7972; LMULMAX2-RV64-NEXT:    add a1, a3, a1
7973; LMULMAX2-RV64-NEXT:    srli a2, a1, 4
7974; LMULMAX2-RV64-NEXT:    add a1, a1, a2
7975; LMULMAX2-RV64-NEXT:    and a1, a1, a4
7976; LMULMAX2-RV64-NEXT:    mul a1, a1, a5
7977; LMULMAX2-RV64-NEXT:    srli a1, a1, 56
7978; LMULMAX2-RV64-NEXT:    sd a1, 32(sp)
7979; LMULMAX2-RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, mu
7980; LMULMAX2-RV64-NEXT:    addi a1, sp, 32
7981; LMULMAX2-RV64-NEXT:    vle64.v v26, (a1)
7982; LMULMAX2-RV64-NEXT:    vse64.v v26, (a0)
7983; LMULMAX2-RV64-NEXT:    addi sp, s0, -96
7984; LMULMAX2-RV64-NEXT:    ld s0, 80(sp) # 8-byte Folded Reload
7985; LMULMAX2-RV64-NEXT:    ld ra, 88(sp) # 8-byte Folded Reload
7986; LMULMAX2-RV64-NEXT:    addi sp, sp, 96
7987; LMULMAX2-RV64-NEXT:    ret
7988;
7989; LMULMAX1-RV32-LABEL: cttz_v4i64:
7990; LMULMAX1-RV32:       # %bb.0:
7991; LMULMAX1-RV32-NEXT:    addi sp, sp, -48
7992; LMULMAX1-RV32-NEXT:    .cfi_def_cfa_offset 48
7993; LMULMAX1-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
7994; LMULMAX1-RV32-NEXT:    vle64.v v25, (a0)
7995; LMULMAX1-RV32-NEXT:    addi a7, a0, 16
7996; LMULMAX1-RV32-NEXT:    vle64.v v26, (a7)
7997; LMULMAX1-RV32-NEXT:    sw zero, 44(sp)
7998; LMULMAX1-RV32-NEXT:    sw zero, 36(sp)
7999; LMULMAX1-RV32-NEXT:    addi a6, zero, 32
8000; LMULMAX1-RV32-NEXT:    lui a1, 349525
8001; LMULMAX1-RV32-NEXT:    addi a5, a1, 1365
8002; LMULMAX1-RV32-NEXT:    lui a1, 209715
8003; LMULMAX1-RV32-NEXT:    addi a4, a1, 819
8004; LMULMAX1-RV32-NEXT:    lui a1, 61681
8005; LMULMAX1-RV32-NEXT:    addi t0, a1, -241
8006; LMULMAX1-RV32-NEXT:    lui a2, 4112
8007; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
8008; LMULMAX1-RV32-NEXT:    addi a3, a2, 257
8009; LMULMAX1-RV32-NEXT:    bnez a1, .LBB7_2
8010; LMULMAX1-RV32-NEXT:  # %bb.1:
8011; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
8012; LMULMAX1-RV32-NEXT:    vsrl.vx v27, v26, a6
8013; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v27
8014; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8015; LMULMAX1-RV32-NEXT:    not a1, a1
8016; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8017; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8018; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8019; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8020; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8021; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8022; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8023; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8024; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8025; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8026; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8027; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8028; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8029; LMULMAX1-RV32-NEXT:    addi a1, a1, 32
8030; LMULMAX1-RV32-NEXT:    j .LBB7_3
8031; LMULMAX1-RV32-NEXT:  .LBB7_2:
8032; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8033; LMULMAX1-RV32-NEXT:    not a1, a1
8034; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8035; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8036; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8037; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8038; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8039; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8040; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8041; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8042; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8043; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8044; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8045; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8046; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8047; LMULMAX1-RV32-NEXT:  .LBB7_3:
8048; LMULMAX1-RV32-NEXT:    sw a1, 32(sp)
8049; LMULMAX1-RV32-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
8050; LMULMAX1-RV32-NEXT:    vslidedown.vi v26, v26, 1
8051; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
8052; LMULMAX1-RV32-NEXT:    bnez a1, .LBB7_5
8053; LMULMAX1-RV32-NEXT:  # %bb.4:
8054; LMULMAX1-RV32-NEXT:    vsrl.vx v26, v26, a6
8055; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
8056; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8057; LMULMAX1-RV32-NEXT:    not a1, a1
8058; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8059; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8060; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8061; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8062; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8063; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8064; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8065; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8066; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8067; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8068; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8069; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8070; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8071; LMULMAX1-RV32-NEXT:    addi a1, a1, 32
8072; LMULMAX1-RV32-NEXT:    j .LBB7_6
8073; LMULMAX1-RV32-NEXT:  .LBB7_5:
8074; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8075; LMULMAX1-RV32-NEXT:    not a1, a1
8076; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8077; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8078; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8079; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8080; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8081; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8082; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8083; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8084; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8085; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8086; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8087; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8088; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8089; LMULMAX1-RV32-NEXT:  .LBB7_6:
8090; LMULMAX1-RV32-NEXT:    sw a1, 40(sp)
8091; LMULMAX1-RV32-NEXT:    sw zero, 28(sp)
8092; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
8093; LMULMAX1-RV32-NEXT:    sw zero, 20(sp)
8094; LMULMAX1-RV32-NEXT:    bnez a1, .LBB7_8
8095; LMULMAX1-RV32-NEXT:  # %bb.7:
8096; LMULMAX1-RV32-NEXT:    vsrl.vx v26, v25, a6
8097; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v26
8098; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8099; LMULMAX1-RV32-NEXT:    not a1, a1
8100; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8101; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8102; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8103; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8104; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8105; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8106; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8107; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8108; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8109; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8110; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8111; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8112; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8113; LMULMAX1-RV32-NEXT:    addi a1, a1, 32
8114; LMULMAX1-RV32-NEXT:    j .LBB7_9
8115; LMULMAX1-RV32-NEXT:  .LBB7_8:
8116; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8117; LMULMAX1-RV32-NEXT:    not a1, a1
8118; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8119; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8120; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8121; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8122; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8123; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8124; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8125; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8126; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8127; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8128; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8129; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8130; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8131; LMULMAX1-RV32-NEXT:  .LBB7_9:
8132; LMULMAX1-RV32-NEXT:    vslidedown.vi v25, v25, 1
8133; LMULMAX1-RV32-NEXT:    vmv.x.s a2, v25
8134; LMULMAX1-RV32-NEXT:    sw a1, 16(sp)
8135; LMULMAX1-RV32-NEXT:    bnez a2, .LBB7_11
8136; LMULMAX1-RV32-NEXT:  # %bb.10:
8137; LMULMAX1-RV32-NEXT:    vsrl.vx v25, v25, a6
8138; LMULMAX1-RV32-NEXT:    vmv.x.s a1, v25
8139; LMULMAX1-RV32-NEXT:    addi a2, a1, -1
8140; LMULMAX1-RV32-NEXT:    not a1, a1
8141; LMULMAX1-RV32-NEXT:    and a1, a1, a2
8142; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8143; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8144; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8145; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8146; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8147; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8148; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8149; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8150; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8151; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8152; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8153; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8154; LMULMAX1-RV32-NEXT:    addi a1, a1, 32
8155; LMULMAX1-RV32-NEXT:    j .LBB7_12
8156; LMULMAX1-RV32-NEXT:  .LBB7_11:
8157; LMULMAX1-RV32-NEXT:    addi a1, a2, -1
8158; LMULMAX1-RV32-NEXT:    not a2, a2
8159; LMULMAX1-RV32-NEXT:    and a1, a2, a1
8160; LMULMAX1-RV32-NEXT:    srli a2, a1, 1
8161; LMULMAX1-RV32-NEXT:    and a2, a2, a5
8162; LMULMAX1-RV32-NEXT:    sub a1, a1, a2
8163; LMULMAX1-RV32-NEXT:    and a2, a1, a4
8164; LMULMAX1-RV32-NEXT:    srli a1, a1, 2
8165; LMULMAX1-RV32-NEXT:    and a1, a1, a4
8166; LMULMAX1-RV32-NEXT:    add a1, a2, a1
8167; LMULMAX1-RV32-NEXT:    srli a2, a1, 4
8168; LMULMAX1-RV32-NEXT:    add a1, a1, a2
8169; LMULMAX1-RV32-NEXT:    and a1, a1, t0
8170; LMULMAX1-RV32-NEXT:    mul a1, a1, a3
8171; LMULMAX1-RV32-NEXT:    srli a1, a1, 24
8172; LMULMAX1-RV32-NEXT:  .LBB7_12:
8173; LMULMAX1-RV32-NEXT:    sw a1, 24(sp)
8174; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
8175; LMULMAX1-RV32-NEXT:    addi a1, sp, 16
8176; LMULMAX1-RV32-NEXT:    vle32.v v25, (a1)
8177; LMULMAX1-RV32-NEXT:    addi a1, sp, 32
8178; LMULMAX1-RV32-NEXT:    vle32.v v26, (a1)
8179; LMULMAX1-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8180; LMULMAX1-RV32-NEXT:    vse64.v v25, (a0)
8181; LMULMAX1-RV32-NEXT:    vse64.v v26, (a7)
8182; LMULMAX1-RV32-NEXT:    addi sp, sp, 48
8183; LMULMAX1-RV32-NEXT:    ret
8184;
8185; LMULMAX1-RV64-LABEL: cttz_v4i64:
8186; LMULMAX1-RV64:       # %bb.0:
8187; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8188; LMULMAX1-RV64-NEXT:    addi a6, a0, 16
8189; LMULMAX1-RV64-NEXT:    vle64.v v26, (a6)
8190; LMULMAX1-RV64-NEXT:    vle64.v v25, (a0)
8191; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
8192; LMULMAX1-RV64-NEXT:    vslidedown.vi v27, v26, 1
8193; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v27
8194; LMULMAX1-RV64-NEXT:    addi a3, a2, -1
8195; LMULMAX1-RV64-NEXT:    not a2, a2
8196; LMULMAX1-RV64-NEXT:    and a3, a2, a3
8197; LMULMAX1-RV64-NEXT:    srli a4, a3, 1
8198; LMULMAX1-RV64-NEXT:    lui a2, 21845
8199; LMULMAX1-RV64-NEXT:    addiw a2, a2, 1365
8200; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
8201; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
8202; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
8203; LMULMAX1-RV64-NEXT:    addi a2, a2, 1365
8204; LMULMAX1-RV64-NEXT:    slli a2, a2, 12
8205; LMULMAX1-RV64-NEXT:    addi a7, a2, 1365
8206; LMULMAX1-RV64-NEXT:    and a4, a4, a7
8207; LMULMAX1-RV64-NEXT:    sub a4, a3, a4
8208; LMULMAX1-RV64-NEXT:    lui a3, 13107
8209; LMULMAX1-RV64-NEXT:    addiw a3, a3, 819
8210; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
8211; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
8212; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
8213; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
8214; LMULMAX1-RV64-NEXT:    slli a3, a3, 12
8215; LMULMAX1-RV64-NEXT:    addi a3, a3, 819
8216; LMULMAX1-RV64-NEXT:    and a5, a4, a3
8217; LMULMAX1-RV64-NEXT:    srli a4, a4, 2
8218; LMULMAX1-RV64-NEXT:    and a4, a4, a3
8219; LMULMAX1-RV64-NEXT:    add a4, a5, a4
8220; LMULMAX1-RV64-NEXT:    srli a5, a4, 4
8221; LMULMAX1-RV64-NEXT:    add a4, a4, a5
8222; LMULMAX1-RV64-NEXT:    lui a5, 3855
8223; LMULMAX1-RV64-NEXT:    addiw a5, a5, 241
8224; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
8225; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
8226; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
8227; LMULMAX1-RV64-NEXT:    addi a5, a5, 241
8228; LMULMAX1-RV64-NEXT:    slli a5, a5, 12
8229; LMULMAX1-RV64-NEXT:    addi a5, a5, -241
8230; LMULMAX1-RV64-NEXT:    and a4, a4, a5
8231; LMULMAX1-RV64-NEXT:    lui a1, 4112
8232; LMULMAX1-RV64-NEXT:    addiw a1, a1, 257
8233; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
8234; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
8235; LMULMAX1-RV64-NEXT:    slli a1, a1, 16
8236; LMULMAX1-RV64-NEXT:    addi a1, a1, 257
8237; LMULMAX1-RV64-NEXT:    mul a4, a4, a1
8238; LMULMAX1-RV64-NEXT:    srli a4, a4, 56
8239; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8240; LMULMAX1-RV64-NEXT:    vmv.v.x v27, a4
8241; LMULMAX1-RV64-NEXT:    vmv.x.s a4, v26
8242; LMULMAX1-RV64-NEXT:    addi a2, a4, -1
8243; LMULMAX1-RV64-NEXT:    not a4, a4
8244; LMULMAX1-RV64-NEXT:    and a2, a4, a2
8245; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
8246; LMULMAX1-RV64-NEXT:    and a4, a4, a7
8247; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
8248; LMULMAX1-RV64-NEXT:    and a4, a2, a3
8249; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
8250; LMULMAX1-RV64-NEXT:    and a2, a2, a3
8251; LMULMAX1-RV64-NEXT:    add a2, a4, a2
8252; LMULMAX1-RV64-NEXT:    srli a4, a2, 4
8253; LMULMAX1-RV64-NEXT:    add a2, a2, a4
8254; LMULMAX1-RV64-NEXT:    and a2, a2, a5
8255; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
8256; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
8257; LMULMAX1-RV64-NEXT:    vsetvli zero, zero, e64, m1, tu, mu
8258; LMULMAX1-RV64-NEXT:    vmv.s.x v27, a2
8259; LMULMAX1-RV64-NEXT:    vsetivli zero, 1, e64, m1, ta, mu
8260; LMULMAX1-RV64-NEXT:    vslidedown.vi v26, v25, 1
8261; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v26
8262; LMULMAX1-RV64-NEXT:    addi a4, a2, -1
8263; LMULMAX1-RV64-NEXT:    not a2, a2
8264; LMULMAX1-RV64-NEXT:    and a2, a2, a4
8265; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
8266; LMULMAX1-RV64-NEXT:    and a4, a4, a7
8267; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
8268; LMULMAX1-RV64-NEXT:    and a4, a2, a3
8269; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
8270; LMULMAX1-RV64-NEXT:    and a2, a2, a3
8271; LMULMAX1-RV64-NEXT:    add a2, a4, a2
8272; LMULMAX1-RV64-NEXT:    srli a4, a2, 4
8273; LMULMAX1-RV64-NEXT:    add a2, a2, a4
8274; LMULMAX1-RV64-NEXT:    and a2, a2, a5
8275; LMULMAX1-RV64-NEXT:    mul a2, a2, a1
8276; LMULMAX1-RV64-NEXT:    srli a2, a2, 56
8277; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu
8278; LMULMAX1-RV64-NEXT:    vmv.v.x v26, a2
8279; LMULMAX1-RV64-NEXT:    vmv.x.s a2, v25
8280; LMULMAX1-RV64-NEXT:    addi a4, a2, -1
8281; LMULMAX1-RV64-NEXT:    not a2, a2
8282; LMULMAX1-RV64-NEXT:    and a2, a2, a4
8283; LMULMAX1-RV64-NEXT:    srli a4, a2, 1
8284; LMULMAX1-RV64-NEXT:    and a4, a4, a7
8285; LMULMAX1-RV64-NEXT:    sub a2, a2, a4
8286; LMULMAX1-RV64-NEXT:    and a4, a2, a3
8287; LMULMAX1-RV64-NEXT:    srli a2, a2, 2
8288; LMULMAX1-RV64-NEXT:    and a2, a2, a3
8289; LMULMAX1-RV64-NEXT:    add a2, a4, a2
8290; LMULMAX1-RV64-NEXT:    srli a3, a2, 4
8291; LMULMAX1-RV64-NEXT:    add a2, a2, a3
8292; LMULMAX1-RV64-NEXT:    and a2, a2, a5
8293; LMULMAX1-RV64-NEXT:    mul a1, a2, a1
8294; LMULMAX1-RV64-NEXT:    srli a1, a1, 56
8295; LMULMAX1-RV64-NEXT:    vsetvli zero, zero, e64, m1, tu, mu
8296; LMULMAX1-RV64-NEXT:    vmv.s.x v26, a1
8297; LMULMAX1-RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, mu
8298; LMULMAX1-RV64-NEXT:    vse64.v v26, (a0)
8299; LMULMAX1-RV64-NEXT:    vse64.v v27, (a6)
8300; LMULMAX1-RV64-NEXT:    ret
8301  %a = load <4 x i64>, <4 x i64>* %x
8302  %b = load <4 x i64>, <4 x i64>* %y
8303  %c = call <4 x i64> @llvm.cttz.v4i64(<4 x i64> %a, i1 false)
8304  store <4 x i64> %c, <4 x i64>* %x
8305  ret void
8306}
8307declare <4 x i64> @llvm.cttz.v4i64(<4 x i64>, i1)
8308