[RISCV] Add shrinkwrap test cases showing gaps in current impl
[llvm-project.git] / llvm / test / CodeGen / X86 / fptosi-sat-scalar.ll
blob04fce7badb95146ca644a9345e813af28c917223
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=i686-linux | FileCheck %s --check-prefix=X86-X87
3 ; RUN: llc < %s -mtriple=i686-linux -mattr=+sse2 | FileCheck %s --check-prefix=X86-SSE
4 ; RUN: llc < %s -mtriple=x86_64-linux | FileCheck %s --check-prefix=X64
7 ; 32-bit float to signed integer
10 declare   i1 @llvm.fptosi.sat.i1.f32  (float)
11 declare   i8 @llvm.fptosi.sat.i8.f32  (float)
12 declare  i13 @llvm.fptosi.sat.i13.f32 (float)
13 declare  i16 @llvm.fptosi.sat.i16.f32 (float)
14 declare  i19 @llvm.fptosi.sat.i19.f32 (float)
15 declare  i32 @llvm.fptosi.sat.i32.f32 (float)
16 declare  i50 @llvm.fptosi.sat.i50.f32 (float)
17 declare  i64 @llvm.fptosi.sat.i64.f32 (float)
18 declare i100 @llvm.fptosi.sat.i100.f32(float)
19 declare i128 @llvm.fptosi.sat.i128.f32(float)
21 define i1 @test_signed_i1_f32(float %f) nounwind {
22 ; X86-X87-LABEL: test_signed_i1_f32:
23 ; X86-X87:       # %bb.0:
24 ; X86-X87-NEXT:    pushl %ebx
25 ; X86-X87-NEXT:    subl $8, %esp
26 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
27 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
28 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
29 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
30 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
31 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
32 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
33 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
34 ; X86-X87-NEXT:    fld1
35 ; X86-X87-NEXT:    fchs
36 ; X86-X87-NEXT:    fxch %st(1)
37 ; X86-X87-NEXT:    fucom %st(1)
38 ; X86-X87-NEXT:    fstp %st(1)
39 ; X86-X87-NEXT:    fnstsw %ax
40 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
41 ; X86-X87-NEXT:    sahf
42 ; X86-X87-NEXT:    movb $-1, %dl
43 ; X86-X87-NEXT:    jb .LBB0_2
44 ; X86-X87-NEXT:  # %bb.1:
45 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
46 ; X86-X87-NEXT:  .LBB0_2:
47 ; X86-X87-NEXT:    fldz
48 ; X86-X87-NEXT:    fxch %st(1)
49 ; X86-X87-NEXT:    fucom %st(1)
50 ; X86-X87-NEXT:    fstp %st(1)
51 ; X86-X87-NEXT:    fnstsw %ax
52 ; X86-X87-NEXT:    xorl %ecx, %ecx
53 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
54 ; X86-X87-NEXT:    sahf
55 ; X86-X87-NEXT:    movl $0, %ebx
56 ; X86-X87-NEXT:    ja .LBB0_4
57 ; X86-X87-NEXT:  # %bb.3:
58 ; X86-X87-NEXT:    movl %edx, %ebx
59 ; X86-X87-NEXT:  .LBB0_4:
60 ; X86-X87-NEXT:    fucomp %st(0)
61 ; X86-X87-NEXT:    fnstsw %ax
62 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
63 ; X86-X87-NEXT:    sahf
64 ; X86-X87-NEXT:    jp .LBB0_6
65 ; X86-X87-NEXT:  # %bb.5:
66 ; X86-X87-NEXT:    movl %ebx, %ecx
67 ; X86-X87-NEXT:  .LBB0_6:
68 ; X86-X87-NEXT:    movl %ecx, %eax
69 ; X86-X87-NEXT:    addl $8, %esp
70 ; X86-X87-NEXT:    popl %ebx
71 ; X86-X87-NEXT:    retl
73 ; X86-SSE-LABEL: test_signed_i1_f32:
74 ; X86-SSE:       # %bb.0:
75 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-1.0E+0,0.0E+0,0.0E+0,0.0E+0]
76 ; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
77 ; X86-SSE-NEXT:    xorps %xmm1, %xmm1
78 ; X86-SSE-NEXT:    minss %xmm0, %xmm1
79 ; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
80 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
81 ; X86-SSE-NEXT:    retl
83 ; X64-LABEL: test_signed_i1_f32:
84 ; X64:       # %bb.0:
85 ; X64-NEXT:    movss {{.*#+}} xmm1 = [-1.0E+0,0.0E+0,0.0E+0,0.0E+0]
86 ; X64-NEXT:    maxss %xmm0, %xmm1
87 ; X64-NEXT:    xorps %xmm0, %xmm0
88 ; X64-NEXT:    minss %xmm1, %xmm0
89 ; X64-NEXT:    cvttss2si %xmm0, %eax
90 ; X64-NEXT:    # kill: def $al killed $al killed $eax
91 ; X64-NEXT:    retq
92     %x = call i1 @llvm.fptosi.sat.i1.f32(float %f)
93     ret i1 %x
96 define i8 @test_signed_i8_f32(float %f) nounwind {
97 ; X86-X87-LABEL: test_signed_i8_f32:
98 ; X86-X87:       # %bb.0:
99 ; X86-X87-NEXT:    subl $8, %esp
100 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
101 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
102 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
103 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
104 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
105 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
106 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
107 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
108 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
109 ; X86-X87-NEXT:    fxch %st(1)
110 ; X86-X87-NEXT:    fucom %st(1)
111 ; X86-X87-NEXT:    fstp %st(1)
112 ; X86-X87-NEXT:    fnstsw %ax
113 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
114 ; X86-X87-NEXT:    sahf
115 ; X86-X87-NEXT:    movb $-128, %dl
116 ; X86-X87-NEXT:    jb .LBB1_2
117 ; X86-X87-NEXT:  # %bb.1:
118 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
119 ; X86-X87-NEXT:  .LBB1_2:
120 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
121 ; X86-X87-NEXT:    fxch %st(1)
122 ; X86-X87-NEXT:    fucom %st(1)
123 ; X86-X87-NEXT:    fstp %st(1)
124 ; X86-X87-NEXT:    fnstsw %ax
125 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
126 ; X86-X87-NEXT:    sahf
127 ; X86-X87-NEXT:    movb $127, %cl
128 ; X86-X87-NEXT:    ja .LBB1_4
129 ; X86-X87-NEXT:  # %bb.3:
130 ; X86-X87-NEXT:    movl %edx, %ecx
131 ; X86-X87-NEXT:  .LBB1_4:
132 ; X86-X87-NEXT:    fucomp %st(0)
133 ; X86-X87-NEXT:    fnstsw %ax
134 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
135 ; X86-X87-NEXT:    sahf
136 ; X86-X87-NEXT:    jnp .LBB1_6
137 ; X86-X87-NEXT:  # %bb.5:
138 ; X86-X87-NEXT:    xorl %ecx, %ecx
139 ; X86-X87-NEXT:  .LBB1_6:
140 ; X86-X87-NEXT:    movl %ecx, %eax
141 ; X86-X87-NEXT:    addl $8, %esp
142 ; X86-X87-NEXT:    retl
144 ; X86-SSE-LABEL: test_signed_i8_f32:
145 ; X86-SSE:       # %bb.0:
146 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-1.28E+2,0.0E+0,0.0E+0,0.0E+0]
147 ; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
148 ; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [1.27E+2,0.0E+0,0.0E+0,0.0E+0]
149 ; X86-SSE-NEXT:    minss %xmm0, %xmm1
150 ; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
151 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
152 ; X86-SSE-NEXT:    retl
154 ; X64-LABEL: test_signed_i8_f32:
155 ; X64:       # %bb.0:
156 ; X64-NEXT:    movss {{.*#+}} xmm1 = [-1.28E+2,0.0E+0,0.0E+0,0.0E+0]
157 ; X64-NEXT:    maxss %xmm0, %xmm1
158 ; X64-NEXT:    movss {{.*#+}} xmm0 = [1.27E+2,0.0E+0,0.0E+0,0.0E+0]
159 ; X64-NEXT:    minss %xmm1, %xmm0
160 ; X64-NEXT:    cvttss2si %xmm0, %eax
161 ; X64-NEXT:    # kill: def $al killed $al killed $eax
162 ; X64-NEXT:    retq
163     %x = call i8 @llvm.fptosi.sat.i8.f32(float %f)
164     ret i8 %x
167 define i13 @test_signed_i13_f32(float %f) nounwind {
168 ; X86-X87-LABEL: test_signed_i13_f32:
169 ; X86-X87:       # %bb.0:
170 ; X86-X87-NEXT:    subl $8, %esp
171 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
172 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
173 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
174 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
175 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
176 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
177 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
178 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
179 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
180 ; X86-X87-NEXT:    fxch %st(1)
181 ; X86-X87-NEXT:    fucom %st(1)
182 ; X86-X87-NEXT:    fstp %st(1)
183 ; X86-X87-NEXT:    fnstsw %ax
184 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
185 ; X86-X87-NEXT:    sahf
186 ; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000
187 ; X86-X87-NEXT:    jb .LBB2_2
188 ; X86-X87-NEXT:  # %bb.1:
189 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
190 ; X86-X87-NEXT:  .LBB2_2:
191 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
192 ; X86-X87-NEXT:    fxch %st(1)
193 ; X86-X87-NEXT:    fucom %st(1)
194 ; X86-X87-NEXT:    fstp %st(1)
195 ; X86-X87-NEXT:    fnstsw %ax
196 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
197 ; X86-X87-NEXT:    sahf
198 ; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF
199 ; X86-X87-NEXT:    ja .LBB2_4
200 ; X86-X87-NEXT:  # %bb.3:
201 ; X86-X87-NEXT:    movl %ecx, %edx
202 ; X86-X87-NEXT:  .LBB2_4:
203 ; X86-X87-NEXT:    fucomp %st(0)
204 ; X86-X87-NEXT:    fnstsw %ax
205 ; X86-X87-NEXT:    xorl %ecx, %ecx
206 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
207 ; X86-X87-NEXT:    sahf
208 ; X86-X87-NEXT:    jp .LBB2_6
209 ; X86-X87-NEXT:  # %bb.5:
210 ; X86-X87-NEXT:    movl %edx, %ecx
211 ; X86-X87-NEXT:  .LBB2_6:
212 ; X86-X87-NEXT:    movl %ecx, %eax
213 ; X86-X87-NEXT:    addl $8, %esp
214 ; X86-X87-NEXT:    retl
216 ; X86-SSE-LABEL: test_signed_i13_f32:
217 ; X86-SSE:       # %bb.0:
218 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-4.096E+3,0.0E+0,0.0E+0,0.0E+0]
219 ; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
220 ; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [4.095E+3,0.0E+0,0.0E+0,0.0E+0]
221 ; X86-SSE-NEXT:    minss %xmm0, %xmm1
222 ; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
223 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
224 ; X86-SSE-NEXT:    retl
226 ; X64-LABEL: test_signed_i13_f32:
227 ; X64:       # %bb.0:
228 ; X64-NEXT:    movss {{.*#+}} xmm1 = [-4.096E+3,0.0E+0,0.0E+0,0.0E+0]
229 ; X64-NEXT:    maxss %xmm0, %xmm1
230 ; X64-NEXT:    movss {{.*#+}} xmm0 = [4.095E+3,0.0E+0,0.0E+0,0.0E+0]
231 ; X64-NEXT:    minss %xmm1, %xmm0
232 ; X64-NEXT:    cvttss2si %xmm0, %eax
233 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
234 ; X64-NEXT:    retq
235     %x = call i13 @llvm.fptosi.sat.i13.f32(float %f)
236     ret i13 %x
239 define i16 @test_signed_i16_f32(float %f) nounwind {
240 ; X86-X87-LABEL: test_signed_i16_f32:
241 ; X86-X87:       # %bb.0:
242 ; X86-X87-NEXT:    subl $8, %esp
243 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
244 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
245 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
246 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
247 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
248 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
249 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
250 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
251 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
252 ; X86-X87-NEXT:    fxch %st(1)
253 ; X86-X87-NEXT:    fucom %st(1)
254 ; X86-X87-NEXT:    fstp %st(1)
255 ; X86-X87-NEXT:    fnstsw %ax
256 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
257 ; X86-X87-NEXT:    sahf
258 ; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000
259 ; X86-X87-NEXT:    jb .LBB3_2
260 ; X86-X87-NEXT:  # %bb.1:
261 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
262 ; X86-X87-NEXT:  .LBB3_2:
263 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
264 ; X86-X87-NEXT:    fxch %st(1)
265 ; X86-X87-NEXT:    fucom %st(1)
266 ; X86-X87-NEXT:    fstp %st(1)
267 ; X86-X87-NEXT:    fnstsw %ax
268 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
269 ; X86-X87-NEXT:    sahf
270 ; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF
271 ; X86-X87-NEXT:    ja .LBB3_4
272 ; X86-X87-NEXT:  # %bb.3:
273 ; X86-X87-NEXT:    movl %ecx, %edx
274 ; X86-X87-NEXT:  .LBB3_4:
275 ; X86-X87-NEXT:    fucomp %st(0)
276 ; X86-X87-NEXT:    fnstsw %ax
277 ; X86-X87-NEXT:    xorl %ecx, %ecx
278 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
279 ; X86-X87-NEXT:    sahf
280 ; X86-X87-NEXT:    jp .LBB3_6
281 ; X86-X87-NEXT:  # %bb.5:
282 ; X86-X87-NEXT:    movl %edx, %ecx
283 ; X86-X87-NEXT:  .LBB3_6:
284 ; X86-X87-NEXT:    movl %ecx, %eax
285 ; X86-X87-NEXT:    addl $8, %esp
286 ; X86-X87-NEXT:    retl
288 ; X86-SSE-LABEL: test_signed_i16_f32:
289 ; X86-SSE:       # %bb.0:
290 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = [-3.2768E+4,0.0E+0,0.0E+0,0.0E+0]
291 ; X86-SSE-NEXT:    maxss {{[0-9]+}}(%esp), %xmm0
292 ; X86-SSE-NEXT:    movss {{.*#+}} xmm1 = [3.2767E+4,0.0E+0,0.0E+0,0.0E+0]
293 ; X86-SSE-NEXT:    minss %xmm0, %xmm1
294 ; X86-SSE-NEXT:    cvttss2si %xmm1, %eax
295 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
296 ; X86-SSE-NEXT:    retl
298 ; X64-LABEL: test_signed_i16_f32:
299 ; X64:       # %bb.0:
300 ; X64-NEXT:    movss {{.*#+}} xmm1 = [-3.2768E+4,0.0E+0,0.0E+0,0.0E+0]
301 ; X64-NEXT:    maxss %xmm0, %xmm1
302 ; X64-NEXT:    movss {{.*#+}} xmm0 = [3.2767E+4,0.0E+0,0.0E+0,0.0E+0]
303 ; X64-NEXT:    minss %xmm1, %xmm0
304 ; X64-NEXT:    cvttss2si %xmm0, %eax
305 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
306 ; X64-NEXT:    retq
307     %x = call i16 @llvm.fptosi.sat.i16.f32(float %f)
308     ret i16 %x
311 define i19 @test_signed_i19_f32(float %f) nounwind {
312 ; X86-X87-LABEL: test_signed_i19_f32:
313 ; X86-X87:       # %bb.0:
314 ; X86-X87-NEXT:    subl $8, %esp
315 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
316 ; X86-X87-NEXT:    fnstcw (%esp)
317 ; X86-X87-NEXT:    movzwl (%esp), %eax
318 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
319 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
320 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
321 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
322 ; X86-X87-NEXT:    fldcw (%esp)
323 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
324 ; X86-X87-NEXT:    fxch %st(1)
325 ; X86-X87-NEXT:    fucom %st(1)
326 ; X86-X87-NEXT:    fstp %st(1)
327 ; X86-X87-NEXT:    fnstsw %ax
328 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
329 ; X86-X87-NEXT:    sahf
330 ; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
331 ; X86-X87-NEXT:    jb .LBB4_2
332 ; X86-X87-NEXT:  # %bb.1:
333 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
334 ; X86-X87-NEXT:  .LBB4_2:
335 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
336 ; X86-X87-NEXT:    fxch %st(1)
337 ; X86-X87-NEXT:    fucom %st(1)
338 ; X86-X87-NEXT:    fstp %st(1)
339 ; X86-X87-NEXT:    fnstsw %ax
340 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
341 ; X86-X87-NEXT:    sahf
342 ; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
343 ; X86-X87-NEXT:    ja .LBB4_4
344 ; X86-X87-NEXT:  # %bb.3:
345 ; X86-X87-NEXT:    movl %ecx, %edx
346 ; X86-X87-NEXT:  .LBB4_4:
347 ; X86-X87-NEXT:    fucomp %st(0)
348 ; X86-X87-NEXT:    fnstsw %ax
349 ; X86-X87-NEXT:    xorl %ecx, %ecx
350 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
351 ; X86-X87-NEXT:    sahf
352 ; X86-X87-NEXT:    jp .LBB4_6
353 ; X86-X87-NEXT:  # %bb.5:
354 ; X86-X87-NEXT:    movl %edx, %ecx
355 ; X86-X87-NEXT:  .LBB4_6:
356 ; X86-X87-NEXT:    movl %ecx, %eax
357 ; X86-X87-NEXT:    addl $8, %esp
358 ; X86-X87-NEXT:    retl
360 ; X86-SSE-LABEL: test_signed_i19_f32:
361 ; X86-SSE:       # %bb.0:
362 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
363 ; X86-SSE-NEXT:    xorl %eax, %eax
364 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
365 ; X86-SSE-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
366 ; X86-SSE-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
367 ; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
368 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
369 ; X86-SSE-NEXT:    retl
371 ; X64-LABEL: test_signed_i19_f32:
372 ; X64:       # %bb.0:
373 ; X64-NEXT:    xorl %eax, %eax
374 ; X64-NEXT:    ucomiss %xmm0, %xmm0
375 ; X64-NEXT:    maxss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
376 ; X64-NEXT:    minss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
377 ; X64-NEXT:    cvttss2si %xmm0, %ecx
378 ; X64-NEXT:    cmovnpl %ecx, %eax
379 ; X64-NEXT:    retq
380     %x = call i19 @llvm.fptosi.sat.i19.f32(float %f)
381     ret i19 %x
384 define i32 @test_signed_i32_f32(float %f) nounwind {
385 ; X86-X87-LABEL: test_signed_i32_f32:
386 ; X86-X87:       # %bb.0:
387 ; X86-X87-NEXT:    subl $8, %esp
388 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
389 ; X86-X87-NEXT:    fnstcw (%esp)
390 ; X86-X87-NEXT:    movzwl (%esp), %eax
391 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
392 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
393 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
394 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
395 ; X86-X87-NEXT:    fldcw (%esp)
396 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
397 ; X86-X87-NEXT:    fxch %st(1)
398 ; X86-X87-NEXT:    fucom %st(1)
399 ; X86-X87-NEXT:    fstp %st(1)
400 ; X86-X87-NEXT:    fnstsw %ax
401 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
402 ; X86-X87-NEXT:    sahf
403 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
404 ; X86-X87-NEXT:    jb .LBB5_2
405 ; X86-X87-NEXT:  # %bb.1:
406 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
407 ; X86-X87-NEXT:  .LBB5_2:
408 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
409 ; X86-X87-NEXT:    fxch %st(1)
410 ; X86-X87-NEXT:    fucom %st(1)
411 ; X86-X87-NEXT:    fstp %st(1)
412 ; X86-X87-NEXT:    fnstsw %ax
413 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
414 ; X86-X87-NEXT:    sahf
415 ; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
416 ; X86-X87-NEXT:    ja .LBB5_4
417 ; X86-X87-NEXT:  # %bb.3:
418 ; X86-X87-NEXT:    movl %ecx, %edx
419 ; X86-X87-NEXT:  .LBB5_4:
420 ; X86-X87-NEXT:    fucomp %st(0)
421 ; X86-X87-NEXT:    fnstsw %ax
422 ; X86-X87-NEXT:    xorl %ecx, %ecx
423 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
424 ; X86-X87-NEXT:    sahf
425 ; X86-X87-NEXT:    jp .LBB5_6
426 ; X86-X87-NEXT:  # %bb.5:
427 ; X86-X87-NEXT:    movl %edx, %ecx
428 ; X86-X87-NEXT:  .LBB5_6:
429 ; X86-X87-NEXT:    movl %ecx, %eax
430 ; X86-X87-NEXT:    addl $8, %esp
431 ; X86-X87-NEXT:    retl
433 ; X86-SSE-LABEL: test_signed_i32_f32:
434 ; X86-SSE:       # %bb.0:
435 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
436 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
437 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
438 ; X86-SSE-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF
439 ; X86-SSE-NEXT:    cmovbel %eax, %ecx
440 ; X86-SSE-NEXT:    xorl %eax, %eax
441 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
442 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
443 ; X86-SSE-NEXT:    retl
445 ; X64-LABEL: test_signed_i32_f32:
446 ; X64:       # %bb.0:
447 ; X64-NEXT:    cvttss2si %xmm0, %eax
448 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
449 ; X64-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF
450 ; X64-NEXT:    cmovbel %eax, %ecx
451 ; X64-NEXT:    xorl %eax, %eax
452 ; X64-NEXT:    ucomiss %xmm0, %xmm0
453 ; X64-NEXT:    cmovnpl %ecx, %eax
454 ; X64-NEXT:    retq
455     %x = call i32 @llvm.fptosi.sat.i32.f32(float %f)
456     ret i32 %x
459 define i50 @test_signed_i50_f32(float %f) nounwind {
460 ; X86-X87-LABEL: test_signed_i50_f32:
461 ; X86-X87:       # %bb.0:
462 ; X86-X87-NEXT:    pushl %edi
463 ; X86-X87-NEXT:    pushl %esi
464 ; X86-X87-NEXT:    subl $20, %esp
465 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
466 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
467 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
468 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
469 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
470 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
471 ; X86-X87-NEXT:    fld %st(0)
472 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
473 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
474 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
475 ; X86-X87-NEXT:    fxch %st(1)
476 ; X86-X87-NEXT:    fucom %st(1)
477 ; X86-X87-NEXT:    fstp %st(1)
478 ; X86-X87-NEXT:    fnstsw %ax
479 ; X86-X87-NEXT:    xorl %ecx, %ecx
480 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
481 ; X86-X87-NEXT:    sahf
482 ; X86-X87-NEXT:    movl $0, %edx
483 ; X86-X87-NEXT:    jb .LBB6_2
484 ; X86-X87-NEXT:  # %bb.1:
485 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
486 ; X86-X87-NEXT:  .LBB6_2:
487 ; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
488 ; X86-X87-NEXT:    jb .LBB6_4
489 ; X86-X87-NEXT:  # %bb.3:
490 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
491 ; X86-X87-NEXT:  .LBB6_4:
492 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
493 ; X86-X87-NEXT:    fxch %st(1)
494 ; X86-X87-NEXT:    fucom %st(1)
495 ; X86-X87-NEXT:    fstp %st(1)
496 ; X86-X87-NEXT:    fnstsw %ax
497 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
498 ; X86-X87-NEXT:    sahf
499 ; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF
500 ; X86-X87-NEXT:    ja .LBB6_6
501 ; X86-X87-NEXT:  # %bb.5:
502 ; X86-X87-NEXT:    movl %edi, %esi
503 ; X86-X87-NEXT:  .LBB6_6:
504 ; X86-X87-NEXT:    movl $-1, %edi
505 ; X86-X87-NEXT:    ja .LBB6_8
506 ; X86-X87-NEXT:  # %bb.7:
507 ; X86-X87-NEXT:    movl %edx, %edi
508 ; X86-X87-NEXT:  .LBB6_8:
509 ; X86-X87-NEXT:    fucomp %st(0)
510 ; X86-X87-NEXT:    fnstsw %ax
511 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
512 ; X86-X87-NEXT:    sahf
513 ; X86-X87-NEXT:    movl $0, %edx
514 ; X86-X87-NEXT:    jp .LBB6_10
515 ; X86-X87-NEXT:  # %bb.9:
516 ; X86-X87-NEXT:    movl %edi, %ecx
517 ; X86-X87-NEXT:    movl %esi, %edx
518 ; X86-X87-NEXT:  .LBB6_10:
519 ; X86-X87-NEXT:    movl %ecx, %eax
520 ; X86-X87-NEXT:    addl $20, %esp
521 ; X86-X87-NEXT:    popl %esi
522 ; X86-X87-NEXT:    popl %edi
523 ; X86-X87-NEXT:    retl
525 ; X86-SSE-LABEL: test_signed_i50_f32:
526 ; X86-SSE:       # %bb.0:
527 ; X86-SSE-NEXT:    pushl %esi
528 ; X86-SSE-NEXT:    subl $16, %esp
529 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
530 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
531 ; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
532 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
533 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
534 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
535 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
536 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
537 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
538 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
539 ; X86-SSE-NEXT:    xorl %ecx, %ecx
540 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
541 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
542 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
543 ; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
544 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
545 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
546 ; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
547 ; X86-SSE-NEXT:    cmovbel %eax, %edx
548 ; X86-SSE-NEXT:    movl $-1, %eax
549 ; X86-SSE-NEXT:    cmovbel %esi, %eax
550 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
551 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
552 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
553 ; X86-SSE-NEXT:    addl $16, %esp
554 ; X86-SSE-NEXT:    popl %esi
555 ; X86-SSE-NEXT:    retl
557 ; X64-LABEL: test_signed_i50_f32:
558 ; X64:       # %bb.0:
559 ; X64-NEXT:    cvttss2si %xmm0, %rax
560 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
561 ; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000
562 ; X64-NEXT:    cmovaeq %rax, %rcx
563 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
564 ; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF
565 ; X64-NEXT:    cmovbeq %rcx, %rdx
566 ; X64-NEXT:    xorl %eax, %eax
567 ; X64-NEXT:    ucomiss %xmm0, %xmm0
568 ; X64-NEXT:    cmovnpq %rdx, %rax
569 ; X64-NEXT:    retq
570     %x = call i50 @llvm.fptosi.sat.i50.f32(float %f)
571     ret i50 %x
574 define i64 @test_signed_i64_f32(float %f) nounwind {
575 ; X86-X87-LABEL: test_signed_i64_f32:
576 ; X86-X87:       # %bb.0:
577 ; X86-X87-NEXT:    pushl %edi
578 ; X86-X87-NEXT:    pushl %esi
579 ; X86-X87-NEXT:    subl $20, %esp
580 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
581 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
582 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
583 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
584 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
585 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
586 ; X86-X87-NEXT:    fld %st(0)
587 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
588 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
589 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
590 ; X86-X87-NEXT:    fxch %st(1)
591 ; X86-X87-NEXT:    fucom %st(1)
592 ; X86-X87-NEXT:    fstp %st(1)
593 ; X86-X87-NEXT:    fnstsw %ax
594 ; X86-X87-NEXT:    xorl %ecx, %ecx
595 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
596 ; X86-X87-NEXT:    sahf
597 ; X86-X87-NEXT:    movl $0, %edx
598 ; X86-X87-NEXT:    jb .LBB7_2
599 ; X86-X87-NEXT:  # %bb.1:
600 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
601 ; X86-X87-NEXT:  .LBB7_2:
602 ; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
603 ; X86-X87-NEXT:    jb .LBB7_4
604 ; X86-X87-NEXT:  # %bb.3:
605 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
606 ; X86-X87-NEXT:  .LBB7_4:
607 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
608 ; X86-X87-NEXT:    fxch %st(1)
609 ; X86-X87-NEXT:    fucom %st(1)
610 ; X86-X87-NEXT:    fstp %st(1)
611 ; X86-X87-NEXT:    fnstsw %ax
612 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
613 ; X86-X87-NEXT:    sahf
614 ; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF
615 ; X86-X87-NEXT:    ja .LBB7_6
616 ; X86-X87-NEXT:  # %bb.5:
617 ; X86-X87-NEXT:    movl %edi, %esi
618 ; X86-X87-NEXT:  .LBB7_6:
619 ; X86-X87-NEXT:    movl $-1, %edi
620 ; X86-X87-NEXT:    ja .LBB7_8
621 ; X86-X87-NEXT:  # %bb.7:
622 ; X86-X87-NEXT:    movl %edx, %edi
623 ; X86-X87-NEXT:  .LBB7_8:
624 ; X86-X87-NEXT:    fucomp %st(0)
625 ; X86-X87-NEXT:    fnstsw %ax
626 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
627 ; X86-X87-NEXT:    sahf
628 ; X86-X87-NEXT:    movl $0, %edx
629 ; X86-X87-NEXT:    jp .LBB7_10
630 ; X86-X87-NEXT:  # %bb.9:
631 ; X86-X87-NEXT:    movl %edi, %ecx
632 ; X86-X87-NEXT:    movl %esi, %edx
633 ; X86-X87-NEXT:  .LBB7_10:
634 ; X86-X87-NEXT:    movl %ecx, %eax
635 ; X86-X87-NEXT:    addl $20, %esp
636 ; X86-X87-NEXT:    popl %esi
637 ; X86-X87-NEXT:    popl %edi
638 ; X86-X87-NEXT:    retl
640 ; X86-SSE-LABEL: test_signed_i64_f32:
641 ; X86-SSE:       # %bb.0:
642 ; X86-SSE-NEXT:    pushl %esi
643 ; X86-SSE-NEXT:    subl $16, %esp
644 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
645 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
646 ; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
647 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
648 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
649 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
650 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
651 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
652 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
653 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
654 ; X86-SSE-NEXT:    xorl %ecx, %ecx
655 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
656 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
657 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
658 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
659 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
660 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
661 ; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
662 ; X86-SSE-NEXT:    cmovbel %eax, %edx
663 ; X86-SSE-NEXT:    movl $-1, %eax
664 ; X86-SSE-NEXT:    cmovbel %esi, %eax
665 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
666 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
667 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
668 ; X86-SSE-NEXT:    addl $16, %esp
669 ; X86-SSE-NEXT:    popl %esi
670 ; X86-SSE-NEXT:    retl
672 ; X64-LABEL: test_signed_i64_f32:
673 ; X64:       # %bb.0:
674 ; X64-NEXT:    cvttss2si %xmm0, %rax
675 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
676 ; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
677 ; X64-NEXT:    cmovbeq %rax, %rcx
678 ; X64-NEXT:    xorl %eax, %eax
679 ; X64-NEXT:    ucomiss %xmm0, %xmm0
680 ; X64-NEXT:    cmovnpq %rcx, %rax
681 ; X64-NEXT:    retq
682     %x = call i64 @llvm.fptosi.sat.i64.f32(float %f)
683     ret i64 %x
686 define i100 @test_signed_i100_f32(float %f) nounwind {
687 ; X86-X87-LABEL: test_signed_i100_f32:
688 ; X86-X87:       # %bb.0:
689 ; X86-X87-NEXT:    pushl %ebp
690 ; X86-X87-NEXT:    pushl %ebx
691 ; X86-X87-NEXT:    pushl %edi
692 ; X86-X87-NEXT:    pushl %esi
693 ; X86-X87-NEXT:    subl $60, %esp
694 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
695 ; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
696 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
697 ; X86-X87-NEXT:    movl %eax, (%esp)
698 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
699 ; X86-X87-NEXT:    fxch %st(1)
700 ; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
701 ; X86-X87-NEXT:    fucompp
702 ; X86-X87-NEXT:    fnstsw %ax
703 ; X86-X87-NEXT:    movl %eax, %ebx
704 ; X86-X87-NEXT:    calll __fixsfti
705 ; X86-X87-NEXT:    subl $4, %esp
706 ; X86-X87-NEXT:    xorl %edx, %edx
707 ; X86-X87-NEXT:    movb %bh, %ah
708 ; X86-X87-NEXT:    sahf
709 ; X86-X87-NEXT:    movl $-8, %ebx
710 ; X86-X87-NEXT:    jb .LBB8_2
711 ; X86-X87-NEXT:  # %bb.1:
712 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
713 ; X86-X87-NEXT:  .LBB8_2:
714 ; X86-X87-NEXT:    movl $0, %ecx
715 ; X86-X87-NEXT:    movl $0, %ebp
716 ; X86-X87-NEXT:    jb .LBB8_4
717 ; X86-X87-NEXT:  # %bb.3:
718 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
719 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
720 ; X86-X87-NEXT:  .LBB8_4:
721 ; X86-X87-NEXT:    movl $0, %edi
722 ; X86-X87-NEXT:    jb .LBB8_6
723 ; X86-X87-NEXT:  # %bb.5:
724 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
725 ; X86-X87-NEXT:  .LBB8_6:
726 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
727 ; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
728 ; X86-X87-NEXT:    fucom %st(1)
729 ; X86-X87-NEXT:    fstp %st(1)
730 ; X86-X87-NEXT:    fnstsw %ax
731 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
732 ; X86-X87-NEXT:    sahf
733 ; X86-X87-NEXT:    movl $-1, %eax
734 ; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
735 ; X86-X87-NEXT:    movl $-1, %esi
736 ; X86-X87-NEXT:    ja .LBB8_8
737 ; X86-X87-NEXT:  # %bb.7:
738 ; X86-X87-NEXT:    movl %edi, %eax
739 ; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
740 ; X86-X87-NEXT:    movl %ecx, %esi
741 ; X86-X87-NEXT:  .LBB8_8:
742 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
743 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
744 ; X86-X87-NEXT:    movl $7, %edi
745 ; X86-X87-NEXT:    ja .LBB8_10
746 ; X86-X87-NEXT:  # %bb.9:
747 ; X86-X87-NEXT:    movl %ebx, %edi
748 ; X86-X87-NEXT:  .LBB8_10:
749 ; X86-X87-NEXT:    fucomp %st(0)
750 ; X86-X87-NEXT:    fnstsw %ax
751 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
752 ; X86-X87-NEXT:    sahf
753 ; X86-X87-NEXT:    movl $0, %eax
754 ; X86-X87-NEXT:    movl $0, %ebp
755 ; X86-X87-NEXT:    movl $0, %ebx
756 ; X86-X87-NEXT:    jp .LBB8_12
757 ; X86-X87-NEXT:  # %bb.11:
758 ; X86-X87-NEXT:    movl %edi, %edx
759 ; X86-X87-NEXT:    movl %esi, %eax
760 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
761 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
762 ; X86-X87-NEXT:  .LBB8_12:
763 ; X86-X87-NEXT:    movl %ebx, 8(%ecx)
764 ; X86-X87-NEXT:    movl %ebp, 4(%ecx)
765 ; X86-X87-NEXT:    movl %eax, (%ecx)
766 ; X86-X87-NEXT:    andl $15, %edx
767 ; X86-X87-NEXT:    movb %dl, 12(%ecx)
768 ; X86-X87-NEXT:    movl %ecx, %eax
769 ; X86-X87-NEXT:    addl $60, %esp
770 ; X86-X87-NEXT:    popl %esi
771 ; X86-X87-NEXT:    popl %edi
772 ; X86-X87-NEXT:    popl %ebx
773 ; X86-X87-NEXT:    popl %ebp
774 ; X86-X87-NEXT:    retl $4
776 ; X86-SSE-LABEL: test_signed_i100_f32:
777 ; X86-SSE:       # %bb.0:
778 ; X86-SSE-NEXT:    pushl %ebp
779 ; X86-SSE-NEXT:    pushl %ebx
780 ; X86-SSE-NEXT:    pushl %edi
781 ; X86-SSE-NEXT:    pushl %esi
782 ; X86-SSE-NEXT:    subl $44, %esp
783 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
784 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
785 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
786 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
787 ; X86-SSE-NEXT:    movl %eax, (%esp)
788 ; X86-SSE-NEXT:    calll __fixsfti
789 ; X86-SSE-NEXT:    subl $4, %esp
790 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
791 ; X86-SSE-NEXT:    xorl %ebp, %ebp
792 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
793 ; X86-SSE-NEXT:    movl $-8, %ebx
794 ; X86-SSE-NEXT:    movl $0, %ecx
795 ; X86-SSE-NEXT:    movl $0, %edx
796 ; X86-SSE-NEXT:    movl $0, %edi
797 ; X86-SSE-NEXT:    jb .LBB8_2
798 ; X86-SSE-NEXT:  # %bb.1:
799 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx
800 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
801 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
802 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
803 ; X86-SSE-NEXT:  .LBB8_2:
804 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
805 ; X86-SSE-NEXT:    movl $-1, %eax
806 ; X86-SSE-NEXT:    cmoval %eax, %edi
807 ; X86-SSE-NEXT:    cmoval %eax, %edx
808 ; X86-SSE-NEXT:    cmoval %eax, %ecx
809 ; X86-SSE-NEXT:    movl $7, %eax
810 ; X86-SSE-NEXT:    cmovbel %ebx, %eax
811 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
812 ; X86-SSE-NEXT:    cmovpl %ebp, %eax
813 ; X86-SSE-NEXT:    cmovpl %ebp, %ecx
814 ; X86-SSE-NEXT:    cmovpl %ebp, %edx
815 ; X86-SSE-NEXT:    cmovpl %ebp, %edi
816 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
817 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
818 ; X86-SSE-NEXT:    movl %ecx, (%esi)
819 ; X86-SSE-NEXT:    andl $15, %eax
820 ; X86-SSE-NEXT:    movb %al, 12(%esi)
821 ; X86-SSE-NEXT:    movl %esi, %eax
822 ; X86-SSE-NEXT:    addl $44, %esp
823 ; X86-SSE-NEXT:    popl %esi
824 ; X86-SSE-NEXT:    popl %edi
825 ; X86-SSE-NEXT:    popl %ebx
826 ; X86-SSE-NEXT:    popl %ebp
827 ; X86-SSE-NEXT:    retl $4
829 ; X64-LABEL: test_signed_i100_f32:
830 ; X64:       # %bb.0:
831 ; X64-NEXT:    pushq %rax
832 ; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
833 ; X64-NEXT:    callq __fixsfti@PLT
834 ; X64-NEXT:    xorl %ecx, %ecx
835 ; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
836 ; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
837 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
838 ; X64-NEXT:    cmovbq %rcx, %rax
839 ; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
840 ; X64-NEXT:    cmovbq %rsi, %rdx
841 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
842 ; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
843 ; X64-NEXT:    cmovaq %rsi, %rdx
844 ; X64-NEXT:    movq $-1, %rsi
845 ; X64-NEXT:    cmovaq %rsi, %rax
846 ; X64-NEXT:    ucomiss %xmm0, %xmm0
847 ; X64-NEXT:    cmovpq %rcx, %rax
848 ; X64-NEXT:    cmovpq %rcx, %rdx
849 ; X64-NEXT:    popq %rcx
850 ; X64-NEXT:    retq
851     %x = call i100 @llvm.fptosi.sat.i100.f32(float %f)
852     ret i100 %x
855 define i128 @test_signed_i128_f32(float %f) nounwind {
856 ; X86-X87-LABEL: test_signed_i128_f32:
857 ; X86-X87:       # %bb.0:
858 ; X86-X87-NEXT:    pushl %ebp
859 ; X86-X87-NEXT:    pushl %ebx
860 ; X86-X87-NEXT:    pushl %edi
861 ; X86-X87-NEXT:    pushl %esi
862 ; X86-X87-NEXT:    subl $60, %esp
863 ; X86-X87-NEXT:    flds {{[0-9]+}}(%esp)
864 ; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
865 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
866 ; X86-X87-NEXT:    movl %eax, (%esp)
867 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
868 ; X86-X87-NEXT:    fxch %st(1)
869 ; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
870 ; X86-X87-NEXT:    fucompp
871 ; X86-X87-NEXT:    fnstsw %ax
872 ; X86-X87-NEXT:    movl %eax, %ebx
873 ; X86-X87-NEXT:    calll __fixsfti
874 ; X86-X87-NEXT:    subl $4, %esp
875 ; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
876 ; X86-X87-NEXT:    movb %bh, %ah
877 ; X86-X87-NEXT:    sahf
878 ; X86-X87-NEXT:    movl $0, %eax
879 ; X86-X87-NEXT:    movl $0, %ebx
880 ; X86-X87-NEXT:    jae .LBB9_1
881 ; X86-X87-NEXT:  # %bb.2:
882 ; X86-X87-NEXT:    movl $0, %edx
883 ; X86-X87-NEXT:    jae .LBB9_3
884 ; X86-X87-NEXT:  .LBB9_4:
885 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
886 ; X86-X87-NEXT:    jb .LBB9_6
887 ; X86-X87-NEXT:  .LBB9_5:
888 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
889 ; X86-X87-NEXT:  .LBB9_6:
890 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
891 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
892 ; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
893 ; X86-X87-NEXT:    fucom %st(1)
894 ; X86-X87-NEXT:    fstp %st(1)
895 ; X86-X87-NEXT:    fnstsw %ax
896 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
897 ; X86-X87-NEXT:    sahf
898 ; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
899 ; X86-X87-NEXT:    ja .LBB9_8
900 ; X86-X87-NEXT:  # %bb.7:
901 ; X86-X87-NEXT:    movl %ecx, %eax
902 ; X86-X87-NEXT:  .LBB9_8:
903 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
904 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
905 ; X86-X87-NEXT:    movl $-1, %ebp
906 ; X86-X87-NEXT:    movl $-1, %edi
907 ; X86-X87-NEXT:    movl $-1, %esi
908 ; X86-X87-NEXT:    ja .LBB9_10
909 ; X86-X87-NEXT:  # %bb.9:
910 ; X86-X87-NEXT:    movl %edx, %ebp
911 ; X86-X87-NEXT:    movl %ebx, %edi
912 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
913 ; X86-X87-NEXT:  .LBB9_10:
914 ; X86-X87-NEXT:    fucomp %st(0)
915 ; X86-X87-NEXT:    fnstsw %ax
916 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
917 ; X86-X87-NEXT:    sahf
918 ; X86-X87-NEXT:    movl $0, %eax
919 ; X86-X87-NEXT:    movl $0, %edx
920 ; X86-X87-NEXT:    movl $0, %ebx
921 ; X86-X87-NEXT:    jp .LBB9_12
922 ; X86-X87-NEXT:  # %bb.11:
923 ; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
924 ; X86-X87-NEXT:    movl %edi, %eax
925 ; X86-X87-NEXT:    movl %ebp, %edx
926 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
927 ; X86-X87-NEXT:  .LBB9_12:
928 ; X86-X87-NEXT:    movl %ebx, 12(%ecx)
929 ; X86-X87-NEXT:    movl %edx, 8(%ecx)
930 ; X86-X87-NEXT:    movl %eax, 4(%ecx)
931 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
932 ; X86-X87-NEXT:    movl %eax, (%ecx)
933 ; X86-X87-NEXT:    movl %ecx, %eax
934 ; X86-X87-NEXT:    addl $60, %esp
935 ; X86-X87-NEXT:    popl %esi
936 ; X86-X87-NEXT:    popl %edi
937 ; X86-X87-NEXT:    popl %ebx
938 ; X86-X87-NEXT:    popl %ebp
939 ; X86-X87-NEXT:    retl $4
940 ; X86-X87-NEXT:  .LBB9_1:
941 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
942 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
943 ; X86-X87-NEXT:    movl $0, %edx
944 ; X86-X87-NEXT:    jb .LBB9_4
945 ; X86-X87-NEXT:  .LBB9_3:
946 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
947 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
948 ; X86-X87-NEXT:    jae .LBB9_5
949 ; X86-X87-NEXT:    jmp .LBB9_6
951 ; X86-SSE-LABEL: test_signed_i128_f32:
952 ; X86-SSE:       # %bb.0:
953 ; X86-SSE-NEXT:    pushl %ebp
954 ; X86-SSE-NEXT:    pushl %ebx
955 ; X86-SSE-NEXT:    pushl %edi
956 ; X86-SSE-NEXT:    pushl %esi
957 ; X86-SSE-NEXT:    subl $44, %esp
958 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
959 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
960 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
961 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
962 ; X86-SSE-NEXT:    movl %eax, (%esp)
963 ; X86-SSE-NEXT:    calll __fixsfti
964 ; X86-SSE-NEXT:    subl $4, %esp
965 ; X86-SSE-NEXT:    xorl %ecx, %ecx
966 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
967 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
968 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
969 ; X86-SSE-NEXT:    cmovbl %ecx, %eax
970 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
971 ; X86-SSE-NEXT:    cmovbl %ecx, %edx
972 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
973 ; X86-SSE-NEXT:    cmovbl %ecx, %edi
974 ; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
975 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
976 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
977 ; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
978 ; X86-SSE-NEXT:    cmovbel %ebp, %ebx
979 ; X86-SSE-NEXT:    movl $-1, %ebp
980 ; X86-SSE-NEXT:    cmoval %ebp, %edi
981 ; X86-SSE-NEXT:    cmoval %ebp, %edx
982 ; X86-SSE-NEXT:    cmoval %ebp, %eax
983 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
984 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
985 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
986 ; X86-SSE-NEXT:    cmovpl %ecx, %edi
987 ; X86-SSE-NEXT:    cmovpl %ecx, %ebx
988 ; X86-SSE-NEXT:    movl %ebx, 12(%esi)
989 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
990 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
991 ; X86-SSE-NEXT:    movl %eax, (%esi)
992 ; X86-SSE-NEXT:    movl %esi, %eax
993 ; X86-SSE-NEXT:    addl $44, %esp
994 ; X86-SSE-NEXT:    popl %esi
995 ; X86-SSE-NEXT:    popl %edi
996 ; X86-SSE-NEXT:    popl %ebx
997 ; X86-SSE-NEXT:    popl %ebp
998 ; X86-SSE-NEXT:    retl $4
1000 ; X64-LABEL: test_signed_i128_f32:
1001 ; X64:       # %bb.0:
1002 ; X64-NEXT:    pushq %rax
1003 ; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1004 ; X64-NEXT:    callq __fixsfti@PLT
1005 ; X64-NEXT:    xorl %ecx, %ecx
1006 ; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
1007 ; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
1008 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1009 ; X64-NEXT:    cmovbq %rcx, %rax
1010 ; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
1011 ; X64-NEXT:    cmovbq %rsi, %rdx
1012 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1013 ; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
1014 ; X64-NEXT:    cmovaq %rsi, %rdx
1015 ; X64-NEXT:    movq $-1, %rsi
1016 ; X64-NEXT:    cmovaq %rsi, %rax
1017 ; X64-NEXT:    ucomiss %xmm0, %xmm0
1018 ; X64-NEXT:    cmovpq %rcx, %rax
1019 ; X64-NEXT:    cmovpq %rcx, %rdx
1020 ; X64-NEXT:    popq %rcx
1021 ; X64-NEXT:    retq
1022     %x = call i128 @llvm.fptosi.sat.i128.f32(float %f)
1023     ret i128 %x
1027 ; 64-bit float to signed integer
1030 declare   i1 @llvm.fptosi.sat.i1.f64  (double)
1031 declare   i8 @llvm.fptosi.sat.i8.f64  (double)
1032 declare  i13 @llvm.fptosi.sat.i13.f64 (double)
1033 declare  i16 @llvm.fptosi.sat.i16.f64 (double)
1034 declare  i19 @llvm.fptosi.sat.i19.f64 (double)
1035 declare  i32 @llvm.fptosi.sat.i32.f64 (double)
1036 declare  i50 @llvm.fptosi.sat.i50.f64 (double)
1037 declare  i64 @llvm.fptosi.sat.i64.f64 (double)
1038 declare i100 @llvm.fptosi.sat.i100.f64(double)
1039 declare i128 @llvm.fptosi.sat.i128.f64(double)
1041 define i1 @test_signed_i1_f64(double %f) nounwind {
1042 ; X86-X87-LABEL: test_signed_i1_f64:
1043 ; X86-X87:       # %bb.0:
1044 ; X86-X87-NEXT:    pushl %ebx
1045 ; X86-X87-NEXT:    subl $8, %esp
1046 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1047 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1048 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1049 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1050 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1051 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1052 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
1053 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1054 ; X86-X87-NEXT:    fld1
1055 ; X86-X87-NEXT:    fchs
1056 ; X86-X87-NEXT:    fxch %st(1)
1057 ; X86-X87-NEXT:    fucom %st(1)
1058 ; X86-X87-NEXT:    fstp %st(1)
1059 ; X86-X87-NEXT:    fnstsw %ax
1060 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1061 ; X86-X87-NEXT:    sahf
1062 ; X86-X87-NEXT:    movb $-1, %dl
1063 ; X86-X87-NEXT:    jb .LBB10_2
1064 ; X86-X87-NEXT:  # %bb.1:
1065 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
1066 ; X86-X87-NEXT:  .LBB10_2:
1067 ; X86-X87-NEXT:    fldz
1068 ; X86-X87-NEXT:    fxch %st(1)
1069 ; X86-X87-NEXT:    fucom %st(1)
1070 ; X86-X87-NEXT:    fstp %st(1)
1071 ; X86-X87-NEXT:    fnstsw %ax
1072 ; X86-X87-NEXT:    xorl %ecx, %ecx
1073 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1074 ; X86-X87-NEXT:    sahf
1075 ; X86-X87-NEXT:    movl $0, %ebx
1076 ; X86-X87-NEXT:    ja .LBB10_4
1077 ; X86-X87-NEXT:  # %bb.3:
1078 ; X86-X87-NEXT:    movl %edx, %ebx
1079 ; X86-X87-NEXT:  .LBB10_4:
1080 ; X86-X87-NEXT:    fucomp %st(0)
1081 ; X86-X87-NEXT:    fnstsw %ax
1082 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1083 ; X86-X87-NEXT:    sahf
1084 ; X86-X87-NEXT:    jp .LBB10_6
1085 ; X86-X87-NEXT:  # %bb.5:
1086 ; X86-X87-NEXT:    movl %ebx, %ecx
1087 ; X86-X87-NEXT:  .LBB10_6:
1088 ; X86-X87-NEXT:    movl %ecx, %eax
1089 ; X86-X87-NEXT:    addl $8, %esp
1090 ; X86-X87-NEXT:    popl %ebx
1091 ; X86-X87-NEXT:    retl
1093 ; X86-SSE-LABEL: test_signed_i1_f64:
1094 ; X86-SSE:       # %bb.0:
1095 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-1.0E+0,0.0E+0]
1096 ; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
1097 ; X86-SSE-NEXT:    xorpd %xmm1, %xmm1
1098 ; X86-SSE-NEXT:    minsd %xmm0, %xmm1
1099 ; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
1100 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
1101 ; X86-SSE-NEXT:    retl
1103 ; X64-LABEL: test_signed_i1_f64:
1104 ; X64:       # %bb.0:
1105 ; X64-NEXT:    movsd {{.*#+}} xmm1 = [-1.0E+0,0.0E+0]
1106 ; X64-NEXT:    maxsd %xmm0, %xmm1
1107 ; X64-NEXT:    xorpd %xmm0, %xmm0
1108 ; X64-NEXT:    minsd %xmm1, %xmm0
1109 ; X64-NEXT:    cvttsd2si %xmm0, %eax
1110 ; X64-NEXT:    # kill: def $al killed $al killed $eax
1111 ; X64-NEXT:    retq
1112     %x = call i1 @llvm.fptosi.sat.i1.f64(double %f)
1113     ret i1 %x
1116 define i8 @test_signed_i8_f64(double %f) nounwind {
1117 ; X86-X87-LABEL: test_signed_i8_f64:
1118 ; X86-X87:       # %bb.0:
1119 ; X86-X87-NEXT:    subl $8, %esp
1120 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1121 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1122 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1123 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1124 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1125 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1126 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
1127 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1128 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1129 ; X86-X87-NEXT:    fxch %st(1)
1130 ; X86-X87-NEXT:    fucom %st(1)
1131 ; X86-X87-NEXT:    fstp %st(1)
1132 ; X86-X87-NEXT:    fnstsw %ax
1133 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1134 ; X86-X87-NEXT:    sahf
1135 ; X86-X87-NEXT:    movb $-128, %dl
1136 ; X86-X87-NEXT:    jb .LBB11_2
1137 ; X86-X87-NEXT:  # %bb.1:
1138 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
1139 ; X86-X87-NEXT:  .LBB11_2:
1140 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1141 ; X86-X87-NEXT:    fxch %st(1)
1142 ; X86-X87-NEXT:    fucom %st(1)
1143 ; X86-X87-NEXT:    fstp %st(1)
1144 ; X86-X87-NEXT:    fnstsw %ax
1145 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1146 ; X86-X87-NEXT:    sahf
1147 ; X86-X87-NEXT:    movb $127, %cl
1148 ; X86-X87-NEXT:    ja .LBB11_4
1149 ; X86-X87-NEXT:  # %bb.3:
1150 ; X86-X87-NEXT:    movl %edx, %ecx
1151 ; X86-X87-NEXT:  .LBB11_4:
1152 ; X86-X87-NEXT:    fucomp %st(0)
1153 ; X86-X87-NEXT:    fnstsw %ax
1154 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1155 ; X86-X87-NEXT:    sahf
1156 ; X86-X87-NEXT:    jnp .LBB11_6
1157 ; X86-X87-NEXT:  # %bb.5:
1158 ; X86-X87-NEXT:    xorl %ecx, %ecx
1159 ; X86-X87-NEXT:  .LBB11_6:
1160 ; X86-X87-NEXT:    movl %ecx, %eax
1161 ; X86-X87-NEXT:    addl $8, %esp
1162 ; X86-X87-NEXT:    retl
1164 ; X86-SSE-LABEL: test_signed_i8_f64:
1165 ; X86-SSE:       # %bb.0:
1166 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-1.28E+2,0.0E+0]
1167 ; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
1168 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [1.27E+2,0.0E+0]
1169 ; X86-SSE-NEXT:    minsd %xmm0, %xmm1
1170 ; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
1171 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
1172 ; X86-SSE-NEXT:    retl
1174 ; X64-LABEL: test_signed_i8_f64:
1175 ; X64:       # %bb.0:
1176 ; X64-NEXT:    movsd {{.*#+}} xmm1 = [-1.28E+2,0.0E+0]
1177 ; X64-NEXT:    maxsd %xmm0, %xmm1
1178 ; X64-NEXT:    movsd {{.*#+}} xmm0 = [1.27E+2,0.0E+0]
1179 ; X64-NEXT:    minsd %xmm1, %xmm0
1180 ; X64-NEXT:    cvttsd2si %xmm0, %eax
1181 ; X64-NEXT:    # kill: def $al killed $al killed $eax
1182 ; X64-NEXT:    retq
1183     %x = call i8 @llvm.fptosi.sat.i8.f64(double %f)
1184     ret i8 %x
1187 define i13 @test_signed_i13_f64(double %f) nounwind {
1188 ; X86-X87-LABEL: test_signed_i13_f64:
1189 ; X86-X87:       # %bb.0:
1190 ; X86-X87-NEXT:    subl $8, %esp
1191 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1192 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1193 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1194 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1195 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1196 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1197 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
1198 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1199 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1200 ; X86-X87-NEXT:    fxch %st(1)
1201 ; X86-X87-NEXT:    fucom %st(1)
1202 ; X86-X87-NEXT:    fstp %st(1)
1203 ; X86-X87-NEXT:    fnstsw %ax
1204 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1205 ; X86-X87-NEXT:    sahf
1206 ; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000
1207 ; X86-X87-NEXT:    jb .LBB12_2
1208 ; X86-X87-NEXT:  # %bb.1:
1209 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
1210 ; X86-X87-NEXT:  .LBB12_2:
1211 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1212 ; X86-X87-NEXT:    fxch %st(1)
1213 ; X86-X87-NEXT:    fucom %st(1)
1214 ; X86-X87-NEXT:    fstp %st(1)
1215 ; X86-X87-NEXT:    fnstsw %ax
1216 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1217 ; X86-X87-NEXT:    sahf
1218 ; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF
1219 ; X86-X87-NEXT:    ja .LBB12_4
1220 ; X86-X87-NEXT:  # %bb.3:
1221 ; X86-X87-NEXT:    movl %ecx, %edx
1222 ; X86-X87-NEXT:  .LBB12_4:
1223 ; X86-X87-NEXT:    fucomp %st(0)
1224 ; X86-X87-NEXT:    fnstsw %ax
1225 ; X86-X87-NEXT:    xorl %ecx, %ecx
1226 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1227 ; X86-X87-NEXT:    sahf
1228 ; X86-X87-NEXT:    jp .LBB12_6
1229 ; X86-X87-NEXT:  # %bb.5:
1230 ; X86-X87-NEXT:    movl %edx, %ecx
1231 ; X86-X87-NEXT:  .LBB12_6:
1232 ; X86-X87-NEXT:    movl %ecx, %eax
1233 ; X86-X87-NEXT:    addl $8, %esp
1234 ; X86-X87-NEXT:    retl
1236 ; X86-SSE-LABEL: test_signed_i13_f64:
1237 ; X86-SSE:       # %bb.0:
1238 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-4.096E+3,0.0E+0]
1239 ; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
1240 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [4.095E+3,0.0E+0]
1241 ; X86-SSE-NEXT:    minsd %xmm0, %xmm1
1242 ; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
1243 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
1244 ; X86-SSE-NEXT:    retl
1246 ; X64-LABEL: test_signed_i13_f64:
1247 ; X64:       # %bb.0:
1248 ; X64-NEXT:    movsd {{.*#+}} xmm1 = [-4.096E+3,0.0E+0]
1249 ; X64-NEXT:    maxsd %xmm0, %xmm1
1250 ; X64-NEXT:    movsd {{.*#+}} xmm0 = [4.095E+3,0.0E+0]
1251 ; X64-NEXT:    minsd %xmm1, %xmm0
1252 ; X64-NEXT:    cvttsd2si %xmm0, %eax
1253 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
1254 ; X64-NEXT:    retq
1255     %x = call i13 @llvm.fptosi.sat.i13.f64(double %f)
1256     ret i13 %x
1259 define i16 @test_signed_i16_f64(double %f) nounwind {
1260 ; X86-X87-LABEL: test_signed_i16_f64:
1261 ; X86-X87:       # %bb.0:
1262 ; X86-X87-NEXT:    subl $8, %esp
1263 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1264 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1265 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1266 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1267 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1268 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1269 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
1270 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1271 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1272 ; X86-X87-NEXT:    fxch %st(1)
1273 ; X86-X87-NEXT:    fucom %st(1)
1274 ; X86-X87-NEXT:    fstp %st(1)
1275 ; X86-X87-NEXT:    fnstsw %ax
1276 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1277 ; X86-X87-NEXT:    sahf
1278 ; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000
1279 ; X86-X87-NEXT:    jb .LBB13_2
1280 ; X86-X87-NEXT:  # %bb.1:
1281 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
1282 ; X86-X87-NEXT:  .LBB13_2:
1283 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1284 ; X86-X87-NEXT:    fxch %st(1)
1285 ; X86-X87-NEXT:    fucom %st(1)
1286 ; X86-X87-NEXT:    fstp %st(1)
1287 ; X86-X87-NEXT:    fnstsw %ax
1288 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1289 ; X86-X87-NEXT:    sahf
1290 ; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF
1291 ; X86-X87-NEXT:    ja .LBB13_4
1292 ; X86-X87-NEXT:  # %bb.3:
1293 ; X86-X87-NEXT:    movl %ecx, %edx
1294 ; X86-X87-NEXT:  .LBB13_4:
1295 ; X86-X87-NEXT:    fucomp %st(0)
1296 ; X86-X87-NEXT:    fnstsw %ax
1297 ; X86-X87-NEXT:    xorl %ecx, %ecx
1298 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1299 ; X86-X87-NEXT:    sahf
1300 ; X86-X87-NEXT:    jp .LBB13_6
1301 ; X86-X87-NEXT:  # %bb.5:
1302 ; X86-X87-NEXT:    movl %edx, %ecx
1303 ; X86-X87-NEXT:  .LBB13_6:
1304 ; X86-X87-NEXT:    movl %ecx, %eax
1305 ; X86-X87-NEXT:    addl $8, %esp
1306 ; X86-X87-NEXT:    retl
1308 ; X86-SSE-LABEL: test_signed_i16_f64:
1309 ; X86-SSE:       # %bb.0:
1310 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = [-3.2768E+4,0.0E+0]
1311 ; X86-SSE-NEXT:    maxsd {{[0-9]+}}(%esp), %xmm0
1312 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm1 = [3.2767E+4,0.0E+0]
1313 ; X86-SSE-NEXT:    minsd %xmm0, %xmm1
1314 ; X86-SSE-NEXT:    cvttsd2si %xmm1, %eax
1315 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
1316 ; X86-SSE-NEXT:    retl
1318 ; X64-LABEL: test_signed_i16_f64:
1319 ; X64:       # %bb.0:
1320 ; X64-NEXT:    movsd {{.*#+}} xmm1 = [-3.2768E+4,0.0E+0]
1321 ; X64-NEXT:    maxsd %xmm0, %xmm1
1322 ; X64-NEXT:    movsd {{.*#+}} xmm0 = [3.2767E+4,0.0E+0]
1323 ; X64-NEXT:    minsd %xmm1, %xmm0
1324 ; X64-NEXT:    cvttsd2si %xmm0, %eax
1325 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
1326 ; X64-NEXT:    retq
1327     %x = call i16 @llvm.fptosi.sat.i16.f64(double %f)
1328     ret i16 %x
1331 define i19 @test_signed_i19_f64(double %f) nounwind {
1332 ; X86-X87-LABEL: test_signed_i19_f64:
1333 ; X86-X87:       # %bb.0:
1334 ; X86-X87-NEXT:    subl $8, %esp
1335 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1336 ; X86-X87-NEXT:    fnstcw (%esp)
1337 ; X86-X87-NEXT:    movzwl (%esp), %eax
1338 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1339 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1340 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1341 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
1342 ; X86-X87-NEXT:    fldcw (%esp)
1343 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1344 ; X86-X87-NEXT:    fxch %st(1)
1345 ; X86-X87-NEXT:    fucom %st(1)
1346 ; X86-X87-NEXT:    fstp %st(1)
1347 ; X86-X87-NEXT:    fnstsw %ax
1348 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1349 ; X86-X87-NEXT:    sahf
1350 ; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
1351 ; X86-X87-NEXT:    jb .LBB14_2
1352 ; X86-X87-NEXT:  # %bb.1:
1353 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1354 ; X86-X87-NEXT:  .LBB14_2:
1355 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1356 ; X86-X87-NEXT:    fxch %st(1)
1357 ; X86-X87-NEXT:    fucom %st(1)
1358 ; X86-X87-NEXT:    fstp %st(1)
1359 ; X86-X87-NEXT:    fnstsw %ax
1360 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1361 ; X86-X87-NEXT:    sahf
1362 ; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
1363 ; X86-X87-NEXT:    ja .LBB14_4
1364 ; X86-X87-NEXT:  # %bb.3:
1365 ; X86-X87-NEXT:    movl %ecx, %edx
1366 ; X86-X87-NEXT:  .LBB14_4:
1367 ; X86-X87-NEXT:    fucomp %st(0)
1368 ; X86-X87-NEXT:    fnstsw %ax
1369 ; X86-X87-NEXT:    xorl %ecx, %ecx
1370 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1371 ; X86-X87-NEXT:    sahf
1372 ; X86-X87-NEXT:    jp .LBB14_6
1373 ; X86-X87-NEXT:  # %bb.5:
1374 ; X86-X87-NEXT:    movl %edx, %ecx
1375 ; X86-X87-NEXT:  .LBB14_6:
1376 ; X86-X87-NEXT:    movl %ecx, %eax
1377 ; X86-X87-NEXT:    addl $8, %esp
1378 ; X86-X87-NEXT:    retl
1380 ; X86-SSE-LABEL: test_signed_i19_f64:
1381 ; X86-SSE:       # %bb.0:
1382 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1383 ; X86-SSE-NEXT:    xorl %eax, %eax
1384 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1385 ; X86-SSE-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1386 ; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1387 ; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx
1388 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
1389 ; X86-SSE-NEXT:    retl
1391 ; X64-LABEL: test_signed_i19_f64:
1392 ; X64:       # %bb.0:
1393 ; X64-NEXT:    xorl %eax, %eax
1394 ; X64-NEXT:    ucomisd %xmm0, %xmm0
1395 ; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1396 ; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1397 ; X64-NEXT:    cvttsd2si %xmm0, %ecx
1398 ; X64-NEXT:    cmovnpl %ecx, %eax
1399 ; X64-NEXT:    retq
1400     %x = call i19 @llvm.fptosi.sat.i19.f64(double %f)
1401     ret i19 %x
1404 define i32 @test_signed_i32_f64(double %f) nounwind {
1405 ; X86-X87-LABEL: test_signed_i32_f64:
1406 ; X86-X87:       # %bb.0:
1407 ; X86-X87-NEXT:    subl $8, %esp
1408 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1409 ; X86-X87-NEXT:    fnstcw (%esp)
1410 ; X86-X87-NEXT:    movzwl (%esp), %eax
1411 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1412 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1413 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1414 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
1415 ; X86-X87-NEXT:    fldcw (%esp)
1416 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1417 ; X86-X87-NEXT:    fxch %st(1)
1418 ; X86-X87-NEXT:    fucom %st(1)
1419 ; X86-X87-NEXT:    fstp %st(1)
1420 ; X86-X87-NEXT:    fnstsw %ax
1421 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1422 ; X86-X87-NEXT:    sahf
1423 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
1424 ; X86-X87-NEXT:    jb .LBB15_2
1425 ; X86-X87-NEXT:  # %bb.1:
1426 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1427 ; X86-X87-NEXT:  .LBB15_2:
1428 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
1429 ; X86-X87-NEXT:    fxch %st(1)
1430 ; X86-X87-NEXT:    fucom %st(1)
1431 ; X86-X87-NEXT:    fstp %st(1)
1432 ; X86-X87-NEXT:    fnstsw %ax
1433 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1434 ; X86-X87-NEXT:    sahf
1435 ; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
1436 ; X86-X87-NEXT:    ja .LBB15_4
1437 ; X86-X87-NEXT:  # %bb.3:
1438 ; X86-X87-NEXT:    movl %ecx, %edx
1439 ; X86-X87-NEXT:  .LBB15_4:
1440 ; X86-X87-NEXT:    fucomp %st(0)
1441 ; X86-X87-NEXT:    fnstsw %ax
1442 ; X86-X87-NEXT:    xorl %ecx, %ecx
1443 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1444 ; X86-X87-NEXT:    sahf
1445 ; X86-X87-NEXT:    jp .LBB15_6
1446 ; X86-X87-NEXT:  # %bb.5:
1447 ; X86-X87-NEXT:    movl %edx, %ecx
1448 ; X86-X87-NEXT:  .LBB15_6:
1449 ; X86-X87-NEXT:    movl %ecx, %eax
1450 ; X86-X87-NEXT:    addl $8, %esp
1451 ; X86-X87-NEXT:    retl
1453 ; X86-SSE-LABEL: test_signed_i32_f64:
1454 ; X86-SSE:       # %bb.0:
1455 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1456 ; X86-SSE-NEXT:    xorl %eax, %eax
1457 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1458 ; X86-SSE-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1459 ; X86-SSE-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1460 ; X86-SSE-NEXT:    cvttsd2si %xmm0, %ecx
1461 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
1462 ; X86-SSE-NEXT:    retl
1464 ; X64-LABEL: test_signed_i32_f64:
1465 ; X64:       # %bb.0:
1466 ; X64-NEXT:    xorl %eax, %eax
1467 ; X64-NEXT:    ucomisd %xmm0, %xmm0
1468 ; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1469 ; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1470 ; X64-NEXT:    cvttsd2si %xmm0, %ecx
1471 ; X64-NEXT:    cmovnpl %ecx, %eax
1472 ; X64-NEXT:    retq
1473     %x = call i32 @llvm.fptosi.sat.i32.f64(double %f)
1474     ret i32 %x
1477 define i50 @test_signed_i50_f64(double %f) nounwind {
1478 ; X86-X87-LABEL: test_signed_i50_f64:
1479 ; X86-X87:       # %bb.0:
1480 ; X86-X87-NEXT:    pushl %edi
1481 ; X86-X87-NEXT:    pushl %esi
1482 ; X86-X87-NEXT:    subl $20, %esp
1483 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1484 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1485 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1486 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1487 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1488 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1489 ; X86-X87-NEXT:    fld %st(0)
1490 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
1491 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1492 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1493 ; X86-X87-NEXT:    fxch %st(1)
1494 ; X86-X87-NEXT:    fucom %st(1)
1495 ; X86-X87-NEXT:    fstp %st(1)
1496 ; X86-X87-NEXT:    fnstsw %ax
1497 ; X86-X87-NEXT:    xorl %ecx, %ecx
1498 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1499 ; X86-X87-NEXT:    sahf
1500 ; X86-X87-NEXT:    movl $0, %edx
1501 ; X86-X87-NEXT:    jb .LBB16_2
1502 ; X86-X87-NEXT:  # %bb.1:
1503 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
1504 ; X86-X87-NEXT:  .LBB16_2:
1505 ; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
1506 ; X86-X87-NEXT:    jb .LBB16_4
1507 ; X86-X87-NEXT:  # %bb.3:
1508 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
1509 ; X86-X87-NEXT:  .LBB16_4:
1510 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
1511 ; X86-X87-NEXT:    fxch %st(1)
1512 ; X86-X87-NEXT:    fucom %st(1)
1513 ; X86-X87-NEXT:    fstp %st(1)
1514 ; X86-X87-NEXT:    fnstsw %ax
1515 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1516 ; X86-X87-NEXT:    sahf
1517 ; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF
1518 ; X86-X87-NEXT:    ja .LBB16_6
1519 ; X86-X87-NEXT:  # %bb.5:
1520 ; X86-X87-NEXT:    movl %edi, %esi
1521 ; X86-X87-NEXT:  .LBB16_6:
1522 ; X86-X87-NEXT:    movl $-1, %edi
1523 ; X86-X87-NEXT:    ja .LBB16_8
1524 ; X86-X87-NEXT:  # %bb.7:
1525 ; X86-X87-NEXT:    movl %edx, %edi
1526 ; X86-X87-NEXT:  .LBB16_8:
1527 ; X86-X87-NEXT:    fucomp %st(0)
1528 ; X86-X87-NEXT:    fnstsw %ax
1529 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1530 ; X86-X87-NEXT:    sahf
1531 ; X86-X87-NEXT:    movl $0, %edx
1532 ; X86-X87-NEXT:    jp .LBB16_10
1533 ; X86-X87-NEXT:  # %bb.9:
1534 ; X86-X87-NEXT:    movl %edi, %ecx
1535 ; X86-X87-NEXT:    movl %esi, %edx
1536 ; X86-X87-NEXT:  .LBB16_10:
1537 ; X86-X87-NEXT:    movl %ecx, %eax
1538 ; X86-X87-NEXT:    addl $20, %esp
1539 ; X86-X87-NEXT:    popl %esi
1540 ; X86-X87-NEXT:    popl %edi
1541 ; X86-X87-NEXT:    retl
1543 ; X86-SSE-LABEL: test_signed_i50_f64:
1544 ; X86-SSE:       # %bb.0:
1545 ; X86-SSE-NEXT:    pushl %esi
1546 ; X86-SSE-NEXT:    subl $16, %esp
1547 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1548 ; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
1549 ; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)
1550 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
1551 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1552 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
1553 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1554 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
1555 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
1556 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
1557 ; X86-SSE-NEXT:    xorl %ecx, %ecx
1558 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1559 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
1560 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
1561 ; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
1562 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
1563 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1564 ; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
1565 ; X86-SSE-NEXT:    cmovbel %eax, %edx
1566 ; X86-SSE-NEXT:    movl $-1, %eax
1567 ; X86-SSE-NEXT:    cmovbel %esi, %eax
1568 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1569 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
1570 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
1571 ; X86-SSE-NEXT:    addl $16, %esp
1572 ; X86-SSE-NEXT:    popl %esi
1573 ; X86-SSE-NEXT:    retl
1575 ; X64-LABEL: test_signed_i50_f64:
1576 ; X64:       # %bb.0:
1577 ; X64-NEXT:    xorl %eax, %eax
1578 ; X64-NEXT:    ucomisd %xmm0, %xmm0
1579 ; X64-NEXT:    maxsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1580 ; X64-NEXT:    minsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1581 ; X64-NEXT:    cvttsd2si %xmm0, %rcx
1582 ; X64-NEXT:    cmovnpq %rcx, %rax
1583 ; X64-NEXT:    retq
1584     %x = call i50 @llvm.fptosi.sat.i50.f64(double %f)
1585     ret i50 %x
1588 define i64 @test_signed_i64_f64(double %f) nounwind {
1589 ; X86-X87-LABEL: test_signed_i64_f64:
1590 ; X86-X87:       # %bb.0:
1591 ; X86-X87-NEXT:    pushl %edi
1592 ; X86-X87-NEXT:    pushl %esi
1593 ; X86-X87-NEXT:    subl $20, %esp
1594 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1595 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
1596 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1597 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
1598 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1599 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1600 ; X86-X87-NEXT:    fld %st(0)
1601 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
1602 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
1603 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1604 ; X86-X87-NEXT:    fxch %st(1)
1605 ; X86-X87-NEXT:    fucom %st(1)
1606 ; X86-X87-NEXT:    fstp %st(1)
1607 ; X86-X87-NEXT:    fnstsw %ax
1608 ; X86-X87-NEXT:    xorl %ecx, %ecx
1609 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1610 ; X86-X87-NEXT:    sahf
1611 ; X86-X87-NEXT:    movl $0, %edx
1612 ; X86-X87-NEXT:    jb .LBB17_2
1613 ; X86-X87-NEXT:  # %bb.1:
1614 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
1615 ; X86-X87-NEXT:  .LBB17_2:
1616 ; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
1617 ; X86-X87-NEXT:    jb .LBB17_4
1618 ; X86-X87-NEXT:  # %bb.3:
1619 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
1620 ; X86-X87-NEXT:  .LBB17_4:
1621 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
1622 ; X86-X87-NEXT:    fxch %st(1)
1623 ; X86-X87-NEXT:    fucom %st(1)
1624 ; X86-X87-NEXT:    fstp %st(1)
1625 ; X86-X87-NEXT:    fnstsw %ax
1626 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1627 ; X86-X87-NEXT:    sahf
1628 ; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF
1629 ; X86-X87-NEXT:    ja .LBB17_6
1630 ; X86-X87-NEXT:  # %bb.5:
1631 ; X86-X87-NEXT:    movl %edi, %esi
1632 ; X86-X87-NEXT:  .LBB17_6:
1633 ; X86-X87-NEXT:    movl $-1, %edi
1634 ; X86-X87-NEXT:    ja .LBB17_8
1635 ; X86-X87-NEXT:  # %bb.7:
1636 ; X86-X87-NEXT:    movl %edx, %edi
1637 ; X86-X87-NEXT:  .LBB17_8:
1638 ; X86-X87-NEXT:    fucomp %st(0)
1639 ; X86-X87-NEXT:    fnstsw %ax
1640 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1641 ; X86-X87-NEXT:    sahf
1642 ; X86-X87-NEXT:    movl $0, %edx
1643 ; X86-X87-NEXT:    jp .LBB17_10
1644 ; X86-X87-NEXT:  # %bb.9:
1645 ; X86-X87-NEXT:    movl %edi, %ecx
1646 ; X86-X87-NEXT:    movl %esi, %edx
1647 ; X86-X87-NEXT:  .LBB17_10:
1648 ; X86-X87-NEXT:    movl %ecx, %eax
1649 ; X86-X87-NEXT:    addl $20, %esp
1650 ; X86-X87-NEXT:    popl %esi
1651 ; X86-X87-NEXT:    popl %edi
1652 ; X86-X87-NEXT:    retl
1654 ; X86-SSE-LABEL: test_signed_i64_f64:
1655 ; X86-SSE:       # %bb.0:
1656 ; X86-SSE-NEXT:    pushl %esi
1657 ; X86-SSE-NEXT:    subl $16, %esp
1658 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1659 ; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
1660 ; X86-SSE-NEXT:    fldl {{[0-9]+}}(%esp)
1661 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
1662 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
1663 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
1664 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
1665 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
1666 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
1667 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
1668 ; X86-SSE-NEXT:    xorl %ecx, %ecx
1669 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1670 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
1671 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
1672 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
1673 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
1674 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1675 ; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
1676 ; X86-SSE-NEXT:    cmovbel %eax, %edx
1677 ; X86-SSE-NEXT:    movl $-1, %eax
1678 ; X86-SSE-NEXT:    cmovbel %esi, %eax
1679 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1680 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
1681 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
1682 ; X86-SSE-NEXT:    addl $16, %esp
1683 ; X86-SSE-NEXT:    popl %esi
1684 ; X86-SSE-NEXT:    retl
1686 ; X64-LABEL: test_signed_i64_f64:
1687 ; X64:       # %bb.0:
1688 ; X64-NEXT:    cvttsd2si %xmm0, %rax
1689 ; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1690 ; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
1691 ; X64-NEXT:    cmovbeq %rax, %rcx
1692 ; X64-NEXT:    xorl %eax, %eax
1693 ; X64-NEXT:    ucomisd %xmm0, %xmm0
1694 ; X64-NEXT:    cmovnpq %rcx, %rax
1695 ; X64-NEXT:    retq
1696     %x = call i64 @llvm.fptosi.sat.i64.f64(double %f)
1697     ret i64 %x
1700 define i100 @test_signed_i100_f64(double %f) nounwind {
1701 ; X86-X87-LABEL: test_signed_i100_f64:
1702 ; X86-X87:       # %bb.0:
1703 ; X86-X87-NEXT:    pushl %ebp
1704 ; X86-X87-NEXT:    pushl %ebx
1705 ; X86-X87-NEXT:    pushl %edi
1706 ; X86-X87-NEXT:    pushl %esi
1707 ; X86-X87-NEXT:    subl $60, %esp
1708 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1709 ; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)
1710 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
1711 ; X86-X87-NEXT:    movl %eax, (%esp)
1712 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1713 ; X86-X87-NEXT:    fxch %st(1)
1714 ; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill
1715 ; X86-X87-NEXT:    fucompp
1716 ; X86-X87-NEXT:    fnstsw %ax
1717 ; X86-X87-NEXT:    movl %eax, %ebx
1718 ; X86-X87-NEXT:    calll __fixdfti
1719 ; X86-X87-NEXT:    subl $4, %esp
1720 ; X86-X87-NEXT:    xorl %edx, %edx
1721 ; X86-X87-NEXT:    movb %bh, %ah
1722 ; X86-X87-NEXT:    sahf
1723 ; X86-X87-NEXT:    movl $-8, %ebx
1724 ; X86-X87-NEXT:    jb .LBB18_2
1725 ; X86-X87-NEXT:  # %bb.1:
1726 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1727 ; X86-X87-NEXT:  .LBB18_2:
1728 ; X86-X87-NEXT:    movl $0, %ecx
1729 ; X86-X87-NEXT:    movl $0, %ebp
1730 ; X86-X87-NEXT:    jb .LBB18_4
1731 ; X86-X87-NEXT:  # %bb.3:
1732 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1733 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
1734 ; X86-X87-NEXT:  .LBB18_4:
1735 ; X86-X87-NEXT:    movl $0, %edi
1736 ; X86-X87-NEXT:    jb .LBB18_6
1737 ; X86-X87-NEXT:  # %bb.5:
1738 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
1739 ; X86-X87-NEXT:  .LBB18_6:
1740 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
1741 ; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload
1742 ; X86-X87-NEXT:    fucom %st(1)
1743 ; X86-X87-NEXT:    fstp %st(1)
1744 ; X86-X87-NEXT:    fnstsw %ax
1745 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1746 ; X86-X87-NEXT:    sahf
1747 ; X86-X87-NEXT:    movl $-1, %eax
1748 ; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
1749 ; X86-X87-NEXT:    movl $-1, %esi
1750 ; X86-X87-NEXT:    ja .LBB18_8
1751 ; X86-X87-NEXT:  # %bb.7:
1752 ; X86-X87-NEXT:    movl %edi, %eax
1753 ; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1754 ; X86-X87-NEXT:    movl %ecx, %esi
1755 ; X86-X87-NEXT:  .LBB18_8:
1756 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1757 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1758 ; X86-X87-NEXT:    movl $7, %edi
1759 ; X86-X87-NEXT:    ja .LBB18_10
1760 ; X86-X87-NEXT:  # %bb.9:
1761 ; X86-X87-NEXT:    movl %ebx, %edi
1762 ; X86-X87-NEXT:  .LBB18_10:
1763 ; X86-X87-NEXT:    fucomp %st(0)
1764 ; X86-X87-NEXT:    fnstsw %ax
1765 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1766 ; X86-X87-NEXT:    sahf
1767 ; X86-X87-NEXT:    movl $0, %eax
1768 ; X86-X87-NEXT:    movl $0, %ebp
1769 ; X86-X87-NEXT:    movl $0, %ebx
1770 ; X86-X87-NEXT:    jp .LBB18_12
1771 ; X86-X87-NEXT:  # %bb.11:
1772 ; X86-X87-NEXT:    movl %edi, %edx
1773 ; X86-X87-NEXT:    movl %esi, %eax
1774 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
1775 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
1776 ; X86-X87-NEXT:  .LBB18_12:
1777 ; X86-X87-NEXT:    movl %ebx, 8(%ecx)
1778 ; X86-X87-NEXT:    movl %ebp, 4(%ecx)
1779 ; X86-X87-NEXT:    movl %eax, (%ecx)
1780 ; X86-X87-NEXT:    andl $15, %edx
1781 ; X86-X87-NEXT:    movb %dl, 12(%ecx)
1782 ; X86-X87-NEXT:    movl %ecx, %eax
1783 ; X86-X87-NEXT:    addl $60, %esp
1784 ; X86-X87-NEXT:    popl %esi
1785 ; X86-X87-NEXT:    popl %edi
1786 ; X86-X87-NEXT:    popl %ebx
1787 ; X86-X87-NEXT:    popl %ebp
1788 ; X86-X87-NEXT:    retl $4
1790 ; X86-SSE-LABEL: test_signed_i100_f64:
1791 ; X86-SSE:       # %bb.0:
1792 ; X86-SSE-NEXT:    pushl %ebp
1793 ; X86-SSE-NEXT:    pushl %ebx
1794 ; X86-SSE-NEXT:    pushl %edi
1795 ; X86-SSE-NEXT:    pushl %esi
1796 ; X86-SSE-NEXT:    subl $44, %esp
1797 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
1798 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1799 ; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
1800 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
1801 ; X86-SSE-NEXT:    movl %eax, (%esp)
1802 ; X86-SSE-NEXT:    calll __fixdfti
1803 ; X86-SSE-NEXT:    subl $4, %esp
1804 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1805 ; X86-SSE-NEXT:    xorl %ebp, %ebp
1806 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1807 ; X86-SSE-NEXT:    movl $-8, %ebx
1808 ; X86-SSE-NEXT:    movl $0, %ecx
1809 ; X86-SSE-NEXT:    movl $0, %edx
1810 ; X86-SSE-NEXT:    movl $0, %edi
1811 ; X86-SSE-NEXT:    jb .LBB18_2
1812 ; X86-SSE-NEXT:  # %bb.1:
1813 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1814 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1815 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
1816 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
1817 ; X86-SSE-NEXT:  .LBB18_2:
1818 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1819 ; X86-SSE-NEXT:    movl $-1, %eax
1820 ; X86-SSE-NEXT:    cmoval %eax, %edi
1821 ; X86-SSE-NEXT:    cmoval %eax, %edx
1822 ; X86-SSE-NEXT:    cmoval %eax, %ecx
1823 ; X86-SSE-NEXT:    movl $7, %eax
1824 ; X86-SSE-NEXT:    cmovbel %ebx, %eax
1825 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1826 ; X86-SSE-NEXT:    cmovpl %ebp, %eax
1827 ; X86-SSE-NEXT:    cmovpl %ebp, %ecx
1828 ; X86-SSE-NEXT:    cmovpl %ebp, %edx
1829 ; X86-SSE-NEXT:    cmovpl %ebp, %edi
1830 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
1831 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
1832 ; X86-SSE-NEXT:    movl %ecx, (%esi)
1833 ; X86-SSE-NEXT:    andl $15, %eax
1834 ; X86-SSE-NEXT:    movb %al, 12(%esi)
1835 ; X86-SSE-NEXT:    movl %esi, %eax
1836 ; X86-SSE-NEXT:    addl $44, %esp
1837 ; X86-SSE-NEXT:    popl %esi
1838 ; X86-SSE-NEXT:    popl %edi
1839 ; X86-SSE-NEXT:    popl %ebx
1840 ; X86-SSE-NEXT:    popl %ebp
1841 ; X86-SSE-NEXT:    retl $4
1843 ; X64-LABEL: test_signed_i100_f64:
1844 ; X64:       # %bb.0:
1845 ; X64-NEXT:    pushq %rax
1846 ; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill
1847 ; X64-NEXT:    callq __fixdfti@PLT
1848 ; X64-NEXT:    xorl %ecx, %ecx
1849 ; X64-NEXT:    movsd (%rsp), %xmm0 # 8-byte Reload
1850 ; X64-NEXT:    # xmm0 = mem[0],zero
1851 ; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1852 ; X64-NEXT:    cmovbq %rcx, %rax
1853 ; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
1854 ; X64-NEXT:    cmovbq %rsi, %rdx
1855 ; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
1856 ; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
1857 ; X64-NEXT:    cmovaq %rsi, %rdx
1858 ; X64-NEXT:    movq $-1, %rsi
1859 ; X64-NEXT:    cmovaq %rsi, %rax
1860 ; X64-NEXT:    ucomisd %xmm0, %xmm0
1861 ; X64-NEXT:    cmovpq %rcx, %rax
1862 ; X64-NEXT:    cmovpq %rcx, %rdx
1863 ; X64-NEXT:    popq %rcx
1864 ; X64-NEXT:    retq
1865     %x = call i100 @llvm.fptosi.sat.i100.f64(double %f)
1866     ret i100 %x
1869 define i128 @test_signed_i128_f64(double %f) nounwind {
1870 ; X86-X87-LABEL: test_signed_i128_f64:
1871 ; X86-X87:       # %bb.0:
1872 ; X86-X87-NEXT:    pushl %ebp
1873 ; X86-X87-NEXT:    pushl %ebx
1874 ; X86-X87-NEXT:    pushl %edi
1875 ; X86-X87-NEXT:    pushl %esi
1876 ; X86-X87-NEXT:    subl $60, %esp
1877 ; X86-X87-NEXT:    fldl {{[0-9]+}}(%esp)
1878 ; X86-X87-NEXT:    fstl {{[0-9]+}}(%esp)
1879 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
1880 ; X86-X87-NEXT:    movl %eax, (%esp)
1881 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
1882 ; X86-X87-NEXT:    fxch %st(1)
1883 ; X86-X87-NEXT:    fstl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Spill
1884 ; X86-X87-NEXT:    fucompp
1885 ; X86-X87-NEXT:    fnstsw %ax
1886 ; X86-X87-NEXT:    movl %eax, %ebx
1887 ; X86-X87-NEXT:    calll __fixdfti
1888 ; X86-X87-NEXT:    subl $4, %esp
1889 ; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
1890 ; X86-X87-NEXT:    movb %bh, %ah
1891 ; X86-X87-NEXT:    sahf
1892 ; X86-X87-NEXT:    movl $0, %eax
1893 ; X86-X87-NEXT:    movl $0, %ebx
1894 ; X86-X87-NEXT:    jae .LBB19_1
1895 ; X86-X87-NEXT:  # %bb.2:
1896 ; X86-X87-NEXT:    movl $0, %edx
1897 ; X86-X87-NEXT:    jae .LBB19_3
1898 ; X86-X87-NEXT:  .LBB19_4:
1899 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
1900 ; X86-X87-NEXT:    jb .LBB19_6
1901 ; X86-X87-NEXT:  .LBB19_5:
1902 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1903 ; X86-X87-NEXT:  .LBB19_6:
1904 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1905 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
1906 ; X86-X87-NEXT:    fldl {{[-0-9]+}}(%e{{[sb]}}p) # 8-byte Folded Reload
1907 ; X86-X87-NEXT:    fucom %st(1)
1908 ; X86-X87-NEXT:    fstp %st(1)
1909 ; X86-X87-NEXT:    fnstsw %ax
1910 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1911 ; X86-X87-NEXT:    sahf
1912 ; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
1913 ; X86-X87-NEXT:    ja .LBB19_8
1914 ; X86-X87-NEXT:  # %bb.7:
1915 ; X86-X87-NEXT:    movl %ecx, %eax
1916 ; X86-X87-NEXT:  .LBB19_8:
1917 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1918 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
1919 ; X86-X87-NEXT:    movl $-1, %ebp
1920 ; X86-X87-NEXT:    movl $-1, %edi
1921 ; X86-X87-NEXT:    movl $-1, %esi
1922 ; X86-X87-NEXT:    ja .LBB19_10
1923 ; X86-X87-NEXT:  # %bb.9:
1924 ; X86-X87-NEXT:    movl %edx, %ebp
1925 ; X86-X87-NEXT:    movl %ebx, %edi
1926 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
1927 ; X86-X87-NEXT:  .LBB19_10:
1928 ; X86-X87-NEXT:    fucomp %st(0)
1929 ; X86-X87-NEXT:    fnstsw %ax
1930 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
1931 ; X86-X87-NEXT:    sahf
1932 ; X86-X87-NEXT:    movl $0, %eax
1933 ; X86-X87-NEXT:    movl $0, %edx
1934 ; X86-X87-NEXT:    movl $0, %ebx
1935 ; X86-X87-NEXT:    jp .LBB19_12
1936 ; X86-X87-NEXT:  # %bb.11:
1937 ; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
1938 ; X86-X87-NEXT:    movl %edi, %eax
1939 ; X86-X87-NEXT:    movl %ebp, %edx
1940 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
1941 ; X86-X87-NEXT:  .LBB19_12:
1942 ; X86-X87-NEXT:    movl %ebx, 12(%ecx)
1943 ; X86-X87-NEXT:    movl %edx, 8(%ecx)
1944 ; X86-X87-NEXT:    movl %eax, 4(%ecx)
1945 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
1946 ; X86-X87-NEXT:    movl %eax, (%ecx)
1947 ; X86-X87-NEXT:    movl %ecx, %eax
1948 ; X86-X87-NEXT:    addl $60, %esp
1949 ; X86-X87-NEXT:    popl %esi
1950 ; X86-X87-NEXT:    popl %edi
1951 ; X86-X87-NEXT:    popl %ebx
1952 ; X86-X87-NEXT:    popl %ebp
1953 ; X86-X87-NEXT:    retl $4
1954 ; X86-X87-NEXT:  .LBB19_1:
1955 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
1956 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
1957 ; X86-X87-NEXT:    movl $0, %edx
1958 ; X86-X87-NEXT:    jb .LBB19_4
1959 ; X86-X87-NEXT:  .LBB19_3:
1960 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
1961 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
1962 ; X86-X87-NEXT:    jae .LBB19_5
1963 ; X86-X87-NEXT:    jmp .LBB19_6
1965 ; X86-SSE-LABEL: test_signed_i128_f64:
1966 ; X86-SSE:       # %bb.0:
1967 ; X86-SSE-NEXT:    pushl %ebp
1968 ; X86-SSE-NEXT:    pushl %ebx
1969 ; X86-SSE-NEXT:    pushl %edi
1970 ; X86-SSE-NEXT:    pushl %esi
1971 ; X86-SSE-NEXT:    subl $44, %esp
1972 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
1973 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1974 ; X86-SSE-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
1975 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
1976 ; X86-SSE-NEXT:    movl %eax, (%esp)
1977 ; X86-SSE-NEXT:    calll __fixdfti
1978 ; X86-SSE-NEXT:    subl $4, %esp
1979 ; X86-SSE-NEXT:    xorl %ecx, %ecx
1980 ; X86-SSE-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
1981 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1982 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
1983 ; X86-SSE-NEXT:    cmovbl %ecx, %eax
1984 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
1985 ; X86-SSE-NEXT:    cmovbl %ecx, %edx
1986 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
1987 ; X86-SSE-NEXT:    cmovbl %ecx, %edi
1988 ; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
1989 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
1990 ; X86-SSE-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
1991 ; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
1992 ; X86-SSE-NEXT:    cmovbel %ebp, %ebx
1993 ; X86-SSE-NEXT:    movl $-1, %ebp
1994 ; X86-SSE-NEXT:    cmoval %ebp, %edi
1995 ; X86-SSE-NEXT:    cmoval %ebp, %edx
1996 ; X86-SSE-NEXT:    cmoval %ebp, %eax
1997 ; X86-SSE-NEXT:    ucomisd %xmm0, %xmm0
1998 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
1999 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
2000 ; X86-SSE-NEXT:    cmovpl %ecx, %edi
2001 ; X86-SSE-NEXT:    cmovpl %ecx, %ebx
2002 ; X86-SSE-NEXT:    movl %ebx, 12(%esi)
2003 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
2004 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
2005 ; X86-SSE-NEXT:    movl %eax, (%esi)
2006 ; X86-SSE-NEXT:    movl %esi, %eax
2007 ; X86-SSE-NEXT:    addl $44, %esp
2008 ; X86-SSE-NEXT:    popl %esi
2009 ; X86-SSE-NEXT:    popl %edi
2010 ; X86-SSE-NEXT:    popl %ebx
2011 ; X86-SSE-NEXT:    popl %ebp
2012 ; X86-SSE-NEXT:    retl $4
2014 ; X64-LABEL: test_signed_i128_f64:
2015 ; X64:       # %bb.0:
2016 ; X64-NEXT:    pushq %rax
2017 ; X64-NEXT:    movsd %xmm0, (%rsp) # 8-byte Spill
2018 ; X64-NEXT:    callq __fixdfti@PLT
2019 ; X64-NEXT:    xorl %ecx, %ecx
2020 ; X64-NEXT:    movsd (%rsp), %xmm0 # 8-byte Reload
2021 ; X64-NEXT:    # xmm0 = mem[0],zero
2022 ; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2023 ; X64-NEXT:    cmovbq %rcx, %rax
2024 ; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
2025 ; X64-NEXT:    cmovbq %rsi, %rdx
2026 ; X64-NEXT:    ucomisd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2027 ; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
2028 ; X64-NEXT:    cmovaq %rsi, %rdx
2029 ; X64-NEXT:    movq $-1, %rsi
2030 ; X64-NEXT:    cmovaq %rsi, %rax
2031 ; X64-NEXT:    ucomisd %xmm0, %xmm0
2032 ; X64-NEXT:    cmovpq %rcx, %rax
2033 ; X64-NEXT:    cmovpq %rcx, %rdx
2034 ; X64-NEXT:    popq %rcx
2035 ; X64-NEXT:    retq
2036     %x = call i128 @llvm.fptosi.sat.i128.f64(double %f)
2037     ret i128 %x
2041 ; 16-bit float to signed integer
2044 declare   i1 @llvm.fptosi.sat.i1.f16  (half)
2045 declare   i8 @llvm.fptosi.sat.i8.f16  (half)
2046 declare  i13 @llvm.fptosi.sat.i13.f16 (half)
2047 declare  i16 @llvm.fptosi.sat.i16.f16 (half)
2048 declare  i19 @llvm.fptosi.sat.i19.f16 (half)
2049 declare  i32 @llvm.fptosi.sat.i32.f16 (half)
2050 declare  i50 @llvm.fptosi.sat.i50.f16 (half)
2051 declare  i64 @llvm.fptosi.sat.i64.f16 (half)
2052 declare i100 @llvm.fptosi.sat.i100.f16(half)
2053 declare i128 @llvm.fptosi.sat.i128.f16(half)
2055 ; FIXME: Can be optimizated with maxss + minss
2056 define i1 @test_signed_i1_f16(half %f) nounwind {
2057 ; X86-X87-LABEL: test_signed_i1_f16:
2058 ; X86-X87:       # %bb.0:
2059 ; X86-X87-NEXT:    pushl %ebx
2060 ; X86-X87-NEXT:    subl $24, %esp
2061 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2062 ; X86-X87-NEXT:    movl %eax, (%esp)
2063 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2064 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2065 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2066 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2067 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2068 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2069 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
2070 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2071 ; X86-X87-NEXT:    fld1
2072 ; X86-X87-NEXT:    fchs
2073 ; X86-X87-NEXT:    fxch %st(1)
2074 ; X86-X87-NEXT:    fucom %st(1)
2075 ; X86-X87-NEXT:    fstp %st(1)
2076 ; X86-X87-NEXT:    fnstsw %ax
2077 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2078 ; X86-X87-NEXT:    sahf
2079 ; X86-X87-NEXT:    movb $-1, %dl
2080 ; X86-X87-NEXT:    jb .LBB20_2
2081 ; X86-X87-NEXT:  # %bb.1:
2082 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
2083 ; X86-X87-NEXT:  .LBB20_2:
2084 ; X86-X87-NEXT:    fldz
2085 ; X86-X87-NEXT:    fxch %st(1)
2086 ; X86-X87-NEXT:    fucom %st(1)
2087 ; X86-X87-NEXT:    fstp %st(1)
2088 ; X86-X87-NEXT:    fnstsw %ax
2089 ; X86-X87-NEXT:    xorl %ecx, %ecx
2090 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2091 ; X86-X87-NEXT:    sahf
2092 ; X86-X87-NEXT:    movl $0, %ebx
2093 ; X86-X87-NEXT:    ja .LBB20_4
2094 ; X86-X87-NEXT:  # %bb.3:
2095 ; X86-X87-NEXT:    movl %edx, %ebx
2096 ; X86-X87-NEXT:  .LBB20_4:
2097 ; X86-X87-NEXT:    fucomp %st(0)
2098 ; X86-X87-NEXT:    fnstsw %ax
2099 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2100 ; X86-X87-NEXT:    sahf
2101 ; X86-X87-NEXT:    jp .LBB20_6
2102 ; X86-X87-NEXT:  # %bb.5:
2103 ; X86-X87-NEXT:    movl %ebx, %ecx
2104 ; X86-X87-NEXT:  .LBB20_6:
2105 ; X86-X87-NEXT:    movl %ecx, %eax
2106 ; X86-X87-NEXT:    addl $24, %esp
2107 ; X86-X87-NEXT:    popl %ebx
2108 ; X86-X87-NEXT:    retl
2110 ; X86-SSE-LABEL: test_signed_i1_f16:
2111 ; X86-SSE:       # %bb.0:
2112 ; X86-SSE-NEXT:    subl $12, %esp
2113 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2114 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2115 ; X86-SSE-NEXT:    movw %ax, (%esp)
2116 ; X86-SSE-NEXT:    calll __extendhfsf2
2117 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2118 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2119 ; X86-SSE-NEXT:    cvttss2si %xmm0, %ecx
2120 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2121 ; X86-SSE-NEXT:    movl $255, %eax
2122 ; X86-SSE-NEXT:    cmovael %ecx, %eax
2123 ; X86-SSE-NEXT:    xorl %ecx, %ecx
2124 ; X86-SSE-NEXT:    xorps %xmm1, %xmm1
2125 ; X86-SSE-NEXT:    ucomiss %xmm1, %xmm0
2126 ; X86-SSE-NEXT:    cmoval %ecx, %eax
2127 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2128 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
2129 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
2130 ; X86-SSE-NEXT:    addl $12, %esp
2131 ; X86-SSE-NEXT:    retl
2133 ; X64-LABEL: test_signed_i1_f16:
2134 ; X64:       # %bb.0:
2135 ; X64-NEXT:    pushq %rax
2136 ; X64-NEXT:    callq __extendhfsf2@PLT
2137 ; X64-NEXT:    cvttss2si %xmm0, %ecx
2138 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2139 ; X64-NEXT:    movl $255, %eax
2140 ; X64-NEXT:    cmovael %ecx, %eax
2141 ; X64-NEXT:    xorl %ecx, %ecx
2142 ; X64-NEXT:    xorps %xmm1, %xmm1
2143 ; X64-NEXT:    ucomiss %xmm1, %xmm0
2144 ; X64-NEXT:    cmoval %ecx, %eax
2145 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2146 ; X64-NEXT:    cmovpl %ecx, %eax
2147 ; X64-NEXT:    # kill: def $al killed $al killed $eax
2148 ; X64-NEXT:    popq %rcx
2149 ; X64-NEXT:    retq
2150     %x = call i1 @llvm.fptosi.sat.i1.f16(half %f)
2151     ret i1 %x
2154 ; FIXME: Can be optimizated with maxss + minss
2155 define i8 @test_signed_i8_f16(half %f) nounwind {
2156 ; X86-X87-LABEL: test_signed_i8_f16:
2157 ; X86-X87:       # %bb.0:
2158 ; X86-X87-NEXT:    subl $12, %esp
2159 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2160 ; X86-X87-NEXT:    movl %eax, (%esp)
2161 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2162 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2163 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2164 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2165 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2166 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2167 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
2168 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2169 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2170 ; X86-X87-NEXT:    fxch %st(1)
2171 ; X86-X87-NEXT:    fucom %st(1)
2172 ; X86-X87-NEXT:    fstp %st(1)
2173 ; X86-X87-NEXT:    fnstsw %ax
2174 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2175 ; X86-X87-NEXT:    sahf
2176 ; X86-X87-NEXT:    movb $-128, %dl
2177 ; X86-X87-NEXT:    jb .LBB21_2
2178 ; X86-X87-NEXT:  # %bb.1:
2179 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
2180 ; X86-X87-NEXT:  .LBB21_2:
2181 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2182 ; X86-X87-NEXT:    fxch %st(1)
2183 ; X86-X87-NEXT:    fucom %st(1)
2184 ; X86-X87-NEXT:    fstp %st(1)
2185 ; X86-X87-NEXT:    fnstsw %ax
2186 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2187 ; X86-X87-NEXT:    sahf
2188 ; X86-X87-NEXT:    movb $127, %cl
2189 ; X86-X87-NEXT:    ja .LBB21_4
2190 ; X86-X87-NEXT:  # %bb.3:
2191 ; X86-X87-NEXT:    movl %edx, %ecx
2192 ; X86-X87-NEXT:  .LBB21_4:
2193 ; X86-X87-NEXT:    fucomp %st(0)
2194 ; X86-X87-NEXT:    fnstsw %ax
2195 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2196 ; X86-X87-NEXT:    sahf
2197 ; X86-X87-NEXT:    jnp .LBB21_6
2198 ; X86-X87-NEXT:  # %bb.5:
2199 ; X86-X87-NEXT:    xorl %ecx, %ecx
2200 ; X86-X87-NEXT:  .LBB21_6:
2201 ; X86-X87-NEXT:    movl %ecx, %eax
2202 ; X86-X87-NEXT:    addl $12, %esp
2203 ; X86-X87-NEXT:    retl
2205 ; X86-SSE-LABEL: test_signed_i8_f16:
2206 ; X86-SSE:       # %bb.0:
2207 ; X86-SSE-NEXT:    subl $12, %esp
2208 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2209 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2210 ; X86-SSE-NEXT:    movw %ax, (%esp)
2211 ; X86-SSE-NEXT:    calll __extendhfsf2
2212 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2213 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2214 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
2215 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2216 ; X86-SSE-NEXT:    movl $128, %ecx
2217 ; X86-SSE-NEXT:    cmovael %eax, %ecx
2218 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2219 ; X86-SSE-NEXT:    movl $127, %edx
2220 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
2221 ; X86-SSE-NEXT:    xorl %eax, %eax
2222 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2223 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
2224 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
2225 ; X86-SSE-NEXT:    addl $12, %esp
2226 ; X86-SSE-NEXT:    retl
2228 ; X64-LABEL: test_signed_i8_f16:
2229 ; X64:       # %bb.0:
2230 ; X64-NEXT:    pushq %rax
2231 ; X64-NEXT:    callq __extendhfsf2@PLT
2232 ; X64-NEXT:    cvttss2si %xmm0, %eax
2233 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2234 ; X64-NEXT:    movl $128, %ecx
2235 ; X64-NEXT:    cmovael %eax, %ecx
2236 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2237 ; X64-NEXT:    movl $127, %edx
2238 ; X64-NEXT:    cmovbel %ecx, %edx
2239 ; X64-NEXT:    xorl %eax, %eax
2240 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2241 ; X64-NEXT:    cmovnpl %edx, %eax
2242 ; X64-NEXT:    # kill: def $al killed $al killed $eax
2243 ; X64-NEXT:    popq %rcx
2244 ; X64-NEXT:    retq
2245     %x = call i8 @llvm.fptosi.sat.i8.f16(half %f)
2246     ret i8 %x
2249 ; FIXME: Can be optimizated with maxss + minss
2250 define i13 @test_signed_i13_f16(half %f) nounwind {
2251 ; X86-X87-LABEL: test_signed_i13_f16:
2252 ; X86-X87:       # %bb.0:
2253 ; X86-X87-NEXT:    subl $12, %esp
2254 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2255 ; X86-X87-NEXT:    movl %eax, (%esp)
2256 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2257 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2258 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2259 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2260 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2261 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2262 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
2263 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2264 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2265 ; X86-X87-NEXT:    fxch %st(1)
2266 ; X86-X87-NEXT:    fucom %st(1)
2267 ; X86-X87-NEXT:    fstp %st(1)
2268 ; X86-X87-NEXT:    fnstsw %ax
2269 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2270 ; X86-X87-NEXT:    sahf
2271 ; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000
2272 ; X86-X87-NEXT:    jb .LBB22_2
2273 ; X86-X87-NEXT:  # %bb.1:
2274 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
2275 ; X86-X87-NEXT:  .LBB22_2:
2276 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2277 ; X86-X87-NEXT:    fxch %st(1)
2278 ; X86-X87-NEXT:    fucom %st(1)
2279 ; X86-X87-NEXT:    fstp %st(1)
2280 ; X86-X87-NEXT:    fnstsw %ax
2281 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2282 ; X86-X87-NEXT:    sahf
2283 ; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF
2284 ; X86-X87-NEXT:    ja .LBB22_4
2285 ; X86-X87-NEXT:  # %bb.3:
2286 ; X86-X87-NEXT:    movl %ecx, %edx
2287 ; X86-X87-NEXT:  .LBB22_4:
2288 ; X86-X87-NEXT:    fucomp %st(0)
2289 ; X86-X87-NEXT:    fnstsw %ax
2290 ; X86-X87-NEXT:    xorl %ecx, %ecx
2291 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2292 ; X86-X87-NEXT:    sahf
2293 ; X86-X87-NEXT:    jp .LBB22_6
2294 ; X86-X87-NEXT:  # %bb.5:
2295 ; X86-X87-NEXT:    movl %edx, %ecx
2296 ; X86-X87-NEXT:  .LBB22_6:
2297 ; X86-X87-NEXT:    movl %ecx, %eax
2298 ; X86-X87-NEXT:    addl $12, %esp
2299 ; X86-X87-NEXT:    retl
2301 ; X86-SSE-LABEL: test_signed_i13_f16:
2302 ; X86-SSE:       # %bb.0:
2303 ; X86-SSE-NEXT:    subl $12, %esp
2304 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2305 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2306 ; X86-SSE-NEXT:    movw %ax, (%esp)
2307 ; X86-SSE-NEXT:    calll __extendhfsf2
2308 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2309 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2310 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
2311 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2312 ; X86-SSE-NEXT:    movl $61440, %ecx # imm = 0xF000
2313 ; X86-SSE-NEXT:    cmovael %eax, %ecx
2314 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2315 ; X86-SSE-NEXT:    movl $4095, %edx # imm = 0xFFF
2316 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
2317 ; X86-SSE-NEXT:    xorl %eax, %eax
2318 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2319 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
2320 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
2321 ; X86-SSE-NEXT:    addl $12, %esp
2322 ; X86-SSE-NEXT:    retl
2324 ; X64-LABEL: test_signed_i13_f16:
2325 ; X64:       # %bb.0:
2326 ; X64-NEXT:    pushq %rax
2327 ; X64-NEXT:    callq __extendhfsf2@PLT
2328 ; X64-NEXT:    cvttss2si %xmm0, %eax
2329 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2330 ; X64-NEXT:    movl $61440, %ecx # imm = 0xF000
2331 ; X64-NEXT:    cmovael %eax, %ecx
2332 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2333 ; X64-NEXT:    movl $4095, %edx # imm = 0xFFF
2334 ; X64-NEXT:    cmovbel %ecx, %edx
2335 ; X64-NEXT:    xorl %eax, %eax
2336 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2337 ; X64-NEXT:    cmovnpl %edx, %eax
2338 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
2339 ; X64-NEXT:    popq %rcx
2340 ; X64-NEXT:    retq
2341     %x = call i13 @llvm.fptosi.sat.i13.f16(half %f)
2342     ret i13 %x
2345 ; FIXME: Can be optimizated with maxss + minss
2346 define i16 @test_signed_i16_f16(half %f) nounwind {
2347 ; X86-X87-LABEL: test_signed_i16_f16:
2348 ; X86-X87:       # %bb.0:
2349 ; X86-X87-NEXT:    subl $12, %esp
2350 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2351 ; X86-X87-NEXT:    movl %eax, (%esp)
2352 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2353 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2354 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2355 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2356 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2357 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2358 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
2359 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2360 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2361 ; X86-X87-NEXT:    fxch %st(1)
2362 ; X86-X87-NEXT:    fucom %st(1)
2363 ; X86-X87-NEXT:    fstp %st(1)
2364 ; X86-X87-NEXT:    fnstsw %ax
2365 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2366 ; X86-X87-NEXT:    sahf
2367 ; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000
2368 ; X86-X87-NEXT:    jb .LBB23_2
2369 ; X86-X87-NEXT:  # %bb.1:
2370 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
2371 ; X86-X87-NEXT:  .LBB23_2:
2372 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2373 ; X86-X87-NEXT:    fxch %st(1)
2374 ; X86-X87-NEXT:    fucom %st(1)
2375 ; X86-X87-NEXT:    fstp %st(1)
2376 ; X86-X87-NEXT:    fnstsw %ax
2377 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2378 ; X86-X87-NEXT:    sahf
2379 ; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF
2380 ; X86-X87-NEXT:    ja .LBB23_4
2381 ; X86-X87-NEXT:  # %bb.3:
2382 ; X86-X87-NEXT:    movl %ecx, %edx
2383 ; X86-X87-NEXT:  .LBB23_4:
2384 ; X86-X87-NEXT:    fucomp %st(0)
2385 ; X86-X87-NEXT:    fnstsw %ax
2386 ; X86-X87-NEXT:    xorl %ecx, %ecx
2387 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2388 ; X86-X87-NEXT:    sahf
2389 ; X86-X87-NEXT:    jp .LBB23_6
2390 ; X86-X87-NEXT:  # %bb.5:
2391 ; X86-X87-NEXT:    movl %edx, %ecx
2392 ; X86-X87-NEXT:  .LBB23_6:
2393 ; X86-X87-NEXT:    movl %ecx, %eax
2394 ; X86-X87-NEXT:    addl $12, %esp
2395 ; X86-X87-NEXT:    retl
2397 ; X86-SSE-LABEL: test_signed_i16_f16:
2398 ; X86-SSE:       # %bb.0:
2399 ; X86-SSE-NEXT:    subl $12, %esp
2400 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2401 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2402 ; X86-SSE-NEXT:    movw %ax, (%esp)
2403 ; X86-SSE-NEXT:    calll __extendhfsf2
2404 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2405 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2406 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
2407 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2408 ; X86-SSE-NEXT:    movl $32768, %ecx # imm = 0x8000
2409 ; X86-SSE-NEXT:    cmovael %eax, %ecx
2410 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2411 ; X86-SSE-NEXT:    movl $32767, %edx # imm = 0x7FFF
2412 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
2413 ; X86-SSE-NEXT:    xorl %eax, %eax
2414 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2415 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
2416 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
2417 ; X86-SSE-NEXT:    addl $12, %esp
2418 ; X86-SSE-NEXT:    retl
2420 ; X64-LABEL: test_signed_i16_f16:
2421 ; X64:       # %bb.0:
2422 ; X64-NEXT:    pushq %rax
2423 ; X64-NEXT:    callq __extendhfsf2@PLT
2424 ; X64-NEXT:    cvttss2si %xmm0, %eax
2425 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2426 ; X64-NEXT:    movl $32768, %ecx # imm = 0x8000
2427 ; X64-NEXT:    cmovael %eax, %ecx
2428 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2429 ; X64-NEXT:    movl $32767, %edx # imm = 0x7FFF
2430 ; X64-NEXT:    cmovbel %ecx, %edx
2431 ; X64-NEXT:    xorl %eax, %eax
2432 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2433 ; X64-NEXT:    cmovnpl %edx, %eax
2434 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
2435 ; X64-NEXT:    popq %rcx
2436 ; X64-NEXT:    retq
2437     %x = call i16 @llvm.fptosi.sat.i16.f16(half %f)
2438     ret i16 %x
2441 ; FIXME: Can be optimizated with maxss + minss
2442 define i19 @test_signed_i19_f16(half %f) nounwind {
2443 ; X86-X87-LABEL: test_signed_i19_f16:
2444 ; X86-X87:       # %bb.0:
2445 ; X86-X87-NEXT:    subl $12, %esp
2446 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2447 ; X86-X87-NEXT:    movl %eax, (%esp)
2448 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2449 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2450 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2451 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2452 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2453 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2454 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
2455 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2456 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2457 ; X86-X87-NEXT:    fxch %st(1)
2458 ; X86-X87-NEXT:    fucom %st(1)
2459 ; X86-X87-NEXT:    fstp %st(1)
2460 ; X86-X87-NEXT:    fnstsw %ax
2461 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2462 ; X86-X87-NEXT:    sahf
2463 ; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
2464 ; X86-X87-NEXT:    jb .LBB24_2
2465 ; X86-X87-NEXT:  # %bb.1:
2466 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2467 ; X86-X87-NEXT:  .LBB24_2:
2468 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2469 ; X86-X87-NEXT:    fxch %st(1)
2470 ; X86-X87-NEXT:    fucom %st(1)
2471 ; X86-X87-NEXT:    fstp %st(1)
2472 ; X86-X87-NEXT:    fnstsw %ax
2473 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2474 ; X86-X87-NEXT:    sahf
2475 ; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
2476 ; X86-X87-NEXT:    ja .LBB24_4
2477 ; X86-X87-NEXT:  # %bb.3:
2478 ; X86-X87-NEXT:    movl %ecx, %edx
2479 ; X86-X87-NEXT:  .LBB24_4:
2480 ; X86-X87-NEXT:    fucomp %st(0)
2481 ; X86-X87-NEXT:    fnstsw %ax
2482 ; X86-X87-NEXT:    xorl %ecx, %ecx
2483 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2484 ; X86-X87-NEXT:    sahf
2485 ; X86-X87-NEXT:    jp .LBB24_6
2486 ; X86-X87-NEXT:  # %bb.5:
2487 ; X86-X87-NEXT:    movl %edx, %ecx
2488 ; X86-X87-NEXT:  .LBB24_6:
2489 ; X86-X87-NEXT:    movl %ecx, %eax
2490 ; X86-X87-NEXT:    addl $12, %esp
2491 ; X86-X87-NEXT:    retl
2493 ; X86-SSE-LABEL: test_signed_i19_f16:
2494 ; X86-SSE:       # %bb.0:
2495 ; X86-SSE-NEXT:    subl $12, %esp
2496 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2497 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2498 ; X86-SSE-NEXT:    movw %ax, (%esp)
2499 ; X86-SSE-NEXT:    calll __extendhfsf2
2500 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2501 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2502 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
2503 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2504 ; X86-SSE-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
2505 ; X86-SSE-NEXT:    cmovael %eax, %ecx
2506 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2507 ; X86-SSE-NEXT:    movl $262143, %edx # imm = 0x3FFFF
2508 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
2509 ; X86-SSE-NEXT:    xorl %eax, %eax
2510 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2511 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
2512 ; X86-SSE-NEXT:    addl $12, %esp
2513 ; X86-SSE-NEXT:    retl
2515 ; X64-LABEL: test_signed_i19_f16:
2516 ; X64:       # %bb.0:
2517 ; X64-NEXT:    pushq %rax
2518 ; X64-NEXT:    callq __extendhfsf2@PLT
2519 ; X64-NEXT:    cvttss2si %xmm0, %eax
2520 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2521 ; X64-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
2522 ; X64-NEXT:    cmovael %eax, %ecx
2523 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2524 ; X64-NEXT:    movl $262143, %edx # imm = 0x3FFFF
2525 ; X64-NEXT:    cmovbel %ecx, %edx
2526 ; X64-NEXT:    xorl %eax, %eax
2527 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2528 ; X64-NEXT:    cmovnpl %edx, %eax
2529 ; X64-NEXT:    popq %rcx
2530 ; X64-NEXT:    retq
2531     %x = call i19 @llvm.fptosi.sat.i19.f16(half %f)
2532     ret i19 %x
2535 define i32 @test_signed_i32_f16(half %f) nounwind {
2536 ; X86-X87-LABEL: test_signed_i32_f16:
2537 ; X86-X87:       # %bb.0:
2538 ; X86-X87-NEXT:    subl $12, %esp
2539 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2540 ; X86-X87-NEXT:    movl %eax, (%esp)
2541 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2542 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2543 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2544 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2545 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2546 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2547 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
2548 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2549 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2550 ; X86-X87-NEXT:    fxch %st(1)
2551 ; X86-X87-NEXT:    fucom %st(1)
2552 ; X86-X87-NEXT:    fstp %st(1)
2553 ; X86-X87-NEXT:    fnstsw %ax
2554 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2555 ; X86-X87-NEXT:    sahf
2556 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
2557 ; X86-X87-NEXT:    jb .LBB25_2
2558 ; X86-X87-NEXT:  # %bb.1:
2559 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2560 ; X86-X87-NEXT:  .LBB25_2:
2561 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2562 ; X86-X87-NEXT:    fxch %st(1)
2563 ; X86-X87-NEXT:    fucom %st(1)
2564 ; X86-X87-NEXT:    fstp %st(1)
2565 ; X86-X87-NEXT:    fnstsw %ax
2566 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2567 ; X86-X87-NEXT:    sahf
2568 ; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
2569 ; X86-X87-NEXT:    ja .LBB25_4
2570 ; X86-X87-NEXT:  # %bb.3:
2571 ; X86-X87-NEXT:    movl %ecx, %edx
2572 ; X86-X87-NEXT:  .LBB25_4:
2573 ; X86-X87-NEXT:    fucomp %st(0)
2574 ; X86-X87-NEXT:    fnstsw %ax
2575 ; X86-X87-NEXT:    xorl %ecx, %ecx
2576 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2577 ; X86-X87-NEXT:    sahf
2578 ; X86-X87-NEXT:    jp .LBB25_6
2579 ; X86-X87-NEXT:  # %bb.5:
2580 ; X86-X87-NEXT:    movl %edx, %ecx
2581 ; X86-X87-NEXT:  .LBB25_6:
2582 ; X86-X87-NEXT:    movl %ecx, %eax
2583 ; X86-X87-NEXT:    addl $12, %esp
2584 ; X86-X87-NEXT:    retl
2586 ; X86-SSE-LABEL: test_signed_i32_f16:
2587 ; X86-SSE:       # %bb.0:
2588 ; X86-SSE-NEXT:    subl $12, %esp
2589 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2590 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2591 ; X86-SSE-NEXT:    movw %ax, (%esp)
2592 ; X86-SSE-NEXT:    calll __extendhfsf2
2593 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2594 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2595 ; X86-SSE-NEXT:    cvttss2si %xmm0, %eax
2596 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2597 ; X86-SSE-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
2598 ; X86-SSE-NEXT:    cmovael %eax, %ecx
2599 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2600 ; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
2601 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
2602 ; X86-SSE-NEXT:    xorl %eax, %eax
2603 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2604 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
2605 ; X86-SSE-NEXT:    addl $12, %esp
2606 ; X86-SSE-NEXT:    retl
2608 ; X64-LABEL: test_signed_i32_f16:
2609 ; X64:       # %bb.0:
2610 ; X64-NEXT:    pushq %rax
2611 ; X64-NEXT:    callq __extendhfsf2@PLT
2612 ; X64-NEXT:    cvttss2si %xmm0, %eax
2613 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2614 ; X64-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
2615 ; X64-NEXT:    cmovael %eax, %ecx
2616 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2617 ; X64-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
2618 ; X64-NEXT:    cmovbel %ecx, %edx
2619 ; X64-NEXT:    xorl %eax, %eax
2620 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2621 ; X64-NEXT:    cmovnpl %edx, %eax
2622 ; X64-NEXT:    popq %rcx
2623 ; X64-NEXT:    retq
2624     %x = call i32 @llvm.fptosi.sat.i32.f16(half %f)
2625     ret i32 %x
2628 define i50 @test_signed_i50_f16(half %f) nounwind {
2629 ; X86-X87-LABEL: test_signed_i50_f16:
2630 ; X86-X87:       # %bb.0:
2631 ; X86-X87-NEXT:    pushl %edi
2632 ; X86-X87-NEXT:    pushl %esi
2633 ; X86-X87-NEXT:    subl $20, %esp
2634 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2635 ; X86-X87-NEXT:    movl %eax, (%esp)
2636 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2637 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2638 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2639 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2640 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2641 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2642 ; X86-X87-NEXT:    fld %st(0)
2643 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
2644 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2645 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2646 ; X86-X87-NEXT:    fxch %st(1)
2647 ; X86-X87-NEXT:    fucom %st(1)
2648 ; X86-X87-NEXT:    fstp %st(1)
2649 ; X86-X87-NEXT:    fnstsw %ax
2650 ; X86-X87-NEXT:    xorl %ecx, %ecx
2651 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2652 ; X86-X87-NEXT:    sahf
2653 ; X86-X87-NEXT:    movl $0, %edx
2654 ; X86-X87-NEXT:    jb .LBB26_2
2655 ; X86-X87-NEXT:  # %bb.1:
2656 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
2657 ; X86-X87-NEXT:  .LBB26_2:
2658 ; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
2659 ; X86-X87-NEXT:    jb .LBB26_4
2660 ; X86-X87-NEXT:  # %bb.3:
2661 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
2662 ; X86-X87-NEXT:  .LBB26_4:
2663 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2664 ; X86-X87-NEXT:    fxch %st(1)
2665 ; X86-X87-NEXT:    fucom %st(1)
2666 ; X86-X87-NEXT:    fstp %st(1)
2667 ; X86-X87-NEXT:    fnstsw %ax
2668 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2669 ; X86-X87-NEXT:    sahf
2670 ; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF
2671 ; X86-X87-NEXT:    ja .LBB26_6
2672 ; X86-X87-NEXT:  # %bb.5:
2673 ; X86-X87-NEXT:    movl %edi, %esi
2674 ; X86-X87-NEXT:  .LBB26_6:
2675 ; X86-X87-NEXT:    movl $-1, %edi
2676 ; X86-X87-NEXT:    ja .LBB26_8
2677 ; X86-X87-NEXT:  # %bb.7:
2678 ; X86-X87-NEXT:    movl %edx, %edi
2679 ; X86-X87-NEXT:  .LBB26_8:
2680 ; X86-X87-NEXT:    fucomp %st(0)
2681 ; X86-X87-NEXT:    fnstsw %ax
2682 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2683 ; X86-X87-NEXT:    sahf
2684 ; X86-X87-NEXT:    movl $0, %edx
2685 ; X86-X87-NEXT:    jp .LBB26_10
2686 ; X86-X87-NEXT:  # %bb.9:
2687 ; X86-X87-NEXT:    movl %edi, %ecx
2688 ; X86-X87-NEXT:    movl %esi, %edx
2689 ; X86-X87-NEXT:  .LBB26_10:
2690 ; X86-X87-NEXT:    movl %ecx, %eax
2691 ; X86-X87-NEXT:    addl $20, %esp
2692 ; X86-X87-NEXT:    popl %esi
2693 ; X86-X87-NEXT:    popl %edi
2694 ; X86-X87-NEXT:    retl
2696 ; X86-SSE-LABEL: test_signed_i50_f16:
2697 ; X86-SSE:       # %bb.0:
2698 ; X86-SSE-NEXT:    pushl %esi
2699 ; X86-SSE-NEXT:    subl $24, %esp
2700 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2701 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2702 ; X86-SSE-NEXT:    movw %ax, (%esp)
2703 ; X86-SSE-NEXT:    calll __extendhfsf2
2704 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2705 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2706 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
2707 ; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
2708 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
2709 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2710 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
2711 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2712 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
2713 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
2714 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
2715 ; X86-SSE-NEXT:    xorl %ecx, %ecx
2716 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2717 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
2718 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
2719 ; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
2720 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
2721 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2722 ; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
2723 ; X86-SSE-NEXT:    cmovbel %eax, %edx
2724 ; X86-SSE-NEXT:    movl $-1, %eax
2725 ; X86-SSE-NEXT:    cmovbel %esi, %eax
2726 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2727 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
2728 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
2729 ; X86-SSE-NEXT:    addl $24, %esp
2730 ; X86-SSE-NEXT:    popl %esi
2731 ; X86-SSE-NEXT:    retl
2733 ; X64-LABEL: test_signed_i50_f16:
2734 ; X64:       # %bb.0:
2735 ; X64-NEXT:    pushq %rax
2736 ; X64-NEXT:    callq __extendhfsf2@PLT
2737 ; X64-NEXT:    cvttss2si %xmm0, %rax
2738 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2739 ; X64-NEXT:    movabsq $-562949953421312, %rcx # imm = 0xFFFE000000000000
2740 ; X64-NEXT:    cmovaeq %rax, %rcx
2741 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2742 ; X64-NEXT:    movabsq $562949953421311, %rdx # imm = 0x1FFFFFFFFFFFF
2743 ; X64-NEXT:    cmovbeq %rcx, %rdx
2744 ; X64-NEXT:    xorl %eax, %eax
2745 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2746 ; X64-NEXT:    cmovnpq %rdx, %rax
2747 ; X64-NEXT:    popq %rcx
2748 ; X64-NEXT:    retq
2749     %x = call i50 @llvm.fptosi.sat.i50.f16(half %f)
2750     ret i50 %x
2753 define i64 @test_signed_i64_f16(half %f) nounwind {
2754 ; X86-X87-LABEL: test_signed_i64_f16:
2755 ; X86-X87:       # %bb.0:
2756 ; X86-X87-NEXT:    pushl %edi
2757 ; X86-X87-NEXT:    pushl %esi
2758 ; X86-X87-NEXT:    subl $20, %esp
2759 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2760 ; X86-X87-NEXT:    movl %eax, (%esp)
2761 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2762 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
2763 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2764 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
2765 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2766 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2767 ; X86-X87-NEXT:    fld %st(0)
2768 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
2769 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
2770 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2771 ; X86-X87-NEXT:    fxch %st(1)
2772 ; X86-X87-NEXT:    fucom %st(1)
2773 ; X86-X87-NEXT:    fstp %st(1)
2774 ; X86-X87-NEXT:    fnstsw %ax
2775 ; X86-X87-NEXT:    xorl %ecx, %ecx
2776 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2777 ; X86-X87-NEXT:    sahf
2778 ; X86-X87-NEXT:    movl $0, %edx
2779 ; X86-X87-NEXT:    jb .LBB27_2
2780 ; X86-X87-NEXT:  # %bb.1:
2781 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
2782 ; X86-X87-NEXT:  .LBB27_2:
2783 ; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
2784 ; X86-X87-NEXT:    jb .LBB27_4
2785 ; X86-X87-NEXT:  # %bb.3:
2786 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
2787 ; X86-X87-NEXT:  .LBB27_4:
2788 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2789 ; X86-X87-NEXT:    fxch %st(1)
2790 ; X86-X87-NEXT:    fucom %st(1)
2791 ; X86-X87-NEXT:    fstp %st(1)
2792 ; X86-X87-NEXT:    fnstsw %ax
2793 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2794 ; X86-X87-NEXT:    sahf
2795 ; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF
2796 ; X86-X87-NEXT:    ja .LBB27_6
2797 ; X86-X87-NEXT:  # %bb.5:
2798 ; X86-X87-NEXT:    movl %edi, %esi
2799 ; X86-X87-NEXT:  .LBB27_6:
2800 ; X86-X87-NEXT:    movl $-1, %edi
2801 ; X86-X87-NEXT:    ja .LBB27_8
2802 ; X86-X87-NEXT:  # %bb.7:
2803 ; X86-X87-NEXT:    movl %edx, %edi
2804 ; X86-X87-NEXT:  .LBB27_8:
2805 ; X86-X87-NEXT:    fucomp %st(0)
2806 ; X86-X87-NEXT:    fnstsw %ax
2807 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2808 ; X86-X87-NEXT:    sahf
2809 ; X86-X87-NEXT:    movl $0, %edx
2810 ; X86-X87-NEXT:    jp .LBB27_10
2811 ; X86-X87-NEXT:  # %bb.9:
2812 ; X86-X87-NEXT:    movl %edi, %ecx
2813 ; X86-X87-NEXT:    movl %esi, %edx
2814 ; X86-X87-NEXT:  .LBB27_10:
2815 ; X86-X87-NEXT:    movl %ecx, %eax
2816 ; X86-X87-NEXT:    addl $20, %esp
2817 ; X86-X87-NEXT:    popl %esi
2818 ; X86-X87-NEXT:    popl %edi
2819 ; X86-X87-NEXT:    retl
2821 ; X86-SSE-LABEL: test_signed_i64_f16:
2822 ; X86-SSE:       # %bb.0:
2823 ; X86-SSE-NEXT:    pushl %esi
2824 ; X86-SSE-NEXT:    subl $24, %esp
2825 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2826 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2827 ; X86-SSE-NEXT:    movw %ax, (%esp)
2828 ; X86-SSE-NEXT:    calll __extendhfsf2
2829 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2830 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2831 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
2832 ; X86-SSE-NEXT:    flds {{[0-9]+}}(%esp)
2833 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
2834 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2835 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
2836 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
2837 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
2838 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
2839 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
2840 ; X86-SSE-NEXT:    xorl %ecx, %ecx
2841 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2842 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
2843 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
2844 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
2845 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
2846 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2847 ; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
2848 ; X86-SSE-NEXT:    cmovbel %eax, %edx
2849 ; X86-SSE-NEXT:    movl $-1, %eax
2850 ; X86-SSE-NEXT:    cmovbel %esi, %eax
2851 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
2852 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
2853 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
2854 ; X86-SSE-NEXT:    addl $24, %esp
2855 ; X86-SSE-NEXT:    popl %esi
2856 ; X86-SSE-NEXT:    retl
2858 ; X64-LABEL: test_signed_i64_f16:
2859 ; X64:       # %bb.0:
2860 ; X64-NEXT:    pushq %rax
2861 ; X64-NEXT:    callq __extendhfsf2@PLT
2862 ; X64-NEXT:    cvttss2si %xmm0, %rax
2863 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2864 ; X64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
2865 ; X64-NEXT:    cmovaeq %rax, %rcx
2866 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
2867 ; X64-NEXT:    movabsq $9223372036854775807, %rdx # imm = 0x7FFFFFFFFFFFFFFF
2868 ; X64-NEXT:    cmovbeq %rcx, %rdx
2869 ; X64-NEXT:    xorl %eax, %eax
2870 ; X64-NEXT:    ucomiss %xmm0, %xmm0
2871 ; X64-NEXT:    cmovnpq %rdx, %rax
2872 ; X64-NEXT:    popq %rcx
2873 ; X64-NEXT:    retq
2874     %x = call i64 @llvm.fptosi.sat.i64.f16(half %f)
2875     ret i64 %x
2878 define i100 @test_signed_i100_f16(half %f) nounwind {
2879 ; X86-X87-LABEL: test_signed_i100_f16:
2880 ; X86-X87:       # %bb.0:
2881 ; X86-X87-NEXT:    pushl %ebp
2882 ; X86-X87-NEXT:    pushl %ebx
2883 ; X86-X87-NEXT:    pushl %edi
2884 ; X86-X87-NEXT:    pushl %esi
2885 ; X86-X87-NEXT:    subl $60, %esp
2886 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
2887 ; X86-X87-NEXT:    movl %eax, (%esp)
2888 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
2889 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
2890 ; X86-X87-NEXT:    movl %eax, (%esp)
2891 ; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
2892 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2893 ; X86-X87-NEXT:    fxch %st(1)
2894 ; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
2895 ; X86-X87-NEXT:    fucompp
2896 ; X86-X87-NEXT:    fnstsw %ax
2897 ; X86-X87-NEXT:    movl %eax, %ebx
2898 ; X86-X87-NEXT:    calll __fixsfti
2899 ; X86-X87-NEXT:    subl $4, %esp
2900 ; X86-X87-NEXT:    xorl %edx, %edx
2901 ; X86-X87-NEXT:    movb %bh, %ah
2902 ; X86-X87-NEXT:    sahf
2903 ; X86-X87-NEXT:    movl $-8, %ebx
2904 ; X86-X87-NEXT:    jb .LBB28_2
2905 ; X86-X87-NEXT:  # %bb.1:
2906 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
2907 ; X86-X87-NEXT:  .LBB28_2:
2908 ; X86-X87-NEXT:    movl $0, %ecx
2909 ; X86-X87-NEXT:    movl $0, %ebp
2910 ; X86-X87-NEXT:    jb .LBB28_4
2911 ; X86-X87-NEXT:  # %bb.3:
2912 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2913 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
2914 ; X86-X87-NEXT:  .LBB28_4:
2915 ; X86-X87-NEXT:    movl $0, %edi
2916 ; X86-X87-NEXT:    jb .LBB28_6
2917 ; X86-X87-NEXT:  # %bb.5:
2918 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
2919 ; X86-X87-NEXT:  .LBB28_6:
2920 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
2921 ; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
2922 ; X86-X87-NEXT:    fucom %st(1)
2923 ; X86-X87-NEXT:    fstp %st(1)
2924 ; X86-X87-NEXT:    fnstsw %ax
2925 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2926 ; X86-X87-NEXT:    sahf
2927 ; X86-X87-NEXT:    movl $-1, %eax
2928 ; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
2929 ; X86-X87-NEXT:    movl $-1, %esi
2930 ; X86-X87-NEXT:    ja .LBB28_8
2931 ; X86-X87-NEXT:  # %bb.7:
2932 ; X86-X87-NEXT:    movl %edi, %eax
2933 ; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2934 ; X86-X87-NEXT:    movl %ecx, %esi
2935 ; X86-X87-NEXT:  .LBB28_8:
2936 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2937 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
2938 ; X86-X87-NEXT:    movl $7, %edi
2939 ; X86-X87-NEXT:    ja .LBB28_10
2940 ; X86-X87-NEXT:  # %bb.9:
2941 ; X86-X87-NEXT:    movl %ebx, %edi
2942 ; X86-X87-NEXT:  .LBB28_10:
2943 ; X86-X87-NEXT:    fucomp %st(0)
2944 ; X86-X87-NEXT:    fnstsw %ax
2945 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
2946 ; X86-X87-NEXT:    sahf
2947 ; X86-X87-NEXT:    movl $0, %eax
2948 ; X86-X87-NEXT:    movl $0, %ebp
2949 ; X86-X87-NEXT:    movl $0, %ebx
2950 ; X86-X87-NEXT:    jp .LBB28_12
2951 ; X86-X87-NEXT:  # %bb.11:
2952 ; X86-X87-NEXT:    movl %edi, %edx
2953 ; X86-X87-NEXT:    movl %esi, %eax
2954 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
2955 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
2956 ; X86-X87-NEXT:  .LBB28_12:
2957 ; X86-X87-NEXT:    movl %ebx, 8(%ecx)
2958 ; X86-X87-NEXT:    movl %ebp, 4(%ecx)
2959 ; X86-X87-NEXT:    movl %eax, (%ecx)
2960 ; X86-X87-NEXT:    andl $15, %edx
2961 ; X86-X87-NEXT:    movb %dl, 12(%ecx)
2962 ; X86-X87-NEXT:    movl %ecx, %eax
2963 ; X86-X87-NEXT:    addl $60, %esp
2964 ; X86-X87-NEXT:    popl %esi
2965 ; X86-X87-NEXT:    popl %edi
2966 ; X86-X87-NEXT:    popl %ebx
2967 ; X86-X87-NEXT:    popl %ebp
2968 ; X86-X87-NEXT:    retl $4
2970 ; X86-SSE-LABEL: test_signed_i100_f16:
2971 ; X86-SSE:       # %bb.0:
2972 ; X86-SSE-NEXT:    pushl %ebp
2973 ; X86-SSE-NEXT:    pushl %ebx
2974 ; X86-SSE-NEXT:    pushl %edi
2975 ; X86-SSE-NEXT:    pushl %esi
2976 ; X86-SSE-NEXT:    subl $44, %esp
2977 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
2978 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
2979 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
2980 ; X86-SSE-NEXT:    movw %ax, (%esp)
2981 ; X86-SSE-NEXT:    calll __extendhfsf2
2982 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
2983 ; X86-SSE-NEXT:    movl %eax, (%esp)
2984 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
2985 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
2986 ; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
2987 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
2988 ; X86-SSE-NEXT:    calll __fixsfti
2989 ; X86-SSE-NEXT:    subl $4, %esp
2990 ; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
2991 ; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
2992 ; X86-SSE-NEXT:    xorl %ebp, %ebp
2993 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
2994 ; X86-SSE-NEXT:    movl $-8, %ebx
2995 ; X86-SSE-NEXT:    movl $0, %ecx
2996 ; X86-SSE-NEXT:    movl $0, %edx
2997 ; X86-SSE-NEXT:    movl $0, %edi
2998 ; X86-SSE-NEXT:    jb .LBB28_2
2999 ; X86-SSE-NEXT:  # %bb.1:
3000 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx
3001 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3002 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
3003 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
3004 ; X86-SSE-NEXT:  .LBB28_2:
3005 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
3006 ; X86-SSE-NEXT:    movl $-1, %eax
3007 ; X86-SSE-NEXT:    cmoval %eax, %edi
3008 ; X86-SSE-NEXT:    cmoval %eax, %edx
3009 ; X86-SSE-NEXT:    cmoval %eax, %ecx
3010 ; X86-SSE-NEXT:    movl $7, %eax
3011 ; X86-SSE-NEXT:    cmovbel %ebx, %eax
3012 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
3013 ; X86-SSE-NEXT:    cmovpl %ebp, %eax
3014 ; X86-SSE-NEXT:    cmovpl %ebp, %ecx
3015 ; X86-SSE-NEXT:    cmovpl %ebp, %edx
3016 ; X86-SSE-NEXT:    cmovpl %ebp, %edi
3017 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
3018 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
3019 ; X86-SSE-NEXT:    movl %ecx, (%esi)
3020 ; X86-SSE-NEXT:    andl $15, %eax
3021 ; X86-SSE-NEXT:    movb %al, 12(%esi)
3022 ; X86-SSE-NEXT:    movl %esi, %eax
3023 ; X86-SSE-NEXT:    addl $44, %esp
3024 ; X86-SSE-NEXT:    popl %esi
3025 ; X86-SSE-NEXT:    popl %edi
3026 ; X86-SSE-NEXT:    popl %ebx
3027 ; X86-SSE-NEXT:    popl %ebp
3028 ; X86-SSE-NEXT:    retl $4
3030 ; X64-LABEL: test_signed_i100_f16:
3031 ; X64:       # %bb.0:
3032 ; X64-NEXT:    pushq %rax
3033 ; X64-NEXT:    callq __extendhfsf2@PLT
3034 ; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
3035 ; X64-NEXT:    callq __fixsfti@PLT
3036 ; X64-NEXT:    xorl %ecx, %ecx
3037 ; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
3038 ; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
3039 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3040 ; X64-NEXT:    cmovbq %rcx, %rax
3041 ; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
3042 ; X64-NEXT:    cmovbq %rsi, %rdx
3043 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3044 ; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
3045 ; X64-NEXT:    cmovaq %rsi, %rdx
3046 ; X64-NEXT:    movq $-1, %rsi
3047 ; X64-NEXT:    cmovaq %rsi, %rax
3048 ; X64-NEXT:    ucomiss %xmm0, %xmm0
3049 ; X64-NEXT:    cmovpq %rcx, %rax
3050 ; X64-NEXT:    cmovpq %rcx, %rdx
3051 ; X64-NEXT:    popq %rcx
3052 ; X64-NEXT:    retq
3053     %x = call i100 @llvm.fptosi.sat.i100.f16(half %f)
3054     ret i100 %x
3057 define i128 @test_signed_i128_f16(half %f) nounwind {
3058 ; X86-X87-LABEL: test_signed_i128_f16:
3059 ; X86-X87:       # %bb.0:
3060 ; X86-X87-NEXT:    pushl %ebp
3061 ; X86-X87-NEXT:    pushl %ebx
3062 ; X86-X87-NEXT:    pushl %edi
3063 ; X86-X87-NEXT:    pushl %esi
3064 ; X86-X87-NEXT:    subl $60, %esp
3065 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3066 ; X86-X87-NEXT:    movl %eax, (%esp)
3067 ; X86-X87-NEXT:    calll __gnu_h2f_ieee
3068 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
3069 ; X86-X87-NEXT:    movl %eax, (%esp)
3070 ; X86-X87-NEXT:    fsts {{[0-9]+}}(%esp)
3071 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3072 ; X86-X87-NEXT:    fxch %st(1)
3073 ; X86-X87-NEXT:    fsts {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
3074 ; X86-X87-NEXT:    fucompp
3075 ; X86-X87-NEXT:    fnstsw %ax
3076 ; X86-X87-NEXT:    movl %eax, %ebx
3077 ; X86-X87-NEXT:    calll __fixsfti
3078 ; X86-X87-NEXT:    subl $4, %esp
3079 ; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
3080 ; X86-X87-NEXT:    movb %bh, %ah
3081 ; X86-X87-NEXT:    sahf
3082 ; X86-X87-NEXT:    movl $0, %eax
3083 ; X86-X87-NEXT:    movl $0, %ebx
3084 ; X86-X87-NEXT:    jae .LBB29_1
3085 ; X86-X87-NEXT:  # %bb.2:
3086 ; X86-X87-NEXT:    movl $0, %edx
3087 ; X86-X87-NEXT:    jae .LBB29_3
3088 ; X86-X87-NEXT:  .LBB29_4:
3089 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
3090 ; X86-X87-NEXT:    jb .LBB29_6
3091 ; X86-X87-NEXT:  .LBB29_5:
3092 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3093 ; X86-X87-NEXT:  .LBB29_6:
3094 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3095 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3096 ; X86-X87-NEXT:    flds {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload
3097 ; X86-X87-NEXT:    fucom %st(1)
3098 ; X86-X87-NEXT:    fstp %st(1)
3099 ; X86-X87-NEXT:    fnstsw %ax
3100 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3101 ; X86-X87-NEXT:    sahf
3102 ; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
3103 ; X86-X87-NEXT:    ja .LBB29_8
3104 ; X86-X87-NEXT:  # %bb.7:
3105 ; X86-X87-NEXT:    movl %ecx, %eax
3106 ; X86-X87-NEXT:  .LBB29_8:
3107 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3108 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3109 ; X86-X87-NEXT:    movl $-1, %ebp
3110 ; X86-X87-NEXT:    movl $-1, %edi
3111 ; X86-X87-NEXT:    movl $-1, %esi
3112 ; X86-X87-NEXT:    ja .LBB29_10
3113 ; X86-X87-NEXT:  # %bb.9:
3114 ; X86-X87-NEXT:    movl %edx, %ebp
3115 ; X86-X87-NEXT:    movl %ebx, %edi
3116 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
3117 ; X86-X87-NEXT:  .LBB29_10:
3118 ; X86-X87-NEXT:    fucomp %st(0)
3119 ; X86-X87-NEXT:    fnstsw %ax
3120 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3121 ; X86-X87-NEXT:    sahf
3122 ; X86-X87-NEXT:    movl $0, %eax
3123 ; X86-X87-NEXT:    movl $0, %edx
3124 ; X86-X87-NEXT:    movl $0, %ebx
3125 ; X86-X87-NEXT:    jp .LBB29_12
3126 ; X86-X87-NEXT:  # %bb.11:
3127 ; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3128 ; X86-X87-NEXT:    movl %edi, %eax
3129 ; X86-X87-NEXT:    movl %ebp, %edx
3130 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
3131 ; X86-X87-NEXT:  .LBB29_12:
3132 ; X86-X87-NEXT:    movl %ebx, 12(%ecx)
3133 ; X86-X87-NEXT:    movl %edx, 8(%ecx)
3134 ; X86-X87-NEXT:    movl %eax, 4(%ecx)
3135 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
3136 ; X86-X87-NEXT:    movl %eax, (%ecx)
3137 ; X86-X87-NEXT:    movl %ecx, %eax
3138 ; X86-X87-NEXT:    addl $60, %esp
3139 ; X86-X87-NEXT:    popl %esi
3140 ; X86-X87-NEXT:    popl %edi
3141 ; X86-X87-NEXT:    popl %ebx
3142 ; X86-X87-NEXT:    popl %ebp
3143 ; X86-X87-NEXT:    retl $4
3144 ; X86-X87-NEXT:  .LBB29_1:
3145 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
3146 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
3147 ; X86-X87-NEXT:    movl $0, %edx
3148 ; X86-X87-NEXT:    jb .LBB29_4
3149 ; X86-X87-NEXT:  .LBB29_3:
3150 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
3151 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
3152 ; X86-X87-NEXT:    jae .LBB29_5
3153 ; X86-X87-NEXT:    jmp .LBB29_6
3155 ; X86-SSE-LABEL: test_signed_i128_f16:
3156 ; X86-SSE:       # %bb.0:
3157 ; X86-SSE-NEXT:    pushl %ebp
3158 ; X86-SSE-NEXT:    pushl %ebx
3159 ; X86-SSE-NEXT:    pushl %edi
3160 ; X86-SSE-NEXT:    pushl %esi
3161 ; X86-SSE-NEXT:    subl $44, %esp
3162 ; X86-SSE-NEXT:    pinsrw $0, {{[0-9]+}}(%esp), %xmm0
3163 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
3164 ; X86-SSE-NEXT:    pextrw $0, %xmm0, %eax
3165 ; X86-SSE-NEXT:    movw %ax, (%esp)
3166 ; X86-SSE-NEXT:    calll __extendhfsf2
3167 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
3168 ; X86-SSE-NEXT:    movl %eax, (%esp)
3169 ; X86-SSE-NEXT:    fstps {{[0-9]+}}(%esp)
3170 ; X86-SSE-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
3171 ; X86-SSE-NEXT:    movss %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
3172 ; X86-SSE-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
3173 ; X86-SSE-NEXT:    calll __fixsfti
3174 ; X86-SSE-NEXT:    subl $4, %esp
3175 ; X86-SSE-NEXT:    xorl %ecx, %ecx
3176 ; X86-SSE-NEXT:    movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Reload
3177 ; X86-SSE-NEXT:    # xmm0 = mem[0],zero,zero,zero
3178 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
3179 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
3180 ; X86-SSE-NEXT:    cmovbl %ecx, %eax
3181 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
3182 ; X86-SSE-NEXT:    cmovbl %ecx, %edx
3183 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
3184 ; X86-SSE-NEXT:    cmovbl %ecx, %edi
3185 ; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
3186 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
3187 ; X86-SSE-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}, %xmm0
3188 ; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
3189 ; X86-SSE-NEXT:    cmovbel %ebp, %ebx
3190 ; X86-SSE-NEXT:    movl $-1, %ebp
3191 ; X86-SSE-NEXT:    cmoval %ebp, %edi
3192 ; X86-SSE-NEXT:    cmoval %ebp, %edx
3193 ; X86-SSE-NEXT:    cmoval %ebp, %eax
3194 ; X86-SSE-NEXT:    ucomiss %xmm0, %xmm0
3195 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
3196 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
3197 ; X86-SSE-NEXT:    cmovpl %ecx, %edi
3198 ; X86-SSE-NEXT:    cmovpl %ecx, %ebx
3199 ; X86-SSE-NEXT:    movl %ebx, 12(%esi)
3200 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
3201 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
3202 ; X86-SSE-NEXT:    movl %eax, (%esi)
3203 ; X86-SSE-NEXT:    movl %esi, %eax
3204 ; X86-SSE-NEXT:    addl $44, %esp
3205 ; X86-SSE-NEXT:    popl %esi
3206 ; X86-SSE-NEXT:    popl %edi
3207 ; X86-SSE-NEXT:    popl %ebx
3208 ; X86-SSE-NEXT:    popl %ebp
3209 ; X86-SSE-NEXT:    retl $4
3211 ; X64-LABEL: test_signed_i128_f16:
3212 ; X64:       # %bb.0:
3213 ; X64-NEXT:    pushq %rax
3214 ; X64-NEXT:    callq __extendhfsf2@PLT
3215 ; X64-NEXT:    movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
3216 ; X64-NEXT:    callq __fixsfti@PLT
3217 ; X64-NEXT:    xorl %ecx, %ecx
3218 ; X64-NEXT:    movss {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Reload
3219 ; X64-NEXT:    # xmm0 = mem[0],zero,zero,zero
3220 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3221 ; X64-NEXT:    cmovbq %rcx, %rax
3222 ; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
3223 ; X64-NEXT:    cmovbq %rsi, %rdx
3224 ; X64-NEXT:    ucomiss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
3225 ; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
3226 ; X64-NEXT:    cmovaq %rsi, %rdx
3227 ; X64-NEXT:    movq $-1, %rsi
3228 ; X64-NEXT:    cmovaq %rsi, %rax
3229 ; X64-NEXT:    ucomiss %xmm0, %xmm0
3230 ; X64-NEXT:    cmovpq %rcx, %rax
3231 ; X64-NEXT:    cmovpq %rcx, %rdx
3232 ; X64-NEXT:    popq %rcx
3233 ; X64-NEXT:    retq
3234     %x = call i128 @llvm.fptosi.sat.i128.f16(half %f)
3235     ret i128 %x
3239 ; 80-bit float to signed integer
3242 declare   i1 @llvm.fptosi.sat.i1.f80  (x86_fp80)
3243 declare   i8 @llvm.fptosi.sat.i8.f80  (x86_fp80)
3244 declare  i13 @llvm.fptosi.sat.i13.f80 (x86_fp80)
3245 declare  i16 @llvm.fptosi.sat.i16.f80 (x86_fp80)
3246 declare  i19 @llvm.fptosi.sat.i19.f80 (x86_fp80)
3247 declare  i32 @llvm.fptosi.sat.i32.f80 (x86_fp80)
3248 declare  i50 @llvm.fptosi.sat.i50.f80 (x86_fp80)
3249 declare  i64 @llvm.fptosi.sat.i64.f80 (x86_fp80)
3250 declare i100 @llvm.fptosi.sat.i100.f80(x86_fp80)
3251 declare i128 @llvm.fptosi.sat.i128.f80(x86_fp80)
3253 define i1 @test_signed_i1_f80(x86_fp80 %f) nounwind {
3254 ; X86-X87-LABEL: test_signed_i1_f80:
3255 ; X86-X87:       # %bb.0:
3256 ; X86-X87-NEXT:    pushl %ebx
3257 ; X86-X87-NEXT:    subl $8, %esp
3258 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3259 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
3260 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3261 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3262 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3263 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3264 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
3265 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3266 ; X86-X87-NEXT:    fld1
3267 ; X86-X87-NEXT:    fchs
3268 ; X86-X87-NEXT:    fxch %st(1)
3269 ; X86-X87-NEXT:    fucom %st(1)
3270 ; X86-X87-NEXT:    fstp %st(1)
3271 ; X86-X87-NEXT:    fnstsw %ax
3272 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3273 ; X86-X87-NEXT:    sahf
3274 ; X86-X87-NEXT:    movb $-1, %dl
3275 ; X86-X87-NEXT:    jb .LBB30_2
3276 ; X86-X87-NEXT:  # %bb.1:
3277 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
3278 ; X86-X87-NEXT:  .LBB30_2:
3279 ; X86-X87-NEXT:    fldz
3280 ; X86-X87-NEXT:    fxch %st(1)
3281 ; X86-X87-NEXT:    fucom %st(1)
3282 ; X86-X87-NEXT:    fstp %st(1)
3283 ; X86-X87-NEXT:    fnstsw %ax
3284 ; X86-X87-NEXT:    xorl %ecx, %ecx
3285 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3286 ; X86-X87-NEXT:    sahf
3287 ; X86-X87-NEXT:    movl $0, %ebx
3288 ; X86-X87-NEXT:    ja .LBB30_4
3289 ; X86-X87-NEXT:  # %bb.3:
3290 ; X86-X87-NEXT:    movl %edx, %ebx
3291 ; X86-X87-NEXT:  .LBB30_4:
3292 ; X86-X87-NEXT:    fucomp %st(0)
3293 ; X86-X87-NEXT:    fnstsw %ax
3294 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3295 ; X86-X87-NEXT:    sahf
3296 ; X86-X87-NEXT:    jp .LBB30_6
3297 ; X86-X87-NEXT:  # %bb.5:
3298 ; X86-X87-NEXT:    movl %ebx, %ecx
3299 ; X86-X87-NEXT:  .LBB30_6:
3300 ; X86-X87-NEXT:    movl %ecx, %eax
3301 ; X86-X87-NEXT:    addl $8, %esp
3302 ; X86-X87-NEXT:    popl %ebx
3303 ; X86-X87-NEXT:    retl
3305 ; X86-SSE-LABEL: test_signed_i1_f80:
3306 ; X86-SSE:       # %bb.0:
3307 ; X86-SSE-NEXT:    subl $8, %esp
3308 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3309 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
3310 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3311 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3312 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3313 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3314 ; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
3315 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3316 ; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %ecx
3317 ; X86-SSE-NEXT:    fld1
3318 ; X86-SSE-NEXT:    fchs
3319 ; X86-SSE-NEXT:    fxch %st(1)
3320 ; X86-SSE-NEXT:    fucomi %st(1), %st
3321 ; X86-SSE-NEXT:    fstp %st(1)
3322 ; X86-SSE-NEXT:    movl $255, %eax
3323 ; X86-SSE-NEXT:    cmovael %ecx, %eax
3324 ; X86-SSE-NEXT:    xorl %ecx, %ecx
3325 ; X86-SSE-NEXT:    fldz
3326 ; X86-SSE-NEXT:    fxch %st(1)
3327 ; X86-SSE-NEXT:    fucomi %st(1), %st
3328 ; X86-SSE-NEXT:    fstp %st(1)
3329 ; X86-SSE-NEXT:    cmoval %ecx, %eax
3330 ; X86-SSE-NEXT:    fucompi %st(0), %st
3331 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
3332 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
3333 ; X86-SSE-NEXT:    addl $8, %esp
3334 ; X86-SSE-NEXT:    retl
3336 ; X64-LABEL: test_signed_i1_f80:
3337 ; X64:       # %bb.0:
3338 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3339 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3340 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3341 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3342 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3343 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3344 ; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
3345 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3346 ; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %ecx
3347 ; X64-NEXT:    fld1
3348 ; X64-NEXT:    fchs
3349 ; X64-NEXT:    fxch %st(1)
3350 ; X64-NEXT:    fucomi %st(1), %st
3351 ; X64-NEXT:    fstp %st(1)
3352 ; X64-NEXT:    movl $255, %eax
3353 ; X64-NEXT:    cmovael %ecx, %eax
3354 ; X64-NEXT:    xorl %ecx, %ecx
3355 ; X64-NEXT:    fldz
3356 ; X64-NEXT:    fxch %st(1)
3357 ; X64-NEXT:    fucomi %st(1), %st
3358 ; X64-NEXT:    fstp %st(1)
3359 ; X64-NEXT:    cmoval %ecx, %eax
3360 ; X64-NEXT:    fucompi %st(0), %st
3361 ; X64-NEXT:    cmovpl %ecx, %eax
3362 ; X64-NEXT:    # kill: def $al killed $al killed $eax
3363 ; X64-NEXT:    retq
3364     %x = call i1 @llvm.fptosi.sat.i1.f80(x86_fp80 %f)
3365     ret i1 %x
3368 define i8 @test_signed_i8_f80(x86_fp80 %f) nounwind {
3369 ; X86-X87-LABEL: test_signed_i8_f80:
3370 ; X86-X87:       # %bb.0:
3371 ; X86-X87-NEXT:    subl $8, %esp
3372 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3373 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
3374 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3375 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3376 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3377 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3378 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
3379 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3380 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3381 ; X86-X87-NEXT:    fxch %st(1)
3382 ; X86-X87-NEXT:    fucom %st(1)
3383 ; X86-X87-NEXT:    fstp %st(1)
3384 ; X86-X87-NEXT:    fnstsw %ax
3385 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3386 ; X86-X87-NEXT:    sahf
3387 ; X86-X87-NEXT:    movb $-128, %dl
3388 ; X86-X87-NEXT:    jb .LBB31_2
3389 ; X86-X87-NEXT:  # %bb.1:
3390 ; X86-X87-NEXT:    movzbl {{[0-9]+}}(%esp), %edx
3391 ; X86-X87-NEXT:  .LBB31_2:
3392 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3393 ; X86-X87-NEXT:    fxch %st(1)
3394 ; X86-X87-NEXT:    fucom %st(1)
3395 ; X86-X87-NEXT:    fstp %st(1)
3396 ; X86-X87-NEXT:    fnstsw %ax
3397 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3398 ; X86-X87-NEXT:    sahf
3399 ; X86-X87-NEXT:    movb $127, %cl
3400 ; X86-X87-NEXT:    ja .LBB31_4
3401 ; X86-X87-NEXT:  # %bb.3:
3402 ; X86-X87-NEXT:    movl %edx, %ecx
3403 ; X86-X87-NEXT:  .LBB31_4:
3404 ; X86-X87-NEXT:    fucomp %st(0)
3405 ; X86-X87-NEXT:    fnstsw %ax
3406 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3407 ; X86-X87-NEXT:    sahf
3408 ; X86-X87-NEXT:    jnp .LBB31_6
3409 ; X86-X87-NEXT:  # %bb.5:
3410 ; X86-X87-NEXT:    xorl %ecx, %ecx
3411 ; X86-X87-NEXT:  .LBB31_6:
3412 ; X86-X87-NEXT:    movl %ecx, %eax
3413 ; X86-X87-NEXT:    addl $8, %esp
3414 ; X86-X87-NEXT:    retl
3416 ; X86-SSE-LABEL: test_signed_i8_f80:
3417 ; X86-SSE:       # %bb.0:
3418 ; X86-SSE-NEXT:    subl $8, %esp
3419 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3420 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
3421 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3422 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3423 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3424 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3425 ; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
3426 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3427 ; X86-SSE-NEXT:    movzbl {{[0-9]+}}(%esp), %eax
3428 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3429 ; X86-SSE-NEXT:    fxch %st(1)
3430 ; X86-SSE-NEXT:    fucomi %st(1), %st
3431 ; X86-SSE-NEXT:    fstp %st(1)
3432 ; X86-SSE-NEXT:    movl $128, %ecx
3433 ; X86-SSE-NEXT:    cmovael %eax, %ecx
3434 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3435 ; X86-SSE-NEXT:    fxch %st(1)
3436 ; X86-SSE-NEXT:    fucomi %st(1), %st
3437 ; X86-SSE-NEXT:    fstp %st(1)
3438 ; X86-SSE-NEXT:    movl $127, %edx
3439 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
3440 ; X86-SSE-NEXT:    xorl %eax, %eax
3441 ; X86-SSE-NEXT:    fucompi %st(0), %st
3442 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
3443 ; X86-SSE-NEXT:    # kill: def $al killed $al killed $eax
3444 ; X86-SSE-NEXT:    addl $8, %esp
3445 ; X86-SSE-NEXT:    retl
3447 ; X64-LABEL: test_signed_i8_f80:
3448 ; X64:       # %bb.0:
3449 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3450 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3451 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3452 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3453 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3454 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3455 ; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
3456 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3457 ; X64-NEXT:    movzbl -{{[0-9]+}}(%rsp), %eax
3458 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3459 ; X64-NEXT:    fxch %st(1)
3460 ; X64-NEXT:    fucomi %st(1), %st
3461 ; X64-NEXT:    fstp %st(1)
3462 ; X64-NEXT:    movl $128, %ecx
3463 ; X64-NEXT:    cmovael %eax, %ecx
3464 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3465 ; X64-NEXT:    fxch %st(1)
3466 ; X64-NEXT:    fucomi %st(1), %st
3467 ; X64-NEXT:    fstp %st(1)
3468 ; X64-NEXT:    movl $127, %edx
3469 ; X64-NEXT:    cmovbel %ecx, %edx
3470 ; X64-NEXT:    xorl %eax, %eax
3471 ; X64-NEXT:    fucompi %st(0), %st
3472 ; X64-NEXT:    cmovnpl %edx, %eax
3473 ; X64-NEXT:    # kill: def $al killed $al killed $eax
3474 ; X64-NEXT:    retq
3475     %x = call i8 @llvm.fptosi.sat.i8.f80(x86_fp80 %f)
3476     ret i8 %x
3479 define i13 @test_signed_i13_f80(x86_fp80 %f) nounwind {
3480 ; X86-X87-LABEL: test_signed_i13_f80:
3481 ; X86-X87:       # %bb.0:
3482 ; X86-X87-NEXT:    subl $8, %esp
3483 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3484 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
3485 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3486 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3487 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3488 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3489 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
3490 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3491 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3492 ; X86-X87-NEXT:    fxch %st(1)
3493 ; X86-X87-NEXT:    fucom %st(1)
3494 ; X86-X87-NEXT:    fstp %st(1)
3495 ; X86-X87-NEXT:    fnstsw %ax
3496 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3497 ; X86-X87-NEXT:    sahf
3498 ; X86-X87-NEXT:    movl $61440, %ecx # imm = 0xF000
3499 ; X86-X87-NEXT:    jb .LBB32_2
3500 ; X86-X87-NEXT:  # %bb.1:
3501 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
3502 ; X86-X87-NEXT:  .LBB32_2:
3503 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3504 ; X86-X87-NEXT:    fxch %st(1)
3505 ; X86-X87-NEXT:    fucom %st(1)
3506 ; X86-X87-NEXT:    fstp %st(1)
3507 ; X86-X87-NEXT:    fnstsw %ax
3508 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3509 ; X86-X87-NEXT:    sahf
3510 ; X86-X87-NEXT:    movl $4095, %edx # imm = 0xFFF
3511 ; X86-X87-NEXT:    ja .LBB32_4
3512 ; X86-X87-NEXT:  # %bb.3:
3513 ; X86-X87-NEXT:    movl %ecx, %edx
3514 ; X86-X87-NEXT:  .LBB32_4:
3515 ; X86-X87-NEXT:    fucomp %st(0)
3516 ; X86-X87-NEXT:    fnstsw %ax
3517 ; X86-X87-NEXT:    xorl %ecx, %ecx
3518 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3519 ; X86-X87-NEXT:    sahf
3520 ; X86-X87-NEXT:    jp .LBB32_6
3521 ; X86-X87-NEXT:  # %bb.5:
3522 ; X86-X87-NEXT:    movl %edx, %ecx
3523 ; X86-X87-NEXT:  .LBB32_6:
3524 ; X86-X87-NEXT:    movl %ecx, %eax
3525 ; X86-X87-NEXT:    addl $8, %esp
3526 ; X86-X87-NEXT:    retl
3528 ; X86-SSE-LABEL: test_signed_i13_f80:
3529 ; X86-SSE:       # %bb.0:
3530 ; X86-SSE-NEXT:    subl $8, %esp
3531 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3532 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
3533 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3534 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3535 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3536 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3537 ; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
3538 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3539 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3540 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3541 ; X86-SSE-NEXT:    fxch %st(1)
3542 ; X86-SSE-NEXT:    fucomi %st(1), %st
3543 ; X86-SSE-NEXT:    fstp %st(1)
3544 ; X86-SSE-NEXT:    movl $61440, %ecx # imm = 0xF000
3545 ; X86-SSE-NEXT:    cmovael %eax, %ecx
3546 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3547 ; X86-SSE-NEXT:    fxch %st(1)
3548 ; X86-SSE-NEXT:    fucomi %st(1), %st
3549 ; X86-SSE-NEXT:    fstp %st(1)
3550 ; X86-SSE-NEXT:    movl $4095, %edx # imm = 0xFFF
3551 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
3552 ; X86-SSE-NEXT:    xorl %eax, %eax
3553 ; X86-SSE-NEXT:    fucompi %st(0), %st
3554 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
3555 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
3556 ; X86-SSE-NEXT:    addl $8, %esp
3557 ; X86-SSE-NEXT:    retl
3559 ; X64-LABEL: test_signed_i13_f80:
3560 ; X64:       # %bb.0:
3561 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3562 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3563 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3564 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3565 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3566 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3567 ; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
3568 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3569 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3570 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3571 ; X64-NEXT:    fxch %st(1)
3572 ; X64-NEXT:    fucomi %st(1), %st
3573 ; X64-NEXT:    fstp %st(1)
3574 ; X64-NEXT:    movl $61440, %ecx # imm = 0xF000
3575 ; X64-NEXT:    cmovael %eax, %ecx
3576 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3577 ; X64-NEXT:    fxch %st(1)
3578 ; X64-NEXT:    fucomi %st(1), %st
3579 ; X64-NEXT:    fstp %st(1)
3580 ; X64-NEXT:    movl $4095, %edx # imm = 0xFFF
3581 ; X64-NEXT:    cmovbel %ecx, %edx
3582 ; X64-NEXT:    xorl %eax, %eax
3583 ; X64-NEXT:    fucompi %st(0), %st
3584 ; X64-NEXT:    cmovnpl %edx, %eax
3585 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
3586 ; X64-NEXT:    retq
3587     %x = call i13 @llvm.fptosi.sat.i13.f80(x86_fp80 %f)
3588     ret i13 %x
3591 define i16 @test_signed_i16_f80(x86_fp80 %f) nounwind {
3592 ; X86-X87-LABEL: test_signed_i16_f80:
3593 ; X86-X87:       # %bb.0:
3594 ; X86-X87-NEXT:    subl $8, %esp
3595 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3596 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
3597 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3598 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3599 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3600 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3601 ; X86-X87-NEXT:    fists {{[0-9]+}}(%esp)
3602 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3603 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3604 ; X86-X87-NEXT:    fxch %st(1)
3605 ; X86-X87-NEXT:    fucom %st(1)
3606 ; X86-X87-NEXT:    fstp %st(1)
3607 ; X86-X87-NEXT:    fnstsw %ax
3608 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3609 ; X86-X87-NEXT:    sahf
3610 ; X86-X87-NEXT:    movl $32768, %ecx # imm = 0x8000
3611 ; X86-X87-NEXT:    jb .LBB33_2
3612 ; X86-X87-NEXT:  # %bb.1:
3613 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
3614 ; X86-X87-NEXT:  .LBB33_2:
3615 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3616 ; X86-X87-NEXT:    fxch %st(1)
3617 ; X86-X87-NEXT:    fucom %st(1)
3618 ; X86-X87-NEXT:    fstp %st(1)
3619 ; X86-X87-NEXT:    fnstsw %ax
3620 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3621 ; X86-X87-NEXT:    sahf
3622 ; X86-X87-NEXT:    movl $32767, %edx # imm = 0x7FFF
3623 ; X86-X87-NEXT:    ja .LBB33_4
3624 ; X86-X87-NEXT:  # %bb.3:
3625 ; X86-X87-NEXT:    movl %ecx, %edx
3626 ; X86-X87-NEXT:  .LBB33_4:
3627 ; X86-X87-NEXT:    fucomp %st(0)
3628 ; X86-X87-NEXT:    fnstsw %ax
3629 ; X86-X87-NEXT:    xorl %ecx, %ecx
3630 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3631 ; X86-X87-NEXT:    sahf
3632 ; X86-X87-NEXT:    jp .LBB33_6
3633 ; X86-X87-NEXT:  # %bb.5:
3634 ; X86-X87-NEXT:    movl %edx, %ecx
3635 ; X86-X87-NEXT:  .LBB33_6:
3636 ; X86-X87-NEXT:    movl %ecx, %eax
3637 ; X86-X87-NEXT:    addl $8, %esp
3638 ; X86-X87-NEXT:    retl
3640 ; X86-SSE-LABEL: test_signed_i16_f80:
3641 ; X86-SSE:       # %bb.0:
3642 ; X86-SSE-NEXT:    subl $8, %esp
3643 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3644 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
3645 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3646 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3647 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3648 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3649 ; X86-SSE-NEXT:    fists {{[0-9]+}}(%esp)
3650 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3651 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3652 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3653 ; X86-SSE-NEXT:    fxch %st(1)
3654 ; X86-SSE-NEXT:    fucomi %st(1), %st
3655 ; X86-SSE-NEXT:    fstp %st(1)
3656 ; X86-SSE-NEXT:    movl $32768, %ecx # imm = 0x8000
3657 ; X86-SSE-NEXT:    cmovael %eax, %ecx
3658 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3659 ; X86-SSE-NEXT:    fxch %st(1)
3660 ; X86-SSE-NEXT:    fucomi %st(1), %st
3661 ; X86-SSE-NEXT:    fstp %st(1)
3662 ; X86-SSE-NEXT:    movl $32767, %edx # imm = 0x7FFF
3663 ; X86-SSE-NEXT:    cmovbel %ecx, %edx
3664 ; X86-SSE-NEXT:    xorl %eax, %eax
3665 ; X86-SSE-NEXT:    fucompi %st(0), %st
3666 ; X86-SSE-NEXT:    cmovnpl %edx, %eax
3667 ; X86-SSE-NEXT:    # kill: def $ax killed $ax killed $eax
3668 ; X86-SSE-NEXT:    addl $8, %esp
3669 ; X86-SSE-NEXT:    retl
3671 ; X64-LABEL: test_signed_i16_f80:
3672 ; X64:       # %bb.0:
3673 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3674 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3675 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3676 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3677 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3678 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3679 ; X64-NEXT:    fists -{{[0-9]+}}(%rsp)
3680 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3681 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3682 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3683 ; X64-NEXT:    fxch %st(1)
3684 ; X64-NEXT:    fucomi %st(1), %st
3685 ; X64-NEXT:    fstp %st(1)
3686 ; X64-NEXT:    movl $32768, %ecx # imm = 0x8000
3687 ; X64-NEXT:    cmovael %eax, %ecx
3688 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3689 ; X64-NEXT:    fxch %st(1)
3690 ; X64-NEXT:    fucomi %st(1), %st
3691 ; X64-NEXT:    fstp %st(1)
3692 ; X64-NEXT:    movl $32767, %edx # imm = 0x7FFF
3693 ; X64-NEXT:    cmovbel %ecx, %edx
3694 ; X64-NEXT:    xorl %eax, %eax
3695 ; X64-NEXT:    fucompi %st(0), %st
3696 ; X64-NEXT:    cmovnpl %edx, %eax
3697 ; X64-NEXT:    # kill: def $ax killed $ax killed $eax
3698 ; X64-NEXT:    retq
3699     %x = call i16 @llvm.fptosi.sat.i16.f80(x86_fp80 %f)
3700     ret i16 %x
3703 define i19 @test_signed_i19_f80(x86_fp80 %f) nounwind {
3704 ; X86-X87-LABEL: test_signed_i19_f80:
3705 ; X86-X87:       # %bb.0:
3706 ; X86-X87-NEXT:    subl $8, %esp
3707 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3708 ; X86-X87-NEXT:    fnstcw (%esp)
3709 ; X86-X87-NEXT:    movzwl (%esp), %eax
3710 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3711 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3712 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3713 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
3714 ; X86-X87-NEXT:    fldcw (%esp)
3715 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3716 ; X86-X87-NEXT:    fxch %st(1)
3717 ; X86-X87-NEXT:    fucom %st(1)
3718 ; X86-X87-NEXT:    fstp %st(1)
3719 ; X86-X87-NEXT:    fnstsw %ax
3720 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3721 ; X86-X87-NEXT:    sahf
3722 ; X86-X87-NEXT:    movl $-262144, %ecx # imm = 0xFFFC0000
3723 ; X86-X87-NEXT:    jb .LBB34_2
3724 ; X86-X87-NEXT:  # %bb.1:
3725 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3726 ; X86-X87-NEXT:  .LBB34_2:
3727 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3728 ; X86-X87-NEXT:    fxch %st(1)
3729 ; X86-X87-NEXT:    fucom %st(1)
3730 ; X86-X87-NEXT:    fstp %st(1)
3731 ; X86-X87-NEXT:    fnstsw %ax
3732 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3733 ; X86-X87-NEXT:    sahf
3734 ; X86-X87-NEXT:    movl $262143, %edx # imm = 0x3FFFF
3735 ; X86-X87-NEXT:    ja .LBB34_4
3736 ; X86-X87-NEXT:  # %bb.3:
3737 ; X86-X87-NEXT:    movl %ecx, %edx
3738 ; X86-X87-NEXT:  .LBB34_4:
3739 ; X86-X87-NEXT:    fucomp %st(0)
3740 ; X86-X87-NEXT:    fnstsw %ax
3741 ; X86-X87-NEXT:    xorl %ecx, %ecx
3742 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3743 ; X86-X87-NEXT:    sahf
3744 ; X86-X87-NEXT:    jp .LBB34_6
3745 ; X86-X87-NEXT:  # %bb.5:
3746 ; X86-X87-NEXT:    movl %edx, %ecx
3747 ; X86-X87-NEXT:  .LBB34_6:
3748 ; X86-X87-NEXT:    movl %ecx, %eax
3749 ; X86-X87-NEXT:    addl $8, %esp
3750 ; X86-X87-NEXT:    retl
3752 ; X86-SSE-LABEL: test_signed_i19_f80:
3753 ; X86-SSE:       # %bb.0:
3754 ; X86-SSE-NEXT:    subl $8, %esp
3755 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3756 ; X86-SSE-NEXT:    fnstcw (%esp)
3757 ; X86-SSE-NEXT:    movzwl (%esp), %eax
3758 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3759 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3760 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3761 ; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)
3762 ; X86-SSE-NEXT:    fldcw (%esp)
3763 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3764 ; X86-SSE-NEXT:    fxch %st(1)
3765 ; X86-SSE-NEXT:    fucomi %st(1), %st
3766 ; X86-SSE-NEXT:    fstp %st(1)
3767 ; X86-SSE-NEXT:    movl $-262144, %eax # imm = 0xFFFC0000
3768 ; X86-SSE-NEXT:    jb .LBB34_2
3769 ; X86-SSE-NEXT:  # %bb.1:
3770 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
3771 ; X86-SSE-NEXT:  .LBB34_2:
3772 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3773 ; X86-SSE-NEXT:    fxch %st(1)
3774 ; X86-SSE-NEXT:    fucomi %st(1), %st
3775 ; X86-SSE-NEXT:    fstp %st(1)
3776 ; X86-SSE-NEXT:    movl $262143, %ecx # imm = 0x3FFFF
3777 ; X86-SSE-NEXT:    cmovbel %eax, %ecx
3778 ; X86-SSE-NEXT:    xorl %eax, %eax
3779 ; X86-SSE-NEXT:    fucompi %st(0), %st
3780 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
3781 ; X86-SSE-NEXT:    addl $8, %esp
3782 ; X86-SSE-NEXT:    retl
3784 ; X64-LABEL: test_signed_i19_f80:
3785 ; X64:       # %bb.0:
3786 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3787 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3788 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3789 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3790 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3791 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3792 ; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)
3793 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3794 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3795 ; X64-NEXT:    fxch %st(1)
3796 ; X64-NEXT:    fucomi %st(1), %st
3797 ; X64-NEXT:    fstp %st(1)
3798 ; X64-NEXT:    movl $-262144, %eax # imm = 0xFFFC0000
3799 ; X64-NEXT:    jb .LBB34_2
3800 ; X64-NEXT:  # %bb.1:
3801 ; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
3802 ; X64-NEXT:  .LBB34_2:
3803 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3804 ; X64-NEXT:    fxch %st(1)
3805 ; X64-NEXT:    fucomi %st(1), %st
3806 ; X64-NEXT:    fstp %st(1)
3807 ; X64-NEXT:    movl $262143, %ecx # imm = 0x3FFFF
3808 ; X64-NEXT:    cmovbel %eax, %ecx
3809 ; X64-NEXT:    xorl %eax, %eax
3810 ; X64-NEXT:    fucompi %st(0), %st
3811 ; X64-NEXT:    cmovnpl %ecx, %eax
3812 ; X64-NEXT:    retq
3813     %x = call i19 @llvm.fptosi.sat.i19.f80(x86_fp80 %f)
3814     ret i19 %x
3817 define i32 @test_signed_i32_f80(x86_fp80 %f) nounwind {
3818 ; X86-X87-LABEL: test_signed_i32_f80:
3819 ; X86-X87:       # %bb.0:
3820 ; X86-X87-NEXT:    subl $8, %esp
3821 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3822 ; X86-X87-NEXT:    fnstcw (%esp)
3823 ; X86-X87-NEXT:    movzwl (%esp), %eax
3824 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3825 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3826 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3827 ; X86-X87-NEXT:    fistl {{[0-9]+}}(%esp)
3828 ; X86-X87-NEXT:    fldcw (%esp)
3829 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3830 ; X86-X87-NEXT:    fxch %st(1)
3831 ; X86-X87-NEXT:    fucom %st(1)
3832 ; X86-X87-NEXT:    fstp %st(1)
3833 ; X86-X87-NEXT:    fnstsw %ax
3834 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3835 ; X86-X87-NEXT:    sahf
3836 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
3837 ; X86-X87-NEXT:    jb .LBB35_2
3838 ; X86-X87-NEXT:  # %bb.1:
3839 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
3840 ; X86-X87-NEXT:  .LBB35_2:
3841 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
3842 ; X86-X87-NEXT:    fxch %st(1)
3843 ; X86-X87-NEXT:    fucom %st(1)
3844 ; X86-X87-NEXT:    fstp %st(1)
3845 ; X86-X87-NEXT:    fnstsw %ax
3846 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3847 ; X86-X87-NEXT:    sahf
3848 ; X86-X87-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
3849 ; X86-X87-NEXT:    ja .LBB35_4
3850 ; X86-X87-NEXT:  # %bb.3:
3851 ; X86-X87-NEXT:    movl %ecx, %edx
3852 ; X86-X87-NEXT:  .LBB35_4:
3853 ; X86-X87-NEXT:    fucomp %st(0)
3854 ; X86-X87-NEXT:    fnstsw %ax
3855 ; X86-X87-NEXT:    xorl %ecx, %ecx
3856 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3857 ; X86-X87-NEXT:    sahf
3858 ; X86-X87-NEXT:    jp .LBB35_6
3859 ; X86-X87-NEXT:  # %bb.5:
3860 ; X86-X87-NEXT:    movl %edx, %ecx
3861 ; X86-X87-NEXT:  .LBB35_6:
3862 ; X86-X87-NEXT:    movl %ecx, %eax
3863 ; X86-X87-NEXT:    addl $8, %esp
3864 ; X86-X87-NEXT:    retl
3866 ; X86-SSE-LABEL: test_signed_i32_f80:
3867 ; X86-SSE:       # %bb.0:
3868 ; X86-SSE-NEXT:    subl $8, %esp
3869 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
3870 ; X86-SSE-NEXT:    fnstcw (%esp)
3871 ; X86-SSE-NEXT:    movzwl (%esp), %eax
3872 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
3873 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3874 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
3875 ; X86-SSE-NEXT:    fistl {{[0-9]+}}(%esp)
3876 ; X86-SSE-NEXT:    fldcw (%esp)
3877 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3878 ; X86-SSE-NEXT:    fxch %st(1)
3879 ; X86-SSE-NEXT:    fucomi %st(1), %st
3880 ; X86-SSE-NEXT:    fstp %st(1)
3881 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
3882 ; X86-SSE-NEXT:    jb .LBB35_2
3883 ; X86-SSE-NEXT:  # %bb.1:
3884 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
3885 ; X86-SSE-NEXT:  .LBB35_2:
3886 ; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
3887 ; X86-SSE-NEXT:    fxch %st(1)
3888 ; X86-SSE-NEXT:    fucomi %st(1), %st
3889 ; X86-SSE-NEXT:    fstp %st(1)
3890 ; X86-SSE-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF
3891 ; X86-SSE-NEXT:    cmovbel %eax, %ecx
3892 ; X86-SSE-NEXT:    xorl %eax, %eax
3893 ; X86-SSE-NEXT:    fucompi %st(0), %st
3894 ; X86-SSE-NEXT:    cmovnpl %ecx, %eax
3895 ; X86-SSE-NEXT:    addl $8, %esp
3896 ; X86-SSE-NEXT:    retl
3898 ; X64-LABEL: test_signed_i32_f80:
3899 ; X64:       # %bb.0:
3900 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
3901 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
3902 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
3903 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
3904 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
3905 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3906 ; X64-NEXT:    fistl -{{[0-9]+}}(%rsp)
3907 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
3908 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3909 ; X64-NEXT:    fxch %st(1)
3910 ; X64-NEXT:    fucomi %st(1), %st
3911 ; X64-NEXT:    fstp %st(1)
3912 ; X64-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
3913 ; X64-NEXT:    jb .LBB35_2
3914 ; X64-NEXT:  # %bb.1:
3915 ; X64-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
3916 ; X64-NEXT:  .LBB35_2:
3917 ; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
3918 ; X64-NEXT:    fxch %st(1)
3919 ; X64-NEXT:    fucomi %st(1), %st
3920 ; X64-NEXT:    fstp %st(1)
3921 ; X64-NEXT:    movl $2147483647, %ecx # imm = 0x7FFFFFFF
3922 ; X64-NEXT:    cmovbel %eax, %ecx
3923 ; X64-NEXT:    xorl %eax, %eax
3924 ; X64-NEXT:    fucompi %st(0), %st
3925 ; X64-NEXT:    cmovnpl %ecx, %eax
3926 ; X64-NEXT:    retq
3927     %x = call i32 @llvm.fptosi.sat.i32.f80(x86_fp80 %f)
3928     ret i32 %x
3931 define i50 @test_signed_i50_f80(x86_fp80 %f) nounwind {
3932 ; X86-X87-LABEL: test_signed_i50_f80:
3933 ; X86-X87:       # %bb.0:
3934 ; X86-X87-NEXT:    pushl %edi
3935 ; X86-X87-NEXT:    pushl %esi
3936 ; X86-X87-NEXT:    subl $20, %esp
3937 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
3938 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
3939 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
3940 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
3941 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
3942 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3943 ; X86-X87-NEXT:    fld %st(0)
3944 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
3945 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
3946 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
3947 ; X86-X87-NEXT:    fxch %st(1)
3948 ; X86-X87-NEXT:    fucom %st(1)
3949 ; X86-X87-NEXT:    fstp %st(1)
3950 ; X86-X87-NEXT:    fnstsw %ax
3951 ; X86-X87-NEXT:    xorl %ecx, %ecx
3952 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3953 ; X86-X87-NEXT:    sahf
3954 ; X86-X87-NEXT:    movl $0, %edx
3955 ; X86-X87-NEXT:    jb .LBB36_2
3956 ; X86-X87-NEXT:  # %bb.1:
3957 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
3958 ; X86-X87-NEXT:  .LBB36_2:
3959 ; X86-X87-NEXT:    movl $-131072, %edi # imm = 0xFFFE0000
3960 ; X86-X87-NEXT:    jb .LBB36_4
3961 ; X86-X87-NEXT:  # %bb.3:
3962 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
3963 ; X86-X87-NEXT:  .LBB36_4:
3964 ; X86-X87-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
3965 ; X86-X87-NEXT:    fxch %st(1)
3966 ; X86-X87-NEXT:    fucom %st(1)
3967 ; X86-X87-NEXT:    fstp %st(1)
3968 ; X86-X87-NEXT:    fnstsw %ax
3969 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3970 ; X86-X87-NEXT:    sahf
3971 ; X86-X87-NEXT:    movl $131071, %esi # imm = 0x1FFFF
3972 ; X86-X87-NEXT:    ja .LBB36_6
3973 ; X86-X87-NEXT:  # %bb.5:
3974 ; X86-X87-NEXT:    movl %edi, %esi
3975 ; X86-X87-NEXT:  .LBB36_6:
3976 ; X86-X87-NEXT:    movl $-1, %edi
3977 ; X86-X87-NEXT:    ja .LBB36_8
3978 ; X86-X87-NEXT:  # %bb.7:
3979 ; X86-X87-NEXT:    movl %edx, %edi
3980 ; X86-X87-NEXT:  .LBB36_8:
3981 ; X86-X87-NEXT:    fucomp %st(0)
3982 ; X86-X87-NEXT:    fnstsw %ax
3983 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
3984 ; X86-X87-NEXT:    sahf
3985 ; X86-X87-NEXT:    movl $0, %edx
3986 ; X86-X87-NEXT:    jp .LBB36_10
3987 ; X86-X87-NEXT:  # %bb.9:
3988 ; X86-X87-NEXT:    movl %edi, %ecx
3989 ; X86-X87-NEXT:    movl %esi, %edx
3990 ; X86-X87-NEXT:  .LBB36_10:
3991 ; X86-X87-NEXT:    movl %ecx, %eax
3992 ; X86-X87-NEXT:    addl $20, %esp
3993 ; X86-X87-NEXT:    popl %esi
3994 ; X86-X87-NEXT:    popl %edi
3995 ; X86-X87-NEXT:    retl
3997 ; X86-SSE-LABEL: test_signed_i50_f80:
3998 ; X86-SSE:       # %bb.0:
3999 ; X86-SSE-NEXT:    pushl %esi
4000 ; X86-SSE-NEXT:    subl $16, %esp
4001 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
4002 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
4003 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
4004 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
4005 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
4006 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
4007 ; X86-SSE-NEXT:    fld %st(0)
4008 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
4009 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
4010 ; X86-SSE-NEXT:    xorl %ecx, %ecx
4011 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4012 ; X86-SSE-NEXT:    fxch %st(1)
4013 ; X86-SSE-NEXT:    fucomi %st(1), %st
4014 ; X86-SSE-NEXT:    fstp %st(1)
4015 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
4016 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
4017 ; X86-SSE-NEXT:    movl $-131072, %eax # imm = 0xFFFE0000
4018 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
4019 ; X86-SSE-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}
4020 ; X86-SSE-NEXT:    fxch %st(1)
4021 ; X86-SSE-NEXT:    fucomi %st(1), %st
4022 ; X86-SSE-NEXT:    fstp %st(1)
4023 ; X86-SSE-NEXT:    movl $131071, %edx # imm = 0x1FFFF
4024 ; X86-SSE-NEXT:    cmovbel %eax, %edx
4025 ; X86-SSE-NEXT:    movl $-1, %eax
4026 ; X86-SSE-NEXT:    cmovbel %esi, %eax
4027 ; X86-SSE-NEXT:    fucompi %st(0), %st
4028 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
4029 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
4030 ; X86-SSE-NEXT:    addl $16, %esp
4031 ; X86-SSE-NEXT:    popl %esi
4032 ; X86-SSE-NEXT:    retl
4034 ; X64-LABEL: test_signed_i50_f80:
4035 ; X64:       # %bb.0:
4036 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
4037 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
4038 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
4039 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
4040 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
4041 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
4042 ; X64-NEXT:    fld %st(0)
4043 ; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
4044 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
4045 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4046 ; X64-NEXT:    fxch %st(1)
4047 ; X64-NEXT:    fucomi %st(1), %st
4048 ; X64-NEXT:    fstp %st(1)
4049 ; X64-NEXT:    jb .LBB36_1
4050 ; X64-NEXT:  # %bb.2:
4051 ; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
4052 ; X64-NEXT:    jmp .LBB36_3
4053 ; X64-NEXT:  .LBB36_1:
4054 ; X64-NEXT:    movabsq $-562949953421312, %rax # imm = 0xFFFE000000000000
4055 ; X64-NEXT:  .LBB36_3:
4056 ; X64-NEXT:    fldl {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4057 ; X64-NEXT:    fxch %st(1)
4058 ; X64-NEXT:    fucomi %st(1), %st
4059 ; X64-NEXT:    fstp %st(1)
4060 ; X64-NEXT:    movabsq $562949953421311, %rcx # imm = 0x1FFFFFFFFFFFF
4061 ; X64-NEXT:    cmovbeq %rax, %rcx
4062 ; X64-NEXT:    xorl %eax, %eax
4063 ; X64-NEXT:    fucompi %st(0), %st
4064 ; X64-NEXT:    cmovnpq %rcx, %rax
4065 ; X64-NEXT:    retq
4066     %x = call i50 @llvm.fptosi.sat.i50.f80(x86_fp80 %f)
4067     ret i50 %x
4070 define i64 @test_signed_i64_f80(x86_fp80 %f) nounwind {
4071 ; X86-X87-LABEL: test_signed_i64_f80:
4072 ; X86-X87:       # %bb.0:
4073 ; X86-X87-NEXT:    pushl %edi
4074 ; X86-X87-NEXT:    pushl %esi
4075 ; X86-X87-NEXT:    subl $20, %esp
4076 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
4077 ; X86-X87-NEXT:    fnstcw {{[0-9]+}}(%esp)
4078 ; X86-X87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
4079 ; X86-X87-NEXT:    orl $3072, %eax # imm = 0xC00
4080 ; X86-X87-NEXT:    movw %ax, {{[0-9]+}}(%esp)
4081 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
4082 ; X86-X87-NEXT:    fld %st(0)
4083 ; X86-X87-NEXT:    fistpll {{[0-9]+}}(%esp)
4084 ; X86-X87-NEXT:    fldcw {{[0-9]+}}(%esp)
4085 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4086 ; X86-X87-NEXT:    fxch %st(1)
4087 ; X86-X87-NEXT:    fucom %st(1)
4088 ; X86-X87-NEXT:    fstp %st(1)
4089 ; X86-X87-NEXT:    fnstsw %ax
4090 ; X86-X87-NEXT:    xorl %ecx, %ecx
4091 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4092 ; X86-X87-NEXT:    sahf
4093 ; X86-X87-NEXT:    movl $0, %edx
4094 ; X86-X87-NEXT:    jb .LBB37_2
4095 ; X86-X87-NEXT:  # %bb.1:
4096 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
4097 ; X86-X87-NEXT:  .LBB37_2:
4098 ; X86-X87-NEXT:    movl $-2147483648, %edi # imm = 0x80000000
4099 ; X86-X87-NEXT:    jb .LBB37_4
4100 ; X86-X87-NEXT:  # %bb.3:
4101 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
4102 ; X86-X87-NEXT:  .LBB37_4:
4103 ; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4104 ; X86-X87-NEXT:    fxch %st(1)
4105 ; X86-X87-NEXT:    fucom %st(1)
4106 ; X86-X87-NEXT:    fstp %st(1)
4107 ; X86-X87-NEXT:    fnstsw %ax
4108 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4109 ; X86-X87-NEXT:    sahf
4110 ; X86-X87-NEXT:    movl $2147483647, %esi # imm = 0x7FFFFFFF
4111 ; X86-X87-NEXT:    ja .LBB37_6
4112 ; X86-X87-NEXT:  # %bb.5:
4113 ; X86-X87-NEXT:    movl %edi, %esi
4114 ; X86-X87-NEXT:  .LBB37_6:
4115 ; X86-X87-NEXT:    movl $-1, %edi
4116 ; X86-X87-NEXT:    ja .LBB37_8
4117 ; X86-X87-NEXT:  # %bb.7:
4118 ; X86-X87-NEXT:    movl %edx, %edi
4119 ; X86-X87-NEXT:  .LBB37_8:
4120 ; X86-X87-NEXT:    fucomp %st(0)
4121 ; X86-X87-NEXT:    fnstsw %ax
4122 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4123 ; X86-X87-NEXT:    sahf
4124 ; X86-X87-NEXT:    movl $0, %edx
4125 ; X86-X87-NEXT:    jp .LBB37_10
4126 ; X86-X87-NEXT:  # %bb.9:
4127 ; X86-X87-NEXT:    movl %edi, %ecx
4128 ; X86-X87-NEXT:    movl %esi, %edx
4129 ; X86-X87-NEXT:  .LBB37_10:
4130 ; X86-X87-NEXT:    movl %ecx, %eax
4131 ; X86-X87-NEXT:    addl $20, %esp
4132 ; X86-X87-NEXT:    popl %esi
4133 ; X86-X87-NEXT:    popl %edi
4134 ; X86-X87-NEXT:    retl
4136 ; X86-SSE-LABEL: test_signed_i64_f80:
4137 ; X86-SSE:       # %bb.0:
4138 ; X86-SSE-NEXT:    pushl %esi
4139 ; X86-SSE-NEXT:    subl $16, %esp
4140 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
4141 ; X86-SSE-NEXT:    fnstcw {{[0-9]+}}(%esp)
4142 ; X86-SSE-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
4143 ; X86-SSE-NEXT:    orl $3072, %eax # imm = 0xC00
4144 ; X86-SSE-NEXT:    movw %ax, {{[0-9]+}}(%esp)
4145 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
4146 ; X86-SSE-NEXT:    fld %st(0)
4147 ; X86-SSE-NEXT:    fistpll {{[0-9]+}}(%esp)
4148 ; X86-SSE-NEXT:    fldcw {{[0-9]+}}(%esp)
4149 ; X86-SSE-NEXT:    xorl %ecx, %ecx
4150 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4151 ; X86-SSE-NEXT:    fxch %st(1)
4152 ; X86-SSE-NEXT:    fucomi %st(1), %st
4153 ; X86-SSE-NEXT:    fstp %st(1)
4154 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
4155 ; X86-SSE-NEXT:    cmovbl %ecx, %esi
4156 ; X86-SSE-NEXT:    movl $-2147483648, %eax # imm = 0x80000000
4157 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %eax
4158 ; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4159 ; X86-SSE-NEXT:    fxch %st(1)
4160 ; X86-SSE-NEXT:    fucomi %st(1), %st
4161 ; X86-SSE-NEXT:    fstp %st(1)
4162 ; X86-SSE-NEXT:    movl $2147483647, %edx # imm = 0x7FFFFFFF
4163 ; X86-SSE-NEXT:    cmovbel %eax, %edx
4164 ; X86-SSE-NEXT:    movl $-1, %eax
4165 ; X86-SSE-NEXT:    cmovbel %esi, %eax
4166 ; X86-SSE-NEXT:    fucompi %st(0), %st
4167 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
4168 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
4169 ; X86-SSE-NEXT:    addl $16, %esp
4170 ; X86-SSE-NEXT:    popl %esi
4171 ; X86-SSE-NEXT:    retl
4173 ; X64-LABEL: test_signed_i64_f80:
4174 ; X64:       # %bb.0:
4175 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
4176 ; X64-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
4177 ; X64-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
4178 ; X64-NEXT:    orl $3072, %eax # imm = 0xC00
4179 ; X64-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
4180 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
4181 ; X64-NEXT:    fld %st(0)
4182 ; X64-NEXT:    fistpll -{{[0-9]+}}(%rsp)
4183 ; X64-NEXT:    fldcw -{{[0-9]+}}(%rsp)
4184 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4185 ; X64-NEXT:    fxch %st(1)
4186 ; X64-NEXT:    fucomi %st(1), %st
4187 ; X64-NEXT:    fstp %st(1)
4188 ; X64-NEXT:    jb .LBB37_1
4189 ; X64-NEXT:  # %bb.2:
4190 ; X64-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
4191 ; X64-NEXT:    jmp .LBB37_3
4192 ; X64-NEXT:  .LBB37_1:
4193 ; X64-NEXT:    movabsq $-9223372036854775808, %rax # imm = 0x8000000000000000
4194 ; X64-NEXT:  .LBB37_3:
4195 ; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4196 ; X64-NEXT:    fxch %st(1)
4197 ; X64-NEXT:    fucomi %st(1), %st
4198 ; X64-NEXT:    fstp %st(1)
4199 ; X64-NEXT:    movabsq $9223372036854775807, %rcx # imm = 0x7FFFFFFFFFFFFFFF
4200 ; X64-NEXT:    cmovbeq %rax, %rcx
4201 ; X64-NEXT:    xorl %eax, %eax
4202 ; X64-NEXT:    fucompi %st(0), %st
4203 ; X64-NEXT:    cmovnpq %rcx, %rax
4204 ; X64-NEXT:    retq
4205     %x = call i64 @llvm.fptosi.sat.i64.f80(x86_fp80 %f)
4206     ret i64 %x
4209 define i100 @test_signed_i100_f80(x86_fp80 %f) nounwind {
4210 ; X86-X87-LABEL: test_signed_i100_f80:
4211 ; X86-X87:       # %bb.0:
4212 ; X86-X87-NEXT:    pushl %ebp
4213 ; X86-X87-NEXT:    pushl %ebx
4214 ; X86-X87-NEXT:    pushl %edi
4215 ; X86-X87-NEXT:    pushl %esi
4216 ; X86-X87-NEXT:    subl $60, %esp
4217 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
4218 ; X86-X87-NEXT:    fld %st(0)
4219 ; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)
4220 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
4221 ; X86-X87-NEXT:    movl %eax, (%esp)
4222 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4223 ; X86-X87-NEXT:    fld %st(1)
4224 ; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
4225 ; X86-X87-NEXT:    fxch %st(1)
4226 ; X86-X87-NEXT:    fucompp
4227 ; X86-X87-NEXT:    fnstsw %ax
4228 ; X86-X87-NEXT:    movl %eax, %ebx
4229 ; X86-X87-NEXT:    calll __fixxfti
4230 ; X86-X87-NEXT:    subl $4, %esp
4231 ; X86-X87-NEXT:    xorl %edx, %edx
4232 ; X86-X87-NEXT:    movb %bh, %ah
4233 ; X86-X87-NEXT:    sahf
4234 ; X86-X87-NEXT:    movl $-8, %ebx
4235 ; X86-X87-NEXT:    jb .LBB38_2
4236 ; X86-X87-NEXT:  # %bb.1:
4237 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
4238 ; X86-X87-NEXT:  .LBB38_2:
4239 ; X86-X87-NEXT:    movl $0, %ecx
4240 ; X86-X87-NEXT:    movl $0, %ebp
4241 ; X86-X87-NEXT:    jb .LBB38_4
4242 ; X86-X87-NEXT:  # %bb.3:
4243 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4244 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
4245 ; X86-X87-NEXT:  .LBB38_4:
4246 ; X86-X87-NEXT:    movl $0, %edi
4247 ; X86-X87-NEXT:    jb .LBB38_6
4248 ; X86-X87-NEXT:  # %bb.5:
4249 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edi
4250 ; X86-X87-NEXT:  .LBB38_6:
4251 ; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4252 ; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
4253 ; X86-X87-NEXT:    fucom %st(1)
4254 ; X86-X87-NEXT:    fstp %st(1)
4255 ; X86-X87-NEXT:    fnstsw %ax
4256 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4257 ; X86-X87-NEXT:    sahf
4258 ; X86-X87-NEXT:    movl $-1, %eax
4259 ; X86-X87-NEXT:    movl $-1, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4260 ; X86-X87-NEXT:    movl $-1, %esi
4261 ; X86-X87-NEXT:    ja .LBB38_8
4262 ; X86-X87-NEXT:  # %bb.7:
4263 ; X86-X87-NEXT:    movl %edi, %eax
4264 ; X86-X87-NEXT:    movl %ebp, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4265 ; X86-X87-NEXT:    movl %ecx, %esi
4266 ; X86-X87-NEXT:  .LBB38_8:
4267 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4268 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4269 ; X86-X87-NEXT:    movl $7, %edi
4270 ; X86-X87-NEXT:    ja .LBB38_10
4271 ; X86-X87-NEXT:  # %bb.9:
4272 ; X86-X87-NEXT:    movl %ebx, %edi
4273 ; X86-X87-NEXT:  .LBB38_10:
4274 ; X86-X87-NEXT:    fucomp %st(0)
4275 ; X86-X87-NEXT:    fnstsw %ax
4276 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4277 ; X86-X87-NEXT:    sahf
4278 ; X86-X87-NEXT:    movl $0, %eax
4279 ; X86-X87-NEXT:    movl $0, %ebp
4280 ; X86-X87-NEXT:    movl $0, %ebx
4281 ; X86-X87-NEXT:    jp .LBB38_12
4282 ; X86-X87-NEXT:  # %bb.11:
4283 ; X86-X87-NEXT:    movl %edi, %edx
4284 ; X86-X87-NEXT:    movl %esi, %eax
4285 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebp # 4-byte Reload
4286 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
4287 ; X86-X87-NEXT:  .LBB38_12:
4288 ; X86-X87-NEXT:    movl %ebx, 8(%ecx)
4289 ; X86-X87-NEXT:    movl %ebp, 4(%ecx)
4290 ; X86-X87-NEXT:    movl %eax, (%ecx)
4291 ; X86-X87-NEXT:    andl $15, %edx
4292 ; X86-X87-NEXT:    movb %dl, 12(%ecx)
4293 ; X86-X87-NEXT:    movl %ecx, %eax
4294 ; X86-X87-NEXT:    addl $60, %esp
4295 ; X86-X87-NEXT:    popl %esi
4296 ; X86-X87-NEXT:    popl %edi
4297 ; X86-X87-NEXT:    popl %ebx
4298 ; X86-X87-NEXT:    popl %ebp
4299 ; X86-X87-NEXT:    retl $4
4301 ; X86-SSE-LABEL: test_signed_i100_f80:
4302 ; X86-SSE:       # %bb.0:
4303 ; X86-SSE-NEXT:    pushl %ebp
4304 ; X86-SSE-NEXT:    pushl %ebx
4305 ; X86-SSE-NEXT:    pushl %edi
4306 ; X86-SSE-NEXT:    pushl %esi
4307 ; X86-SSE-NEXT:    subl $44, %esp
4308 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
4309 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
4310 ; X86-SSE-NEXT:    fld %st(0)
4311 ; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
4312 ; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)
4313 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
4314 ; X86-SSE-NEXT:    movl %eax, (%esp)
4315 ; X86-SSE-NEXT:    calll __fixxfti
4316 ; X86-SSE-NEXT:    subl $4, %esp
4317 ; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
4318 ; X86-SSE-NEXT:    xorl %ebp, %ebp
4319 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4320 ; X86-SSE-NEXT:    fxch %st(1)
4321 ; X86-SSE-NEXT:    fucomi %st(1), %st
4322 ; X86-SSE-NEXT:    fstp %st(1)
4323 ; X86-SSE-NEXT:    movl $-8, %ebx
4324 ; X86-SSE-NEXT:    movl $0, %ecx
4325 ; X86-SSE-NEXT:    movl $0, %edx
4326 ; X86-SSE-NEXT:    movl $0, %edi
4327 ; X86-SSE-NEXT:    jb .LBB38_2
4328 ; X86-SSE-NEXT:  # %bb.1:
4329 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ebx
4330 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4331 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
4332 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
4333 ; X86-SSE-NEXT:  .LBB38_2:
4334 ; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4335 ; X86-SSE-NEXT:    fxch %st(1)
4336 ; X86-SSE-NEXT:    fucomi %st(1), %st
4337 ; X86-SSE-NEXT:    fstp %st(1)
4338 ; X86-SSE-NEXT:    movl $-1, %eax
4339 ; X86-SSE-NEXT:    cmoval %eax, %edi
4340 ; X86-SSE-NEXT:    cmoval %eax, %edx
4341 ; X86-SSE-NEXT:    cmoval %eax, %ecx
4342 ; X86-SSE-NEXT:    movl $7, %eax
4343 ; X86-SSE-NEXT:    cmovbel %ebx, %eax
4344 ; X86-SSE-NEXT:    fucompi %st(0), %st
4345 ; X86-SSE-NEXT:    cmovpl %ebp, %eax
4346 ; X86-SSE-NEXT:    cmovpl %ebp, %ecx
4347 ; X86-SSE-NEXT:    cmovpl %ebp, %edx
4348 ; X86-SSE-NEXT:    cmovpl %ebp, %edi
4349 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
4350 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
4351 ; X86-SSE-NEXT:    movl %ecx, (%esi)
4352 ; X86-SSE-NEXT:    andl $15, %eax
4353 ; X86-SSE-NEXT:    movb %al, 12(%esi)
4354 ; X86-SSE-NEXT:    movl %esi, %eax
4355 ; X86-SSE-NEXT:    addl $44, %esp
4356 ; X86-SSE-NEXT:    popl %esi
4357 ; X86-SSE-NEXT:    popl %edi
4358 ; X86-SSE-NEXT:    popl %ebx
4359 ; X86-SSE-NEXT:    popl %ebp
4360 ; X86-SSE-NEXT:    retl $4
4362 ; X64-LABEL: test_signed_i100_f80:
4363 ; X64:       # %bb.0:
4364 ; X64-NEXT:    subq $40, %rsp
4365 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
4366 ; X64-NEXT:    fld %st(0)
4367 ; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill
4368 ; X64-NEXT:    fstpt (%rsp)
4369 ; X64-NEXT:    callq __fixxfti@PLT
4370 ; X64-NEXT:    xorl %ecx, %ecx
4371 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4372 ; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload
4373 ; X64-NEXT:    fucomi %st(1), %st
4374 ; X64-NEXT:    fstp %st(1)
4375 ; X64-NEXT:    cmovbq %rcx, %rax
4376 ; X64-NEXT:    movabsq $-34359738368, %rsi # imm = 0xFFFFFFF800000000
4377 ; X64-NEXT:    cmovbq %rsi, %rdx
4378 ; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4379 ; X64-NEXT:    fxch %st(1)
4380 ; X64-NEXT:    fucomi %st(1), %st
4381 ; X64-NEXT:    fstp %st(1)
4382 ; X64-NEXT:    movabsq $34359738367, %rsi # imm = 0x7FFFFFFFF
4383 ; X64-NEXT:    cmovaq %rsi, %rdx
4384 ; X64-NEXT:    movq $-1, %rsi
4385 ; X64-NEXT:    cmovaq %rsi, %rax
4386 ; X64-NEXT:    fucompi %st(0), %st
4387 ; X64-NEXT:    cmovpq %rcx, %rax
4388 ; X64-NEXT:    cmovpq %rcx, %rdx
4389 ; X64-NEXT:    addq $40, %rsp
4390 ; X64-NEXT:    retq
4391     %x = call i100 @llvm.fptosi.sat.i100.f80(x86_fp80 %f)
4392     ret i100 %x
4395 define i128 @test_signed_i128_f80(x86_fp80 %f) nounwind {
4396 ; X86-X87-LABEL: test_signed_i128_f80:
4397 ; X86-X87:       # %bb.0:
4398 ; X86-X87-NEXT:    pushl %ebp
4399 ; X86-X87-NEXT:    pushl %ebx
4400 ; X86-X87-NEXT:    pushl %edi
4401 ; X86-X87-NEXT:    pushl %esi
4402 ; X86-X87-NEXT:    subl $60, %esp
4403 ; X86-X87-NEXT:    fldt {{[0-9]+}}(%esp)
4404 ; X86-X87-NEXT:    fld %st(0)
4405 ; X86-X87-NEXT:    fstpt {{[0-9]+}}(%esp)
4406 ; X86-X87-NEXT:    leal {{[0-9]+}}(%esp), %eax
4407 ; X86-X87-NEXT:    movl %eax, (%esp)
4408 ; X86-X87-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4409 ; X86-X87-NEXT:    fld %st(1)
4410 ; X86-X87-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
4411 ; X86-X87-NEXT:    fxch %st(1)
4412 ; X86-X87-NEXT:    fucompp
4413 ; X86-X87-NEXT:    fnstsw %ax
4414 ; X86-X87-NEXT:    movl %eax, %ebx
4415 ; X86-X87-NEXT:    calll __fixxfti
4416 ; X86-X87-NEXT:    subl $4, %esp
4417 ; X86-X87-NEXT:    movl $0, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Spill
4418 ; X86-X87-NEXT:    movb %bh, %ah
4419 ; X86-X87-NEXT:    sahf
4420 ; X86-X87-NEXT:    movl $0, %eax
4421 ; X86-X87-NEXT:    movl $0, %ebx
4422 ; X86-X87-NEXT:    jae .LBB39_1
4423 ; X86-X87-NEXT:  # %bb.2:
4424 ; X86-X87-NEXT:    movl $0, %edx
4425 ; X86-X87-NEXT:    jae .LBB39_3
4426 ; X86-X87-NEXT:  .LBB39_4:
4427 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
4428 ; X86-X87-NEXT:    jb .LBB39_6
4429 ; X86-X87-NEXT:  .LBB39_5:
4430 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4431 ; X86-X87-NEXT:  .LBB39_6:
4432 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4433 ; X86-X87-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4434 ; X86-X87-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
4435 ; X86-X87-NEXT:    fucom %st(1)
4436 ; X86-X87-NEXT:    fstp %st(1)
4437 ; X86-X87-NEXT:    fnstsw %ax
4438 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4439 ; X86-X87-NEXT:    sahf
4440 ; X86-X87-NEXT:    movl $2147483647, %eax # imm = 0x7FFFFFFF
4441 ; X86-X87-NEXT:    ja .LBB39_8
4442 ; X86-X87-NEXT:  # %bb.7:
4443 ; X86-X87-NEXT:    movl %ecx, %eax
4444 ; X86-X87-NEXT:  .LBB39_8:
4445 ; X86-X87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4446 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ecx
4447 ; X86-X87-NEXT:    movl $-1, %ebp
4448 ; X86-X87-NEXT:    movl $-1, %edi
4449 ; X86-X87-NEXT:    movl $-1, %esi
4450 ; X86-X87-NEXT:    ja .LBB39_10
4451 ; X86-X87-NEXT:  # %bb.9:
4452 ; X86-X87-NEXT:    movl %edx, %ebp
4453 ; X86-X87-NEXT:    movl %ebx, %edi
4454 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %esi # 4-byte Reload
4455 ; X86-X87-NEXT:  .LBB39_10:
4456 ; X86-X87-NEXT:    fucomp %st(0)
4457 ; X86-X87-NEXT:    fnstsw %ax
4458 ; X86-X87-NEXT:    # kill: def $ah killed $ah killed $ax
4459 ; X86-X87-NEXT:    sahf
4460 ; X86-X87-NEXT:    movl $0, %eax
4461 ; X86-X87-NEXT:    movl $0, %edx
4462 ; X86-X87-NEXT:    movl $0, %ebx
4463 ; X86-X87-NEXT:    jp .LBB39_12
4464 ; X86-X87-NEXT:  # %bb.11:
4465 ; X86-X87-NEXT:    movl %esi, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
4466 ; X86-X87-NEXT:    movl %edi, %eax
4467 ; X86-X87-NEXT:    movl %ebp, %edx
4468 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %ebx # 4-byte Reload
4469 ; X86-X87-NEXT:  .LBB39_12:
4470 ; X86-X87-NEXT:    movl %ebx, 12(%ecx)
4471 ; X86-X87-NEXT:    movl %edx, 8(%ecx)
4472 ; X86-X87-NEXT:    movl %eax, 4(%ecx)
4473 ; X86-X87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
4474 ; X86-X87-NEXT:    movl %eax, (%ecx)
4475 ; X86-X87-NEXT:    movl %ecx, %eax
4476 ; X86-X87-NEXT:    addl $60, %esp
4477 ; X86-X87-NEXT:    popl %esi
4478 ; X86-X87-NEXT:    popl %edi
4479 ; X86-X87-NEXT:    popl %ebx
4480 ; X86-X87-NEXT:    popl %ebp
4481 ; X86-X87-NEXT:    retl $4
4482 ; X86-X87-NEXT:  .LBB39_1:
4483 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %eax
4484 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
4485 ; X86-X87-NEXT:    movl $0, %edx
4486 ; X86-X87-NEXT:    jb .LBB39_4
4487 ; X86-X87-NEXT:  .LBB39_3:
4488 ; X86-X87-NEXT:    movl {{[0-9]+}}(%esp), %edx
4489 ; X86-X87-NEXT:    movl $-2147483648, %ecx # imm = 0x80000000
4490 ; X86-X87-NEXT:    jae .LBB39_5
4491 ; X86-X87-NEXT:    jmp .LBB39_6
4493 ; X86-SSE-LABEL: test_signed_i128_f80:
4494 ; X86-SSE:       # %bb.0:
4495 ; X86-SSE-NEXT:    pushl %ebp
4496 ; X86-SSE-NEXT:    pushl %ebx
4497 ; X86-SSE-NEXT:    pushl %edi
4498 ; X86-SSE-NEXT:    pushl %esi
4499 ; X86-SSE-NEXT:    subl $44, %esp
4500 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %esi
4501 ; X86-SSE-NEXT:    fldt {{[0-9]+}}(%esp)
4502 ; X86-SSE-NEXT:    fld %st(0)
4503 ; X86-SSE-NEXT:    fstpt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Spill
4504 ; X86-SSE-NEXT:    fstpt {{[0-9]+}}(%esp)
4505 ; X86-SSE-NEXT:    leal {{[0-9]+}}(%esp), %eax
4506 ; X86-SSE-NEXT:    movl %eax, (%esp)
4507 ; X86-SSE-NEXT:    calll __fixxfti
4508 ; X86-SSE-NEXT:    subl $4, %esp
4509 ; X86-SSE-NEXT:    xorl %ecx, %ecx
4510 ; X86-SSE-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}
4511 ; X86-SSE-NEXT:    fldt {{[-0-9]+}}(%e{{[sb]}}p) # 10-byte Folded Reload
4512 ; X86-SSE-NEXT:    fucomi %st(1), %st
4513 ; X86-SSE-NEXT:    fstp %st(1)
4514 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %eax
4515 ; X86-SSE-NEXT:    cmovbl %ecx, %eax
4516 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edx
4517 ; X86-SSE-NEXT:    cmovbl %ecx, %edx
4518 ; X86-SSE-NEXT:    movl {{[0-9]+}}(%esp), %edi
4519 ; X86-SSE-NEXT:    cmovbl %ecx, %edi
4520 ; X86-SSE-NEXT:    movl $-2147483648, %ebp # imm = 0x80000000
4521 ; X86-SSE-NEXT:    cmovael {{[0-9]+}}(%esp), %ebp
4522 ; X86-SSE-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}
4523 ; X86-SSE-NEXT:    fxch %st(1)
4524 ; X86-SSE-NEXT:    fucomi %st(1), %st
4525 ; X86-SSE-NEXT:    fstp %st(1)
4526 ; X86-SSE-NEXT:    movl $2147483647, %ebx # imm = 0x7FFFFFFF
4527 ; X86-SSE-NEXT:    cmovbel %ebp, %ebx
4528 ; X86-SSE-NEXT:    movl $-1, %ebp
4529 ; X86-SSE-NEXT:    cmoval %ebp, %edi
4530 ; X86-SSE-NEXT:    cmoval %ebp, %edx
4531 ; X86-SSE-NEXT:    cmoval %ebp, %eax
4532 ; X86-SSE-NEXT:    fucompi %st(0), %st
4533 ; X86-SSE-NEXT:    cmovpl %ecx, %eax
4534 ; X86-SSE-NEXT:    cmovpl %ecx, %edx
4535 ; X86-SSE-NEXT:    cmovpl %ecx, %edi
4536 ; X86-SSE-NEXT:    cmovpl %ecx, %ebx
4537 ; X86-SSE-NEXT:    movl %ebx, 12(%esi)
4538 ; X86-SSE-NEXT:    movl %edi, 8(%esi)
4539 ; X86-SSE-NEXT:    movl %edx, 4(%esi)
4540 ; X86-SSE-NEXT:    movl %eax, (%esi)
4541 ; X86-SSE-NEXT:    movl %esi, %eax
4542 ; X86-SSE-NEXT:    addl $44, %esp
4543 ; X86-SSE-NEXT:    popl %esi
4544 ; X86-SSE-NEXT:    popl %edi
4545 ; X86-SSE-NEXT:    popl %ebx
4546 ; X86-SSE-NEXT:    popl %ebp
4547 ; X86-SSE-NEXT:    retl $4
4549 ; X64-LABEL: test_signed_i128_f80:
4550 ; X64:       # %bb.0:
4551 ; X64-NEXT:    subq $40, %rsp
4552 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
4553 ; X64-NEXT:    fld %st(0)
4554 ; X64-NEXT:    fstpt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Spill
4555 ; X64-NEXT:    fstpt (%rsp)
4556 ; X64-NEXT:    callq __fixxfti@PLT
4557 ; X64-NEXT:    xorl %ecx, %ecx
4558 ; X64-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4559 ; X64-NEXT:    fldt {{[-0-9]+}}(%r{{[sb]}}p) # 10-byte Folded Reload
4560 ; X64-NEXT:    fucomi %st(1), %st
4561 ; X64-NEXT:    fstp %st(1)
4562 ; X64-NEXT:    cmovbq %rcx, %rax
4563 ; X64-NEXT:    movabsq $-9223372036854775808, %rsi # imm = 0x8000000000000000
4564 ; X64-NEXT:    cmovbq %rsi, %rdx
4565 ; X64-NEXT:    fldt {{\.?LCPI[0-9]+_[0-9]+}}(%rip)
4566 ; X64-NEXT:    fxch %st(1)
4567 ; X64-NEXT:    fucomi %st(1), %st
4568 ; X64-NEXT:    fstp %st(1)
4569 ; X64-NEXT:    movabsq $9223372036854775807, %rsi # imm = 0x7FFFFFFFFFFFFFFF
4570 ; X64-NEXT:    cmovaq %rsi, %rdx
4571 ; X64-NEXT:    movq $-1, %rsi
4572 ; X64-NEXT:    cmovaq %rsi, %rax
4573 ; X64-NEXT:    fucompi %st(0), %st
4574 ; X64-NEXT:    cmovpq %rcx, %rax
4575 ; X64-NEXT:    cmovpq %rcx, %rdx
4576 ; X64-NEXT:    addq $40, %rsp
4577 ; X64-NEXT:    retq
4578     %x = call i128 @llvm.fptosi.sat.i128.f80(x86_fp80 %f)
4579     ret i128 %x