Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / X86 / wide-scalar-shift-legalization.ll
blob24475360cbbc46a157a06b2c8ef8248c4a52cdc5
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-NO-SHLD,X64-NO-BMI2-NO-SHLD
3 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-NO-BMI2,X64-SHLD,X64-NO-BMI2-HAVE-SHLD
4 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-NO-SHLD,X64-HAVE-BMI2-NO-SHLD
5 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X64,X64-BMI2,X64-SHLD,X64-HAVE-BMI2-HAVE-SHLD
6 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-NO-SHLD,X86-NO-BMI2-NO-SHLD
7 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,-bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-NO-BMI2,X86-SHLD,X86-NO-BMI2-HAVE-SHLD
8 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,+slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-NO-SHLD,X86-HAVE-BMI2-NO-SHLD
9 ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu -mattr=+sse2,+bmi2,-slow-shld | FileCheck %s --check-prefixes=ALL,X86,X86-BMI2,X86-SHLD,X86-HAVE-BMI2-HAVE-SHLD
11 define void @lshr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
12 ; X64-NO-BMI2-LABEL: lshr_4bytes:
13 ; X64-NO-BMI2:       # %bb.0:
14 ; X64-NO-BMI2-NEXT:    movl (%rdi), %eax
15 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
16 ; X64-NO-BMI2-NEXT:    shrl %cl, %eax
17 ; X64-NO-BMI2-NEXT:    movl %eax, (%rdx)
18 ; X64-NO-BMI2-NEXT:    retq
20 ; X64-BMI2-LABEL: lshr_4bytes:
21 ; X64-BMI2:       # %bb.0:
22 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
23 ; X64-BMI2-NEXT:    shrxl %eax, (%rdi), %eax
24 ; X64-BMI2-NEXT:    movl %eax, (%rdx)
25 ; X64-BMI2-NEXT:    retq
27 ; X86-NO-BMI2-LABEL: lshr_4bytes:
28 ; X86-NO-BMI2:       # %bb.0:
29 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
30 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
31 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
32 ; X86-NO-BMI2-NEXT:    movl (%edx), %edx
33 ; X86-NO-BMI2-NEXT:    movzbl (%ecx), %ecx
34 ; X86-NO-BMI2-NEXT:    shrl %cl, %edx
35 ; X86-NO-BMI2-NEXT:    movl %edx, (%eax)
36 ; X86-NO-BMI2-NEXT:    retl
38 ; X86-BMI2-LABEL: lshr_4bytes:
39 ; X86-BMI2:       # %bb.0:
40 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
41 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
42 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
43 ; X86-BMI2-NEXT:    movzbl (%edx), %edx
44 ; X86-BMI2-NEXT:    shrxl %edx, (%ecx), %ecx
45 ; X86-BMI2-NEXT:    movl %ecx, (%eax)
46 ; X86-BMI2-NEXT:    retl
47   %src = load i32, ptr %src.ptr, align 1
48   %bitOff = load i32, ptr %bitOff.ptr, align 1
49   %res = lshr i32 %src, %bitOff
50   store i32 %res, ptr %dst, align 1
51   ret void
53 define void @shl_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
54 ; X64-NO-BMI2-LABEL: shl_4bytes:
55 ; X64-NO-BMI2:       # %bb.0:
56 ; X64-NO-BMI2-NEXT:    movl (%rdi), %eax
57 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
58 ; X64-NO-BMI2-NEXT:    shll %cl, %eax
59 ; X64-NO-BMI2-NEXT:    movl %eax, (%rdx)
60 ; X64-NO-BMI2-NEXT:    retq
62 ; X64-BMI2-LABEL: shl_4bytes:
63 ; X64-BMI2:       # %bb.0:
64 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
65 ; X64-BMI2-NEXT:    shlxl %eax, (%rdi), %eax
66 ; X64-BMI2-NEXT:    movl %eax, (%rdx)
67 ; X64-BMI2-NEXT:    retq
69 ; X86-NO-BMI2-LABEL: shl_4bytes:
70 ; X86-NO-BMI2:       # %bb.0:
71 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
72 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
73 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
74 ; X86-NO-BMI2-NEXT:    movl (%edx), %edx
75 ; X86-NO-BMI2-NEXT:    movzbl (%ecx), %ecx
76 ; X86-NO-BMI2-NEXT:    shll %cl, %edx
77 ; X86-NO-BMI2-NEXT:    movl %edx, (%eax)
78 ; X86-NO-BMI2-NEXT:    retl
80 ; X86-BMI2-LABEL: shl_4bytes:
81 ; X86-BMI2:       # %bb.0:
82 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
83 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
84 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
85 ; X86-BMI2-NEXT:    movzbl (%edx), %edx
86 ; X86-BMI2-NEXT:    shlxl %edx, (%ecx), %ecx
87 ; X86-BMI2-NEXT:    movl %ecx, (%eax)
88 ; X86-BMI2-NEXT:    retl
89   %src = load i32, ptr %src.ptr, align 1
90   %bitOff = load i32, ptr %bitOff.ptr, align 1
91   %res = shl i32 %src, %bitOff
92   store i32 %res, ptr %dst, align 1
93   ret void
95 define void @ashr_4bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
96 ; X64-NO-BMI2-LABEL: ashr_4bytes:
97 ; X64-NO-BMI2:       # %bb.0:
98 ; X64-NO-BMI2-NEXT:    movl (%rdi), %eax
99 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
100 ; X64-NO-BMI2-NEXT:    sarl %cl, %eax
101 ; X64-NO-BMI2-NEXT:    movl %eax, (%rdx)
102 ; X64-NO-BMI2-NEXT:    retq
104 ; X64-BMI2-LABEL: ashr_4bytes:
105 ; X64-BMI2:       # %bb.0:
106 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
107 ; X64-BMI2-NEXT:    sarxl %eax, (%rdi), %eax
108 ; X64-BMI2-NEXT:    movl %eax, (%rdx)
109 ; X64-BMI2-NEXT:    retq
111 ; X86-NO-BMI2-LABEL: ashr_4bytes:
112 ; X86-NO-BMI2:       # %bb.0:
113 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
114 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
115 ; X86-NO-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
116 ; X86-NO-BMI2-NEXT:    movl (%edx), %edx
117 ; X86-NO-BMI2-NEXT:    movzbl (%ecx), %ecx
118 ; X86-NO-BMI2-NEXT:    sarl %cl, %edx
119 ; X86-NO-BMI2-NEXT:    movl %edx, (%eax)
120 ; X86-NO-BMI2-NEXT:    retl
122 ; X86-BMI2-LABEL: ashr_4bytes:
123 ; X86-BMI2:       # %bb.0:
124 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %eax
125 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %ecx
126 ; X86-BMI2-NEXT:    movl {{[0-9]+}}(%esp), %edx
127 ; X86-BMI2-NEXT:    movzbl (%edx), %edx
128 ; X86-BMI2-NEXT:    sarxl %edx, (%ecx), %ecx
129 ; X86-BMI2-NEXT:    movl %ecx, (%eax)
130 ; X86-BMI2-NEXT:    retl
131   %src = load i32, ptr %src.ptr, align 1
132   %bitOff = load i32, ptr %bitOff.ptr, align 1
133   %res = ashr i32 %src, %bitOff
134   store i32 %res, ptr %dst, align 1
135   ret void
138 define void @lshr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
139 ; X64-NO-BMI2-LABEL: lshr_8bytes:
140 ; X64-NO-BMI2:       # %bb.0:
141 ; X64-NO-BMI2-NEXT:    movq (%rdi), %rax
142 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
143 ; X64-NO-BMI2-NEXT:    shrq %cl, %rax
144 ; X64-NO-BMI2-NEXT:    movq %rax, (%rdx)
145 ; X64-NO-BMI2-NEXT:    retq
147 ; X64-BMI2-LABEL: lshr_8bytes:
148 ; X64-BMI2:       # %bb.0:
149 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
150 ; X64-BMI2-NEXT:    shrxq %rax, (%rdi), %rax
151 ; X64-BMI2-NEXT:    movq %rax, (%rdx)
152 ; X64-BMI2-NEXT:    retq
154 ; X86-NO-BMI2-NO-SHLD-LABEL: lshr_8bytes:
155 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
156 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
157 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
158 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
159 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
160 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
161 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
162 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %ebx
163 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
164 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %eax
165 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
166 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
167 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl
168 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi
169 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
170 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
171 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
172 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
173 ; X86-NO-BMI2-NO-SHLD-NEXT:    xorl %ecx, %ecx
174 ; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al
175 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovnel %esi, %edi
176 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %esi, %ecx
177 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%edx)
178 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, (%edx)
179 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
180 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
181 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
182 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
184 ; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_8bytes:
185 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
186 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
187 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
188 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
189 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
190 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
191 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %edx
192 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%esi), %esi
193 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
194 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %edi
195 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
196 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
197 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    xorl %esi, %esi
198 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
199 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovnel %edi, %edx
200 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %edi, %esi
201 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 4(%eax)
202 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
203 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
204 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
205 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
207 ; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_8bytes:
208 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
209 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
210 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
211 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
212 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
213 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
214 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
215 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %esi
216 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %ecx
217 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, (%edx), %edx
218 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx
219 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl
220 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi
221 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %edi
222 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %edi
223 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx
224 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorl %esi, %esi
225 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %cl
226 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovnel %edx, %edi
227 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %edx, %esi
228 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 4(%eax)
229 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, (%eax)
230 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
231 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
232 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
233 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
235 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_8bytes:
236 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
237 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
238 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
239 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
240 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
241 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
242 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %edx
243 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%esi), %esi
244 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
245 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
246 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
247 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    xorl %edi, %edi
248 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
249 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovnel %esi, %edx
250 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edi
251 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 4(%eax)
252 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
253 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
254 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
255 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
256   %src = load i64, ptr %src.ptr, align 1
257   %bitOff = load i64, ptr %bitOff.ptr, align 1
258   %res = lshr i64 %src, %bitOff
259   store i64 %res, ptr %dst, align 1
260   ret void
262 define void @shl_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
263 ; X64-NO-BMI2-LABEL: shl_8bytes:
264 ; X64-NO-BMI2:       # %bb.0:
265 ; X64-NO-BMI2-NEXT:    movq (%rdi), %rax
266 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
267 ; X64-NO-BMI2-NEXT:    shlq %cl, %rax
268 ; X64-NO-BMI2-NEXT:    movq %rax, (%rdx)
269 ; X64-NO-BMI2-NEXT:    retq
271 ; X64-BMI2-LABEL: shl_8bytes:
272 ; X64-BMI2:       # %bb.0:
273 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
274 ; X64-BMI2-NEXT:    shlxq %rax, (%rdi), %rax
275 ; X64-BMI2-NEXT:    movq %rax, (%rdx)
276 ; X64-BMI2-NEXT:    retq
278 ; X86-NO-BMI2-NO-SHLD-LABEL: shl_8bytes:
279 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
280 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
281 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
282 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
283 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
284 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
285 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
286 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %esi
287 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %ebx
288 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %eax
289 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
290 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
291 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl
292 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %edi
293 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
294 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
295 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
296 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
297 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
298 ; X86-NO-BMI2-NO-SHLD-NEXT:    xorl %ecx, %ecx
299 ; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al
300 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovnel %esi, %edi
301 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %esi, %ecx
302 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%edx)
303 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 4(%edx)
304 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
305 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
306 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
307 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
309 ; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_8bytes:
310 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
311 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
312 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
313 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
314 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
315 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
316 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi
317 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx
318 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
319 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %edi
320 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
321 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, %edx
322 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    xorl %esi, %esi
323 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
324 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovnel %edi, %edx
325 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %edi, %esi
326 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, 4(%eax)
327 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%eax)
328 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
329 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
330 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
332 ; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_8bytes:
333 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
334 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
335 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
336 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
337 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
338 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
339 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
340 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %esi
341 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %ecx
342 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, 4(%edx), %edx
343 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx
344 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl
345 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %esi, %edi
346 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
347 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %esi, %esi
348 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %esi
349 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    xorl %edx, %edx
350 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %cl
351 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovnel %edi, %esi
352 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %edi, %edx
353 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)
354 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 4(%eax)
355 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
356 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
357 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
358 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
360 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_8bytes:
361 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
362 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
363 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
364 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
365 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
366 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
367 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %esi
368 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %edx
369 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
370 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, %edx
371 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %esi
372 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    xorl %edi, %edi
373 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
374 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovnel %esi, %edx
375 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %esi, %edi
376 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, 4(%eax)
377 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, (%eax)
378 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
379 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
380 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
381   %src = load i64, ptr %src.ptr, align 1
382   %bitOff = load i64, ptr %bitOff.ptr, align 1
383   %res = shl i64 %src, %bitOff
384   store i64 %res, ptr %dst, align 1
385   ret void
387 define void @ashr_8bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
388 ; X64-NO-BMI2-LABEL: ashr_8bytes:
389 ; X64-NO-BMI2:       # %bb.0:
390 ; X64-NO-BMI2-NEXT:    movq (%rdi), %rax
391 ; X64-NO-BMI2-NEXT:    movzbl (%rsi), %ecx
392 ; X64-NO-BMI2-NEXT:    sarq %cl, %rax
393 ; X64-NO-BMI2-NEXT:    movq %rax, (%rdx)
394 ; X64-NO-BMI2-NEXT:    retq
396 ; X64-BMI2-LABEL: ashr_8bytes:
397 ; X64-BMI2:       # %bb.0:
398 ; X64-BMI2-NEXT:    movzbl (%rsi), %eax
399 ; X64-BMI2-NEXT:    sarxq %rax, (%rdi), %rax
400 ; X64-BMI2-NEXT:    movq %rax, (%rdx)
401 ; X64-BMI2-NEXT:    retq
403 ; X86-NO-BMI2-NO-SHLD-LABEL: ashr_8bytes:
404 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
405 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
406 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
407 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
408 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
409 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
410 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
411 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %ebx
412 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
413 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %eax
414 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
415 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
416 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %cl
417 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edi
418 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
419 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
420 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
421 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
422 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl %cl, %ebx
423 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl $31, %esi
424 ; X86-NO-BMI2-NO-SHLD-NEXT:    testb $32, %al
425 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovnel %ebx, %edi
426 ; X86-NO-BMI2-NO-SHLD-NEXT:    cmovel %ebx, %esi
427 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 4(%edx)
428 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, (%edx)
429 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
430 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
431 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
432 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
434 ; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_8bytes:
435 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
436 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
437 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
438 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
439 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
440 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
441 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %edx
442 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%esi), %esi
443 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
444 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %edi
445 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl %cl, %edi
446 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
447 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl $31, %esi
448 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
449 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovnel %edi, %edx
450 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    cmovel %edi, %esi
451 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 4(%eax)
452 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
453 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
454 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
455 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
457 ; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_8bytes:
458 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
459 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
460 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
461 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
462 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
463 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
464 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
465 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esi), %ecx
466 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%edx), %edx
467 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, (%esi), %esi
468 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %ebx
469 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %bl
470 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
471 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %edi
472 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edi
473 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarxl %edx, %ecx, %esi
474 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarl $31, %ecx
475 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    testb $32, %dl
476 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovnel %esi, %edi
477 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    cmovel %esi, %ecx
478 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
479 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, (%eax)
480 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
481 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
482 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
483 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
485 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_8bytes:
486 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
487 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
488 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
489 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
490 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
491 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
492 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %edx
493 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%esi), %esi
494 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
495 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
496 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxl %ecx, %esi, %edi
497 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarl $31, %esi
498 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $32, %cl
499 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovnel %edi, %edx
500 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovel %edi, %esi
501 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 4(%eax)
502 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
503 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
504 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
505 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
506   %src = load i64, ptr %src.ptr, align 1
507   %bitOff = load i64, ptr %bitOff.ptr, align 1
508   %res = ashr i64 %src, %bitOff
509   store i64 %res, ptr %dst, align 1
510   ret void
513 define void @lshr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
514 ; X64-NO-BMI2-NO-SHLD-LABEL: lshr_16bytes:
515 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
516 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %r8
517 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rdi
518 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %eax
519 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
520 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r8
521 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl
522 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rdi,%rdi), %rsi
523 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rsi
524 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r8, %rsi
525 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
526 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi
527 ; X64-NO-BMI2-NO-SHLD-NEXT:    xorl %ecx, %ecx
528 ; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %al
529 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmovneq %rdi, %rsi
530 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %rdi, %rcx
531 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, 8(%rdx)
532 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rsi, (%rdx)
533 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
535 ; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:
536 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
537 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
538 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
539 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
540 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, %rsi
541 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi
542 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %rax
543 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    xorl %edi, %edi
544 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
545 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmovneq %rsi, %rax
546 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rsi, %rdi
547 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
548 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
549 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
551 ; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_16bytes:
552 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
553 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rax
554 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %ecx
555 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, (%rdi), %rsi
556 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edi
557 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil
558 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%rax,%rax), %r8
559 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi
560 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rsi, %rdi
561 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rax, %rax
562 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    xorl %esi, %esi
563 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %cl
564 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmovneq %rax, %rdi
565 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rax, %rsi
566 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, 8(%rdx)
567 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
568 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
570 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:
571 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
572 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
573 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
574 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
575 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %rax
576 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rdi, %rsi
577 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    xorl %edi, %edi
578 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
579 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovneq %rsi, %rax
580 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rsi, %rdi
581 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
582 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
583 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
585 ; X86-NO-BMI2-NO-SHLD-LABEL: lshr_16bytes:
586 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
587 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
588 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
589 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
590 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
591 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $36, %esp
592 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
593 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
594 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
595 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
596 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
597 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ecx
598 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb (%eax), %ah
599 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
600 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
601 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
602 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
603 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
604 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
605 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
606 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
607 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %al
608 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
609 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %ah
610 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $15, %ah
611 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %ah, %ebp
612 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%ebp), %esi
613 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
614 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
615 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
616 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
617 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %dl
618 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%esp,%ebp), %ecx
619 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
620 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
621 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
622 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
623 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
624 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%ebp), %ebx
625 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
626 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
627 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
628 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
629 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
630 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %esi
631 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
632 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, (%esp) # 4-byte Folded Spill
633 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%esp,%ebp), %ebx
634 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %ebp
635 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
636 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
637 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl (%esp), %ebp # 4-byte Folded Reload
638 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
639 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
640 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
641 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 12(%edx)
642 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 8(%edx)
643 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, (%edx)
644 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 4(%edx)
645 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $36, %esp
646 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
647 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
648 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
649 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
650 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
652 ; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:
653 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
654 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
655 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
656 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
657 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
658 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
659 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
660 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
661 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
662 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
663 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
664 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ecx
665 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movb (%eax), %ah
666 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
667 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
668 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
669 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%esp)
670 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
671 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
672 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
673 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
674 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movb %ah, %al
675 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
676 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %ah
677 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $15, %ah
678 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %ah, %ebp
679 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%esp,%ebp), %esi
680 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %edx
681 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
682 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edx
683 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
684 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%esp,%ebp), %ebx
685 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %edi
686 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
687 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edx, %edi
688 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp,%ebp), %edx
689 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%esp,%ebp), %ebp
690 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
691 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebp, %ebx
692 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
693 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 8(%ecx)
694 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
695 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
696 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
697 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
698 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 12(%eax)
699 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
700 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 4(%eax)
701 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
702 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
703 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
704 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
705 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
706 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
708 ; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_16bytes:
709 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
710 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
711 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
712 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
713 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
714 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $32, %esp
715 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
716 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
717 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
718 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
719 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
720 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ecx
721 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %ebx
722 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
723 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
724 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
725 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%esp)
726 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, %eax
727 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %al
728 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
729 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
730 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
731 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
732 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %bl
733 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $15, %bl
734 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %bl, %esi
735 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%esi), %edi
736 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%esi), %ebx
737 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %edi, %ebp
738 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
739 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %dl
740 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %ecx
741 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ecx, %ecx
742 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %ecx
743 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, (%esp,%esi), %ebp
744 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
745 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %edi, %edi
746 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %edi
747 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ebx, %ebx
748 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%esp,%esi), %esi
749 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %esi, %eax
750 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
751 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %esi, %edx
752 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %edx
753 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
754 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%esi)
755 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, 8(%esi)
756 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, (%esi)
757 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%esi)
758 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $32, %esp
759 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
760 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
761 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
762 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
763 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
765 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_16bytes:
766 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
767 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
768 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
769 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
770 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
771 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
772 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
773 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
774 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
775 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
776 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
777 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ecx
778 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
779 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
780 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
781 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
782 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%esp)
783 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
784 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
785 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
786 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
787 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
788 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
789 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
790 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $15, %al
791 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %al, %ebx
792 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%esp,%ebx), %eax
793 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %ebp
794 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %edx
795 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %dl
796 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%esp,%ebx), %edi
797 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%edi,%edi), %esi
798 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %esi, %edx
799 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
800 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ebp, %edx
801 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp,%ebx), %ebp
802 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%esp,%ebx), %ebx
803 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edi
804 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 8(%esi)
805 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %ebx, %edi
806 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 12(%esi)
807 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
808 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %ebp
809 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, (%esi)
810 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, 4(%esi)
811 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
812 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
813 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
814 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
815 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
816 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
817   %src = load i128, ptr %src.ptr, align 1
818   %bitOff = load i128, ptr %bitOff.ptr, align 1
819   %res = lshr i128 %src, %bitOff
820   store i128 %res, ptr %dst, align 1
821   ret void
823 define void @shl_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
824 ; X64-NO-BMI2-NO-SHLD-LABEL: shl_16bytes:
825 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
826 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %r8
827 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rdi
828 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %eax
829 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
830 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rdi
831 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl
832 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, %rsi
833 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %rsi
834 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rsi
835 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rdi, %rsi
836 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
837 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
838 ; X64-NO-BMI2-NO-SHLD-NEXT:    xorl %ecx, %ecx
839 ; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %al
840 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmovneq %r8, %rsi
841 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rcx
842 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, (%rdx)
843 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rsi, 8(%rdx)
844 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
846 ; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_16bytes:
847 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
848 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
849 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
850 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
851 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, %rsi
852 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %rsi
853 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rax, %rdi
854 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    xorl %eax, %eax
855 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
856 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmovneq %rsi, %rdi
857 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rsi, %rax
858 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
859 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
860 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
862 ; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_16bytes:
863 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
864 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
865 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %ecx
866 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rcx, 8(%rdi), %rsi
867 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edi
868 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil
869 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rcx, %rax, %r8
870 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rax
871 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rdi, %rax, %rax
872 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rsi, %rax
873 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    xorl %esi, %esi
874 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %cl
875 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmovneq %r8, %rax
876 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rsi
877 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, (%rdx)
878 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 8(%rdx)
879 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
881 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_16bytes:
882 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
883 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
884 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
885 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
886 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rax, %rdi
887 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %rax, %rax
888 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    xorl %esi, %esi
889 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
890 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovneq %rax, %rdi
891 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rax, %rsi
892 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
893 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rsi, (%rdx)
894 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
896 ; X86-NO-BMI2-NO-SHLD-LABEL: shl_16bytes:
897 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
898 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
899 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
900 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
901 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
902 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $40, %esp
903 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
904 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
905 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
906 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
907 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
908 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ebx
909 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %ecx
910 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
911 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
912 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
913 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
914 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
915 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
916 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
917 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
918 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
919 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
920 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
921 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $15, %cl
922 ; X86-NO-BMI2-NO-SHLD-NEXT:    negb %cl
923 ; X86-NO-BMI2-NO-SHLD-NEXT:    movsbl %cl, %ebp
924 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%ebp), %ecx
925 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
926 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%ebp), %esi
927 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %edi
928 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
929 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
930 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
931 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %dl
932 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ebx # 4-byte Reload
933 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
934 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
935 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
936 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
937 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%esp,%ebp), %edi
938 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
939 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
940 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
941 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%ebp), %edi
942 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebp
943 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebp
944 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
945 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp
946 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Folded Reload
947 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
948 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
949 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %esi
950 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
951 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
952 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %esi
953 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
954 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
955 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
956 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
957 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%edx)
958 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 8(%edx)
959 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 12(%edx)
960 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 4(%edx)
961 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $40, %esp
962 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
963 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
964 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
965 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
966 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
968 ; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_16bytes:
969 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
970 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
971 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
972 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
973 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
974 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
975 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
976 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
977 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
978 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
979 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
980 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ebx
981 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %ecx
982 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
983 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
984 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
985 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
986 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
987 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
988 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
989 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, (%esp)
990 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
991 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
992 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %cl
993 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $15, %cl
994 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    negb %cl
995 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movsbl %cl, %ebp
996 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%esp,%ebp), %ebx
997 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, %edx
998 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
999 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edx
1000 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
1001 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%esp,%ebp), %edi
1002 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, %esi
1003 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %esi
1004 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
1005 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edx, %esi
1006 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%esp,%ebp), %edx
1007 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebp), %ebp
1008 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1009 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %ebx, %ebp
1010 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1011 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 12(%ebx)
1012 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, %edi
1013 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edx
1014 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebx)
1015 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 4(%ebx)
1016 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 8(%ebx)
1017 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
1018 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
1019 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
1020 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
1021 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
1022 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
1024 ; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_16bytes:
1025 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
1026 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
1027 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
1028 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
1029 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
1030 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $32, %esp
1031 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1032 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1033 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
1034 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
1035 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
1036 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ebx
1037 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %ecx
1038 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1039 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1040 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1041 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1042 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx
1043 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %bl
1044 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1045 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1046 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1047 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, (%esp)
1048 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
1049 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $15, %cl
1050 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    negb %cl
1051 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movsbl %cl, %edx
1052 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%esp,%edx), %edi
1053 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%esp,%edx), %ecx
1054 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %ecx, %esi
1055 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edi, %ebp
1056 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, %eax
1057 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %al
1058 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %edi
1059 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %edi, %edi
1060 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edi
1061 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, 28(%esp,%edx), %esi
1062 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edx), %edx
1063 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ebx, %edx, %ebx
1064 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %edx
1065 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %edx, %edx
1066 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edx
1067 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ecx
1068 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %eax
1069 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %eax
1070 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1071 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, (%ecx)
1072 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 8(%ecx)
1073 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, 12(%ecx)
1074 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 4(%ecx)
1075 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $32, %esp
1076 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
1077 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
1078 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
1079 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
1080 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
1082 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_16bytes:
1083 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
1084 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
1085 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
1086 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
1087 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
1088 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
1089 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1090 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1091 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
1092 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
1093 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
1094 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ecx
1095 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
1096 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1097 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1098 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1099 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1100 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1101 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
1102 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1103 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1104 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1105 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, (%esp)
1106 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
1107 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $15, %al
1108 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    negb %al
1109 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movsbl %al, %ebx
1110 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%esp,%ebx), %edi
1111 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %edi, %ebp
1112 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %edx
1113 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %dl
1114 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%esp,%ebx), %eax
1115 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %esi
1116 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
1117 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %edx
1118 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
1119 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ebp, %edx
1120 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%esp,%ebx), %ebp
1121 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebx), %ebx
1122 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edi, %ebx
1123 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 12(%esi)
1124 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %ebp, %edi
1125 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, (%esi)
1126 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
1127 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %ebp, %eax
1128 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%esi)
1129 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, 8(%esi)
1130 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
1131 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
1132 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
1133 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
1134 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
1135 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
1136   %src = load i128, ptr %src.ptr, align 1
1137   %bitOff = load i128, ptr %bitOff.ptr, align 1
1138   %res = shl i128 %src, %bitOff
1139   store i128 %res, ptr %dst, align 1
1140   ret void
1142 define void @ashr_16bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
1143 ; X64-NO-BMI2-NO-SHLD-LABEL: ashr_16bytes:
1144 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
1145 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %r8
1146 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rdi
1147 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %eax
1148 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1149 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r8
1150 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %cl
1151 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rdi,%rdi), %rsi
1152 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rsi
1153 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r8, %rsi
1154 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, %r8
1155 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1156 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq %cl, %r8
1157 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq $63, %rdi
1158 ; X64-NO-BMI2-NO-SHLD-NEXT:    testb $64, %al
1159 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmovneq %r8, %rsi
1160 ; X64-NO-BMI2-NO-SHLD-NEXT:    cmoveq %r8, %rdi
1161 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, 8(%rdx)
1162 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rsi, (%rdx)
1163 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
1165 ; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:
1166 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
1167 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
1168 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
1169 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
1170 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, %rsi
1171 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq %cl, %rsi
1172 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %rax
1173 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq $63, %rdi
1174 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
1175 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmovneq %rsi, %rax
1176 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    cmoveq %rsi, %rdi
1177 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
1178 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
1179 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
1181 ; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_16bytes:
1182 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
1183 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rax
1184 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %ecx
1185 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, (%rdi), %rsi
1186 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edi
1187 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %dil
1188 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%rax,%rax), %r8
1189 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rdi, %r8, %rdi
1190 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rsi, %rdi
1191 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarxq %rcx, %rax, %rsi
1192 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarq $63, %rax
1193 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    testb $64, %cl
1194 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmovneq %rsi, %rdi
1195 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    cmoveq %rsi, %rax
1196 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 8(%rdx)
1197 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
1198 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
1200 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:
1201 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
1202 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
1203 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rdi
1204 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %ecx
1205 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %rax
1206 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxq %rcx, %rdi, %rsi
1207 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarq $63, %rdi
1208 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    testb $64, %cl
1209 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmovneq %rsi, %rax
1210 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    cmoveq %rsi, %rdi
1211 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
1212 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
1213 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
1215 ; X86-NO-BMI2-NO-SHLD-LABEL: ashr_16bytes:
1216 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
1217 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
1218 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
1219 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
1220 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
1221 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $36, %esp
1222 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1223 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1224 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
1225 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
1226 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
1227 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ebx
1228 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %ecx
1229 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1230 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1231 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1232 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1233 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl $31, %ebx
1234 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1235 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1236 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1237 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1238 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
1239 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
1240 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
1241 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $15, %cl
1242 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %cl, %ebp
1243 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%ebp), %esi
1244 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
1245 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1246 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1247 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
1248 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %dl
1249 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%esp,%ebp), %ecx
1250 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
1251 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
1252 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
1253 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
1254 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
1255 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%ebp), %ebx
1256 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1257 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1258 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
1259 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
1260 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
1261 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %esi
1262 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1263 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, (%esp) # 4-byte Folded Spill
1264 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%esp,%ebp), %ebx
1265 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %ebp
1266 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
1267 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
1268 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl (%esp), %ebp # 4-byte Folded Reload
1269 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
1270 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1271 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl %cl, %ebx
1272 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 12(%edx)
1273 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 8(%edx)
1274 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, (%edx)
1275 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 4(%edx)
1276 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $36, %esp
1277 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
1278 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
1279 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
1280 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
1281 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
1283 ; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:
1284 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
1285 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
1286 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
1287 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
1288 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
1289 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
1290 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1291 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1292 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
1293 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
1294 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
1295 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ebx
1296 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %ecx
1297 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1298 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1299 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1300 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%esp)
1301 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl $31, %ebx
1302 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1303 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1304 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1305 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1306 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
1307 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
1308 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %cl
1309 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $15, %cl
1310 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %cl, %ebp
1311 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%esp,%ebp), %esi
1312 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %edx
1313 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1314 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edx
1315 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
1316 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%esp,%ebp), %ebx
1317 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %edi
1318 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
1319 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edx, %edi
1320 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp,%ebp), %edx
1321 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%esp,%ebp), %ebp
1322 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1323 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebp, %ebx
1324 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1325 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 8(%ecx)
1326 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1327 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %edx
1328 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl %cl, %ebp
1329 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1330 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 12(%eax)
1331 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%eax)
1332 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 4(%eax)
1333 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
1334 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
1335 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
1336 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
1337 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
1338 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
1340 ; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_16bytes:
1341 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
1342 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
1343 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
1344 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
1345 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
1346 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $32, %esp
1347 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1348 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1349 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%ecx), %edx
1350 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%ecx), %esi
1351 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%ecx), %edi
1352 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%ecx), %ebx
1353 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%eax), %ecx
1354 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1355 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1356 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1357 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%esp)
1358 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarl $31, %ebx
1359 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1360 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1361 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1362 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1363 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
1364 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %al
1365 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
1366 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $15, %cl
1367 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %cl, %esi
1368 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%esp,%esi), %edi
1369 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%esp,%esi), %ebx
1370 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %edi, %ebp
1371 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
1372 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %dl
1373 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %ecx
1374 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ecx, %ecx
1375 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %ecx
1376 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, (%esp,%esi), %ebp
1377 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
1378 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %edi, %edi
1379 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %edi
1380 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ebx, %ebx
1381 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%esp,%esi), %esi
1382 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarxl %eax, %esi, %eax
1383 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
1384 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %esi, %edx
1385 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %edx
1386 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
1387 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%esi)
1388 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, 8(%esi)
1389 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, (%esi)
1390 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%esi)
1391 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $32, %esp
1392 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
1393 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
1394 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
1395 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
1396 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
1398 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_16bytes:
1399 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
1400 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
1401 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
1402 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
1403 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
1404 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $32, %esp
1405 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1406 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1407 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%ecx), %edx
1408 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%ecx), %esi
1409 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%ecx), %edi
1410 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%ecx), %ecx
1411 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
1412 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1413 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1414 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1415 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%esp)
1416 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarl $31, %ecx
1417 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1418 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1419 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1420 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1421 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1422 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
1423 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
1424 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $15, %al
1425 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %al, %ebx
1426 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%esp,%ebx), %eax
1427 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %ebp
1428 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %edx
1429 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %dl
1430 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%esp,%ebx), %edi
1431 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%edi,%edi), %esi
1432 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %esi, %edx
1433 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
1434 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ebp, %edx
1435 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp,%ebx), %ebp
1436 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%esp,%ebx), %ebx
1437 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edi
1438 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 8(%esi)
1439 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxl %ecx, %ebx, %edi
1440 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 12(%esi)
1441 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
1442 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %ebp
1443 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, (%esi)
1444 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, 4(%esi)
1445 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $32, %esp
1446 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
1447 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
1448 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
1449 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
1450 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
1451   %src = load i128, ptr %src.ptr, align 1
1452   %bitOff = load i128, ptr %bitOff.ptr, align 1
1453   %res = ashr i128 %src, %bitOff
1454   store i128 %res, ptr %dst, align 1
1455   ret void
1458 define void @lshr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
1459 ; X64-NO-BMI2-NO-SHLD-LABEL: lshr_32bytes:
1460 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
1461 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
1462 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
1463 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
1464 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
1465 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
1466 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
1467 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
1468 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
1469 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
1470 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
1471 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1472 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1473 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1474 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1475 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
1476 ; X64-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
1477 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
1478 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl %sil, %r9d
1479 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%r9), %r10
1480 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%r9), %rdi
1481 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, %r11
1482 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1483 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r11
1484 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
1485 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
1486 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%r9), %rbx
1487 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rbx,%rbx), %r8
1488 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
1489 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
1490 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %r8
1491 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1492 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r10
1493 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
1494 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
1495 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rdi
1496 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r10, %rdi
1497 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1498 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbx
1499 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%r9), %r9
1500 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r9,%r9), %r10
1501 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
1502 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r10
1503 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rbx, %r10
1504 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1505 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r9
1506 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, 24(%rdx)
1507 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, 16(%rdx)
1508 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
1509 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, 8(%rdx)
1510 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
1511 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
1513 ; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:
1514 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
1515 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
1516 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
1517 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
1518 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
1519 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
1520 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
1521 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
1522 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
1523 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
1524 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1525 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1526 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1527 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1528 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
1529 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
1530 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
1531 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %sil, %esi
1532 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rsi), %rdi
1533 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rsi), %r8
1534 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, %r9
1535 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1536 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r9
1537 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
1538 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%rsi), %r10
1539 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r10,%r10), %r11
1540 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r11
1541 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r9, %r11
1542 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%rsi), %rsi
1543 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1544 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %r10
1545 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %rdi
1546 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi
1547 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, 16(%rdx)
1548 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 24(%rdx)
1549 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, (%rdx)
1550 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 8(%rdx)
1551 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
1553 ; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_32bytes:
1554 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
1555 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
1556 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
1557 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
1558 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
1559 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
1560 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
1561 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
1562 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
1563 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
1564 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
1565 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %al
1566 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1567 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1568 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1569 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1570 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
1571 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %sil, %ecx
1572 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%rcx), %rsi
1573 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%rcx), %rdi
1574 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rsi, %r8
1575 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, -64(%rsp,%rcx), %r9
1576 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rdi, %r10
1577 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%rcx), %rcx
1578 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rcx, %r11
1579 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    # kill: def $al killed $al killed $rax def $rax
1580 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %al
1581 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
1582 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rdi, %rdi
1583 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r8, %rdi
1584 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rsi, %rsi
1585 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rsi, %rsi
1586 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r9, %rsi
1587 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rcx, %rcx
1588 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rcx, %rax
1589 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r10, %rax
1590 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, 24(%rdx)
1591 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 16(%rdx)
1592 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, (%rdx)
1593 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, 8(%rdx)
1594 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
1596 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:
1597 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
1598 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
1599 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
1600 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
1601 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
1602 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
1603 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
1604 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
1605 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
1606 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
1607 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
1608 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
1609 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
1610 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1611 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1612 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1613 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
1614 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
1615 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %sil, %eax
1616 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rax), %rsi
1617 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rdi
1618 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%rax), %r8
1619 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r8, %r9
1620 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r10d
1621 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %r10b
1622 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%rax), %r11
1623 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r11,%r11), %rbx
1624 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r10, %rbx, %r10
1625 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rax), %rax
1626 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %rdi, %r10
1627 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %r11
1628 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
1629 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax
1630 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, 16(%rdx)
1631 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, 24(%rdx)
1632 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
1633 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, 8(%rdx)
1634 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
1635 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
1637 ; X86-NO-BMI2-NO-SHLD-LABEL: lshr_32bytes:
1638 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
1639 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
1640 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
1641 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
1642 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
1643 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $88, %esp
1644 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1645 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
1646 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%edi), %eax
1647 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
1648 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%edi), %eax
1649 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1650 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%edi), %esi
1651 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%edi), %ebx
1652 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%edi), %ebp
1653 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb (%ecx), %ch
1654 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%edi), %edx
1655 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%edi), %eax
1656 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%edi), %edi
1657 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1658 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1659 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1660 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
1661 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1662 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1663 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1664 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1665 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
1666 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1667 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1668 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1669 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1670 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1671 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1672 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1673 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1674 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1675 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %al
1676 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
1677 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %ch
1678 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %ch, %edi
1679 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1680 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edi), %esi
1681 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%edi), %ebx
1682 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
1683 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1684 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1685 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ah
1686 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %ah
1687 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%edi), %edi
1688 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%edi,%edi), %ebp
1689 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1690 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
1691 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
1692 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1693 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1694 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
1695 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ebx # 4-byte Reload
1696 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx
1697 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1698 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
1699 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
1700 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
1701 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
1702 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%esp,%ebx), %ebp
1703 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, %esi
1704 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1705 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
1706 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%esp,%ebx), %ecx
1707 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1708 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %edx
1709 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
1710 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1711 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
1712 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
1713 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1714 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1715 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
1716 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
1717 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1718 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
1719 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
1720 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%esp,%edx), %edi
1721 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebx
1722 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
1723 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1724 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 48(%esp,%edx), %esi
1725 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edx
1726 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1727 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
1728 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edx
1729 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1730 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ch
1731 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl
1732 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
1733 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1734 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
1735 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
1736 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %dl
1737 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
1738 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
1739 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl
1740 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
1741 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
1742 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
1743 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%esp,%esi), %ebx
1744 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %esi
1745 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %dl, %cl
1746 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
1747 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %esi
1748 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl
1749 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
1750 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1751 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 28(%eax)
1752 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 24(%eax)
1753 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 16(%eax)
1754 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1755 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
1756 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 8(%eax)
1757 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1758 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
1759 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
1760 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
1761 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1762 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
1763 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $88, %esp
1764 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
1765 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
1766 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
1767 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
1768 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
1770 ; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:
1771 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
1772 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
1773 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
1774 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
1775 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
1776 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $92, %esp
1777 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1778 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
1779 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %eax
1780 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1781 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %eax
1782 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
1783 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %esi
1784 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %ebx
1785 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %ebp
1786 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
1787 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %edx
1788 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %eax
1789 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %edi
1790 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1791 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1792 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
1793 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
1794 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1795 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1796 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
1797 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1798 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1799 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1800 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1801 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1802 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1803 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1804 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1805 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1806 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1807 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1808 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
1809 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
1810 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %cl
1811 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %cl, %ebp
1812 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%esp,%ebp), %esi
1813 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1814 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1815 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
1816 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
1817 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %dl
1818 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%esp,%ebp), %ecx
1819 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1820 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %edi
1821 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
1822 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
1823 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
1824 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1825 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%esp,%ebp), %esi
1826 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1827 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1828 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
1829 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%esp,%ebp), %ecx
1830 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
1831 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %edi
1832 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
1833 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
1834 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
1835 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1836 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 48(%esp,%ebp), %edi
1837 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1838 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1839 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
1840 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%esp,%ebp), %ebx
1841 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %esi
1842 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
1843 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %esi
1844 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %esi
1845 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1846 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
1847 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
1848 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
1849 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
1850 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, (%esp) # 4-byte Folded Spill
1851 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebp), %edx
1852 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%esp,%ebp), %edi
1853 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, %ebx
1854 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1855 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 24(%ebp)
1856 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
1857 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edx
1858 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
1859 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 28(%ebp)
1860 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
1861 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%ebp)
1862 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1863 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%ebp)
1864 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebp)
1865 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 20(%ebp)
1866 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1867 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%ebp)
1868 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1869 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%ebp)
1870 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $92, %esp
1871 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
1872 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
1873 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
1874 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
1875 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
1877 ; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_32bytes:
1878 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
1879 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
1880 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
1881 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
1882 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
1883 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $84, %esp
1884 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1885 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
1886 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edi), %eax
1887 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1888 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edi), %eax
1889 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1890 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edi), %esi
1891 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edi), %ebx
1892 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edi), %ebp
1893 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %edx
1894 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edi), %ecx
1895 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edi), %eax
1896 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edi), %edi
1897 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
1898 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1899 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
1900 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
1901 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
1902 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
1903 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1904 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1905 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1906 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
1907 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
1908 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %cl
1909 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1910 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1911 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1912 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1913 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1914 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1915 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1916 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
1917 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %dl
1918 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %dl, %edi
1919 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edi), %esi
1920 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%edi), %eax
1921 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1922 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
1923 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx
1924 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %dl
1925 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%eax,%eax), %ebp
1926 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebp, %eax
1927 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %eax
1928 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1929 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
1930 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, 20(%esp,%edi), %ebx
1931 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
1932 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %esi, %ecx
1933 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %ecx
1934 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1935 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%esp,%edi), %ecx
1936 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
1937 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
1938 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebx, %ecx
1939 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%edi), %ebp
1940 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ebp, %ebx
1941 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %ecx
1942 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1943 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
1944 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx
1945 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
1946 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebp, %eax
1947 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %eax
1948 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1949 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%esp,%edi), %ebp
1950 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ebp,%ebp), %ecx
1951 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ecx, %ecx
1952 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%esp,%edi), %eax
1953 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %eax, %esi
1954 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx
1955 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, (%esp), %esi # 4-byte Folded Reload
1956 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
1957 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %eax, %eax
1958 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %eax, %esi
1959 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl (%esp), %esi # 4-byte Folded Reload
1960 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %ebp, %eax
1961 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%esp,%edi), %edi
1962 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %edi, %ebx
1963 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
1964 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %edi, %edi
1965 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
1966 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1967 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, 28(%eax)
1968 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 24(%eax)
1969 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 16(%eax)
1970 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
1971 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1972 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
1973 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1974 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
1975 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1976 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
1977 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
1978 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
1979 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $84, %esp
1980 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
1981 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
1982 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
1983 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
1984 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
1986 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_32bytes:
1987 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
1988 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
1989 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
1990 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
1991 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
1992 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $88, %esp
1993 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
1994 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
1995 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %ecx
1996 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1997 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %ecx
1998 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
1999 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %esi
2000 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %ebx
2001 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %ebp
2002 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
2003 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %edx
2004 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %ecx
2005 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %edi
2006 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2007 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2008 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2009 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2010 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2011 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2012 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
2013 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2014 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2015 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2016 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2017 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
2018 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2019 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2020 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2021 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2022 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2023 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2024 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2025 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2026 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
2027 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %al, %ebx
2028 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebx), %eax
2029 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2030 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %eax
2031 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %edx
2032 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %dl
2033 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%esp,%ebx), %esi
2034 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2035 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
2036 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %esi, %esi
2037 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %eax, %esi
2038 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
2039 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%esp,%ebx), %ebp
2040 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%ebp,%ebp), %eax
2041 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %eax, %edi
2042 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%esp,%ebx), %eax
2043 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2044 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %eax
2045 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %eax, %edi
2046 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2047 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 48(%esp,%ebx), %esi
2048 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%esi,%esi), %edi
2049 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %edi, %eax
2050 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%esp,%ebx), %edx
2051 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %edx, %edi
2052 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %edi, %eax
2053 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2054 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
2055 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2056 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %edi
2057 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %ebp
2058 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%esp,%ebx), %edx
2059 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%esp,%ebx), %eax
2060 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %esi
2061 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
2062 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 24(%ebx)
2063 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %eax
2064 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%ebx)
2065 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 16(%ebx)
2066 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 8(%ebx)
2067 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
2068 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2069 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %edx
2070 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebx)
2071 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2072 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%ebx)
2073 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2074 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%ebx)
2075 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2076 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%ebx)
2077 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $88, %esp
2078 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
2079 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
2080 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
2081 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
2082 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
2083   %src = load i256, ptr %src.ptr, align 1
2084   %bitOff = load i256, ptr %bitOff.ptr, align 1
2085   %res = lshr i256 %src, %bitOff
2086   store i256 %res, ptr %dst, align 1
2087   ret void
2089 define void @shl_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
2090 ; X64-NO-BMI2-NO-SHLD-LABEL: shl_32bytes:
2091 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
2092 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
2093 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
2094 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
2095 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
2096 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
2097 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
2098 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2099 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2100 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2101 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2102 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2103 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2104 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2105 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2106 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
2107 ; X64-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
2108 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
2109 ; X64-NO-BMI2-NO-SHLD-NEXT:    negb %sil
2110 ; X64-NO-BMI2-NO-SHLD-NEXT:    movsbq %sil, %r10
2111 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -32(%rsp,%r10), %r8
2112 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -24(%rsp,%r10), %rdi
2113 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, %r11
2114 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2115 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r11
2116 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
2117 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
2118 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, %r9
2119 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r9
2120 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2121 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r9
2122 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %r9
2123 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -8(%rsp,%r10), %r11
2124 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2125 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r11
2126 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -16(%rsp,%r10), %r10
2127 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, %rbx
2128 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %rbx
2129 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2130 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbx
2131 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %rbx
2132 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2133 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r10
2134 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %rdi
2135 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2136 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi
2137 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r10, %rdi
2138 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2139 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
2140 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, (%rdx)
2141 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, 16(%rdx)
2142 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
2143 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, 8(%rdx)
2144 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
2145 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
2147 ; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_32bytes:
2148 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
2149 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
2150 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
2151 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
2152 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
2153 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
2154 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2155 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2156 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2157 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2158 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2159 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2160 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2161 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2162 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
2163 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
2164 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
2165 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    negb %sil
2166 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movsbq %sil, %rsi
2167 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -16(%rsp,%rsi), %rdi
2168 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, %r8
2169 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2170 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r8
2171 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
2172 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -32(%rsp,%rsi), %r9
2173 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -24(%rsp,%rsi), %r10
2174 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, %r11
2175 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %r11
2176 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r11
2177 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r8, %r11
2178 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -8(%rsp,%rsi), %rsi
2179 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2180 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rdi, %rsi
2181 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r9, %r10
2182 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r9
2183 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 24(%rdx)
2184 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, (%rdx)
2185 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, 8(%rdx)
2186 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 16(%rdx)
2187 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
2189 ; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_32bytes:
2190 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
2191 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
2192 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
2193 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
2194 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
2195 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
2196 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2197 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2198 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2199 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2200 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
2201 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %al
2202 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2203 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2204 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2205 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2206 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
2207 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    negb %sil
2208 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movsbq %sil, %rsi
2209 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -32(%rsp,%rsi), %rdi
2210 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -24(%rsp,%rsi), %rcx
2211 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rcx, %r8
2212 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, -8(%rsp,%rsi), %r9
2213 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -16(%rsp,%rsi), %rsi
2214 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rsi, %r10
2215 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rdi, %r11
2216 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    # kill: def $al killed $al killed $rax def $rax
2217 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %al
2218 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rdi
2219 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rdi, %rdi
2220 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r8, %rdi
2221 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rsi
2222 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rsi, %rsi
2223 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r9, %rsi
2224 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rcx
2225 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rcx, %rax
2226 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r10, %rax
2227 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, (%rdx)
2228 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 16(%rdx)
2229 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, 24(%rdx)
2230 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, 8(%rdx)
2231 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
2233 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_32bytes:
2234 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
2235 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
2236 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
2237 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
2238 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
2239 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
2240 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
2241 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2242 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2243 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2244 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2245 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
2246 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
2247 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2248 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2249 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2250 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
2251 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
2252 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    negb %sil
2253 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movsbq %sil, %rax
2254 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -16(%rsp,%rax), %rsi
2255 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %rsi, %rdi
2256 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -32(%rsp,%rax), %r8
2257 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %r8, %r9
2258 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r10d
2259 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %r10b
2260 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -24(%rsp,%rax), %r11
2261 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, %rbx
2262 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrq %rbx
2263 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %r10, %rbx, %r10
2264 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %rdi, %r10
2265 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -8(%rsp,%rax), %rax
2266 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rsi, %rax
2267 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
2268 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r8, %r11
2269 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, 24(%rdx)
2270 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, (%rdx)
2271 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, 8(%rdx)
2272 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, 16(%rdx)
2273 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
2274 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
2276 ; X86-NO-BMI2-NO-SHLD-LABEL: shl_32bytes:
2277 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
2278 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
2279 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
2280 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
2281 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
2282 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $88, %esp
2283 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2284 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
2285 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%edi), %eax
2286 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
2287 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%edi), %eax
2288 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2289 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%edi), %esi
2290 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%edi), %ebx
2291 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%edi), %ebp
2292 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %ecx
2293 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%edi), %edx
2294 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%edi), %eax
2295 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%edi), %edi
2296 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2297 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2298 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2299 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2300 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2301 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2302 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2303 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2304 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2305 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2306 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2307 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2308 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2309 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2310 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2311 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2312 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2313 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2314 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
2315 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
2316 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
2317 ; X86-NO-BMI2-NO-SHLD-NEXT:    negb %cl
2318 ; X86-NO-BMI2-NO-SHLD-NEXT:    movsbl %cl, %ecx
2319 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 56(%esp,%ecx), %edi
2320 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2321 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 60(%esp,%ecx), %edx
2322 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebp
2323 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %esi
2324 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2325 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
2326 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ah
2327 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %ah
2328 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
2329 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2330 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
2331 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edi
2332 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2333 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 68(%esp,%ebp), %edi
2334 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, (%esp) # 4-byte Spill
2335 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2336 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
2337 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 64(%esp,%ebp), %esi
2338 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
2339 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
2340 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2341 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
2342 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
2343 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2344 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2345 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
2346 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edx
2347 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2348 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edx
2349 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %edx
2350 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2351 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2352 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 76(%esp,%ebp), %esi
2353 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
2354 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2355 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
2356 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 72(%esp,%ebp), %edi
2357 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebp
2358 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebp
2359 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2360 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp
2361 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
2362 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2363 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
2364 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %edx # 4-byte Reload
2365 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edx
2366 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2367 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edx
2368 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %edx
2369 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, (%esp) # 4-byte Spill
2370 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
2371 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 84(%esp,%edi), %edx
2372 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2373 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
2374 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%edi), %edi
2375 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebx
2376 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
2377 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2378 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
2379 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %ebx
2380 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2381 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
2382 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %esi
2383 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2384 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
2385 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %esi
2386 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2387 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
2388 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
2389 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
2390 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, (%eax)
2391 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 24(%eax)
2392 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 28(%eax)
2393 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
2394 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 16(%eax)
2395 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 20(%eax)
2396 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2397 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
2398 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2399 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
2400 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2401 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
2402 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $88, %esp
2403 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
2404 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
2405 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
2406 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
2407 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
2409 ; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_32bytes:
2410 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
2411 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
2412 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
2413 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
2414 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
2415 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $92, %esp
2416 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2417 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
2418 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %eax
2419 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2420 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %eax
2421 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
2422 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %esi
2423 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %ebx
2424 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %ebp
2425 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
2426 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %edx
2427 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %eax
2428 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %edi
2429 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2430 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2431 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2432 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2433 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2434 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2435 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2436 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2437 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2438 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2439 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2440 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2441 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2442 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2443 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2444 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2445 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2446 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2447 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
2448 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
2449 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %cl
2450 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    negb %cl
2451 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movsbl %cl, %ebx
2452 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 68(%esp,%ebx), %esi
2453 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2454 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2455 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %esi
2456 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
2457 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %dl
2458 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 64(%esp,%ebx), %edi
2459 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2460 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %edi
2461 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
2462 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
2463 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
2464 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2465 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%ebx), %esi
2466 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2467 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2468 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %esi
2469 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 72(%esp,%ebx), %ebp
2470 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2471 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
2472 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
2473 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
2474 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebp
2475 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%ebx), %esi
2476 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2477 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2478 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %esi
2479 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%ebx), %edi
2480 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, (%esp) # 4-byte Spill
2481 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %edi
2482 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
2483 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
2484 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
2485 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2486 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
2487 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
2488 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2489 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
2490 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, (%esp) # 4-byte Folded Spill
2491 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 60(%esp,%ebx), %edx
2492 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 88(%esp,%ebx), %esi
2493 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
2494 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %ebx, %esi
2495 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
2496 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 28(%ebx)
2497 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
2498 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 20(%ebx)
2499 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2500 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 12(%ebx)
2501 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2502 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
2503 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, %esi
2504 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edx
2505 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebx)
2506 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 4(%ebx)
2507 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 24(%ebx)
2508 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 16(%ebx)
2509 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2510 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%ebx)
2511 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $92, %esp
2512 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
2513 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
2514 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
2515 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
2516 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
2518 ; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_32bytes:
2519 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
2520 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
2521 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
2522 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
2523 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
2524 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $88, %esp
2525 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2526 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
2527 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edi), %eax
2528 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2529 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edi), %eax
2530 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2531 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edi), %esi
2532 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edi), %ebx
2533 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edi), %ebp
2534 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %ecx
2535 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edi), %edx
2536 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edi), %eax
2537 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edi), %edi
2538 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2539 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2540 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2541 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2542 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2543 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2544 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2545 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2546 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2547 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2548 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx
2549 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %dl
2550 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2551 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2552 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2553 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2554 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2555 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2556 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2557 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2558 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
2559 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    negb %cl
2560 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movsbl %cl, %esi
2561 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 56(%esp,%esi), %ebx
2562 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2563 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 60(%esp,%esi), %eax
2564 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
2565 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %eax, %edi
2566 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
2567 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl
2568 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebx
2569 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %ebx, %ebx
2570 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
2571 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2572 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 64(%esp,%esi), %ebx
2573 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, %edi
2574 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %edi
2575 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %edi, %eax
2576 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 68(%esp,%esi), %edi
2577 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %edi, %ebp
2578 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %eax
2579 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2580 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebx, %ebx
2581 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2582 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
2583 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %eax, %eax
2584 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %eax
2585 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
2586 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 72(%esp,%esi), %ebx
2587 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2588 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebx
2589 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %ebx, %eax
2590 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 76(%esp,%esi), %ebx
2591 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebx, %ebp
2592 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %eax
2593 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2594 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
2595 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %edi
2596 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %edi, %edi
2597 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
2598 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
2599 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2600 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, 84(%esp,%esi), %ebp
2601 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%esi), %esi
2602 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %esi, %eax
2603 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
2604 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %esi
2605 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebp, %esi
2606 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebx
2607 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %ebx, %edx
2608 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %eax, %edx
2609 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
2610 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2611 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
2612 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, 24(%eax)
2613 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 28(%eax)
2614 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 16(%eax)
2615 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2616 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
2617 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
2618 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
2619 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2620 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
2621 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2622 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
2623 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $88, %esp
2624 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
2625 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
2626 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
2627 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
2628 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
2630 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_32bytes:
2631 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
2632 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
2633 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
2634 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
2635 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
2636 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $88, %esp
2637 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
2638 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
2639 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %ecx
2640 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2641 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %ecx
2642 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
2643 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %esi
2644 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %ebx
2645 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %ebp
2646 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
2647 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %edx
2648 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %ecx
2649 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %edi
2650 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2651 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2652 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2653 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2654 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2655 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2656 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
2657 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2658 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
2659 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
2660 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2661 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
2662 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2663 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2664 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2665 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2666 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2667 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2668 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2669 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
2670 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
2671 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    negb %al
2672 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movsbl %al, %esi
2673 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 64(%esp,%esi), %eax
2674 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2675 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %eax, %edx
2676 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
2677 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %al
2678 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 60(%esp,%esi), %ebx
2679 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
2680 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %ebx
2681 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %eax, %ebx, %edi
2682 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %edx, %edi
2683 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2684 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 68(%esp,%esi), %ebx
2685 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, %edx
2686 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %edx
2687 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %eax, %edx, %edi
2688 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 72(%esp,%esi), %edx
2689 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2690 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %edx, %edx
2691 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %edx, %edi
2692 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2693 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%esi), %edi
2694 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, %edx
2695 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %edx
2696 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %eax, %edx, %eax
2697 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%esi), %edx
2698 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %edx, %ebp
2699 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ebp, %eax
2700 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2701 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2702 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %eax, %ebx
2703 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2704 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %eax, %edi
2705 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 56(%esp,%esi), %ebp
2706 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%esi), %eax
2707 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, %eax
2708 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
2709 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%esi)
2710 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 20(%esi)
2711 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 12(%esi)
2712 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %ebp, %eax
2713 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esi)
2714 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
2715 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2716 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %ebp, %eax
2717 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%esi)
2718 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2719 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 24(%esi)
2720 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2721 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%esi)
2722 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2723 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%esi)
2724 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $88, %esp
2725 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
2726 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
2727 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
2728 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
2729 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
2730   %src = load i256, ptr %src.ptr, align 1
2731   %bitOff = load i256, ptr %bitOff.ptr, align 1
2732   %res = shl i256 %src, %bitOff
2733   store i256 %res, ptr %dst, align 1
2734   ret void
2736 define void @ashr_32bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
2737 ; X64-NO-BMI2-NO-SHLD-LABEL: ashr_32bytes:
2738 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
2739 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
2740 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
2741 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
2742 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
2743 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
2744 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
2745 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2746 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2747 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2748 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2749 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq $63, %rdi
2750 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2751 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2752 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2753 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2754 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
2755 ; X64-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
2756 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
2757 ; X64-NO-BMI2-NO-SHLD-NEXT:    movzbl %sil, %r9d
2758 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%r9), %r10
2759 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%r9), %rdi
2760 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, %r11
2761 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2762 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r11
2763 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
2764 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
2765 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%r9), %rbx
2766 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rbx,%rbx), %r8
2767 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2768 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
2769 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %r8
2770 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2771 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r10
2772 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
2773 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2774 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rdi
2775 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r10, %rdi
2776 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2777 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbx
2778 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%r9), %r9
2779 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r9,%r9), %r10
2780 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
2781 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r10
2782 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rbx, %r10
2783 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2784 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq %cl, %r9
2785 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, 24(%rdx)
2786 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, 16(%rdx)
2787 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
2788 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, 8(%rdx)
2789 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
2790 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
2792 ; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:
2793 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
2794 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
2795 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
2796 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
2797 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
2798 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
2799 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2800 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2801 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2802 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2803 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq $63, %rdi
2804 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2805 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2806 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2807 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2808 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
2809 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
2810 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
2811 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %sil, %esi
2812 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rsi), %rdi
2813 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rsi), %r8
2814 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, %r9
2815 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2816 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r9
2817 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notb %cl
2818 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%rsi), %r10
2819 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r10,%r10), %r11
2820 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r11
2821 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r9, %r11
2822 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%rsi), %rsi
2823 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
2824 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %r10
2825 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %rdi
2826 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq %cl, %rsi
2827 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, 16(%rdx)
2828 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 24(%rdx)
2829 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, (%rdx)
2830 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 8(%rdx)
2831 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
2833 ; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_32bytes:
2834 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
2835 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
2836 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
2837 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
2838 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %rdi
2839 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%rsi), %esi
2840 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2841 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2842 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2843 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2844 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarq $63, %rdi
2845 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2846 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2847 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2848 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2849 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
2850 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %al
2851 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %sil
2852 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %sil, %ecx
2853 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%rcx), %rsi
2854 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%rcx), %rdi
2855 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rsi, %r8
2856 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, -64(%rsp,%rcx), %r9
2857 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rax, %rdi, %r10
2858 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%rcx), %rcx
2859 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarxq %rax, %rcx, %r11
2860 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    # kill: def $al killed $al killed $rax def $rax
2861 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %al
2862 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
2863 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rdi, %rdi
2864 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r8, %rdi
2865 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rsi, %rsi
2866 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rsi, %rsi
2867 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r9, %rsi
2868 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rcx, %rcx
2869 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rcx, %rax
2870 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r10, %rax
2871 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, 24(%rdx)
2872 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 16(%rdx)
2873 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, (%rdx)
2874 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, 8(%rdx)
2875 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
2877 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:
2878 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
2879 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
2880 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
2881 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
2882 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
2883 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %rdi
2884 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%rsi), %esi
2885 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2886 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
2887 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
2888 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
2889 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarq $63, %rdi
2890 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2891 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2892 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2893 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
2894 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
2895 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
2896 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %sil
2897 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %sil, %eax
2898 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rax), %rsi
2899 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %rdi
2900 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%rax), %r8
2901 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxq %rcx, %r8, %r9
2902 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r10d
2903 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %r10b
2904 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%rax), %r11
2905 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r11,%r11), %rbx
2906 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r10, %rbx, %r10
2907 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rax), %rax
2908 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %rdi, %r10
2909 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %r11
2910 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
2911 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax
2912 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, 16(%rdx)
2913 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, 24(%rdx)
2914 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
2915 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, 8(%rdx)
2916 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
2917 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
2919 ; X86-NO-BMI2-NO-SHLD-LABEL: ashr_32bytes:
2920 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
2921 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
2922 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
2923 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
2924 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
2925 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $88, %esp
2926 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2927 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
2928 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%edx), %eax
2929 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
2930 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %eax
2931 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2932 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%edx), %edi
2933 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%edx), %ebx
2934 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%edx), %ebp
2935 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb (%ecx), %ch
2936 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%edx), %esi
2937 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%edx), %eax
2938 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%edx), %edx
2939 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2940 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
2941 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2942 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
2943 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
2944 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
2945 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
2946 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2947 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
2948 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
2949 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl $31, %edx
2950 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2951 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2952 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2953 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2954 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2955 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2956 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2957 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
2958 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %al
2959 ; X86-NO-BMI2-NO-SHLD-NEXT:    andb $7, %al
2960 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrb $3, %ch
2961 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl %ch, %edi
2962 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2963 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edi), %esi
2964 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%edi), %ebx
2965 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
2966 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2967 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
2968 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ah
2969 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %ah
2970 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%edi), %edi
2971 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%edi,%edi), %ebp
2972 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2973 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
2974 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
2975 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2976 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2977 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
2978 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ebx # 4-byte Reload
2979 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx
2980 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2981 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
2982 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
2983 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
2984 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
2985 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%esp,%ebx), %ebp
2986 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, %esi
2987 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2988 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
2989 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%esp,%ebx), %ecx
2990 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2991 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %edx
2992 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
2993 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
2994 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
2995 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
2996 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2997 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
2998 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
2999 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3000 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
3001 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3002 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
3003 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%esp,%edx), %edi
3004 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebx
3005 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3006 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3007 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 48(%esp,%edx), %esi
3008 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %edx
3009 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
3010 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
3011 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edx
3012 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3013 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %ch
3014 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl
3015 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3016 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3017 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
3018 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %cl
3019 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ah, %dl
3020 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
3021 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
3022 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %al, %cl
3023 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
3024 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
3025 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
3026 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%esp,%esi), %ebx
3027 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ebx,%ebx), %esi
3028 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %dl, %cl
3029 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
3030 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %esi
3031 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl
3032 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl %cl, %ebx
3033 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
3034 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 28(%eax)
3035 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 24(%eax)
3036 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 16(%eax)
3037 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3038 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
3039 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 8(%eax)
3040 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3041 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
3042 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
3043 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
3044 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3045 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
3046 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $88, %esp
3047 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
3048 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
3049 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
3050 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
3051 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
3053 ; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:
3054 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
3055 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
3056 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
3057 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
3058 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
3059 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $92, %esp
3060 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3061 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
3062 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %eax
3063 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3064 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %eax
3065 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
3066 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%edx), %edi
3067 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%edx), %ebx
3068 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%edx), %ebp
3069 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl (%ecx), %ecx
3070 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%edx), %esi
3071 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%edx), %eax
3072 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%edx), %edx
3073 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3074 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
3075 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3076 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
3077 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
3078 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
3079 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
3080 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3081 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3082 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3083 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl $31, %edx
3084 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3085 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3086 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3087 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3088 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3089 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3090 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3091 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3092 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
3093 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andb $7, %al
3094 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrb $3, %cl
3095 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movzbl %cl, %ebp
3096 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%esp,%ebp), %esi
3097 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3098 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3099 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
3100 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
3101 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notb %dl
3102 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%esp,%ebp), %ecx
3103 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3104 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %edi
3105 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
3106 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
3107 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
3108 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3109 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%esp,%ebp), %esi
3110 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3111 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3112 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
3113 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%esp,%ebp), %ecx
3114 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
3115 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %edi
3116 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
3117 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %edi
3118 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
3119 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3120 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 48(%esp,%ebp), %edi
3121 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3122 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3123 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
3124 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%esp,%ebp), %ebx
3125 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %esi
3126 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
3127 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %esi
3128 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %esi
3129 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3130 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
3131 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
3132 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3133 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
3134 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, (%esp) # 4-byte Folded Spill
3135 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebp), %edx
3136 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%esp,%ebp), %edi
3137 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, %ebx
3138 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebp
3139 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 24(%ebp)
3140 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3141 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edx
3142 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl %cl, %edi
3143 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 28(%ebp)
3144 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
3145 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%ebp)
3146 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3147 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%ebp)
3148 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebp)
3149 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 20(%ebp)
3150 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3151 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%ebp)
3152 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3153 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%ebp)
3154 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $92, %esp
3155 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
3156 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
3157 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
3158 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
3159 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
3161 ; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_32bytes:
3162 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
3163 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
3164 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
3165 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
3166 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
3167 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $84, %esp
3168 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3169 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
3170 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %eax
3171 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
3172 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %eax
3173 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3174 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edx), %edi
3175 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edx), %ebx
3176 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edx), %ebp
3177 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl (%ecx), %ecx
3178 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edx), %esi
3179 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edx), %eax
3180 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edx), %edx
3181 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3182 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
3183 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3184 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
3185 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
3186 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
3187 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3188 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3189 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
3190 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3191 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarl $31, %edx
3192 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3193 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3194 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3195 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3196 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3197 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3198 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3199 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3200 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %ebx
3201 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andb $7, %bl
3202 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrb $3, %cl
3203 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movzbl %cl, %edi
3204 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%esp,%edi), %esi
3205 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%esp,%edi), %ecx
3206 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3207 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %esi, %edx
3208 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, (%esp) # 4-byte Spill
3209 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, %edx
3210 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %dl
3211 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebp
3212 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebp, %eax
3213 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl (%esp), %eax # 4-byte Folded Reload
3214 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
3215 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
3216 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, 20(%esp,%edi), %ebx
3217 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
3218 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %esi, %eax
3219 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %eax
3220 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3221 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%esp,%edi), %eax
3222 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3223 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%eax,%eax), %ebx
3224 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebx, %esi
3225 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%esp,%edi), %ebp
3226 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
3227 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %ebp, %ebx
3228 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %esi
3229 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3230 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
3231 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx
3232 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3233 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ebp, %eax
3234 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %eax
3235 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3236 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%esp,%edi), %ebp
3237 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%ebp,%ebp), %ecx
3238 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %ecx, %ecx
3239 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%esp,%edi), %eax
3240 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %eax, %esi
3241 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ecx
3242 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
3243 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3244 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %eax, %eax
3245 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %eax, %esi
3246 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
3247 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ebx, %ebp, %eax
3248 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%esp,%edi), %edi
3249 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarxl %ebx, %edi, %ebx
3250 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
3251 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edx, %edi, %edi
3252 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
3253 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
3254 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, 28(%eax)
3255 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 24(%eax)
3256 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 16(%eax)
3257 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
3258 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3259 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
3260 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3261 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
3262 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3263 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
3264 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
3265 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
3266 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $84, %esp
3267 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
3268 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
3269 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
3270 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
3271 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
3273 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_32bytes:
3274 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
3275 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
3276 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
3277 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
3278 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
3279 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $88, %esp
3280 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
3281 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
3282 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %ecx
3283 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3284 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %ecx
3285 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
3286 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%edx), %edi
3287 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%edx), %ebx
3288 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%edx), %ebp
3289 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl (%eax), %eax
3290 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%edx), %esi
3291 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%edx), %ecx
3292 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%edx), %edx
3293 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
3294 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
3295 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3296 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
3297 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
3298 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
3299 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
3300 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
3301 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
3302 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
3303 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarl $31, %edx
3304 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3305 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3306 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3307 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3308 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3309 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3310 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3311 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3312 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3313 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andb $7, %cl
3314 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrb $3, %al
3315 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movzbl %al, %ebx
3316 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%esp,%ebx), %eax
3317 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3318 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %eax
3319 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %edx
3320 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notb %dl
3321 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%esp,%ebx), %esi
3322 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3323 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
3324 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %esi, %esi
3325 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %eax, %esi
3326 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
3327 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%esp,%ebx), %ebp
3328 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%ebp,%ebp), %eax
3329 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %eax, %edi
3330 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%esp,%ebx), %eax
3331 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3332 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %eax
3333 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %eax, %edi
3334 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3335 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 48(%esp,%ebx), %esi
3336 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%esi,%esi), %edi
3337 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %edx, %edi, %eax
3338 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%esp,%ebx), %edx
3339 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %edx, %edi
3340 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %edi, %eax
3341 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3342 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
3343 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3344 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %edi
3345 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %ebp
3346 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%esp,%ebx), %edx
3347 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%esp,%ebx), %eax
3348 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %esi
3349 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
3350 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 24(%ebx)
3351 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxl %ecx, %eax, %eax
3352 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%ebx)
3353 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 16(%ebx)
3354 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 8(%ebx)
3355 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
3356 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3357 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %edx
3358 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, (%ebx)
3359 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3360 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%ebx)
3361 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3362 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%ebx)
3363 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
3364 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%ebx)
3365 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $88, %esp
3366 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
3367 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
3368 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
3369 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
3370 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
3371   %src = load i256, ptr %src.ptr, align 1
3372   %bitOff = load i256, ptr %bitOff.ptr, align 1
3373   %res = ashr i256 %src, %bitOff
3374   store i256 %res, ptr %dst, align 1
3375   ret void
3378 define void @lshr_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
3379 ; X64-NO-BMI2-NO-SHLD-LABEL: lshr_64bytes:
3380 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
3381 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbp
3382 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r15
3383 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r14
3384 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r13
3385 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r12
3386 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
3387 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
3388 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
3389 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r9
3390 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r10
3391 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r11
3392 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %rbx
3393 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %r14
3394 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
3395 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl (%rsi), %r8d
3396 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
3397 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
3398 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
3399 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
3400 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
3401 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
3402 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
3403 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
3404 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3405 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3406 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3407 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3408 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3409 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3410 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3411 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3412 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %r8d, %eax
3413 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $7, %eax
3414 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %r8d
3415 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %r8d
3416 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -128(%rsp,%r8), %r11
3417 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -120(%rsp,%r8), %r9
3418 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, %rsi
3419 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3420 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rsi
3421 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
3422 ; X64-NO-BMI2-NO-SHLD-NEXT:    notl %edi
3423 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %edi
3424 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -112(%rsp,%r8), %r14
3425 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r14,%r14), %r10
3426 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
3427 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r10
3428 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rsi, %r10
3429 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3430 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r11
3431 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
3432 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
3433 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r9, %r9
3434 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
3435 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r9
3436 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %r9
3437 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -104(%rsp,%r8), %r11
3438 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, %r12
3439 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3440 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r12
3441 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -96(%rsp,%r8), %r15
3442 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r15,%r15), %rbx
3443 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
3444 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rbx
3445 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r12, %rbx
3446 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3447 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r14
3448 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r11, %r11
3449 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
3450 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r11
3451 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r14, %r11
3452 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -88(%rsp,%r8), %r14
3453 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, %r13
3454 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3455 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r13
3456 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -80(%rsp,%r8), %rbp
3457 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rbp,%rbp), %r12
3458 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
3459 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r12
3460 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r13, %r12
3461 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3462 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r15
3463 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r14, %r14
3464 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
3465 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r14
3466 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r15, %r14
3467 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3468 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbp
3469 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%r8), %rdi
3470 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rdi,%rdi), %r8
3471 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
3472 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
3473 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rbp, %r8
3474 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3475 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rdi
3476 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, 56(%rdx)
3477 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, 48(%rdx)
3478 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, 32(%rdx)
3479 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r12, 40(%rdx)
3480 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, 16(%rdx)
3481 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
3482 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, (%rdx)
3483 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, 8(%rdx)
3484 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
3485 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r12
3486 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r13
3487 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r14
3488 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r15
3489 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbp
3490 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
3492 ; X64-NO-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:
3493 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
3494 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
3495 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r15
3496 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r14
3497 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r13
3498 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r12
3499 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
3500 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rax
3501 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
3502 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
3503 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
3504 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r9
3505 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r10
3506 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %r11
3507 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %rbx
3508 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %r14
3509 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %edi
3510 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
3511 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
3512 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
3513 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
3514 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
3515 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
3516 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
3517 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
3518 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, (%rsp)
3519 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3520 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3521 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3522 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3523 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3524 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3525 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3526 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, %eax
3527 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
3528 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %edi
3529 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %edi
3530 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -120(%rsp,%rdi), %r8
3531 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -112(%rsp,%rdi), %rbx
3532 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
3533 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3534 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rbx
3535 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %esi
3536 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notl %esi
3537 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
3538 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -104(%rsp,%rdi), %r11
3539 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r11,%r11), %r10
3540 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
3541 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r10
3542 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %rbx, %r10
3543 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -96(%rsp,%rdi), %r15
3544 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r15, %r12
3545 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3546 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r12
3547 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -88(%rsp,%rdi), %r14
3548 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r14,%r14), %rbx
3549 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
3550 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %rbx
3551 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r12, %rbx
3552 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -80(%rsp,%rdi), %r12
3553 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r12, %r13
3554 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3555 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r13
3556 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rdi), %rbp
3557 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%rbp,%rbp), %r9
3558 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
3559 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r9
3560 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r13, %r9
3561 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3562 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r15, %r11
3563 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r12, %r14
3564 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rdi), %rsi
3565 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3566 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rbp
3567 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload
3568 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %r8
3569 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rsi
3570 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbp, 48(%rdx)
3571 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 56(%rdx)
3572 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, 32(%rdx)
3573 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 16(%rdx)
3574 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, (%rdx)
3575 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, 40(%rdx)
3576 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 24(%rdx)
3577 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, 8(%rdx)
3578 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    addq $8, %rsp
3579 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbx
3580 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r12
3581 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r13
3582 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r14
3583 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r15
3584 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbp
3585 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
3587 ; X64-HAVE-BMI2-NO-SHLD-LABEL: lshr_64bytes:
3588 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
3589 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbp
3590 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r15
3591 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r14
3592 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r13
3593 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r12
3594 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbx
3595 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rcx
3596 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %r8
3597 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r9
3598 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r10
3599 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r11
3600 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %rbx
3601 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %r14
3602 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
3603 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl (%rsi), %eax
3604 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
3605 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
3606 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
3607 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
3608 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
3609 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
3610 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
3611 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
3612 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3613 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %ecx
3614 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3615 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3616 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3617 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3618 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3619 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3620 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3621 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3622 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %eax
3623 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %eax
3624 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -120(%rsp,%rax), %rdi
3625 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -112(%rsp,%rax), %r9
3626 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rdi, %rbx
3627 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, -128(%rsp,%rax), %r14
3628 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %esi
3629 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -104(%rsp,%rax), %r8
3630 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r8, %r13
3631 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r9, %r10
3632 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -88(%rsp,%rax), %r11
3633 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r11, %r15
3634 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %r12d
3635 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notl %r12d
3636 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %r12d
3637 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r9, %r9
3638 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %r9, %r9
3639 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rbx, %r9
3640 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -96(%rsp,%rax), %rbx
3641 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rbx, %rbp
3642 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %sil
3643 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
3644 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rdi, %rdi
3645 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r14, %rdi
3646 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rbx, %rbx
3647 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %rbx, %rbx
3648 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r13, %rbx
3649 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -80(%rsp,%rax), %r14
3650 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r14, %r13
3651 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%rax), %rax
3652 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rax, %rcx
3653 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r8, %r8
3654 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %r8, %r8
3655 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r10, %r8
3656 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%r14,%r14), %r10
3657 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %r10, %r10
3658 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r15, %r10
3659 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r11, %r11
3660 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %r11, %r11
3661 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rbp, %r11
3662 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rax, %rax
3663 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rax, %rax
3664 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r13, %rax
3665 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, 56(%rdx)
3666 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 48(%rdx)
3667 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, 32(%rdx)
3668 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, 40(%rdx)
3669 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, 16(%rdx)
3670 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
3671 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
3672 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, 8(%rdx)
3673 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbx
3674 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r12
3675 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r13
3676 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r14
3677 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r15
3678 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbp
3679 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
3681 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:
3682 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
3683 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
3684 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r15
3685 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r14
3686 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r13
3687 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r12
3688 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
3689 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rcx
3690 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %r8
3691 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r9
3692 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r10
3693 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r11
3694 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %rbx
3695 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %r14
3696 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %rdi
3697 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %eax
3698 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
3699 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
3700 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
3701 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
3702 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
3703 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
3704 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
3705 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
3706 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
3707 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %ecx
3708 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3709 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3710 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3711 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3712 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3713 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3714 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3715 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
3716 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %eax
3717 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %eax
3718 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -120(%rsp,%rax), %rsi
3719 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %r10
3720 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -104(%rsp,%rax), %r8
3721 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r8, %r15
3722 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -88(%rsp,%rax), %r11
3723 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r11, %r14
3724 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r12d
3725 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %r12d
3726 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %r12d
3727 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -112(%rsp,%rax), %r9
3728 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r9,%r9), %rdi
3729 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %rdi, %rdi
3730 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r10, %rdi
3731 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -96(%rsp,%rax), %rbx
3732 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%rbx,%rbx), %r10
3733 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %r10, %r10
3734 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r15, %r10
3735 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -80(%rsp,%rax), %r13
3736 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r13,%r13), %r15
3737 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %r15, %r15
3738 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rax), %r12
3739 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r12, %rbp
3740 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -128(%rsp,%rax), %rax
3741 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r14, %r15
3742 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %r9
3743 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r11, %rbx
3744 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r12, %r13
3745 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
3746 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax
3747 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r13, 48(%rdx)
3748 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbp, 56(%rdx)
3749 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 32(%rdx)
3750 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, 16(%rdx)
3751 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
3752 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r15, 40(%rdx)
3753 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, 24(%rdx)
3754 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
3755 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
3756 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r12
3757 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r13
3758 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r14
3759 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r15
3760 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbp
3761 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
3763 ; X86-NO-BMI2-NO-SHLD-LABEL: lshr_64bytes:
3764 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
3765 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
3766 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
3767 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
3768 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
3769 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $208, %esp
3770 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
3771 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esi), %eax
3772 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3773 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%esi), %eax
3774 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3775 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%esi), %eax
3776 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3777 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%esi), %eax
3778 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3779 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%esi), %eax
3780 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3781 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%esi), %eax
3782 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
3783 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%esi), %eax
3784 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3785 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%esi), %eax
3786 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3787 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%esi), %eax
3788 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3789 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%esi), %eax
3790 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3791 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%esi), %ebp
3792 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%esi), %ebx
3793 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 48(%esi), %edi
3794 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%esi), %edx
3795 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 56(%esi), %ecx
3796 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 60(%esi), %eax
3797 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
3798 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esi), %esi
3799 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3800 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
3801 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
3802 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
3803 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
3804 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
3805 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3806 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3807 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3808 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3809 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3810 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3811 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3812 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3813 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
3814 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3815 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3816 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3817 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3818 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3819 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3820 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3821 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3822 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3823 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3824 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
3825 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3826 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3827 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3828 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3829 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3830 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3831 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3832 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3833 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3834 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3835 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3836 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3837 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3838 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3839 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3840 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
3841 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
3842 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $7, %ecx
3843 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %esi
3844 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $63, %esi
3845 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 84(%esp,%esi), %edi
3846 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3847 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
3848 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 88(%esp,%esi), %eax
3849 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3850 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%eax,%eax), %ebx
3851 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx
3852 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
3853 ; X86-NO-BMI2-NO-SHLD-NEXT:    notl %edx
3854 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $31, %edx
3855 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3856 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
3857 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
3858 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3859 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 92(%esp,%esi), %edi
3860 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3861 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3862 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
3863 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 96(%esp,%esi), %ecx
3864 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3865 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
3866 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3867 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
3868 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
3869 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3870 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 100(%esp,%esi), %edi
3871 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3872 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3873 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
3874 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 104(%esp,%esi), %ecx
3875 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3876 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
3877 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3878 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
3879 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
3880 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3881 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 108(%esp,%esi), %edi
3882 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3883 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3884 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
3885 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 112(%esp,%esi), %ecx
3886 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3887 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
3888 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3889 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
3890 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
3891 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3892 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 116(%esp,%esi), %ebx
3893 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3894 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3895 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3896 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 120(%esp,%esi), %ecx
3897 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3898 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
3899 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3900 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
3901 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
3902 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3903 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 124(%esp,%esi), %ebx
3904 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
3905 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3906 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3907 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 128(%esp,%esi), %ecx
3908 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3909 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
3910 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3911 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
3912 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
3913 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3914 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 132(%esp,%esi), %edi
3915 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebx
3916 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3917 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3918 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 136(%esp,%esi), %ecx
3919 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3920 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebp
3921 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3922 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3923 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3924 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3925 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%esi), %ebx
3926 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3927 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3928 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
3929 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %dl
3930 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
3931 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3932 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3933 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3934 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3935 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3936 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3937 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3938 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3939 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
3940 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3941 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3942 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3943 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3944 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3945 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3946 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3947 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3948 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
3949 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3950 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3951 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3952 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3953 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3954 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3955 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3956 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3957 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
3958 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3959 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3960 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3961 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3962 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3963 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3964 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3965 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3966 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
3967 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3968 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3969 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3970 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3971 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3972 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3973 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3974 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3975 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ebp # 4-byte Reload
3976 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
3977 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3978 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
3979 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
3980 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, (%esp) # 4-byte Spill
3981 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3982 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3983 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
3984 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
3985 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3986 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
3987 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
3988 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
3989 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ebp
3990 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3991 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
3992 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 140(%esp,%esi), %esi
3993 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %ebx
3994 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
3995 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
3996 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %ebx
3997 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, %ecx
3998 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
3999 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
4000 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
4001 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 60(%eax)
4002 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 56(%eax)
4003 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 48(%eax)
4004 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
4005 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 40(%eax)
4006 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4007 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 32(%eax)
4008 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4009 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 24(%eax)
4010 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4011 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 16(%eax)
4012 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4013 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
4014 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4015 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
4016 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4017 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 52(%eax)
4018 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4019 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 44(%eax)
4020 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4021 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 36(%eax)
4022 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4023 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 28(%eax)
4024 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4025 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
4026 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4027 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
4028 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4029 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
4030 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $208, %esp
4031 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
4032 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
4033 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
4034 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
4035 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
4037 ; X86-NO-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:
4038 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
4039 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
4040 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
4041 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
4042 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
4043 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $204, %esp
4044 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
4045 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %eax
4046 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4047 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%esi), %eax
4048 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4049 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%esi), %eax
4050 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4051 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%esi), %eax
4052 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4053 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%esi), %eax
4054 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4055 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%esi), %eax
4056 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
4057 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%esi), %eax
4058 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4059 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%esi), %eax
4060 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4061 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%esi), %eax
4062 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4063 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%esi), %eax
4064 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4065 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%esi), %ebp
4066 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%esi), %ebx
4067 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 48(%esi), %edi
4068 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%esi), %edx
4069 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%esi), %ecx
4070 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 60(%esi), %eax
4071 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
4072 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %esi
4073 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4074 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4075 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
4076 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
4077 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
4078 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
4079 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4080 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4081 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4082 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4083 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4084 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4085 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4086 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4087 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
4088 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4089 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4090 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4091 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4092 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4093 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4094 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4095 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4096 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4097 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4098 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4099 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4100 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4101 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4102 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4103 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4104 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4105 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4106 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4107 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4108 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4109 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4110 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4111 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4112 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4113 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4114 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4115 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
4116 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
4117 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %esi
4118 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
4119 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%esi), %edi
4120 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4121 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4122 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4123 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%esi), %ecx
4124 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4125 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4126 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
4127 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notl %edx
4128 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $31, %edx
4129 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4130 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4131 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4132 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4133 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 88(%esp,%esi), %edi
4134 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4135 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4136 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4137 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 92(%esp,%esi), %ecx
4138 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4139 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4140 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4141 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4142 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4143 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4144 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 96(%esp,%esi), %edi
4145 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4146 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4147 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4148 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 100(%esp,%esi), %ecx
4149 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4150 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4151 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4152 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4153 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4154 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4155 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 104(%esp,%esi), %edi
4156 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4157 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4158 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4159 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 108(%esp,%esi), %ecx
4160 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4161 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4162 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4163 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4164 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4165 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4166 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 112(%esp,%esi), %edi
4167 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4168 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4169 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4170 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 116(%esp,%esi), %ecx
4171 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4172 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4173 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4174 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4175 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4176 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4177 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 120(%esp,%esi), %edi
4178 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4179 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4180 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4181 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 124(%esp,%esi), %ecx
4182 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
4183 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
4184 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4185 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
4186 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
4187 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4188 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 128(%esp,%esi), %edi
4189 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4190 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4191 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
4192 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 132(%esp,%esi), %ebx
4193 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %ebp
4194 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4195 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebp
4196 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebp
4197 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4198 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4199 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4200 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4201 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4202 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4203 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4204 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4205 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4206 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4207 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4208 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4209 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4210 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, (%esp) # 4-byte Folded Spill
4211 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%esi), %edi
4212 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 136(%esp,%esi), %esi
4213 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %ebx
4214 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
4215 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 56(%edx)
4216 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
4217 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edi
4218 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
4219 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 60(%edx)
4220 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
4221 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 48(%edx)
4222 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4223 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 40(%edx)
4224 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4225 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 32(%edx)
4226 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4227 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 24(%edx)
4228 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4229 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%edx)
4230 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4231 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%edx)
4232 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, (%edx)
4233 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 52(%edx)
4234 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4235 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 44(%edx)
4236 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4237 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 36(%edx)
4238 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4239 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%edx)
4240 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4241 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%edx)
4242 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4243 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%edx)
4244 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4245 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%edx)
4246 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $204, %esp
4247 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
4248 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
4249 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
4250 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
4251 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
4253 ; X86-HAVE-BMI2-NO-SHLD-LABEL: lshr_64bytes:
4254 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
4255 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
4256 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
4257 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
4258 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
4259 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $204, %esp
4260 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
4261 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %eax
4262 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4263 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %eax
4264 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4265 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edx), %eax
4266 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4267 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edx), %eax
4268 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4269 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edx), %eax
4270 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4271 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edx), %eax
4272 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4273 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edx), %eax
4274 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4275 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edx), %eax
4276 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4277 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%edx), %eax
4278 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4279 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%edx), %eax
4280 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
4281 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%edx), %ebp
4282 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%edx), %ebx
4283 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%edx), %edi
4284 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 52(%edx), %esi
4285 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 56(%edx), %ecx
4286 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 60(%edx), %eax
4287 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
4288 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %edx
4289 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4290 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4291 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
4292 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
4293 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
4294 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
4295 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
4296 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4297 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4298 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4299 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4300 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4301 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4302 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4303 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4304 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4305 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4306 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4307 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4308 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4309 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4310 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4311 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4312 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4313 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4314 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
4315 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %eax
4316 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %eax
4317 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4318 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4319 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4320 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4321 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4322 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4323 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4324 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4325 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4326 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4327 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4328 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4329 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4330 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4331 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4332 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4333 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %edx
4334 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %edx
4335 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%edx), %ecx
4336 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4337 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 84(%esp,%edx), %esi
4338 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4339 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
4340 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
4341 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notl %edi
4342 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $31, %edi
4343 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
4344 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %esi, %esi
4345 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4346 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4347 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 92(%esp,%edx), %ecx
4348 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
4349 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4350 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
4351 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 88(%esp,%edx), %ecx
4352 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4353 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
4354 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4355 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4356 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 100(%esp,%edx), %ecx
4357 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4358 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4359 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
4360 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 96(%esp,%edx), %ecx
4361 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4362 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
4363 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4364 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4365 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 108(%esp,%edx), %ecx
4366 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4367 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4368 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
4369 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 104(%esp,%edx), %ecx
4370 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4371 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
4372 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4373 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4374 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 116(%esp,%edx), %ecx
4375 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4376 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4377 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
4378 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 112(%esp,%edx), %ecx
4379 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4380 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
4381 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4382 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4383 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 124(%esp,%edx), %ecx
4384 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4385 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4386 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
4387 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 120(%esp,%edx), %ebx
4388 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ebx, %ecx
4389 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
4390 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4391 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 132(%esp,%edx), %ecx
4392 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4393 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
4394 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %edi
4395 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 128(%esp,%edx), %esi
4396 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %esi, %ecx
4397 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %edi
4398 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4399 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4400 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl
4401 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4402 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
4403 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edi, %ebp
4404 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, 76(%esp,%edx), %edi
4405 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
4406 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4407 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4408 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
4409 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
4410 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
4411 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
4412 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4413 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, (%esp), %edi # 4-byte Folded Reload
4414 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
4415 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
4416 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
4417 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
4418 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, (%esp) # 4-byte Spill
4419 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4420 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
4421 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
4422 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
4423 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
4424 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4425 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4426 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
4427 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
4428 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
4429 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
4430 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4431 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx
4432 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebx, %ebx
4433 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
4434 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4435 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
4436 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %esi, %esi
4437 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %esi
4438 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
4439 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4440 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 136(%esp,%edx), %edx
4441 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %edx, %edi
4442 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%edx,%edx), %eax
4443 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %eax, %ecx
4444 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
4445 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
4446 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 60(%eax)
4447 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 56(%eax)
4448 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 48(%eax)
4449 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, 40(%eax)
4450 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, 32(%eax)
4451 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4452 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 24(%eax)
4453 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
4454 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 16(%eax)
4455 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4456 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
4457 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4458 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
4459 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4460 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 52(%eax)
4461 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4462 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 44(%eax)
4463 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4464 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 36(%eax)
4465 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4466 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 28(%eax)
4467 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4468 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
4469 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4470 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
4471 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4472 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
4473 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $204, %esp
4474 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
4475 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
4476 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
4477 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
4478 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
4480 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: lshr_64bytes:
4481 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
4482 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
4483 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
4484 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
4485 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
4486 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $200, %esp
4487 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
4488 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %ecx
4489 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4490 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%eax), %ecx
4491 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4492 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%eax), %ecx
4493 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4494 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%eax), %ecx
4495 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4496 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%eax), %ecx
4497 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
4498 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%eax), %ecx
4499 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4500 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%eax), %ecx
4501 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4502 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%eax), %ecx
4503 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4504 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%eax), %ecx
4505 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4506 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%eax), %ecx
4507 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4508 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%eax), %ebp
4509 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%eax), %ebx
4510 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 48(%eax), %edi
4511 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%eax), %esi
4512 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 56(%eax), %edx
4513 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 60(%eax), %ecx
4514 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
4515 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %eax
4516 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4517 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
4518 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
4519 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
4520 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
4521 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
4522 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4523 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4524 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4525 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4526 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4527 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4528 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4529 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4530 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4531 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4532 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
4533 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4534 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4535 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4536 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4537 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4538 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4539 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4540 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4541 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
4542 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
4543 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %edx
4544 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4545 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4546 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4547 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4548 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4549 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4550 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4551 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4552 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4553 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4554 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4555 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4556 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4557 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4558 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4559 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
4560 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %eax
4561 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %eax
4562 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%eax), %ecx
4563 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4564 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %ecx, %esi
4565 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4566 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %ecx
4567 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $31, %ecx
4568 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%eax), %edi
4569 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4570 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %edi, %edi
4571 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %edi, %edi
4572 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4573 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4574 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 88(%esp,%eax), %esi
4575 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4576 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
4577 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4578 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%eax), %esi
4579 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4580 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %esi
4581 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4582 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4583 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 96(%esp,%eax), %esi
4584 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4585 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
4586 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4587 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 92(%esp,%eax), %esi
4588 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4589 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %esi
4590 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4591 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4592 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 104(%esp,%eax), %esi
4593 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4594 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
4595 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4596 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 100(%esp,%eax), %esi
4597 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4598 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %esi
4599 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4600 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4601 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 112(%esp,%eax), %esi
4602 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
4603 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
4604 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4605 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 108(%esp,%eax), %esi
4606 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4607 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %esi
4608 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4609 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4610 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 120(%esp,%eax), %ebp
4611 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%ebp,%ebp), %esi
4612 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4613 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 116(%esp,%eax), %esi
4614 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4615 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %esi
4616 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
4617 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4618 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 128(%esp,%eax), %ebx
4619 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %esi
4620 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %ecx, %esi, %edi
4621 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 124(%esp,%eax), %esi
4622 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %esi, %ecx
4623 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ecx, %edi
4624 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4625 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4626 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4627 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4628 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4629 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4630 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4631 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4632 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4633 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4634 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
4635 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, (%esp) # 4-byte Folded Spill
4636 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %ebp
4637 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 72(%esp,%eax), %esi
4638 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 132(%esp,%eax), %edi
4639 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, %ebx
4640 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
4641 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 56(%eax)
4642 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 48(%eax)
4643 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
4644 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 40(%eax)
4645 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4646 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 32(%eax)
4647 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4648 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 24(%eax)
4649 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4650 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 16(%eax)
4651 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4652 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 8(%eax)
4653 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %edx, %edi, %edi
4654 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
4655 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
4656 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, %esi
4657 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%eax)
4658 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 60(%eax)
4659 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4660 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 52(%eax)
4661 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4662 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 44(%eax)
4663 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4664 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 36(%eax)
4665 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4666 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 28(%eax)
4667 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4668 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 20(%eax)
4669 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4670 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 12(%eax)
4671 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
4672 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, 4(%eax)
4673 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $200, %esp
4674 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
4675 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
4676 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
4677 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
4678 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
4679   %src = load i512, ptr %src.ptr, align 1
4680   %bitOff = load i512, ptr %bitOff.ptr, align 1
4681   %res = lshr i512 %src, %bitOff
4682   store i512 %res, ptr %dst, align 1
4683   ret void
4685 define void @shl_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
4686 ; X64-NO-BMI2-NO-SHLD-LABEL: shl_64bytes:
4687 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
4688 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbp
4689 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r15
4690 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r14
4691 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r13
4692 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r12
4693 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
4694 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
4695 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
4696 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
4697 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r9
4698 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r10
4699 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %r11
4700 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %rbx
4701 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
4702 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl (%rsi), %esi
4703 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
4704 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
4705 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
4706 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
4707 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
4708 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
4709 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
4710 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
4711 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4712 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4713 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4714 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4715 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4716 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4717 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4718 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4719 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
4720 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $7, %eax
4721 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %esi
4722 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %esi
4723 ; X64-NO-BMI2-NO-SHLD-NEXT:    negl %esi
4724 ; X64-NO-BMI2-NO-SHLD-NEXT:    movslq %esi, %r14
4725 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%r14), %r9
4726 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%r14), %r8
4727 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, %rdi
4728 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4729 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rdi
4730 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
4731 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
4732 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, %r10
4733 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r10
4734 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
4735 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r10
4736 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rdi, %r10
4737 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%r14), %r11
4738 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, %rdi
4739 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4740 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rdi
4741 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%r14), %r15
4742 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r15, %rbx
4743 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %rbx
4744 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
4745 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbx
4746 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rdi, %rbx
4747 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4748 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r15
4749 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
4750 ; X64-NO-BMI2-NO-SHLD-NEXT:    notl %edi
4751 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %edi
4752 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r8
4753 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
4754 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r8
4755 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r15, %r8
4756 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -24(%rsp,%r14), %r15
4757 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r15, %r13
4758 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4759 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r13
4760 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -32(%rsp,%r14), %rbp
4761 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbp, %r12
4762 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r12
4763 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
4764 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r12
4765 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r13, %r12
4766 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4767 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rbp
4768 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r11
4769 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
4770 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r11
4771 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rbp, %r11
4772 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -8(%rsp,%r14), %r13
4773 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4774 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r13
4775 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -16(%rsp,%r14), %r14
4776 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, %rbp
4777 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %rbp
4778 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
4779 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbp
4780 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r13, %rbp
4781 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4782 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r14
4783 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %r15
4784 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
4785 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r15
4786 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r14, %r15
4787 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
4788 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r9
4789 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, (%rdx)
4790 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r15, 48(%rdx)
4791 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbp, 56(%rdx)
4792 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, 32(%rdx)
4793 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r12, 40(%rdx)
4794 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, 16(%rdx)
4795 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
4796 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, 8(%rdx)
4797 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
4798 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r12
4799 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r13
4800 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r14
4801 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r15
4802 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbp
4803 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
4805 ; X64-NO-BMI2-HAVE-SHLD-LABEL: shl_64bytes:
4806 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
4807 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
4808 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r15
4809 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r14
4810 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r13
4811 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r12
4812 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
4813 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rax
4814 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
4815 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
4816 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
4817 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r9
4818 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r10
4819 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %r11
4820 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %rbx
4821 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %rdi
4822 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %esi
4823 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, (%rsp)
4824 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
4825 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
4826 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
4827 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
4828 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
4829 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
4830 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
4831 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4832 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4833 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4834 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4835 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4836 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4837 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4838 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4839 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
4840 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
4841 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %esi
4842 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
4843 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    negl %esi
4844 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movslq %esi, %r10
4845 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%r10), %rbx
4846 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
4847 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4848 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %rbx
4849 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %esi
4850 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notl %esi
4851 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
4852 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%r10), %r9
4853 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%r10), %r8
4854 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, %rdi
4855 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %rdi
4856 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
4857 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rdi
4858 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %rbx, %rdi
4859 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -24(%rsp,%r10), %r15
4860 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r15, %r12
4861 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4862 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r12
4863 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -32(%rsp,%r10), %r14
4864 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, %rbx
4865 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %rbx
4866 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
4867 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rbx
4868 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r12, %rbx
4869 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -8(%rsp,%r10), %r12
4870 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r12, %r13
4871 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4872 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r13
4873 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -16(%rsp,%r10), %r11
4874 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, %rbp
4875 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %rbp
4876 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
4877 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rbp
4878 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r13, %rbp
4879 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4880 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rsi # 8-byte Reload
4881 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rsi, %r14
4882 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
4883 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r15, %r11
4884 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rsp,%r10), %rsi
4885 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r12, %rsi
4886 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r9, %r8
4887 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r9
4888 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 56(%rdx)
4889 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 40(%rdx)
4890 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, 24(%rdx)
4891 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, (%rdx)
4892 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, 8(%rdx)
4893 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbp, 48(%rdx)
4894 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 32(%rdx)
4895 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 16(%rdx)
4896 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    addq $8, %rsp
4897 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbx
4898 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r12
4899 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r13
4900 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r14
4901 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r15
4902 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbp
4903 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
4905 ; X64-HAVE-BMI2-NO-SHLD-LABEL: shl_64bytes:
4906 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
4907 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbp
4908 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r15
4909 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r14
4910 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r13
4911 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r12
4912 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbx
4913 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
4914 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
4915 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r8
4916 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r9
4917 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r10
4918 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %r11
4919 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %rbx
4920 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
4921 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl (%rsi), %esi
4922 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
4923 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
4924 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
4925 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
4926 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
4927 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
4928 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
4929 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
4930 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %eax
4931 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %eax
4932 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4933 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4934 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4935 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4936 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4937 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4938 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4939 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
4940 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %esi
4941 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %esi
4942 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    negl %esi
4943 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movslq %esi, %rcx
4944 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -64(%rsp,%rcx), %r10
4945 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -56(%rsp,%rcx), %rsi
4946 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rsi, %r9
4947 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -40(%rsp,%rcx), %rdi
4948 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rdi, %rbx
4949 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -48(%rsp,%rcx), %r15
4950 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %r15, %r14
4951 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %r8d
4952 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -24(%rsp,%rcx), %r11
4953 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %r11, %r12
4954 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %r10, %r13
4955 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ebp
4956 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %bpl
4957 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %r10
4958 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rbp, %r10, %r10
4959 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r9, %r10
4960 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %r15
4961 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rbp, %r15, %r9
4962 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rbx, %r9
4963 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -32(%rsp,%rcx), %rbx
4964 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rbx, %r15
4965 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notl %r8d
4966 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %r8d
4967 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rsi
4968 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %r8, %rsi, %rsi
4969 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r14, %rsi
4970 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, -8(%rsp,%rcx), %r14
4971 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -16(%rsp,%rcx), %rcx
4972 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rax, %rcx, %rax
4973 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rbx
4974 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rbp, %rbx, %rbx
4975 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r12, %rbx
4976 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rdi
4977 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %r8, %rdi, %rdi
4978 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r15, %rdi
4979 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %rcx
4980 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rbp, %rcx, %rcx
4981 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r14, %rcx
4982 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrq %r11
4983 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %r8, %r11, %r8
4984 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rax, %r8
4985 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r13, (%rdx)
4986 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, 48(%rdx)
4987 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, 56(%rdx)
4988 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, 32(%rdx)
4989 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, 40(%rdx)
4990 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rsi, 16(%rdx)
4991 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, 24(%rdx)
4992 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, 8(%rdx)
4993 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbx
4994 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r12
4995 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r13
4996 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r14
4997 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r15
4998 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbp
4999 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
5001 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: shl_64bytes:
5002 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
5003 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
5004 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r15
5005 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r14
5006 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r13
5007 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r12
5008 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
5009 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
5010 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
5011 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
5012 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r9
5013 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r10
5014 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %r11
5015 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %rbx
5016 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %rdi
5017 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %esi
5018 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
5019 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
5020 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
5021 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
5022 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
5023 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
5024 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
5025 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
5026 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
5027 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %ecx
5028 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5029 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5030 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5031 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5032 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5033 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5034 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5035 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq $0, -{{[0-9]+}}(%rsp)
5036 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %esi
5037 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
5038 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    negl %esi
5039 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movslq %esi, %rax
5040 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -48(%rsp,%rax), %rsi
5041 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %rsi, %rbx
5042 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -32(%rsp,%rax), %rdi
5043 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %rdi, %r12
5044 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -16(%rsp,%rax), %r10
5045 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %r10, %r15
5046 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %ebp
5047 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %ebp
5048 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %ebp
5049 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rax), %r11
5050 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -56(%rsp,%rax), %r9
5051 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, %r8
5052 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrq %r8
5053 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rbp, %r8, %r8
5054 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %rbx, %r8
5055 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -40(%rsp,%rax), %r14
5056 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r14, %rbx
5057 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrq %rbx
5058 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rbp, %rbx, %rbx
5059 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r12, %rbx
5060 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -24(%rsp,%rax), %r13
5061 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r13, %r12
5062 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrq %r12
5063 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rbp, %r12, %r12
5064 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %rcx, %r11, %rbp
5065 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r15, %r12
5066 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rsi, %r14
5067 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %rdi, %r13
5068 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -8(%rsp,%rax), %rax
5069 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r10, %rax
5070 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
5071 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shldq %cl, %r11, %r9
5072 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, 56(%rdx)
5073 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r13, 40(%rdx)
5074 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r14, 24(%rdx)
5075 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbp, (%rdx)
5076 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, 8(%rdx)
5077 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r12, 48(%rdx)
5078 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 32(%rdx)
5079 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, 16(%rdx)
5080 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
5081 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r12
5082 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r13
5083 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r14
5084 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r15
5085 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbp
5086 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
5088 ; X86-NO-BMI2-NO-SHLD-LABEL: shl_64bytes:
5089 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
5090 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
5091 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
5092 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
5093 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
5094 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $192, %esp
5095 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
5096 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ebx), %eax
5097 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5098 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ebx), %eax
5099 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
5100 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%ebx), %eax
5101 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5102 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%ebx), %eax
5103 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5104 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%ebx), %eax
5105 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5106 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%ebx), %eax
5107 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5108 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%ebx), %eax
5109 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5110 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%ebx), %eax
5111 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5112 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%ebx), %eax
5113 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5114 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%ebx), %eax
5115 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5116 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%ebx), %ebp
5117 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%ebx), %edi
5118 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 48(%ebx), %esi
5119 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%ebx), %edx
5120 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 56(%ebx), %ecx
5121 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 60(%ebx), %eax
5122 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ebx
5123 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ebx), %ebx
5124 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5125 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5126 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
5127 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
5128 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
5129 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
5130 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5131 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5132 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5133 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5134 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5135 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5136 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5137 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5138 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5139 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5140 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5141 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5142 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5143 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5144 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5145 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5146 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
5147 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5148 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5149 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5150 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %eax
5151 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %eax
5152 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $63, %eax
5153 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5154 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal {{[0-9]+}}(%esp), %ebp
5155 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl %eax, %ebp
5156 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5157 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5158 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5159 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5160 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5161 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5162 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5163 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5164 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5165 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5166 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5167 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5168 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5169 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5170 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5171 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5172 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%ebp), %edx
5173 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5174 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%ebp), %edi
5175 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $7, %ebx
5176 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %eax
5177 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5178 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
5179 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edx
5180 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %bl, %ch
5181 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %ch
5182 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl
5183 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, (%esp) # 1-byte Spill
5184 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edx
5185 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %edx
5186 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5187 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%ebp), %edx
5188 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5189 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %bl, %cl
5190 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %esi
5191 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5192 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%ebp), %eax
5193 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx
5194 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
5195 ; X86-NO-BMI2-NO-SHLD-NEXT:    movb %ch, %cl
5196 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
5197 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %ebx
5198 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5199 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
5200 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5201 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
5202 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
5203 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %edx
5204 ; X86-NO-BMI2-NO-SHLD-NEXT:    notl %edx
5205 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $31, %edx
5206 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5207 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
5208 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
5209 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
5210 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5211 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%ebp), %edx
5212 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5213 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5214 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %esi
5215 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5216 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%ebp), %eax
5217 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx
5218 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
5219 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5220 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
5221 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %ebx
5222 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5223 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
5224 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5225 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
5226 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
5227 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
5228 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5229 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5230 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
5231 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
5232 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5233 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%ebp), %edi
5234 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %esi
5235 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5236 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %esi
5237 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%ebp), %edx
5238 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %eax
5239 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %eax
5240 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5241 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
5242 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %esi, %eax
5243 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5244 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5245 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5246 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5247 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %eax
5248 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5249 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5250 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
5251 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %eax
5252 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5253 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%ebp), %edx
5254 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5255 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5256 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %esi
5257 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5258 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%ebp), %eax
5259 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ebx
5260 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebx
5261 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5262 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
5263 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %ebx
5264 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5265 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
5266 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5267 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
5268 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
5269 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5270 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5271 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
5272 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %edi
5273 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5274 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%ebp), %edx
5275 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5276 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5277 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5278 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%ebp), %eax
5279 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
5280 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
5281 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5282 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
5283 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %edi
5284 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5285 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5286 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %eax
5287 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5288 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %esi
5289 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5290 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5291 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
5292 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %esi
5293 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5294 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%ebp), %eax
5295 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
5296 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5297 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
5298 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5299 ; X86-NO-BMI2-NO-SHLD-NEXT:    negl %ecx
5300 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 176(%esp,%ecx), %edx
5301 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %esi
5302 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %esi
5303 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5304 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %esi
5305 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %esi
5306 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5307 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5308 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
5309 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %edi
5310 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5311 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5312 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
5313 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %edi
5314 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5315 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 60(%ebp), %edi
5316 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5317 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
5318 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 56(%ebp), %edx
5319 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ebp
5320 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %ebp
5321 ; X86-NO-BMI2-NO-SHLD-NEXT:    movzbl (%esp), %ecx # 1-byte Folded Reload
5322 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebp
5323 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
5324 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5325 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5326 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %eax
5327 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5328 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
5329 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
5330 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edx, %eax
5331 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, %ecx
5332 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5333 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edx
5334 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %ecx
5335 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, (%ecx)
5336 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 56(%ecx)
5337 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, 60(%ecx)
5338 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5339 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 48(%ecx)
5340 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 52(%ecx)
5341 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5342 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 40(%ecx)
5343 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5344 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 44(%ecx)
5345 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5346 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 32(%ecx)
5347 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5348 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 36(%ecx)
5349 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5350 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 24(%ecx)
5351 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5352 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 28(%ecx)
5353 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5354 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 16(%ecx)
5355 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5356 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 20(%ecx)
5357 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5358 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 8(%ecx)
5359 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5360 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%ecx)
5361 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5362 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, 4(%ecx)
5363 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $192, %esp
5364 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
5365 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
5366 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
5367 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
5368 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
5370 ; X86-NO-BMI2-HAVE-SHLD-LABEL: shl_64bytes:
5371 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
5372 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
5373 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
5374 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
5375 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
5376 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $204, %esp
5377 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
5378 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %ecx
5379 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5380 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%eax), %ecx
5381 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5382 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%eax), %ecx
5383 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5384 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%eax), %ecx
5385 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5386 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%eax), %ecx
5387 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
5388 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%eax), %ecx
5389 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5390 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%eax), %ecx
5391 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5392 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%eax), %ecx
5393 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5394 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%eax), %ecx
5395 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5396 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%eax), %ecx
5397 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5398 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%eax), %ebp
5399 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%eax), %ebx
5400 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 48(%eax), %edi
5401 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%eax), %esi
5402 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%eax), %edx
5403 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 60(%eax), %ecx
5404 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
5405 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %eax
5406 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5407 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
5408 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
5409 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
5410 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
5411 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
5412 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5413 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5414 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5415 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5416 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5417 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5418 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5419 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5420 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5421 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5422 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
5423 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5424 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5425 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5426 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5427 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5428 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5429 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5430 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5431 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5432 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %esi
5433 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %esi
5434 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
5435 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal {{[0-9]+}}(%esp), %edi
5436 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl %esi, %edi
5437 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5438 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5439 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5440 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5441 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5442 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5443 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5444 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5445 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5446 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5447 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5448 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5449 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5450 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5451 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5452 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5453 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %ebx
5454 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5455 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
5456 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5457 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5458 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %ebp
5459 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5460 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5461 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
5462 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notl %edx
5463 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $31, %edx
5464 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5465 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5466 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5467 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5468 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %ebx
5469 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5470 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5471 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5472 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %ebp
5473 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5474 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5475 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5476 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5477 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5478 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5479 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %ebx
5480 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5481 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5482 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5483 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %ebp
5484 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5485 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5486 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5487 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5488 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5489 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5490 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%edi), %ebx
5491 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5492 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5493 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5494 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %ebp
5495 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5496 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5497 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5498 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5499 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5500 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5501 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%edi), %ebx
5502 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5503 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5504 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5505 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%edi), %ebp
5506 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5507 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5508 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5509 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5510 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5511 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5512 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    negl %esi
5513 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 188(%esp,%esi), %ebx
5514 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5515 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5516 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5517 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%edi), %esi
5518 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
5519 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5520 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5521 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %esi
5522 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %esi
5523 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5524 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%edi), %esi
5525 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ebx
5526 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5527 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5528 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%edi), %ebp
5529 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5530 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %ebp
5531 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
5532 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %ebp
5533 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %ebx, %ebp
5534 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5535 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5536 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5537 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5538 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5539 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5540 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5541 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5542 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5543 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5544 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5545 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, (%esp) # 4-byte Folded Spill
5546 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %ebx
5547 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 60(%edi), %edi
5548 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, %edi
5549 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
5550 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 60(%edx)
5551 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
5552 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %ebx, %edi
5553 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
5554 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5555 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5556 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %eax, %esi
5557 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 52(%edx)
5558 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
5559 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 44(%edx)
5560 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5561 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 36(%edx)
5562 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5563 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%edx)
5564 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5565 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%edx)
5566 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5567 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%edx)
5568 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, (%edx)
5569 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, 4(%edx)
5570 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 56(%edx)
5571 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5572 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 48(%edx)
5573 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5574 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 40(%edx)
5575 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5576 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 32(%edx)
5577 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5578 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 24(%edx)
5579 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5580 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%edx)
5581 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5582 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%edx)
5583 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $204, %esp
5584 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
5585 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
5586 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
5587 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
5588 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
5590 ; X86-HAVE-BMI2-NO-SHLD-LABEL: shl_64bytes:
5591 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
5592 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
5593 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
5594 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
5595 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
5596 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $216, %esp
5597 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
5598 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %eax
5599 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5600 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edx), %eax
5601 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5602 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edx), %eax
5603 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5604 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edx), %eax
5605 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5606 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edx), %eax
5607 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5608 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edx), %eax
5609 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5610 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edx), %eax
5611 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5612 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edx), %eax
5613 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5614 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%edx), %eax
5615 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5616 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%edx), %eax
5617 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5618 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%edx), %ebp
5619 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%edx), %ebx
5620 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%edx), %edi
5621 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 52(%edx), %esi
5622 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 56(%edx), %ecx
5623 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 60(%edx), %eax
5624 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
5625 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %edx
5626 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5627 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5628 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
5629 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
5630 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
5631 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
5632 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5633 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5634 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5635 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5636 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5637 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5638 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5639 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5640 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5641 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5642 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5643 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5644 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5645 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5646 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5647 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5648 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5649 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5650 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5651 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5652 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %eax
5653 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %eax
5654 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %edx
5655 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %edx
5656 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5657 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal {{[0-9]+}}(%esp), %edi
5658 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl %edx, %edi
5659 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5660 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5661 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5662 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5663 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5664 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5665 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5666 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5667 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5668 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5669 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5670 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5671 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5672 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5673 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5674 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5675 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%edi), %ebp
5676 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
5677 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notl %ecx
5678 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $31, %ecx
5679 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%edi), %esi
5680 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
5681 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5682 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5683 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %ebp, %esi
5684 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
5685 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5686 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%edi), %esi
5687 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5688 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5689 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5690 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%edi), %edx
5691 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5692 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %edx, %esi
5693 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
5694 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5695 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%edi), %esi
5696 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5697 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5698 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5699 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%edi), %edx
5700 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5701 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %edx, %esi
5702 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
5703 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5704 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%edi), %esi
5705 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5706 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5707 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5708 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%edi), %edx
5709 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5710 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %edx, %esi
5711 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %ebx
5712 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5713 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%edi), %esi
5714 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5715 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5716 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx
5717 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%edi), %esi
5718 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5719 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %esi, %esi
5720 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edx
5721 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5722 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%edi), %esi
5723 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5724 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %esi
5725 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %esi, %edx
5726 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%edi), %esi
5727 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5728 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %esi, %esi
5729 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %esi, %edx
5730 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5731 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 52(%edi), %esi
5732 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, %ebx
5733 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebx
5734 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %ecx, %ebx, %edx
5735 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 56(%edi), %ecx
5736 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5737 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %ecx, %ecx
5738 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %edx
5739 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5740 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, (%esp), %ebx # 4-byte Folded Reload
5741 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5742 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
5743 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5744 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5745 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5746 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5747 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5748 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5749 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5750 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5751 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %esi, %ecx
5752 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5753 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
5754 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    negl %ecx
5755 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, 212(%esp,%ecx), %ecx
5756 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5757 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edi), %ecx
5758 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
5759 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %eax, %ecx, %eax
5760 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5761 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %dl
5762 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ecx
5763 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %ecx, %eax
5764 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ebx, %eax
5765 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5766 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebp
5767 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %ebp, %eax
5768 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl (%esp), %eax # 4-byte Folded Reload
5769 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
5770 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5771 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
5772 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %eax, %eax
5773 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
5774 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5775 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5776 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
5777 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %eax, %edi
5778 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
5779 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5780 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
5781 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %eax, %esi
5782 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Folded Reload
5783 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5784 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
5785 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %eax, %ecx
5786 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
5787 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5788 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %eax
5789 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %eax, %eax
5790 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Folded Reload
5791 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
5792 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl %ebp
5793 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %edx, %ebp, %edx
5794 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
5795 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edx, %ebp
5796 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
5797 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
5798 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, (%edx)
5799 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, 60(%edx)
5800 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 52(%edx)
5801 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 44(%edx)
5802 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 36(%edx)
5803 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 28(%edx)
5804 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5805 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 20(%edx)
5806 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
5807 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 12(%edx)
5808 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5809 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 4(%edx)
5810 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5811 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 56(%edx)
5812 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5813 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 48(%edx)
5814 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5815 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 40(%edx)
5816 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5817 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 32(%edx)
5818 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5819 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 24(%edx)
5820 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5821 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 16(%edx)
5822 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5823 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, 8(%edx)
5824 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $216, %esp
5825 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
5826 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
5827 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
5828 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
5829 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
5831 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: shl_64bytes:
5832 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
5833 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
5834 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
5835 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
5836 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
5837 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $204, %esp
5838 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
5839 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %eax
5840 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5841 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edi), %eax
5842 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5843 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%edi), %eax
5844 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5845 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%edi), %eax
5846 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5847 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%edi), %eax
5848 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5849 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%edi), %eax
5850 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5851 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%edi), %eax
5852 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5853 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%edi), %eax
5854 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5855 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%edi), %eax
5856 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5857 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%edi), %eax
5858 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%esp) # 4-byte Spill
5859 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%edi), %ebp
5860 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%edi), %ebx
5861 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 48(%edi), %esi
5862 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%edi), %edx
5863 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 56(%edi), %ecx
5864 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 60(%edi), %eax
5865 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edi
5866 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edi), %edi
5867 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5868 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
5869 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
5870 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
5871 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
5872 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
5873 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
5874 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5875 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5876 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5877 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5878 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5879 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5880 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5881 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5882 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5883 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5884 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5885 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5886 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5887 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5888 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5889 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5890 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5891 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
5892 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
5893 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, %eax
5894 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
5895 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %edi
5896 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %edi
5897 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5898 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal {{[0-9]+}}(%esp), %edx
5899 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl %edi, %edx
5900 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5901 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5902 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5903 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5904 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5905 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5906 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5907 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5908 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5909 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5910 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5911 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5912 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5913 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5914 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5915 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl $0, {{[0-9]+}}(%esp)
5916 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%edx), %ebp
5917 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, (%esp) # 4-byte Spill
5918 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5919 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %ecx
5920 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $31, %ecx
5921 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%edx), %esi
5922 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5923 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5924 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5925 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %ebp, %esi
5926 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5927 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5928 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%edx), %esi
5929 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5930 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5931 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5932 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%edx), %esi
5933 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5934 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5935 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5936 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5937 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%edx), %esi
5938 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5939 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5940 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5941 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%edx), %esi
5942 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5943 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5944 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5945 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5946 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%edx), %esi
5947 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5948 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5949 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5950 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%edx), %esi
5951 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5952 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5953 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5954 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5955 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%edx), %esi
5956 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5957 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5958 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5959 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%edx), %esi
5960 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5961 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5962 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5963 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5964 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%edx), %ebp
5965 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, %esi
5966 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5967 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ebx
5968 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 56(%edx), %esi
5969 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5970 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5971 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %ebx
5972 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5973 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%edx), %ebx
5974 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, %esi
5975 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl %esi
5976 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %ecx
5977 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5978 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    negl %esi
5979 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 188(%esp,%esi), %esi
5980 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5981 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %esi
5982 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ecx, %esi
5983 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
5984 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
5985 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %esi # 4-byte Reload
5986 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5987 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5988 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5989 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5990 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5991 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5992 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
5993 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
5994 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %esi, %ebx
5995 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %edi
5996 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 60(%edx), %esi
5997 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
5998 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edx, %esi
5999 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
6000 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 60(%edx)
6001 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %edi, %ecx
6002 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
6003 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6004 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
6005 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %edi, %esi
6006 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6007 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shldl %cl, %eax, %ebp
6008 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 52(%edx)
6009 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 44(%edx)
6010 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6011 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 36(%edx)
6012 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6013 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%edx)
6014 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6015 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%edx)
6016 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6017 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%edx)
6018 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
6019 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%edx)
6020 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 4(%edx)
6021 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6022 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 56(%edx)
6023 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6024 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 48(%edx)
6025 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6026 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 40(%edx)
6027 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6028 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 32(%edx)
6029 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6030 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 24(%edx)
6031 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6032 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%edx)
6033 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6034 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%edx)
6035 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $204, %esp
6036 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
6037 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
6038 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
6039 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
6040 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
6041   %src = load i512, ptr %src.ptr, align 1
6042   %bitOff = load i512, ptr %bitOff.ptr, align 1
6043   %res = shl i512 %src, %bitOff
6044   store i512 %res, ptr %dst, align 1
6045   ret void
6047 define void @ashr_64bytes(ptr %src.ptr, ptr %bitOff.ptr, ptr %dst) nounwind {
6048 ; X64-NO-BMI2-NO-SHLD-LABEL: ashr_64bytes:
6049 ; X64-NO-BMI2-NO-SHLD:       # %bb.0:
6050 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbp
6051 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r15
6052 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r14
6053 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r13
6054 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %r12
6055 ; X64-NO-BMI2-NO-SHLD-NEXT:    pushq %rbx
6056 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rax
6057 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %rcx
6058 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r9
6059 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r10
6060 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r11
6061 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %rbx
6062 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %r14
6063 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
6064 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl (%rsi), %r8d
6065 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6066 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6067 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
6068 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
6069 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
6070 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
6071 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
6072 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
6073 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq $63, %rdi
6074 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6075 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6076 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6077 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6078 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6079 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6080 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6081 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6082 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %r8d, %eax
6083 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $7, %eax
6084 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %r8d
6085 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %r8d
6086 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -128(%rsp,%r8), %r11
6087 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -120(%rsp,%r8), %r9
6088 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, %rsi
6089 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6090 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rsi
6091 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
6092 ; X64-NO-BMI2-NO-SHLD-NEXT:    notl %edi
6093 ; X64-NO-BMI2-NO-SHLD-NEXT:    andl $63, %edi
6094 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -112(%rsp,%r8), %r14
6095 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r14,%r14), %r10
6096 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
6097 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r10
6098 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rsi, %r10
6099 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6100 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r11
6101 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %esi
6102 ; X64-NO-BMI2-NO-SHLD-NEXT:    notb %sil
6103 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r9, %r9
6104 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
6105 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r9
6106 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r11, %r9
6107 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -104(%rsp,%r8), %r11
6108 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, %r12
6109 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6110 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r12
6111 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -96(%rsp,%r8), %r15
6112 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%r15,%r15), %rbx
6113 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
6114 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %rbx
6115 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r12, %rbx
6116 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6117 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r14
6118 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r11, %r11
6119 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
6120 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r11
6121 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r14, %r11
6122 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -88(%rsp,%r8), %r14
6123 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, %r13
6124 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6125 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r13
6126 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -80(%rsp,%r8), %rbp
6127 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rbp,%rbp), %r12
6128 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ecx
6129 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r12
6130 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r13, %r12
6131 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6132 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %r15
6133 ; X64-NO-BMI2-NO-SHLD-NEXT:    addq %r14, %r14
6134 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
6135 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r14
6136 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %r15, %r14
6137 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6138 ; X64-NO-BMI2-NO-SHLD-NEXT:    shrq %cl, %rbp
6139 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%r8), %rdi
6140 ; X64-NO-BMI2-NO-SHLD-NEXT:    leaq (%rdi,%rdi), %r8
6141 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
6142 ; X64-NO-BMI2-NO-SHLD-NEXT:    shlq %cl, %r8
6143 ; X64-NO-BMI2-NO-SHLD-NEXT:    orq %rbp, %r8
6144 ; X64-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6145 ; X64-NO-BMI2-NO-SHLD-NEXT:    sarq %cl, %rdi
6146 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rdi, 56(%rdx)
6147 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r8, 48(%rdx)
6148 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r14, 32(%rdx)
6149 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r12, 40(%rdx)
6150 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r11, 16(%rdx)
6151 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
6152 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r9, (%rdx)
6153 ; X64-NO-BMI2-NO-SHLD-NEXT:    movq %r10, 8(%rdx)
6154 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbx
6155 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r12
6156 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r13
6157 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r14
6158 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %r15
6159 ; X64-NO-BMI2-NO-SHLD-NEXT:    popq %rbp
6160 ; X64-NO-BMI2-NO-SHLD-NEXT:    retq
6162 ; X64-NO-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:
6163 ; X64-NO-BMI2-HAVE-SHLD:       # %bb.0:
6164 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
6165 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r15
6166 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r14
6167 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r13
6168 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %r12
6169 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
6170 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    pushq %rax
6171 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rax
6172 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %rcx
6173 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r8
6174 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r9
6175 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r10
6176 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %r11
6177 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %rbx
6178 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %r14
6179 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %edi
6180 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6181 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
6182 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
6183 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
6184 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
6185 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
6186 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
6187 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rax, -{{[0-9]+}}(%rsp)
6188 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq $63, %r14
6189 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, (%rsp)
6190 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6191 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6192 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6193 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6194 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6195 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6196 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6197 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, %eax
6198 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
6199 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %edi
6200 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %edi
6201 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -120(%rsp,%rdi), %r8
6202 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -112(%rsp,%rdi), %rbx
6203 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
6204 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6205 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %rbx
6206 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %esi
6207 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    notl %esi
6208 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
6209 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -104(%rsp,%rdi), %r11
6210 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r11,%r11), %r10
6211 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
6212 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r10
6213 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %rbx, %r10
6214 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -96(%rsp,%rdi), %r15
6215 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r15, %r12
6216 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6217 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r12
6218 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -88(%rsp,%rdi), %r14
6219 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%r14,%r14), %rbx
6220 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
6221 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %rbx
6222 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r12, %rbx
6223 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -80(%rsp,%rdi), %r12
6224 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r12, %r13
6225 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6226 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrq %cl, %r13
6227 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rdi), %rbp
6228 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    leaq (%rbp,%rbp), %r9
6229 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %ecx
6230 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shlq %cl, %r9
6231 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    orq %r13, %r9
6232 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6233 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r15, %r11
6234 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r12, %r14
6235 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq -64(%rsp,%rdi), %rsi
6236 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6237 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rbp
6238 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rdi # 8-byte Reload
6239 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rdi, %r8
6240 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    sarq %cl, %rsi
6241 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbp, 48(%rdx)
6242 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rsi, 56(%rdx)
6243 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r14, 32(%rdx)
6244 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r11, 16(%rdx)
6245 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r8, (%rdx)
6246 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r9, 40(%rdx)
6247 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 24(%rdx)
6248 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    movq %r10, 8(%rdx)
6249 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    addq $8, %rsp
6250 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbx
6251 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r12
6252 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r13
6253 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r14
6254 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %r15
6255 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    popq %rbp
6256 ; X64-NO-BMI2-HAVE-SHLD-NEXT:    retq
6258 ; X64-HAVE-BMI2-NO-SHLD-LABEL: ashr_64bytes:
6259 ; X64-HAVE-BMI2-NO-SHLD:       # %bb.0:
6260 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbp
6261 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r15
6262 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r14
6263 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r13
6264 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %r12
6265 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    pushq %rbx
6266 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq (%rdi), %rcx
6267 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 8(%rdi), %r8
6268 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 16(%rdi), %r9
6269 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 24(%rdi), %r10
6270 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 32(%rdi), %r11
6271 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 40(%rdi), %rbx
6272 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 48(%rdi), %r14
6273 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq 56(%rdi), %rdi
6274 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl (%rsi), %eax
6275 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6276 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6277 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
6278 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
6279 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
6280 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
6281 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
6282 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
6283 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarq $63, %rdi
6284 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6285 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6286 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6287 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6288 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6289 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6290 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6291 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6292 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6293 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %ecx
6294 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %eax
6295 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %eax
6296 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -120(%rsp,%rax), %rdi
6297 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -112(%rsp,%rax), %r9
6298 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rdi, %rbx
6299 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, -128(%rsp,%rax), %r14
6300 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %esi
6301 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -104(%rsp,%rax), %r8
6302 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r8, %r13
6303 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r9, %r10
6304 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -88(%rsp,%rax), %r11
6305 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r11, %r15
6306 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, %r12d
6307 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notl %r12d
6308 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %r12d
6309 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r9, %r9
6310 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %r9, %r9
6311 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rbx, %r9
6312 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -96(%rsp,%rax), %rbx
6313 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %rbx, %rbp
6314 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    notb %sil
6315 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rdi, %rdi
6316 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rdi, %rdi
6317 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r14, %rdi
6318 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rbx, %rbx
6319 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %rbx, %rbx
6320 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r13, %rbx
6321 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -80(%rsp,%rax), %r14
6322 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shrxq %rcx, %r14, %r13
6323 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq -72(%rsp,%rax), %rax
6324 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    sarxq %rcx, %rax, %rcx
6325 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r8, %r8
6326 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %r8, %r8
6327 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r10, %r8
6328 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    leaq (%r14,%r14), %r10
6329 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %r12, %r10, %r10
6330 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r15, %r10
6331 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %r11, %r11
6332 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %r11, %r11
6333 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %rbp, %r11
6334 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    addq %rax, %rax
6335 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    shlxq %rsi, %rax, %rax
6336 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    orq %r13, %rax
6337 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rcx, 56(%rdx)
6338 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rax, 48(%rdx)
6339 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r11, 32(%rdx)
6340 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r10, 40(%rdx)
6341 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r8, 16(%rdx)
6342 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rbx, 24(%rdx)
6343 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %rdi, (%rdx)
6344 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    movq %r9, 8(%rdx)
6345 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbx
6346 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r12
6347 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r13
6348 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r14
6349 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %r15
6350 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    popq %rbp
6351 ; X64-HAVE-BMI2-NO-SHLD-NEXT:    retq
6353 ; X64-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:
6354 ; X64-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
6355 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbp
6356 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r15
6357 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r14
6358 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r13
6359 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %r12
6360 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    pushq %rbx
6361 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq (%rdi), %rcx
6362 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 8(%rdi), %r8
6363 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 16(%rdi), %r9
6364 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 24(%rdi), %r10
6365 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 32(%rdi), %r11
6366 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 40(%rdi), %rbx
6367 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 48(%rdi), %r14
6368 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq 56(%rdi), %rdi
6369 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%rsi), %eax
6370 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6371 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r14, -{{[0-9]+}}(%rsp)
6372 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, -{{[0-9]+}}(%rsp)
6373 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r11, -{{[0-9]+}}(%rsp)
6374 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, -{{[0-9]+}}(%rsp)
6375 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, -{{[0-9]+}}(%rsp)
6376 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r8, -{{[0-9]+}}(%rsp)
6377 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rcx, -{{[0-9]+}}(%rsp)
6378 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarq $63, %rdi
6379 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6380 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6381 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6382 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6383 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6384 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6385 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6386 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, -{{[0-9]+}}(%rsp)
6387 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6388 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %ecx
6389 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %eax
6390 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %eax
6391 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -120(%rsp,%rax), %rsi
6392 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %rsi, %r10
6393 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -104(%rsp,%rax), %r8
6394 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r8, %r15
6395 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -88(%rsp,%rax), %r11
6396 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxq %rcx, %r11, %r14
6397 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %r12d
6398 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %r12d
6399 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %r12d
6400 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -112(%rsp,%rax), %r9
6401 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r9,%r9), %rdi
6402 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %rdi, %rdi
6403 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r10, %rdi
6404 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -96(%rsp,%rax), %rbx
6405 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%rbx,%rbx), %r10
6406 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %r10, %r10
6407 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r15, %r10
6408 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -80(%rsp,%rax), %r13
6409 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    leaq (%r13,%r13), %r15
6410 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxq %r12, %r15, %r15
6411 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -72(%rsp,%rax), %r12
6412 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxq %rcx, %r12, %rbp
6413 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq -128(%rsp,%rax), %rax
6414 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    orq %r14, %r15
6415 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r8, %r9
6416 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r11, %rbx
6417 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %r12, %r13
6418 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $rcx
6419 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdq %cl, %rsi, %rax
6420 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r13, 48(%rdx)
6421 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbp, 56(%rdx)
6422 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rbx, 32(%rdx)
6423 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r9, 16(%rdx)
6424 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rax, (%rdx)
6425 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r15, 40(%rdx)
6426 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %r10, 24(%rdx)
6427 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    movq %rdi, 8(%rdx)
6428 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbx
6429 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r12
6430 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r13
6431 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r14
6432 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %r15
6433 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    popq %rbp
6434 ; X64-HAVE-BMI2-HAVE-SHLD-NEXT:    retq
6436 ; X86-NO-BMI2-NO-SHLD-LABEL: ashr_64bytes:
6437 ; X86-NO-BMI2-NO-SHLD:       # %bb.0:
6438 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebp
6439 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %ebx
6440 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %edi
6441 ; X86-NO-BMI2-NO-SHLD-NEXT:    pushl %esi
6442 ; X86-NO-BMI2-NO-SHLD-NEXT:    subl $208, %esp
6443 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
6444 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%eax), %ecx
6445 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6446 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 4(%eax), %ecx
6447 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6448 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 8(%eax), %ecx
6449 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6450 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 12(%eax), %ecx
6451 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6452 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 16(%eax), %ecx
6453 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6454 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 20(%eax), %ecx
6455 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
6456 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 24(%eax), %ecx
6457 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6458 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 28(%eax), %ecx
6459 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6460 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 32(%eax), %ecx
6461 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6462 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 36(%eax), %ecx
6463 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6464 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 40(%eax), %ebp
6465 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 44(%eax), %ebx
6466 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 48(%eax), %edi
6467 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 52(%eax), %edx
6468 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 56(%eax), %ecx
6469 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 60(%eax), %eax
6470 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
6471 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esi), %esi
6472 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6473 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
6474 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
6475 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
6476 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
6477 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6478 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6479 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6480 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6481 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6482 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6483 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6484 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6485 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
6486 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6487 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6488 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6489 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6490 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6491 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6492 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6493 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6494 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6495 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6496 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6497 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6498 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl $31, %eax
6499 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6500 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6501 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6502 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6503 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6504 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6505 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6506 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6507 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6508 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6509 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6510 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6511 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6512 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6513 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6514 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6515 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, %ecx
6516 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $7, %ecx
6517 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl $3, %esi
6518 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $63, %esi
6519 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 84(%esp,%esi), %edi
6520 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6521 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
6522 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 88(%esp,%esi), %eax
6523 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6524 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%eax,%eax), %ebx
6525 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %edx
6526 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, %eax
6527 ; X86-NO-BMI2-NO-SHLD-NEXT:    notl %edx
6528 ; X86-NO-BMI2-NO-SHLD-NEXT:    andl $31, %edx
6529 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6530 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
6531 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
6532 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6533 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 92(%esp,%esi), %edi
6534 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6535 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6536 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
6537 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 96(%esp,%esi), %ecx
6538 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6539 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6540 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6541 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
6542 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
6543 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6544 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 100(%esp,%esi), %edi
6545 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6546 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6547 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
6548 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 104(%esp,%esi), %ecx
6549 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6550 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6551 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6552 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
6553 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
6554 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6555 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 108(%esp,%esi), %edi
6556 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6557 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6558 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %edi
6559 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 112(%esp,%esi), %ecx
6560 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6561 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6562 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6563 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
6564 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
6565 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6566 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 116(%esp,%esi), %ebx
6567 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6568 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6569 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6570 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 120(%esp,%esi), %ecx
6571 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6572 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
6573 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6574 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
6575 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
6576 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6577 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 124(%esp,%esi), %ebx
6578 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, (%esp) # 4-byte Spill
6579 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6580 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6581 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 128(%esp,%esi), %ecx
6582 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6583 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %edi
6584 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6585 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
6586 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
6587 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6588 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 132(%esp,%esi), %edi
6589 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, %ebx
6590 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6591 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6592 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 136(%esp,%esi), %ecx
6593 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6594 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%ecx,%ecx), %ebp
6595 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6596 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6597 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6598 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6599 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%esi), %ebx
6600 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6601 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6602 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %edx
6603 ; X86-NO-BMI2-NO-SHLD-NEXT:    notb %dl
6604 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
6605 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6606 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6607 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6608 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6609 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6610 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6611 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6612 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6613 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
6614 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6615 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6616 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6617 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6618 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6619 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6620 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6621 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6622 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
6623 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6624 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6625 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6626 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6627 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6628 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6629 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6630 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6631 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
6632 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6633 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6634 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6635 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6636 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6637 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6638 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6639 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6640 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
6641 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6642 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6643 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6644 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6645 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6646 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6647 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6648 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6649 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ebp # 4-byte Reload
6650 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
6651 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6652 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebp
6653 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %ebp
6654 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, (%esp) # 4-byte Spill
6655 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6656 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6657 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %ebx
6658 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
6659 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6660 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %edi
6661 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %ebx, %edi
6662 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
6663 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %eax, %ebp
6664 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6665 ; X86-NO-BMI2-NO-SHLD-NEXT:    shrl %cl, %eax
6666 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl 140(%esp,%esi), %esi
6667 ; X86-NO-BMI2-NO-SHLD-NEXT:    leal (%esi,%esi), %ebx
6668 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edx, %ecx
6669 ; X86-NO-BMI2-NO-SHLD-NEXT:    shll %cl, %ebx
6670 ; X86-NO-BMI2-NO-SHLD-NEXT:    orl %eax, %ebx
6671 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebp, %ecx
6672 ; X86-NO-BMI2-NO-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
6673 ; X86-NO-BMI2-NO-SHLD-NEXT:    sarl %cl, %esi
6674 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
6675 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %esi, 60(%eax)
6676 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ebx, 56(%eax)
6677 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %edi, 48(%eax)
6678 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
6679 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 40(%eax)
6680 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6681 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 32(%eax)
6682 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6683 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 24(%eax)
6684 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6685 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 16(%eax)
6686 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6687 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
6688 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6689 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
6690 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6691 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 52(%eax)
6692 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6693 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 44(%eax)
6694 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6695 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 36(%eax)
6696 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6697 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 28(%eax)
6698 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6699 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
6700 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6701 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
6702 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6703 ; X86-NO-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
6704 ; X86-NO-BMI2-NO-SHLD-NEXT:    addl $208, %esp
6705 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %esi
6706 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %edi
6707 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebx
6708 ; X86-NO-BMI2-NO-SHLD-NEXT:    popl %ebp
6709 ; X86-NO-BMI2-NO-SHLD-NEXT:    retl
6711 ; X86-NO-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:
6712 ; X86-NO-BMI2-HAVE-SHLD:       # %bb.0:
6713 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
6714 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
6715 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %edi
6716 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    pushl %esi
6717 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    subl $204, %esp
6718 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
6719 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %ecx
6720 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6721 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 4(%eax), %ecx
6722 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6723 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 8(%eax), %ecx
6724 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6725 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 12(%eax), %ecx
6726 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6727 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 16(%eax), %ecx
6728 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6729 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 20(%eax), %ecx
6730 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
6731 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 24(%eax), %ecx
6732 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6733 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 28(%eax), %ecx
6734 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6735 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 32(%eax), %ecx
6736 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6737 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 36(%eax), %ecx
6738 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6739 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 40(%eax), %ebp
6740 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 44(%eax), %ebx
6741 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 48(%eax), %edi
6742 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 52(%eax), %edx
6743 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 56(%eax), %ecx
6744 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 60(%eax), %eax
6745 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %esi
6746 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esi), %esi
6747 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6748 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, {{[0-9]+}}(%esp)
6749 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
6750 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
6751 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
6752 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6753 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6754 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6755 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6756 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6757 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6758 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6759 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6760 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
6761 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6762 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6763 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6764 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6765 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6766 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6767 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6768 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6769 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6770 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6771 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6772 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6773 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl $31, %eax
6774 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6775 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6776 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6777 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6778 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6779 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6780 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6781 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6782 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6783 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6784 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6785 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6786 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6787 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6788 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6789 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6790 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, %eax
6791 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $7, %eax
6792 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl $3, %esi
6793 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $63, %esi
6794 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%esi), %edi
6795 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6796 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6797 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6798 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%esi), %ecx
6799 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6800 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6801 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %edx
6802 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    notl %edx
6803 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    andl $31, %edx
6804 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6805 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6806 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6807 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6808 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 88(%esp,%esi), %edi
6809 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6810 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6811 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6812 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 92(%esp,%esi), %ecx
6813 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6814 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6815 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6816 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6817 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6818 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6819 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 96(%esp,%esi), %edi
6820 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6821 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6822 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6823 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 100(%esp,%esi), %ecx
6824 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6825 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6826 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6827 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6828 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6829 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6830 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 104(%esp,%esi), %edi
6831 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6832 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6833 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6834 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 108(%esp,%esi), %ecx
6835 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6836 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6837 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6838 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6839 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6840 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6841 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 112(%esp,%esi), %edi
6842 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6843 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6844 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6845 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 116(%esp,%esi), %ecx
6846 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6847 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6848 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6849 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6850 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6851 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6852 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 120(%esp,%esi), %edi
6853 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6854 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6855 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6856 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 124(%esp,%esi), %ecx
6857 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
6858 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ecx,%ecx), %ebx
6859 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6860 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebx
6861 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebx
6862 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6863 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 128(%esp,%esi), %edi
6864 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6865 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6866 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrl %cl, %edi
6867 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 132(%esp,%esi), %ebx
6868 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %ebp
6869 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
6870 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shll %cl, %ebp
6871 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    orl %edi, %ebp
6872 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6873 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6874 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
6875 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, %ecx
6876 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6877 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
6878 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6879 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
6880 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6881 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
6882 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6883 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
6884 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edx # 4-byte Reload
6885 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edx, (%esp) # 4-byte Folded Spill
6886 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%esi), %edi
6887 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl 136(%esp,%esi), %esi
6888 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, %ebx
6889 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
6890 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 56(%edx)
6891 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
6892 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebx, %edi
6893 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    sarl %cl, %esi
6894 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %esi, 60(%edx)
6895 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %eax # 4-byte Reload
6896 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 48(%edx)
6897 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6898 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 40(%edx)
6899 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6900 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 32(%edx)
6901 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6902 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 24(%edx)
6903 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6904 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 16(%edx)
6905 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6906 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 8(%edx)
6907 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %edi, (%edx)
6908 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %ebp, 52(%edx)
6909 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6910 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 44(%edx)
6911 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6912 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 36(%edx)
6913 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6914 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%edx)
6915 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6916 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%edx)
6917 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6918 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%edx)
6919 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
6920 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%edx)
6921 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    addl $204, %esp
6922 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %esi
6923 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %edi
6924 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebx
6925 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    popl %ebp
6926 ; X86-NO-BMI2-HAVE-SHLD-NEXT:    retl
6928 ; X86-HAVE-BMI2-NO-SHLD-LABEL: ashr_64bytes:
6929 ; X86-HAVE-BMI2-NO-SHLD:       # %bb.0:
6930 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebp
6931 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %ebx
6932 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %edi
6933 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    pushl %esi
6934 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    subl $204, %esp
6935 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
6936 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%eax), %ecx
6937 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6938 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 4(%eax), %ecx
6939 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6940 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 8(%eax), %ecx
6941 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6942 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 12(%eax), %ecx
6943 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6944 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 16(%eax), %ecx
6945 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6946 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 20(%eax), %ecx
6947 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6948 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 24(%eax), %ecx
6949 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6950 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 28(%eax), %ecx
6951 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6952 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 32(%eax), %ecx
6953 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
6954 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 36(%eax), %ecx
6955 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
6956 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 40(%eax), %ebp
6957 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 44(%eax), %ebx
6958 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 48(%eax), %edi
6959 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 52(%eax), %esi
6960 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 56(%eax), %ecx
6961 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 60(%eax), %eax
6962 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
6963 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%edx), %edx
6964 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6965 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
6966 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
6967 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
6968 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
6969 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
6970 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6971 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6972 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6973 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6974 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6975 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6976 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6977 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6978 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6979 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6980 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6981 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6982 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6983 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6984 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6985 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6986 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6987 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6988 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
6989 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
6990 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarl $31, %eax
6991 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6992 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6993 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6994 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6995 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6996 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6997 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6998 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
6999 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7000 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7001 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7002 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7003 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7004 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7005 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7006 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7007 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edx, %eax
7008 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $7, %eax
7009 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrl $3, %edx
7010 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $63, %edx
7011 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 80(%esp,%edx), %ecx
7012 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7013 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 84(%esp,%edx), %esi
7014 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7015 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
7016 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %edi
7017 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notl %edi
7018 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    andl $31, %edi
7019 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
7020 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %esi, %esi
7021 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7022 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7023 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 92(%esp,%edx), %ecx
7024 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
7025 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7026 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
7027 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 88(%esp,%edx), %ecx
7028 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7029 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
7030 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7031 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7032 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 100(%esp,%edx), %ecx
7033 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7034 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7035 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
7036 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 96(%esp,%edx), %ecx
7037 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7038 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
7039 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7040 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7041 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 108(%esp,%edx), %ecx
7042 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7043 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7044 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
7045 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 104(%esp,%edx), %ecx
7046 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7047 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
7048 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7049 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7050 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 116(%esp,%edx), %ecx
7051 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7052 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7053 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
7054 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 112(%esp,%edx), %ecx
7055 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7056 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ecx, %ecx
7057 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7058 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7059 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 124(%esp,%edx), %ecx
7060 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7061 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7062 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %esi
7063 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 120(%esp,%edx), %ebx
7064 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %ebx, %ecx
7065 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %esi
7066 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7067 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 132(%esp,%edx), %ecx
7068 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7069 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ecx, %ecx
7070 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %edi, %ecx, %edi
7071 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 128(%esp,%edx), %esi
7072 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, %esi, %ecx
7073 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %ecx, %edi
7074 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7075 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %eax, %ecx
7076 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    notb %cl
7077 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
7078 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %edi, %edi
7079 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %edi, %ebp
7080 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, 76(%esp,%edx), %edi
7081 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
7082 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7083 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7084 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7085 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
7086 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
7087 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
7088 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7089 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, (%esp), %edi # 4-byte Folded Reload
7090 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7091 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
7092 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
7093 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
7094 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, (%esp) # 4-byte Spill
7095 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7096 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7097 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
7098 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
7099 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
7100 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7101 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7102 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7103 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebp, %ebp
7104 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebp, %ebp
7105 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebp
7106 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7107 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %ebx, %ebx
7108 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %ebx, %ebx
7109 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %ebx
7110 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7111 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl %esi, %esi
7112 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %esi, %esi
7113 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl %edi, %esi
7114 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shrxl %eax, {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Folded Reload
7115 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7116 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl 136(%esp,%edx), %edx
7117 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    sarxl %eax, %edx, %edi
7118 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    leal (%edx,%edx), %eax
7119 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    shlxl %ecx, %eax, %ecx
7120 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    orl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Folded Reload
7121 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
7122 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %edi, 60(%eax)
7123 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 56(%eax)
7124 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %esi, 48(%eax)
7125 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebx, 40(%eax)
7126 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ebp, 32(%eax)
7127 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7128 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 24(%eax)
7129 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
7130 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 16(%eax)
7131 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7132 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 8(%eax)
7133 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7134 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, (%eax)
7135 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7136 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 52(%eax)
7137 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7138 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 44(%eax)
7139 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7140 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 36(%eax)
7141 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7142 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 28(%eax)
7143 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7144 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 20(%eax)
7145 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7146 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 12(%eax)
7147 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7148 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    movl %ecx, 4(%eax)
7149 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    addl $204, %esp
7150 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %esi
7151 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %edi
7152 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebx
7153 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    popl %ebp
7154 ; X86-HAVE-BMI2-NO-SHLD-NEXT:    retl
7156 ; X86-HAVE-BMI2-HAVE-SHLD-LABEL: ashr_64bytes:
7157 ; X86-HAVE-BMI2-HAVE-SHLD:       # %bb.0:
7158 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebp
7159 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %ebx
7160 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %edi
7161 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    pushl %esi
7162 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    subl $200, %esp
7163 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %eax
7164 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%eax), %ecx
7165 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7166 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 4(%eax), %ecx
7167 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7168 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 8(%eax), %ecx
7169 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7170 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 12(%eax), %ecx
7171 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, (%esp) # 4-byte Spill
7172 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 16(%eax), %ecx
7173 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7174 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 20(%eax), %ecx
7175 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7176 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 24(%eax), %ecx
7177 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7178 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 28(%eax), %ecx
7179 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7180 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 32(%eax), %ecx
7181 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7182 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 36(%eax), %ecx
7183 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7184 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 40(%eax), %ebp
7185 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 44(%eax), %ebx
7186 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 48(%eax), %edi
7187 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 52(%eax), %esi
7188 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 56(%eax), %ecx
7189 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 60(%eax), %eax
7190 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
7191 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%edx), %edx
7192 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7193 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[0-9]+}}(%esp)
7194 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[0-9]+}}(%esp)
7195 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, {{[0-9]+}}(%esp)
7196 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebp, {{[0-9]+}}(%esp)
7197 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7198 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7199 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7200 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7201 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7202 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7203 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7204 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7205 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7206 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7207 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7208 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7209 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7210 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %ecx # 4-byte Reload
7211 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7212 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7213 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7214 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7215 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7216 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload
7217 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, {{[0-9]+}}(%esp)
7218 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarl $31, %eax
7219 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7220 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7221 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7222 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7223 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7224 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7225 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7226 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7227 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7228 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7229 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7230 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7231 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7232 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7233 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7234 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[0-9]+}}(%esp)
7235 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edx, %ecx
7236 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $7, %ecx
7237 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrl $3, %edx
7238 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $63, %edx
7239 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 76(%esp,%edx), %eax
7240 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7241 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %esi
7242 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ecx, %eax
7243 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    notl %eax
7244 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    andl $31, %eax
7245 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 80(%esp,%edx), %edi
7246 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7247 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %edi, %edi
7248 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %edi, %edi
7249 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7250 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7251 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 88(%esp,%edx), %esi
7252 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7253 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
7254 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %edi
7255 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 84(%esp,%edx), %esi
7256 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7257 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
7258 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7259 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7260 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 96(%esp,%edx), %esi
7261 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7262 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
7263 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %edi
7264 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 92(%esp,%edx), %esi
7265 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7266 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
7267 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7268 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7269 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 104(%esp,%edx), %esi
7270 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7271 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
7272 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %edi
7273 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 100(%esp,%edx), %esi
7274 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7275 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
7276 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7277 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7278 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 112(%esp,%edx), %esi
7279 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, (%esp) # 4-byte Spill
7280 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl %esi, %esi
7281 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %edi
7282 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 108(%esp,%edx), %esi
7283 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7284 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
7285 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7286 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7287 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 120(%esp,%edx), %ebx
7288 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%ebx,%ebx), %esi
7289 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %esi, %edi
7290 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 116(%esp,%edx), %esi
7291 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7292 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %esi, %esi
7293 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %esi, %edi
7294 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7295 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 128(%esp,%edx), %edi
7296 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    leal (%edi,%edi), %ebp
7297 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shlxl %eax, %ebp, %esi
7298 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 124(%esp,%edx), %eax
7299 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrxl %ecx, %eax, %ebp
7300 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    orl %ebp, %esi
7301 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
7302 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7303 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
7304 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7305 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
7306 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7307 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
7308 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7309 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7310 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebp, %esi
7311 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
7312 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebp, (%esp) # 4-byte Folded Spill
7313 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %eax, %ebx
7314 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 72(%esp,%edx), %eax
7315 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl 132(%esp,%edx), %ebp
7316 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %ebp, %edi
7317 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[0-9]+}}(%esp), %edx
7318 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 56(%edx)
7319 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %ebx, 48(%edx)
7320 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl (%esp), %edi # 4-byte Reload
7321 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %edi, 40(%edx)
7322 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 32(%edx)
7323 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7324 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 24(%edx)
7325 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7326 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 16(%edx)
7327 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
7328 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 8(%edx)
7329 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    sarxl %ecx, %ebp, %esi
7330 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    # kill: def $cl killed $cl killed $ecx
7331 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %edi # 4-byte Reload
7332 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    shrdl %cl, %edi, %eax
7333 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, (%edx)
7334 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %esi, 60(%edx)
7335 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7336 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 52(%edx)
7337 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7338 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 44(%edx)
7339 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7340 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 36(%edx)
7341 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7342 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 28(%edx)
7343 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7344 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 20(%edx)
7345 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7346 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 12(%edx)
7347 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
7348 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    movl %eax, 4(%edx)
7349 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    addl $200, %esp
7350 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %esi
7351 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %edi
7352 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebx
7353 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    popl %ebp
7354 ; X86-HAVE-BMI2-HAVE-SHLD-NEXT:    retl
7355   %src = load i512, ptr %src.ptr, align 1
7356   %bitOff = load i512, ptr %bitOff.ptr, align 1
7357   %res = ashr i512 %src, %bitOff
7358   store i512 %res, ptr %dst, align 1
7359   ret void
7361 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
7362 ; ALL: {{.*}}
7363 ; X86: {{.*}}
7364 ; X86-NO-SHLD: {{.*}}
7365 ; X86-SHLD: {{.*}}
7366 ; X64: {{.*}}
7367 ; X64-NO-SHLD: {{.*}}
7368 ; X64-SHLD: {{.*}}