@@ -11,244 +11,6 @@ declare i32 @llvm.get.fpmode.i32()
1111declare void @llvm.set.fpmode.i32 (i32 %fpmode )
1212declare void @llvm.reset.fpmode ()
1313
14- define void @func_01 () nounwind {
15- ; X86-NOSSE-LABEL: func_01:
16- ; X86-NOSSE: # %bb.0:
17- ; X86-NOSSE-NEXT: pushl %eax
18- ; X86-NOSSE-NEXT: fnstcw (%esp)
19- ; X86-NOSSE-NEXT: orb $12, {{[0-9]+}}(%esp)
20- ; X86-NOSSE-NEXT: fldcw (%esp)
21- ; X86-NOSSE-NEXT: popl %eax
22- ; X86-NOSSE-NEXT: retl
23- ;
24- ; X86-SSE-LABEL: func_01:
25- ; X86-SSE: # %bb.0:
26- ; X86-SSE-NEXT: pushl %eax
27- ; X86-SSE-NEXT: fnstcw (%esp)
28- ; X86-SSE-NEXT: orb $12, {{[0-9]+}}(%esp)
29- ; X86-SSE-NEXT: fldcw (%esp)
30- ; X86-SSE-NEXT: stmxcsr (%esp)
31- ; X86-SSE-NEXT: orb $96, {{[0-9]+}}(%esp)
32- ; X86-SSE-NEXT: ldmxcsr (%esp)
33- ; X86-SSE-NEXT: popl %eax
34- ; X86-SSE-NEXT: retl
35- ;
36- ; X64-LABEL: func_01:
37- ; X64: # %bb.0:
38- ; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
39- ; X64-NEXT: orb $12, -{{[0-9]+}}(%rsp)
40- ; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
41- ; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
42- ; X64-NEXT: orb $96, -{{[0-9]+}}(%rsp)
43- ; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
44- ; X64-NEXT: retq
45- call void @llvm.set.rounding (i32 0 ) ; TowardZero (CW[11-10] = 11)
46- ret void
47- }
48-
49- define void @func_02 () nounwind {
50- ; X86-NOSSE-LABEL: func_02:
51- ; X86-NOSSE: # %bb.0:
52- ; X86-NOSSE-NEXT: pushl %eax
53- ; X86-NOSSE-NEXT: fnstcw (%esp)
54- ; X86-NOSSE-NEXT: andb $-13, {{[0-9]+}}(%esp)
55- ; X86-NOSSE-NEXT: fldcw (%esp)
56- ; X86-NOSSE-NEXT: popl %eax
57- ; X86-NOSSE-NEXT: retl
58- ;
59- ; X86-SSE-LABEL: func_02:
60- ; X86-SSE: # %bb.0:
61- ; X86-SSE-NEXT: pushl %eax
62- ; X86-SSE-NEXT: fnstcw (%esp)
63- ; X86-SSE-NEXT: andb $-13, {{[0-9]+}}(%esp)
64- ; X86-SSE-NEXT: fldcw (%esp)
65- ; X86-SSE-NEXT: stmxcsr (%esp)
66- ; X86-SSE-NEXT: andb $-97, {{[0-9]+}}(%esp)
67- ; X86-SSE-NEXT: ldmxcsr (%esp)
68- ; X86-SSE-NEXT: popl %eax
69- ; X86-SSE-NEXT: retl
70- ;
71- ; X64-LABEL: func_02:
72- ; X64: # %bb.0:
73- ; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
74- ; X64-NEXT: andb $-13, -{{[0-9]+}}(%rsp)
75- ; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
76- ; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
77- ; X64-NEXT: andb $-97, -{{[0-9]+}}(%rsp)
78- ; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
79- ; X64-NEXT: retq
80- call void @llvm.set.rounding (i32 1 ) ; ToNearestTiesToEven (CW[11-10] = 00)
81- ret void
82- }
83-
84- define void @func_03 () nounwind {
85- ; X86-NOSSE-LABEL: func_03:
86- ; X86-NOSSE: # %bb.0:
87- ; X86-NOSSE-NEXT: pushl %eax
88- ; X86-NOSSE-NEXT: fnstcw (%esp)
89- ; X86-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF
90- ; X86-NOSSE-NEXT: andl (%esp), %eax
91- ; X86-NOSSE-NEXT: orl $2048, %eax # imm = 0x800
92- ; X86-NOSSE-NEXT: movw %ax, (%esp)
93- ; X86-NOSSE-NEXT: fldcw (%esp)
94- ; X86-NOSSE-NEXT: popl %eax
95- ; X86-NOSSE-NEXT: retl
96- ;
97- ; X86-SSE-LABEL: func_03:
98- ; X86-SSE: # %bb.0:
99- ; X86-SSE-NEXT: pushl %eax
100- ; X86-SSE-NEXT: fnstcw (%esp)
101- ; X86-SSE-NEXT: movl $-3073, %eax # imm = 0xF3FF
102- ; X86-SSE-NEXT: andl (%esp), %eax
103- ; X86-SSE-NEXT: orl $2048, %eax # imm = 0x800
104- ; X86-SSE-NEXT: movw %ax, (%esp)
105- ; X86-SSE-NEXT: fldcw (%esp)
106- ; X86-SSE-NEXT: stmxcsr (%esp)
107- ; X86-SSE-NEXT: movl $-24577, %eax # imm = 0x9FFF
108- ; X86-SSE-NEXT: andl (%esp), %eax
109- ; X86-SSE-NEXT: orl $16384, %eax # imm = 0x4000
110- ; X86-SSE-NEXT: movl %eax, (%esp)
111- ; X86-SSE-NEXT: ldmxcsr (%esp)
112- ; X86-SSE-NEXT: popl %eax
113- ; X86-SSE-NEXT: retl
114- ;
115- ; X64-LABEL: func_03:
116- ; X64: # %bb.0:
117- ; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
118- ; X64-NEXT: movl $-3073, %eax # imm = 0xF3FF
119- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
120- ; X64-NEXT: orl $2048, %eax # imm = 0x800
121- ; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
122- ; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
123- ; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
124- ; X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
125- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
126- ; X64-NEXT: orl $16384, %eax # imm = 0x4000
127- ; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
128- ; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
129- ; X64-NEXT: retq
130- call void @llvm.set.rounding (i32 2 ) ; Upward (CW[11-10] = 10)
131- ret void
132- }
133-
134- define void @func_04 () nounwind {
135- ; X86-NOSSE-LABEL: func_04:
136- ; X86-NOSSE: # %bb.0:
137- ; X86-NOSSE-NEXT: pushl %eax
138- ; X86-NOSSE-NEXT: fnstcw (%esp)
139- ; X86-NOSSE-NEXT: movl $-3073, %eax # imm = 0xF3FF
140- ; X86-NOSSE-NEXT: andl (%esp), %eax
141- ; X86-NOSSE-NEXT: orl $1024, %eax # imm = 0x400
142- ; X86-NOSSE-NEXT: movw %ax, (%esp)
143- ; X86-NOSSE-NEXT: fldcw (%esp)
144- ; X86-NOSSE-NEXT: popl %eax
145- ; X86-NOSSE-NEXT: retl
146- ;
147- ; X86-SSE-LABEL: func_04:
148- ; X86-SSE: # %bb.0:
149- ; X86-SSE-NEXT: pushl %eax
150- ; X86-SSE-NEXT: fnstcw (%esp)
151- ; X86-SSE-NEXT: movl $-3073, %eax # imm = 0xF3FF
152- ; X86-SSE-NEXT: andl (%esp), %eax
153- ; X86-SSE-NEXT: orl $1024, %eax # imm = 0x400
154- ; X86-SSE-NEXT: movw %ax, (%esp)
155- ; X86-SSE-NEXT: fldcw (%esp)
156- ; X86-SSE-NEXT: stmxcsr (%esp)
157- ; X86-SSE-NEXT: movl $-24577, %eax # imm = 0x9FFF
158- ; X86-SSE-NEXT: andl (%esp), %eax
159- ; X86-SSE-NEXT: orl $8192, %eax # imm = 0x2000
160- ; X86-SSE-NEXT: movl %eax, (%esp)
161- ; X86-SSE-NEXT: ldmxcsr (%esp)
162- ; X86-SSE-NEXT: popl %eax
163- ; X86-SSE-NEXT: retl
164- ;
165- ; X64-LABEL: func_04:
166- ; X64: # %bb.0:
167- ; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
168- ; X64-NEXT: movl $-3073, %eax # imm = 0xF3FF
169- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
170- ; X64-NEXT: orl $1024, %eax # imm = 0x400
171- ; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
172- ; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
173- ; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
174- ; X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
175- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
176- ; X64-NEXT: orl $8192, %eax # imm = 0x2000
177- ; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
178- ; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
179- ; X64-NEXT: retq
180- call void @llvm.set.rounding (i32 3 ) ; Downward (CW[11-10] = 01)
181- ret void
182- }
183-
184- define void @func_05 (i32 %x ) nounwind {
185- ; X86-NOSSE-LABEL: func_05:
186- ; X86-NOSSE: # %bb.0:
187- ; X86-NOSSE-NEXT: pushl %eax
188- ; X86-NOSSE-NEXT: movl {{[0-9]+}}(%esp), %eax
189- ; X86-NOSSE-NEXT: leal 4(%eax,%eax), %ecx
190- ; X86-NOSSE-NEXT: movl $201, %eax
191- ; X86-NOSSE-NEXT: # kill: def $cl killed $cl killed $ecx
192- ; X86-NOSSE-NEXT: shll %cl, %eax
193- ; X86-NOSSE-NEXT: andl $3072, %eax # imm = 0xC00
194- ; X86-NOSSE-NEXT: fnstcw (%esp)
195- ; X86-NOSSE-NEXT: movl $-3073, %ecx # imm = 0xF3FF
196- ; X86-NOSSE-NEXT: andl (%esp), %ecx
197- ; X86-NOSSE-NEXT: orl %eax, %ecx
198- ; X86-NOSSE-NEXT: movw %cx, (%esp)
199- ; X86-NOSSE-NEXT: fldcw (%esp)
200- ; X86-NOSSE-NEXT: popl %eax
201- ; X86-NOSSE-NEXT: retl
202- ;
203- ; X86-SSE-LABEL: func_05:
204- ; X86-SSE: # %bb.0:
205- ; X86-SSE-NEXT: pushl %eax
206- ; X86-SSE-NEXT: movl {{[0-9]+}}(%esp), %eax
207- ; X86-SSE-NEXT: leal 4(%eax,%eax), %ecx
208- ; X86-SSE-NEXT: movl $201, %eax
209- ; X86-SSE-NEXT: # kill: def $cl killed $cl killed $ecx
210- ; X86-SSE-NEXT: shll %cl, %eax
211- ; X86-SSE-NEXT: andl $3072, %eax # imm = 0xC00
212- ; X86-SSE-NEXT: fnstcw (%esp)
213- ; X86-SSE-NEXT: movl $-3073, %ecx # imm = 0xF3FF
214- ; X86-SSE-NEXT: andl (%esp), %ecx
215- ; X86-SSE-NEXT: orl %eax, %ecx
216- ; X86-SSE-NEXT: movw %cx, (%esp)
217- ; X86-SSE-NEXT: fldcw (%esp)
218- ; X86-SSE-NEXT: stmxcsr (%esp)
219- ; X86-SSE-NEXT: movl $-24577, %ecx # imm = 0x9FFF
220- ; X86-SSE-NEXT: andl (%esp), %ecx
221- ; X86-SSE-NEXT: leal (%ecx,%eax,8), %eax
222- ; X86-SSE-NEXT: movl %eax, (%esp)
223- ; X86-SSE-NEXT: ldmxcsr (%esp)
224- ; X86-SSE-NEXT: popl %eax
225- ; X86-SSE-NEXT: retl
226- ;
227- ; X64-LABEL: func_05:
228- ; X64: # %bb.0:
229- ; X64-NEXT: # kill: def $edi killed $edi def $rdi
230- ; X64-NEXT: leal 4(%rdi,%rdi), %ecx
231- ; X64-NEXT: movl $201, %eax
232- ; X64-NEXT: # kill: def $cl killed $cl killed $ecx
233- ; X64-NEXT: shll %cl, %eax
234- ; X64-NEXT: andl $3072, %eax # imm = 0xC00
235- ; X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
236- ; X64-NEXT: movl $-3073, %ecx # imm = 0xF3FF
237- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %ecx
238- ; X64-NEXT: orl %eax, %ecx
239- ; X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)
240- ; X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
241- ; X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
242- ; X64-NEXT: movl $-24577, %ecx # imm = 0x9FFF
243- ; X64-NEXT: andl -{{[0-9]+}}(%rsp), %ecx
244- ; X64-NEXT: leal (%rcx,%rax,8), %eax
245- ; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
246- ; X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
247- ; X64-NEXT: retq
248- call void @llvm.set.rounding (i32 %x ) ; Downward
249- ret void
250- }
251-
25214define void @get_fpenv_01 (ptr %ptr ) #0 {
25315; X86-NOSSE-LABEL: get_fpenv_01:
25416; X86-NOSSE: # %bb.0: # %entry
0 commit comments