@@ -30,7 +30,7 @@ define void @func_01() nounwind {
3030; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)
3131; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
3232; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax
33- ; GISEL-X86-NOSSE-NEXT: orw $3072 , %ax # imm = 0xC00
33+ ; GISEL-X86-NOSSE-NEXT: orw $24576 , %ax # imm = 0x6000
3434; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)
3535; GISEL-X86-NOSSE-NEXT: fldcw (%esp)
3636; GISEL-X86-NOSSE-NEXT: popl %eax
@@ -48,7 +48,7 @@ define void @func_01() nounwind {
4848; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)
4949; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
5050; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax
51- ; GISEL-X64-NOSSE-NEXT: orw $3072 , %ax # imm = 0xC00
51+ ; GISEL-X64-NOSSE-NEXT: orw $24576 , %ax # imm = 0x6000
5252; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
5353; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)
5454; GISEL-X64-NOSSE-NEXT: retq
@@ -68,7 +68,7 @@ define void @func_01() nounwind {
6868; GISEL-X86-NEXT: fnstcw (%esp)
6969; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF
7070; GISEL-X86-NEXT: andw (%esp), %ax
71- ; GISEL-X86-NEXT: orw $3072 , %ax # imm = 0xC00
71+ ; GISEL-X86-NEXT: orw $24576 , %ax # imm = 0x6000
7272; GISEL-X86-NEXT: movw %ax, (%esp)
7373; GISEL-X86-NEXT: fldcw (%esp)
7474; GISEL-X86-NEXT: popl %eax
@@ -89,16 +89,14 @@ define void @func_01() nounwind {
8989; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
9090; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF
9191; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax
92- ; GISEL-X64-NEXT: orw $3072 , %ax # imm = 0xC00
92+ ; GISEL-X64-NEXT: orw $24576 , %ax # imm = 0x6000
9393; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
9494; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
9595; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
9696; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
9797; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
98- ; GISEL-X64-NEXT: movl $3072, %ecx # imm = 0xC00
99- ; GISEL-X64-NEXT: shll $3, %ecx
100- ; GISEL-X64-NEXT: orl %eax, %ecx
101- ; GISEL-X64-NEXT: movl %ecx, -{{[0-9]+}}(%rsp)
98+ ; GISEL-X64-NEXT: orl $24576, %eax # imm = 0x6000
99+ ; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
102100; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
103101; GISEL-X64-NEXT: retq
104102 call void @llvm.set.rounding (i32 0 ) ; TowardZero (CW[11-10] = 11)
@@ -186,10 +184,8 @@ define void @func_02() nounwind {
186184; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
187185; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
188186; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
189- ; GISEL-X64-NEXT: xorl %ecx, %ecx
190- ; GISEL-X64-NEXT: shll $3, %ecx
191- ; GISEL-X64-NEXT: orl %eax, %ecx
192- ; GISEL-X64-NEXT: movl %ecx, -{{[0-9]+}}(%rsp)
187+ ; GISEL-X64-NEXT: orl $0, %eax
188+ ; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
193189; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
194190; GISEL-X64-NEXT: retq
195191 call void @llvm.set.rounding (i32 1 ) ; ToNearestTiesToEven (CW[11-10] = 00)
@@ -215,7 +211,7 @@ define void @func_03() nounwind {
215211; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)
216212; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
217213; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax
218- ; GISEL-X86-NOSSE-NEXT: orw $2048 , %ax # imm = 0x800
214+ ; GISEL-X86-NOSSE-NEXT: orw $16384 , %ax # imm = 0x4000
219215; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)
220216; GISEL-X86-NOSSE-NEXT: fldcw (%esp)
221217; GISEL-X86-NOSSE-NEXT: popl %eax
@@ -236,7 +232,7 @@ define void @func_03() nounwind {
236232; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)
237233; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
238234; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax
239- ; GISEL-X64-NOSSE-NEXT: orw $2048 , %ax # imm = 0x800
235+ ; GISEL-X64-NOSSE-NEXT: orw $16384 , %ax # imm = 0x4000
240236; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
241237; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)
242238; GISEL-X64-NOSSE-NEXT: retq
@@ -259,7 +255,7 @@ define void @func_03() nounwind {
259255; GISEL-X86-NEXT: fnstcw (%esp)
260256; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF
261257; GISEL-X86-NEXT: andw (%esp), %ax
262- ; GISEL-X86-NEXT: orw $2048 , %ax # imm = 0x800
258+ ; GISEL-X86-NEXT: orw $16384 , %ax # imm = 0x4000
263259; GISEL-X86-NEXT: movw %ax, (%esp)
264260; GISEL-X86-NEXT: fldcw (%esp)
265261; GISEL-X86-NEXT: popl %eax
@@ -286,16 +282,14 @@ define void @func_03() nounwind {
286282; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
287283; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF
288284; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax
289- ; GISEL-X64-NEXT: orw $2048 , %ax # imm = 0x800
285+ ; GISEL-X64-NEXT: orw $16384 , %ax # imm = 0x4000
290286; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
291287; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
292288; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
293289; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
294290; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
295- ; GISEL-X64-NEXT: movl $2048, %ecx # imm = 0x800
296- ; GISEL-X64-NEXT: shll $3, %ecx
297- ; GISEL-X64-NEXT: orl %eax, %ecx
298- ; GISEL-X64-NEXT: movl %ecx, -{{[0-9]+}}(%rsp)
291+ ; GISEL-X64-NEXT: orl $16384, %eax # imm = 0x4000
292+ ; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
299293; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
300294; GISEL-X64-NEXT: retq
301295 call void @llvm.set.rounding (i32 2 ) ; Upward (CW[11-10] = 10)
@@ -321,7 +315,7 @@ define void @func_04() nounwind {
321315; GISEL-X86-NOSSE-NEXT: fnstcw (%esp)
322316; GISEL-X86-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
323317; GISEL-X86-NOSSE-NEXT: andw (%esp), %ax
324- ; GISEL-X86-NOSSE-NEXT: orw $1024 , %ax # imm = 0x400
318+ ; GISEL-X86-NOSSE-NEXT: orw $8192 , %ax # imm = 0x2000
325319; GISEL-X86-NOSSE-NEXT: movw %ax, (%esp)
326320; GISEL-X86-NOSSE-NEXT: fldcw (%esp)
327321; GISEL-X86-NOSSE-NEXT: popl %eax
@@ -342,7 +336,7 @@ define void @func_04() nounwind {
342336; GISEL-X64-NOSSE-NEXT: fnstcw -{{[0-9]+}}(%rsp)
343337; GISEL-X64-NOSSE-NEXT: movw $-3073, %ax # imm = 0xF3FF
344338; GISEL-X64-NOSSE-NEXT: andw -{{[0-9]+}}(%rsp), %ax
345- ; GISEL-X64-NOSSE-NEXT: orw $1024 , %ax # imm = 0x400
339+ ; GISEL-X64-NOSSE-NEXT: orw $8192 , %ax # imm = 0x2000
346340; GISEL-X64-NOSSE-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
347341; GISEL-X64-NOSSE-NEXT: fldcw -{{[0-9]+}}(%rsp)
348342; GISEL-X64-NOSSE-NEXT: retq
@@ -365,7 +359,7 @@ define void @func_04() nounwind {
365359; GISEL-X86-NEXT: fnstcw (%esp)
366360; GISEL-X86-NEXT: movw $-3073, %ax # imm = 0xF3FF
367361; GISEL-X86-NEXT: andw (%esp), %ax
368- ; GISEL-X86-NEXT: orw $1024 , %ax # imm = 0x400
362+ ; GISEL-X86-NEXT: orw $8192 , %ax # imm = 0x2000
369363; GISEL-X86-NEXT: movw %ax, (%esp)
370364; GISEL-X86-NEXT: fldcw (%esp)
371365; GISEL-X86-NEXT: popl %eax
@@ -392,16 +386,14 @@ define void @func_04() nounwind {
392386; GISEL-X64-NEXT: fnstcw -{{[0-9]+}}(%rsp)
393387; GISEL-X64-NEXT: movw $-3073, %ax # imm = 0xF3FF
394388; GISEL-X64-NEXT: andw -{{[0-9]+}}(%rsp), %ax
395- ; GISEL-X64-NEXT: orw $1024 , %ax # imm = 0x400
389+ ; GISEL-X64-NEXT: orw $8192 , %ax # imm = 0x2000
396390; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
397391; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
398392; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
399393; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
400394; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
401- ; GISEL-X64-NEXT: movl $1024, %ecx # imm = 0x400
402- ; GISEL-X64-NEXT: shll $3, %ecx
403- ; GISEL-X64-NEXT: orl %eax, %ecx
404- ; GISEL-X64-NEXT: movl %ecx, -{{[0-9]+}}(%rsp)
395+ ; GISEL-X64-NEXT: orl $8192, %eax # imm = 0x2000
396+ ; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
405397; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
406398; GISEL-X64-NEXT: retq
407399 call void @llvm.set.rounding (i32 3 ) ; Downward (CW[11-10] = 01)
@@ -550,16 +542,16 @@ define void @func_05(i32 %x) nounwind {
550542; GISEL-X64-NEXT: # kill: def $cl killed $cl killed $ecx
551543; GISEL-X64-NEXT: shlw %cl, %dx
552544; GISEL-X64-NEXT: andw $3072, %dx # imm = 0xC00
553- ; GISEL-X64-NEXT: orw %dx, %ax
554- ; GISEL-X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
545+ ; GISEL-X64-NEXT: movzwl %dx, %ecx
546+ ; GISEL-X64-NEXT: leal (,%rcx,8), %edx
547+ ; GISEL-X64-NEXT: orw %ax, %cx
548+ ; GISEL-X64-NEXT: movw %cx, -{{[0-9]+}}(%rsp)
555549; GISEL-X64-NEXT: fldcw -{{[0-9]+}}(%rsp)
556550; GISEL-X64-NEXT: stmxcsr -{{[0-9]+}}(%rsp)
557551; GISEL-X64-NEXT: movl $-24577, %eax # imm = 0x9FFF
558552; GISEL-X64-NEXT: andl -{{[0-9]+}}(%rsp), %eax
559- ; GISEL-X64-NEXT: movzwl %dx, %ecx
560- ; GISEL-X64-NEXT: shll $3, %ecx
561- ; GISEL-X64-NEXT: orl %eax, %ecx
562- ; GISEL-X64-NEXT: movl %ecx, -{{[0-9]+}}(%rsp)
553+ ; GISEL-X64-NEXT: orl %edx, %eax
554+ ; GISEL-X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)
563555; GISEL-X64-NEXT: ldmxcsr -{{[0-9]+}}(%rsp)
564556; GISEL-X64-NEXT: retq
565557 call void @llvm.set.rounding (i32 %x ) ; Downward
0 commit comments