Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / scalar-fp-to-i32.ll
blobb22533a8c8ee2ae48b136bbe009b6123b436d15d
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-WIN
3 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-LIN
4 ; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN
5 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN
6 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-WIN
7 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-LIN
8 ; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN
9 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN
10 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-WIN
11 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=X86-AVX512,X86-AVX512-LIN
12 ; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN
13 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN
14 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=X86-SSE,X86-SSE3,X86-SSE-WIN,X86-SSE3-WIN
15 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=X86-SSE,X86-SSE3,X86-SSE-LIN,X86-SSE3-LIN
16 ; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-WIN,X64-SSE3-WIN
17 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-LIN,X64-SSE3-LIN
18 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=X86-SSE,X86-SSE2,X86-SSE-WIN,X86-SSE2-WIN
19 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=X86-SSE,X86-SSE2,X86-SSE-LIN,X86-SSE2-LIN
20 ; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-WIN,X64-SSE2-WIN
21 ; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-LIN,X64-SSE2-LIN
22 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse  | FileCheck %s --check-prefixes=X86-SSE,X86-SSE1,X86-SSE-WIN,X86-SSE1-WIN
23 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse  | FileCheck %s --check-prefixes=X86-SSE,X86-SSE1,X86-SSE-LIN,X86-SSE1-LIN
24 ; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefixes=X87,X87-WIN
25 ; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefixes=X87,X87-LIN
27 ; Check that scalar FP conversions to signed and unsigned int32 are using
28 ; reasonable sequences, across platforms and target switches.
30 define i32 @f_to_u32(float %a) nounwind {
31 ; X86-AVX512-LABEL: f_to_u32:
32 ; X86-AVX512:       # %bb.0:
33 ; X86-AVX512-NEXT:    vcvttss2usi {{[0-9]+}}(%esp), %eax
34 ; X86-AVX512-NEXT:    retl
36 ; X64-AVX512-LABEL: f_to_u32:
37 ; X64-AVX512:       # %bb.0:
38 ; X64-AVX512-NEXT:    vcvttss2usi %xmm0, %eax
39 ; X64-AVX512-NEXT:    retq
41 ; X86-SSE-WIN-LABEL: f_to_u32:
42 ; X86-SSE-WIN:       # %bb.0:
43 ; X86-SSE-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
44 ; X86-SSE-WIN-NEXT:    cvttss2si %xmm0, %ecx
45 ; X86-SSE-WIN-NEXT:    movl %ecx, %edx
46 ; X86-SSE-WIN-NEXT:    sarl $31, %edx
47 ; X86-SSE-WIN-NEXT:    subss __real@4f000000, %xmm0
48 ; X86-SSE-WIN-NEXT:    cvttss2si %xmm0, %eax
49 ; X86-SSE-WIN-NEXT:    andl %edx, %eax
50 ; X86-SSE-WIN-NEXT:    orl %ecx, %eax
51 ; X86-SSE-WIN-NEXT:    retl
53 ; X86-SSE-LIN-LABEL: f_to_u32:
54 ; X86-SSE-LIN:       # %bb.0:
55 ; X86-SSE-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
56 ; X86-SSE-LIN-NEXT:    cvttss2si %xmm0, %ecx
57 ; X86-SSE-LIN-NEXT:    movl %ecx, %edx
58 ; X86-SSE-LIN-NEXT:    sarl $31, %edx
59 ; X86-SSE-LIN-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
60 ; X86-SSE-LIN-NEXT:    cvttss2si %xmm0, %eax
61 ; X86-SSE-LIN-NEXT:    andl %edx, %eax
62 ; X86-SSE-LIN-NEXT:    orl %ecx, %eax
63 ; X86-SSE-LIN-NEXT:    retl
65 ; X64-SSE-LABEL: f_to_u32:
66 ; X64-SSE:       # %bb.0:
67 ; X64-SSE-NEXT:    cvttss2si %xmm0, %rax
68 ; X64-SSE-NEXT:    # kill: def $eax killed $eax killed $rax
69 ; X64-SSE-NEXT:    retq
71 ; X87-WIN-LABEL: f_to_u32:
72 ; X87-WIN:       # %bb.0:
73 ; X87-WIN-NEXT:    pushl %ebp
74 ; X87-WIN-NEXT:    movl %esp, %ebp
75 ; X87-WIN-NEXT:    andl $-8, %esp
76 ; X87-WIN-NEXT:    subl $16, %esp
77 ; X87-WIN-NEXT:    flds 8(%ebp)
78 ; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
79 ; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
80 ; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
81 ; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
82 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
83 ; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
84 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
85 ; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
86 ; X87-WIN-NEXT:    movl %ebp, %esp
87 ; X87-WIN-NEXT:    popl %ebp
88 ; X87-WIN-NEXT:    retl
90 ; X87-LIN-LABEL: f_to_u32:
91 ; X87-LIN:       # %bb.0:
92 ; X87-LIN-NEXT:    subl $20, %esp
93 ; X87-LIN-NEXT:    flds {{[0-9]+}}(%esp)
94 ; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
95 ; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
96 ; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
97 ; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
98 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
99 ; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
100 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
101 ; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
102 ; X87-LIN-NEXT:    addl $20, %esp
103 ; X87-LIN-NEXT:    retl
104   %r = fptoui float %a to i32
105   ret i32 %r
108 define i32 @f_to_s32(float %a) nounwind {
109 ; X86-AVX512-LABEL: f_to_s32:
110 ; X86-AVX512:       # %bb.0:
111 ; X86-AVX512-NEXT:    vcvttss2si {{[0-9]+}}(%esp), %eax
112 ; X86-AVX512-NEXT:    retl
114 ; X64-AVX512-LABEL: f_to_s32:
115 ; X64-AVX512:       # %bb.0:
116 ; X64-AVX512-NEXT:    vcvttss2si %xmm0, %eax
117 ; X64-AVX512-NEXT:    retq
119 ; X86-SSE-LABEL: f_to_s32:
120 ; X86-SSE:       # %bb.0:
121 ; X86-SSE-NEXT:    cvttss2si {{[0-9]+}}(%esp), %eax
122 ; X86-SSE-NEXT:    retl
124 ; X64-SSE-LABEL: f_to_s32:
125 ; X64-SSE:       # %bb.0:
126 ; X64-SSE-NEXT:    cvttss2si %xmm0, %eax
127 ; X64-SSE-NEXT:    retq
129 ; X87-LABEL: f_to_s32:
130 ; X87:       # %bb.0:
131 ; X87-NEXT:    subl $8, %esp
132 ; X87-NEXT:    flds {{[0-9]+}}(%esp)
133 ; X87-NEXT:    fnstcw (%esp)
134 ; X87-NEXT:    movzwl (%esp), %eax
135 ; X87-NEXT:    orl $3072, %eax # imm = 0xC00
136 ; X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
137 ; X87-NEXT:    fldcw {{[0-9]+}}(%esp)
138 ; X87-NEXT:    fistpl {{[0-9]+}}(%esp)
139 ; X87-NEXT:    fldcw (%esp)
140 ; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
141 ; X87-NEXT:    addl $8, %esp
142 ; X87-NEXT:    retl
143   %r = fptosi float %a to i32
144   ret i32 %r
147 define i32 @d_to_u32(double %a) nounwind {
148 ; X86-AVX512-LABEL: d_to_u32:
149 ; X86-AVX512:       # %bb.0:
150 ; X86-AVX512-NEXT:    vcvttsd2usi {{[0-9]+}}(%esp), %eax
151 ; X86-AVX512-NEXT:    retl
153 ; X64-AVX512-LABEL: d_to_u32:
154 ; X64-AVX512:       # %bb.0:
155 ; X64-AVX512-NEXT:    vcvttsd2usi %xmm0, %eax
156 ; X64-AVX512-NEXT:    retq
158 ; X86-SSE3-WIN-LABEL: d_to_u32:
159 ; X86-SSE3-WIN:       # %bb.0:
160 ; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
161 ; X86-SSE3-WIN-NEXT:    cvttsd2si %xmm0, %ecx
162 ; X86-SSE3-WIN-NEXT:    movl %ecx, %edx
163 ; X86-SSE3-WIN-NEXT:    sarl $31, %edx
164 ; X86-SSE3-WIN-NEXT:    subsd __real@41e0000000000000, %xmm0
165 ; X86-SSE3-WIN-NEXT:    cvttsd2si %xmm0, %eax
166 ; X86-SSE3-WIN-NEXT:    andl %edx, %eax
167 ; X86-SSE3-WIN-NEXT:    orl %ecx, %eax
168 ; X86-SSE3-WIN-NEXT:    retl
170 ; X86-SSE3-LIN-LABEL: d_to_u32:
171 ; X86-SSE3-LIN:       # %bb.0:
172 ; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
173 ; X86-SSE3-LIN-NEXT:    cvttsd2si %xmm0, %ecx
174 ; X86-SSE3-LIN-NEXT:    movl %ecx, %edx
175 ; X86-SSE3-LIN-NEXT:    sarl $31, %edx
176 ; X86-SSE3-LIN-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
177 ; X86-SSE3-LIN-NEXT:    cvttsd2si %xmm0, %eax
178 ; X86-SSE3-LIN-NEXT:    andl %edx, %eax
179 ; X86-SSE3-LIN-NEXT:    orl %ecx, %eax
180 ; X86-SSE3-LIN-NEXT:    retl
182 ; X64-SSE-LABEL: d_to_u32:
183 ; X64-SSE:       # %bb.0:
184 ; X64-SSE-NEXT:    cvttsd2si %xmm0, %rax
185 ; X64-SSE-NEXT:    # kill: def $eax killed $eax killed $rax
186 ; X64-SSE-NEXT:    retq
188 ; X86-SSE2-WIN-LABEL: d_to_u32:
189 ; X86-SSE2-WIN:       # %bb.0:
190 ; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
191 ; X86-SSE2-WIN-NEXT:    cvttsd2si %xmm0, %ecx
192 ; X86-SSE2-WIN-NEXT:    movl %ecx, %edx
193 ; X86-SSE2-WIN-NEXT:    sarl $31, %edx
194 ; X86-SSE2-WIN-NEXT:    subsd __real@41e0000000000000, %xmm0
195 ; X86-SSE2-WIN-NEXT:    cvttsd2si %xmm0, %eax
196 ; X86-SSE2-WIN-NEXT:    andl %edx, %eax
197 ; X86-SSE2-WIN-NEXT:    orl %ecx, %eax
198 ; X86-SSE2-WIN-NEXT:    retl
200 ; X86-SSE2-LIN-LABEL: d_to_u32:
201 ; X86-SSE2-LIN:       # %bb.0:
202 ; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
203 ; X86-SSE2-LIN-NEXT:    cvttsd2si %xmm0, %ecx
204 ; X86-SSE2-LIN-NEXT:    movl %ecx, %edx
205 ; X86-SSE2-LIN-NEXT:    sarl $31, %edx
206 ; X86-SSE2-LIN-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
207 ; X86-SSE2-LIN-NEXT:    cvttsd2si %xmm0, %eax
208 ; X86-SSE2-LIN-NEXT:    andl %edx, %eax
209 ; X86-SSE2-LIN-NEXT:    orl %ecx, %eax
210 ; X86-SSE2-LIN-NEXT:    retl
212 ; X86-SSE1-WIN-LABEL: d_to_u32:
213 ; X86-SSE1-WIN:       # %bb.0:
214 ; X86-SSE1-WIN-NEXT:    pushl %ebp
215 ; X86-SSE1-WIN-NEXT:    movl %esp, %ebp
216 ; X86-SSE1-WIN-NEXT:    andl $-8, %esp
217 ; X86-SSE1-WIN-NEXT:    subl $16, %esp
218 ; X86-SSE1-WIN-NEXT:    fldl 8(%ebp)
219 ; X86-SSE1-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
220 ; X86-SSE1-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
221 ; X86-SSE1-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
222 ; X86-SSE1-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
223 ; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
224 ; X86-SSE1-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
225 ; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
226 ; X86-SSE1-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
227 ; X86-SSE1-WIN-NEXT:    movl %ebp, %esp
228 ; X86-SSE1-WIN-NEXT:    popl %ebp
229 ; X86-SSE1-WIN-NEXT:    retl
231 ; X86-SSE1-LIN-LABEL: d_to_u32:
232 ; X86-SSE1-LIN:       # %bb.0:
233 ; X86-SSE1-LIN-NEXT:    subl $20, %esp
234 ; X86-SSE1-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
235 ; X86-SSE1-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
236 ; X86-SSE1-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
237 ; X86-SSE1-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
238 ; X86-SSE1-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
239 ; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
240 ; X86-SSE1-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
241 ; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
242 ; X86-SSE1-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
243 ; X86-SSE1-LIN-NEXT:    addl $20, %esp
244 ; X86-SSE1-LIN-NEXT:    retl
246 ; X87-WIN-LABEL: d_to_u32:
247 ; X87-WIN:       # %bb.0:
248 ; X87-WIN-NEXT:    pushl %ebp
249 ; X87-WIN-NEXT:    movl %esp, %ebp
250 ; X87-WIN-NEXT:    andl $-8, %esp
251 ; X87-WIN-NEXT:    subl $16, %esp
252 ; X87-WIN-NEXT:    fldl 8(%ebp)
253 ; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
254 ; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
255 ; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
256 ; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
257 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
258 ; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
259 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
260 ; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
261 ; X87-WIN-NEXT:    movl %ebp, %esp
262 ; X87-WIN-NEXT:    popl %ebp
263 ; X87-WIN-NEXT:    retl
265 ; X87-LIN-LABEL: d_to_u32:
266 ; X87-LIN:       # %bb.0:
267 ; X87-LIN-NEXT:    subl $20, %esp
268 ; X87-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
269 ; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
270 ; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
271 ; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
272 ; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
273 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
274 ; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
275 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
276 ; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
277 ; X87-LIN-NEXT:    addl $20, %esp
278 ; X87-LIN-NEXT:    retl
279   %r = fptoui double %a to i32
280   ret i32 %r
283 define i32 @d_to_s32(double %a) nounwind {
284 ; X86-AVX512-LABEL: d_to_s32:
285 ; X86-AVX512:       # %bb.0:
286 ; X86-AVX512-NEXT:    vcvttsd2si {{[0-9]+}}(%esp), %eax
287 ; X86-AVX512-NEXT:    retl
289 ; X64-AVX512-LABEL: d_to_s32:
290 ; X64-AVX512:       # %bb.0:
291 ; X64-AVX512-NEXT:    vcvttsd2si %xmm0, %eax
292 ; X64-AVX512-NEXT:    retq
294 ; X86-SSE3-LABEL: d_to_s32:
295 ; X86-SSE3:       # %bb.0:
296 ; X86-SSE3-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
297 ; X86-SSE3-NEXT:    retl
299 ; X64-SSE-LABEL: d_to_s32:
300 ; X64-SSE:       # %bb.0:
301 ; X64-SSE-NEXT:    cvttsd2si %xmm0, %eax
302 ; X64-SSE-NEXT:    retq
304 ; X86-SSE2-LABEL: d_to_s32:
305 ; X86-SSE2:       # %bb.0:
306 ; X86-SSE2-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
307 ; X86-SSE2-NEXT:    retl
309 ; X86-SSE1-LABEL: d_to_s32:
310 ; X86-SSE1:       # %bb.0:
311 ; X86-SSE1-NEXT:    subl $8, %esp
312 ; X86-SSE1-NEXT:    fldl {{[0-9]+}}(%esp)
313 ; X86-SSE1-NEXT:    fnstcw (%esp)
314 ; X86-SSE1-NEXT:    movzwl (%esp), %eax
315 ; X86-SSE1-NEXT:    orl $3072, %eax # imm = 0xC00
316 ; X86-SSE1-NEXT:    movw %ax, {{[0-9]+}}(%esp)
317 ; X86-SSE1-NEXT:    fldcw {{[0-9]+}}(%esp)
318 ; X86-SSE1-NEXT:    fistpl {{[0-9]+}}(%esp)
319 ; X86-SSE1-NEXT:    fldcw (%esp)
320 ; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
321 ; X86-SSE1-NEXT:    addl $8, %esp
322 ; X86-SSE1-NEXT:    retl
324 ; X87-LABEL: d_to_s32:
325 ; X87:       # %bb.0:
326 ; X87-NEXT:    subl $8, %esp
327 ; X87-NEXT:    fldl {{[0-9]+}}(%esp)
328 ; X87-NEXT:    fnstcw (%esp)
329 ; X87-NEXT:    movzwl (%esp), %eax
330 ; X87-NEXT:    orl $3072, %eax # imm = 0xC00
331 ; X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
332 ; X87-NEXT:    fldcw {{[0-9]+}}(%esp)
333 ; X87-NEXT:    fistpl {{[0-9]+}}(%esp)
334 ; X87-NEXT:    fldcw (%esp)
335 ; X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
336 ; X87-NEXT:    addl $8, %esp
337 ; X87-NEXT:    retl
338   %r = fptosi double %a to i32
339   ret i32 %r
342 define i32 @x_to_u32(x86_fp80 %a) nounwind {
343 ; X86-AVX512-WIN-LABEL: x_to_u32:
344 ; X86-AVX512-WIN:       # %bb.0:
345 ; X86-AVX512-WIN-NEXT:    pushl %ebp
346 ; X86-AVX512-WIN-NEXT:    movl %esp, %ebp
347 ; X86-AVX512-WIN-NEXT:    andl $-16, %esp
348 ; X86-AVX512-WIN-NEXT:    subl $16, %esp
349 ; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)
350 ; X86-AVX512-WIN-NEXT:    fisttpll (%esp)
351 ; X86-AVX512-WIN-NEXT:    movl (%esp), %eax
352 ; X86-AVX512-WIN-NEXT:    movl %ebp, %esp
353 ; X86-AVX512-WIN-NEXT:    popl %ebp
354 ; X86-AVX512-WIN-NEXT:    retl
356 ; X86-AVX512-LIN-LABEL: x_to_u32:
357 ; X86-AVX512-LIN:       # %bb.0:
358 ; X86-AVX512-LIN-NEXT:    subl $12, %esp
359 ; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
360 ; X86-AVX512-LIN-NEXT:    fisttpll (%esp)
361 ; X86-AVX512-LIN-NEXT:    movl (%esp), %eax
362 ; X86-AVX512-LIN-NEXT:    addl $12, %esp
363 ; X86-AVX512-LIN-NEXT:    retl
365 ; X64-AVX512-WIN-LABEL: x_to_u32:
366 ; X64-AVX512-WIN:       # %bb.0:
367 ; X64-AVX512-WIN-NEXT:    pushq %rax
368 ; X64-AVX512-WIN-NEXT:    fldt (%rcx)
369 ; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)
370 ; X64-AVX512-WIN-NEXT:    movl (%rsp), %eax
371 ; X64-AVX512-WIN-NEXT:    popq %rcx
372 ; X64-AVX512-WIN-NEXT:    retq
374 ; X64-AVX512-LIN-LABEL: x_to_u32:
375 ; X64-AVX512-LIN:       # %bb.0:
376 ; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
377 ; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
378 ; X64-AVX512-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
379 ; X64-AVX512-LIN-NEXT:    retq
381 ; X86-SSE3-WIN-LABEL: x_to_u32:
382 ; X86-SSE3-WIN:       # %bb.0:
383 ; X86-SSE3-WIN-NEXT:    pushl %ebp
384 ; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
385 ; X86-SSE3-WIN-NEXT:    andl $-16, %esp
386 ; X86-SSE3-WIN-NEXT:    subl $16, %esp
387 ; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)
388 ; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
389 ; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
390 ; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
391 ; X86-SSE3-WIN-NEXT:    popl %ebp
392 ; X86-SSE3-WIN-NEXT:    retl
394 ; X86-SSE3-LIN-LABEL: x_to_u32:
395 ; X86-SSE3-LIN:       # %bb.0:
396 ; X86-SSE3-LIN-NEXT:    subl $12, %esp
397 ; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
398 ; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
399 ; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
400 ; X86-SSE3-LIN-NEXT:    addl $12, %esp
401 ; X86-SSE3-LIN-NEXT:    retl
403 ; X64-SSE3-WIN-LABEL: x_to_u32:
404 ; X64-SSE3-WIN:       # %bb.0:
405 ; X64-SSE3-WIN-NEXT:    pushq %rax
406 ; X64-SSE3-WIN-NEXT:    fldt (%rcx)
407 ; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)
408 ; X64-SSE3-WIN-NEXT:    movl (%rsp), %eax
409 ; X64-SSE3-WIN-NEXT:    popq %rcx
410 ; X64-SSE3-WIN-NEXT:    retq
412 ; X64-SSE3-LIN-LABEL: x_to_u32:
413 ; X64-SSE3-LIN:       # %bb.0:
414 ; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
415 ; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
416 ; X64-SSE3-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
417 ; X64-SSE3-LIN-NEXT:    retq
419 ; X86-SSE2-WIN-LABEL: x_to_u32:
420 ; X86-SSE2-WIN:       # %bb.0:
421 ; X86-SSE2-WIN-NEXT:    pushl %ebp
422 ; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
423 ; X86-SSE2-WIN-NEXT:    andl $-16, %esp
424 ; X86-SSE2-WIN-NEXT:    subl $32, %esp
425 ; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)
426 ; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
427 ; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
428 ; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
429 ; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
430 ; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
431 ; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
432 ; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
433 ; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
434 ; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
435 ; X86-SSE2-WIN-NEXT:    popl %ebp
436 ; X86-SSE2-WIN-NEXT:    retl
438 ; X86-SSE2-LIN-LABEL: x_to_u32:
439 ; X86-SSE2-LIN:       # %bb.0:
440 ; X86-SSE2-LIN-NEXT:    subl $20, %esp
441 ; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
442 ; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
443 ; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
444 ; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
445 ; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
446 ; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
447 ; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
448 ; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
449 ; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
450 ; X86-SSE2-LIN-NEXT:    addl $20, %esp
451 ; X86-SSE2-LIN-NEXT:    retl
453 ; X64-SSE2-WIN-LABEL: x_to_u32:
454 ; X64-SSE2-WIN:       # %bb.0:
455 ; X64-SSE2-WIN-NEXT:    subq $16, %rsp
456 ; X64-SSE2-WIN-NEXT:    fldt (%rcx)
457 ; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)
458 ; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax
459 ; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
460 ; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)
461 ; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
462 ; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)
463 ; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
464 ; X64-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
465 ; X64-SSE2-WIN-NEXT:    addq $16, %rsp
466 ; X64-SSE2-WIN-NEXT:    retq
468 ; X64-SSE2-LIN-LABEL: x_to_u32:
469 ; X64-SSE2-LIN:       # %bb.0:
470 ; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
471 ; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
472 ; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
473 ; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
474 ; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
475 ; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
476 ; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)
477 ; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
478 ; X64-SSE2-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
479 ; X64-SSE2-LIN-NEXT:    retq
481 ; X86-SSE1-WIN-LABEL: x_to_u32:
482 ; X86-SSE1-WIN:       # %bb.0:
483 ; X86-SSE1-WIN-NEXT:    pushl %ebp
484 ; X86-SSE1-WIN-NEXT:    movl %esp, %ebp
485 ; X86-SSE1-WIN-NEXT:    andl $-16, %esp
486 ; X86-SSE1-WIN-NEXT:    subl $32, %esp
487 ; X86-SSE1-WIN-NEXT:    fldt 8(%ebp)
488 ; X86-SSE1-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
489 ; X86-SSE1-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
490 ; X86-SSE1-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
491 ; X86-SSE1-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
492 ; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
493 ; X86-SSE1-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
494 ; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
495 ; X86-SSE1-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
496 ; X86-SSE1-WIN-NEXT:    movl %ebp, %esp
497 ; X86-SSE1-WIN-NEXT:    popl %ebp
498 ; X86-SSE1-WIN-NEXT:    retl
500 ; X86-SSE1-LIN-LABEL: x_to_u32:
501 ; X86-SSE1-LIN:       # %bb.0:
502 ; X86-SSE1-LIN-NEXT:    subl $20, %esp
503 ; X86-SSE1-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
504 ; X86-SSE1-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
505 ; X86-SSE1-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
506 ; X86-SSE1-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
507 ; X86-SSE1-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
508 ; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
509 ; X86-SSE1-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
510 ; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
511 ; X86-SSE1-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
512 ; X86-SSE1-LIN-NEXT:    addl $20, %esp
513 ; X86-SSE1-LIN-NEXT:    retl
515 ; X87-WIN-LABEL: x_to_u32:
516 ; X87-WIN:       # %bb.0:
517 ; X87-WIN-NEXT:    pushl %ebp
518 ; X87-WIN-NEXT:    movl %esp, %ebp
519 ; X87-WIN-NEXT:    andl $-16, %esp
520 ; X87-WIN-NEXT:    subl $32, %esp
521 ; X87-WIN-NEXT:    fldt 8(%ebp)
522 ; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
523 ; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
524 ; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
525 ; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
526 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
527 ; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
528 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
529 ; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
530 ; X87-WIN-NEXT:    movl %ebp, %esp
531 ; X87-WIN-NEXT:    popl %ebp
532 ; X87-WIN-NEXT:    retl
534 ; X87-LIN-LABEL: x_to_u32:
535 ; X87-LIN:       # %bb.0:
536 ; X87-LIN-NEXT:    subl $20, %esp
537 ; X87-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
538 ; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
539 ; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
540 ; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
541 ; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
542 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
543 ; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
544 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
545 ; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
546 ; X87-LIN-NEXT:    addl $20, %esp
547 ; X87-LIN-NEXT:    retl
548   %r = fptoui x86_fp80 %a to i32
549   ret i32 %r
552 define i32 @x_to_s32(x86_fp80 %a) nounwind {
553 ; X86-AVX512-WIN-LABEL: x_to_s32:
554 ; X86-AVX512-WIN:       # %bb.0:
555 ; X86-AVX512-WIN-NEXT:    pushl %ebp
556 ; X86-AVX512-WIN-NEXT:    movl %esp, %ebp
557 ; X86-AVX512-WIN-NEXT:    andl $-16, %esp
558 ; X86-AVX512-WIN-NEXT:    subl $16, %esp
559 ; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)
560 ; X86-AVX512-WIN-NEXT:    fisttpl {{[0-9]+}}(%esp)
561 ; X86-AVX512-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
562 ; X86-AVX512-WIN-NEXT:    movl %ebp, %esp
563 ; X86-AVX512-WIN-NEXT:    popl %ebp
564 ; X86-AVX512-WIN-NEXT:    retl
566 ; X86-AVX512-LIN-LABEL: x_to_s32:
567 ; X86-AVX512-LIN:       # %bb.0:
568 ; X86-AVX512-LIN-NEXT:    pushl %eax
569 ; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
570 ; X86-AVX512-LIN-NEXT:    fisttpl (%esp)
571 ; X86-AVX512-LIN-NEXT:    movl (%esp), %eax
572 ; X86-AVX512-LIN-NEXT:    popl %ecx
573 ; X86-AVX512-LIN-NEXT:    retl
575 ; X64-AVX512-WIN-LABEL: x_to_s32:
576 ; X64-AVX512-WIN:       # %bb.0:
577 ; X64-AVX512-WIN-NEXT:    pushq %rax
578 ; X64-AVX512-WIN-NEXT:    fldt (%rcx)
579 ; X64-AVX512-WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
580 ; X64-AVX512-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
581 ; X64-AVX512-WIN-NEXT:    popq %rcx
582 ; X64-AVX512-WIN-NEXT:    retq
584 ; X64-AVX512-LIN-LABEL: x_to_s32:
585 ; X64-AVX512-LIN:       # %bb.0:
586 ; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
587 ; X64-AVX512-LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
588 ; X64-AVX512-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
589 ; X64-AVX512-LIN-NEXT:    retq
591 ; X86-SSE3-WIN-LABEL: x_to_s32:
592 ; X86-SSE3-WIN:       # %bb.0:
593 ; X86-SSE3-WIN-NEXT:    pushl %ebp
594 ; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
595 ; X86-SSE3-WIN-NEXT:    andl $-16, %esp
596 ; X86-SSE3-WIN-NEXT:    subl $16, %esp
597 ; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)
598 ; X86-SSE3-WIN-NEXT:    fisttpl {{[0-9]+}}(%esp)
599 ; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
600 ; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
601 ; X86-SSE3-WIN-NEXT:    popl %ebp
602 ; X86-SSE3-WIN-NEXT:    retl
604 ; X86-SSE3-LIN-LABEL: x_to_s32:
605 ; X86-SSE3-LIN:       # %bb.0:
606 ; X86-SSE3-LIN-NEXT:    pushl %eax
607 ; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
608 ; X86-SSE3-LIN-NEXT:    fisttpl (%esp)
609 ; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
610 ; X86-SSE3-LIN-NEXT:    popl %ecx
611 ; X86-SSE3-LIN-NEXT:    retl
613 ; X64-SSE3-WIN-LABEL: x_to_s32:
614 ; X64-SSE3-WIN:       # %bb.0:
615 ; X64-SSE3-WIN-NEXT:    pushq %rax
616 ; X64-SSE3-WIN-NEXT:    fldt (%rcx)
617 ; X64-SSE3-WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
618 ; X64-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
619 ; X64-SSE3-WIN-NEXT:    popq %rcx
620 ; X64-SSE3-WIN-NEXT:    retq
622 ; X64-SSE3-LIN-LABEL: x_to_s32:
623 ; X64-SSE3-LIN:       # %bb.0:
624 ; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
625 ; X64-SSE3-LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
626 ; X64-SSE3-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
627 ; X64-SSE3-LIN-NEXT:    retq
629 ; X86-SSE2-WIN-LABEL: x_to_s32:
630 ; X86-SSE2-WIN:       # %bb.0:
631 ; X86-SSE2-WIN-NEXT:    pushl %ebp
632 ; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
633 ; X86-SSE2-WIN-NEXT:    andl $-16, %esp
634 ; X86-SSE2-WIN-NEXT:    subl $16, %esp
635 ; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)
636 ; X86-SSE2-WIN-NEXT:    fnstcw (%esp)
637 ; X86-SSE2-WIN-NEXT:    movzwl (%esp), %eax
638 ; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
639 ; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
640 ; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
641 ; X86-SSE2-WIN-NEXT:    fistpl {{[0-9]+}}(%esp)
642 ; X86-SSE2-WIN-NEXT:    fldcw (%esp)
643 ; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
644 ; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
645 ; X86-SSE2-WIN-NEXT:    popl %ebp
646 ; X86-SSE2-WIN-NEXT:    retl
648 ; X86-SSE2-LIN-LABEL: x_to_s32:
649 ; X86-SSE2-LIN:       # %bb.0:
650 ; X86-SSE2-LIN-NEXT:    subl $8, %esp
651 ; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
652 ; X86-SSE2-LIN-NEXT:    fnstcw (%esp)
653 ; X86-SSE2-LIN-NEXT:    movzwl (%esp), %eax
654 ; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
655 ; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
656 ; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
657 ; X86-SSE2-LIN-NEXT:    fistpl {{[0-9]+}}(%esp)
658 ; X86-SSE2-LIN-NEXT:    fldcw (%esp)
659 ; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
660 ; X86-SSE2-LIN-NEXT:    addl $8, %esp
661 ; X86-SSE2-LIN-NEXT:    retl
663 ; X64-SSE2-WIN-LABEL: x_to_s32:
664 ; X64-SSE2-WIN:       # %bb.0:
665 ; X64-SSE2-WIN-NEXT:    pushq %rax
666 ; X64-SSE2-WIN-NEXT:    fldt (%rcx)
667 ; X64-SSE2-WIN-NEXT:    fnstcw (%rsp)
668 ; X64-SSE2-WIN-NEXT:    movzwl (%rsp), %eax
669 ; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
670 ; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)
671 ; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
672 ; X64-SSE2-WIN-NEXT:    fistpl {{[0-9]+}}(%rsp)
673 ; X64-SSE2-WIN-NEXT:    fldcw (%rsp)
674 ; X64-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
675 ; X64-SSE2-WIN-NEXT:    popq %rcx
676 ; X64-SSE2-WIN-NEXT:    retq
678 ; X64-SSE2-LIN-LABEL: x_to_s32:
679 ; X64-SSE2-LIN:       # %bb.0:
680 ; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
681 ; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
682 ; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
683 ; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
684 ; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
685 ; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
686 ; X64-SSE2-LIN-NEXT:    fistpl -{{[0-9]+}}(%rsp)
687 ; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
688 ; X64-SSE2-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
689 ; X64-SSE2-LIN-NEXT:    retq
691 ; X86-SSE1-WIN-LABEL: x_to_s32:
692 ; X86-SSE1-WIN:       # %bb.0:
693 ; X86-SSE1-WIN-NEXT:    pushl %ebp
694 ; X86-SSE1-WIN-NEXT:    movl %esp, %ebp
695 ; X86-SSE1-WIN-NEXT:    andl $-16, %esp
696 ; X86-SSE1-WIN-NEXT:    subl $16, %esp
697 ; X86-SSE1-WIN-NEXT:    fldt 8(%ebp)
698 ; X86-SSE1-WIN-NEXT:    fnstcw (%esp)
699 ; X86-SSE1-WIN-NEXT:    movzwl (%esp), %eax
700 ; X86-SSE1-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
701 ; X86-SSE1-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
702 ; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
703 ; X86-SSE1-WIN-NEXT:    fistpl {{[0-9]+}}(%esp)
704 ; X86-SSE1-WIN-NEXT:    fldcw (%esp)
705 ; X86-SSE1-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
706 ; X86-SSE1-WIN-NEXT:    movl %ebp, %esp
707 ; X86-SSE1-WIN-NEXT:    popl %ebp
708 ; X86-SSE1-WIN-NEXT:    retl
710 ; X86-SSE1-LIN-LABEL: x_to_s32:
711 ; X86-SSE1-LIN:       # %bb.0:
712 ; X86-SSE1-LIN-NEXT:    subl $8, %esp
713 ; X86-SSE1-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
714 ; X86-SSE1-LIN-NEXT:    fnstcw (%esp)
715 ; X86-SSE1-LIN-NEXT:    movzwl (%esp), %eax
716 ; X86-SSE1-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
717 ; X86-SSE1-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
718 ; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
719 ; X86-SSE1-LIN-NEXT:    fistpl {{[0-9]+}}(%esp)
720 ; X86-SSE1-LIN-NEXT:    fldcw (%esp)
721 ; X86-SSE1-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
722 ; X86-SSE1-LIN-NEXT:    addl $8, %esp
723 ; X86-SSE1-LIN-NEXT:    retl
725 ; X87-WIN-LABEL: x_to_s32:
726 ; X87-WIN:       # %bb.0:
727 ; X87-WIN-NEXT:    pushl %ebp
728 ; X87-WIN-NEXT:    movl %esp, %ebp
729 ; X87-WIN-NEXT:    andl $-16, %esp
730 ; X87-WIN-NEXT:    subl $16, %esp
731 ; X87-WIN-NEXT:    fldt 8(%ebp)
732 ; X87-WIN-NEXT:    fnstcw (%esp)
733 ; X87-WIN-NEXT:    movzwl (%esp), %eax
734 ; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
735 ; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
736 ; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
737 ; X87-WIN-NEXT:    fistpl {{[0-9]+}}(%esp)
738 ; X87-WIN-NEXT:    fldcw (%esp)
739 ; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
740 ; X87-WIN-NEXT:    movl %ebp, %esp
741 ; X87-WIN-NEXT:    popl %ebp
742 ; X87-WIN-NEXT:    retl
744 ; X87-LIN-LABEL: x_to_s32:
745 ; X87-LIN:       # %bb.0:
746 ; X87-LIN-NEXT:    subl $8, %esp
747 ; X87-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
748 ; X87-LIN-NEXT:    fnstcw (%esp)
749 ; X87-LIN-NEXT:    movzwl (%esp), %eax
750 ; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
751 ; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
752 ; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
753 ; X87-LIN-NEXT:    fistpl {{[0-9]+}}(%esp)
754 ; X87-LIN-NEXT:    fldcw (%esp)
755 ; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
756 ; X87-LIN-NEXT:    addl $8, %esp
757 ; X87-LIN-NEXT:    retl
758   %r = fptosi x86_fp80 %a to i32
759   ret i32 %r
762 define i32 @t_to_u32(fp128 %a) nounwind {
763 ; X86-AVX512-WIN-LABEL: t_to_u32:
764 ; X86-AVX512-WIN:       # %bb.0:
765 ; X86-AVX512-WIN-NEXT:    subl $16, %esp
766 ; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
767 ; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
768 ; X86-AVX512-WIN-NEXT:    calll ___fixunstfsi
769 ; X86-AVX512-WIN-NEXT:    addl $16, %esp
770 ; X86-AVX512-WIN-NEXT:    retl
772 ; X86-AVX512-LIN-LABEL: t_to_u32:
773 ; X86-AVX512-LIN:       # %bb.0:
774 ; X86-AVX512-LIN-NEXT:    subl $28, %esp
775 ; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
776 ; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
777 ; X86-AVX512-LIN-NEXT:    calll __fixunstfsi
778 ; X86-AVX512-LIN-NEXT:    addl $28, %esp
779 ; X86-AVX512-LIN-NEXT:    retl
781 ; X64-AVX512-WIN-LABEL: t_to_u32:
782 ; X64-AVX512-WIN:       # %bb.0:
783 ; X64-AVX512-WIN-NEXT:    subq $40, %rsp
784 ; X64-AVX512-WIN-NEXT:    callq __fixunstfsi
785 ; X64-AVX512-WIN-NEXT:    addq $40, %rsp
786 ; X64-AVX512-WIN-NEXT:    retq
788 ; X64-AVX512-LIN-LABEL: t_to_u32:
789 ; X64-AVX512-LIN:       # %bb.0:
790 ; X64-AVX512-LIN-NEXT:    pushq %rax
791 ; X64-AVX512-LIN-NEXT:    callq __fixunstfsi@PLT
792 ; X64-AVX512-LIN-NEXT:    popq %rcx
793 ; X64-AVX512-LIN-NEXT:    retq
795 ; X86-SSE-WIN-LABEL: t_to_u32:
796 ; X86-SSE-WIN:       # %bb.0:
797 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
798 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
799 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
800 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
801 ; X86-SSE-WIN-NEXT:    calll ___fixunstfsi
802 ; X86-SSE-WIN-NEXT:    addl $16, %esp
803 ; X86-SSE-WIN-NEXT:    retl
805 ; X86-SSE-LIN-LABEL: t_to_u32:
806 ; X86-SSE-LIN:       # %bb.0:
807 ; X86-SSE-LIN-NEXT:    subl $12, %esp
808 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
809 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
810 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
811 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
812 ; X86-SSE-LIN-NEXT:    calll __fixunstfsi
813 ; X86-SSE-LIN-NEXT:    addl $28, %esp
814 ; X86-SSE-LIN-NEXT:    retl
816 ; X64-SSE-WIN-LABEL: t_to_u32:
817 ; X64-SSE-WIN:       # %bb.0:
818 ; X64-SSE-WIN-NEXT:    subq $40, %rsp
819 ; X64-SSE-WIN-NEXT:    callq __fixunstfsi
820 ; X64-SSE-WIN-NEXT:    addq $40, %rsp
821 ; X64-SSE-WIN-NEXT:    retq
823 ; X64-SSE-LIN-LABEL: t_to_u32:
824 ; X64-SSE-LIN:       # %bb.0:
825 ; X64-SSE-LIN-NEXT:    pushq %rax
826 ; X64-SSE-LIN-NEXT:    callq __fixunstfsi@PLT
827 ; X64-SSE-LIN-NEXT:    popq %rcx
828 ; X64-SSE-LIN-NEXT:    retq
830 ; X87-WIN-LABEL: t_to_u32:
831 ; X87-WIN:       # %bb.0:
832 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
833 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
834 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
835 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
836 ; X87-WIN-NEXT:    calll ___fixunstfsi
837 ; X87-WIN-NEXT:    addl $16, %esp
838 ; X87-WIN-NEXT:    retl
840 ; X87-LIN-LABEL: t_to_u32:
841 ; X87-LIN:       # %bb.0:
842 ; X87-LIN-NEXT:    subl $12, %esp
843 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
844 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
845 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
846 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
847 ; X87-LIN-NEXT:    calll __fixunstfsi
848 ; X87-LIN-NEXT:    addl $28, %esp
849 ; X87-LIN-NEXT:    retl
850   %r = fptoui fp128 %a to i32
851   ret i32 %r
854 define i32 @t_to_s32(fp128 %a) nounwind {
855 ; X86-AVX512-WIN-LABEL: t_to_s32:
856 ; X86-AVX512-WIN:       # %bb.0:
857 ; X86-AVX512-WIN-NEXT:    subl $16, %esp
858 ; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
859 ; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
860 ; X86-AVX512-WIN-NEXT:    calll ___fixtfsi
861 ; X86-AVX512-WIN-NEXT:    addl $16, %esp
862 ; X86-AVX512-WIN-NEXT:    retl
864 ; X86-AVX512-LIN-LABEL: t_to_s32:
865 ; X86-AVX512-LIN:       # %bb.0:
866 ; X86-AVX512-LIN-NEXT:    subl $28, %esp
867 ; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
868 ; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
869 ; X86-AVX512-LIN-NEXT:    calll __fixtfsi
870 ; X86-AVX512-LIN-NEXT:    addl $28, %esp
871 ; X86-AVX512-LIN-NEXT:    retl
873 ; X64-AVX512-WIN-LABEL: t_to_s32:
874 ; X64-AVX512-WIN:       # %bb.0:
875 ; X64-AVX512-WIN-NEXT:    subq $40, %rsp
876 ; X64-AVX512-WIN-NEXT:    callq __fixtfsi
877 ; X64-AVX512-WIN-NEXT:    addq $40, %rsp
878 ; X64-AVX512-WIN-NEXT:    retq
880 ; X64-AVX512-LIN-LABEL: t_to_s32:
881 ; X64-AVX512-LIN:       # %bb.0:
882 ; X64-AVX512-LIN-NEXT:    pushq %rax
883 ; X64-AVX512-LIN-NEXT:    callq __fixtfsi@PLT
884 ; X64-AVX512-LIN-NEXT:    popq %rcx
885 ; X64-AVX512-LIN-NEXT:    retq
887 ; X86-SSE-WIN-LABEL: t_to_s32:
888 ; X86-SSE-WIN:       # %bb.0:
889 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
890 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
891 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
892 ; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
893 ; X86-SSE-WIN-NEXT:    calll ___fixtfsi
894 ; X86-SSE-WIN-NEXT:    addl $16, %esp
895 ; X86-SSE-WIN-NEXT:    retl
897 ; X86-SSE-LIN-LABEL: t_to_s32:
898 ; X86-SSE-LIN:       # %bb.0:
899 ; X86-SSE-LIN-NEXT:    subl $12, %esp
900 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
901 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
902 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
903 ; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
904 ; X86-SSE-LIN-NEXT:    calll __fixtfsi
905 ; X86-SSE-LIN-NEXT:    addl $28, %esp
906 ; X86-SSE-LIN-NEXT:    retl
908 ; X64-SSE-WIN-LABEL: t_to_s32:
909 ; X64-SSE-WIN:       # %bb.0:
910 ; X64-SSE-WIN-NEXT:    subq $40, %rsp
911 ; X64-SSE-WIN-NEXT:    callq __fixtfsi
912 ; X64-SSE-WIN-NEXT:    addq $40, %rsp
913 ; X64-SSE-WIN-NEXT:    retq
915 ; X64-SSE-LIN-LABEL: t_to_s32:
916 ; X64-SSE-LIN:       # %bb.0:
917 ; X64-SSE-LIN-NEXT:    pushq %rax
918 ; X64-SSE-LIN-NEXT:    callq __fixtfsi@PLT
919 ; X64-SSE-LIN-NEXT:    popq %rcx
920 ; X64-SSE-LIN-NEXT:    retq
922 ; X87-WIN-LABEL: t_to_s32:
923 ; X87-WIN:       # %bb.0:
924 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
925 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
926 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
927 ; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
928 ; X87-WIN-NEXT:    calll ___fixtfsi
929 ; X87-WIN-NEXT:    addl $16, %esp
930 ; X87-WIN-NEXT:    retl
932 ; X87-LIN-LABEL: t_to_s32:
933 ; X87-LIN:       # %bb.0:
934 ; X87-LIN-NEXT:    subl $12, %esp
935 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
936 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
937 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
938 ; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
939 ; X87-LIN-NEXT:    calll __fixtfsi
940 ; X87-LIN-NEXT:    addl $28, %esp
941 ; X87-LIN-NEXT:    retl
942   %r = fptosi fp128 %a to i32
943   ret i32 %r