summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/CodeGen/X86/scalar-fp-to-i64.ll')
-rw-r--r--llvm/test/CodeGen/X86/scalar-fp-to-i64.ll220
1 files changed, 112 insertions, 108 deletions
diff --git a/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll b/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
index d7e63ba046c..402ff12e7de 100644
--- a/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
+++ b/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
@@ -198,23 +198,24 @@ define i64 @f_to_u64(float %a) nounwind {
; SSE2_32_WIN-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; SSE2_32_WIN-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; SSE2_32_WIN-NEXT: movaps %xmm0, %xmm2
-; SSE2_32_WIN-NEXT: cmpltss %xmm1, %xmm2
-; SSE2_32_WIN-NEXT: movaps %xmm2, %xmm3
-; SSE2_32_WIN-NEXT: andps %xmm0, %xmm2
-; SSE2_32_WIN-NEXT: xorl %edx, %edx
-; SSE2_32_WIN-NEXT: ucomiss %xmm0, %xmm1
-; SSE2_32_WIN-NEXT: subss %xmm1, %xmm0
-; SSE2_32_WIN-NEXT: andnps %xmm0, %xmm3
-; SSE2_32_WIN-NEXT: orps %xmm3, %xmm2
-; SSE2_32_WIN-NEXT: movss %xmm2, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: subss %xmm1, %xmm2
+; SSE2_32_WIN-NEXT: movaps %xmm0, %xmm3
+; SSE2_32_WIN-NEXT: cmpltss %xmm1, %xmm3
+; SSE2_32_WIN-NEXT: movaps %xmm3, %xmm4
+; SSE2_32_WIN-NEXT: andnps %xmm2, %xmm4
+; SSE2_32_WIN-NEXT: andps %xmm0, %xmm3
+; SSE2_32_WIN-NEXT: orps %xmm4, %xmm3
+; SSE2_32_WIN-NEXT: movss %xmm3, {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: flds {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: xorl %edx, %edx
+; SSE2_32_WIN-NEXT: ucomiss %xmm0, %xmm1
; SSE2_32_WIN-NEXT: setbe %dl
; SSE2_32_WIN-NEXT: shll $31, %edx
; SSE2_32_WIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
@@ -229,23 +230,24 @@ define i64 @f_to_u64(float %a) nounwind {
; SSE2_32_LIN-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
; SSE2_32_LIN-NEXT: movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
; SSE2_32_LIN-NEXT: movaps %xmm0, %xmm2
-; SSE2_32_LIN-NEXT: cmpltss %xmm1, %xmm2
-; SSE2_32_LIN-NEXT: movaps %xmm2, %xmm3
-; SSE2_32_LIN-NEXT: andps %xmm0, %xmm2
-; SSE2_32_LIN-NEXT: xorl %edx, %edx
-; SSE2_32_LIN-NEXT: ucomiss %xmm0, %xmm1
-; SSE2_32_LIN-NEXT: subss %xmm1, %xmm0
-; SSE2_32_LIN-NEXT: andnps %xmm0, %xmm3
-; SSE2_32_LIN-NEXT: orps %xmm3, %xmm2
-; SSE2_32_LIN-NEXT: movss %xmm2, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: subss %xmm1, %xmm2
+; SSE2_32_LIN-NEXT: movaps %xmm0, %xmm3
+; SSE2_32_LIN-NEXT: cmpltss %xmm1, %xmm3
+; SSE2_32_LIN-NEXT: movaps %xmm3, %xmm4
+; SSE2_32_LIN-NEXT: andnps %xmm2, %xmm4
+; SSE2_32_LIN-NEXT: andps %xmm0, %xmm3
+; SSE2_32_LIN-NEXT: orps %xmm4, %xmm3
+; SSE2_32_LIN-NEXT: movss %xmm3, {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: flds {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: xorl %edx, %edx
+; SSE2_32_LIN-NEXT: ucomiss %xmm0, %xmm1
; SSE2_32_LIN-NEXT: setbe %dl
; SSE2_32_LIN-NEXT: shll $31, %edx
; SSE2_32_LIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
@@ -289,13 +291,13 @@ define i64 @f_to_u64(float %a) nounwind {
; X87_WIN-NEXT: fstp %st(0)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: xorl %edx, %edx
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT: setbe %al
-; X87_WIN-NEXT: movzbl %al, %edx
+; X87_WIN-NEXT: setbe %dl
; X87_WIN-NEXT: shll $31, %edx
; X87_WIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -323,13 +325,13 @@ define i64 @f_to_u64(float %a) nounwind {
; X87_LIN-NEXT: fstp %st(0)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: xorl %edx, %edx
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT: setbe %al
-; X87_LIN-NEXT: movzbl %al, %edx
+; X87_LIN-NEXT: setbe %dl
; X87_LIN-NEXT: shll $31, %edx
; X87_LIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -453,9 +455,9 @@ define i64 @f_to_s64(float %a) nounwind {
; SSE2_32_WIN-NEXT: flds {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -472,9 +474,9 @@ define i64 @f_to_s64(float %a) nounwind {
; SSE2_32_LIN-NEXT: flds {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -496,9 +498,9 @@ define i64 @f_to_s64(float %a) nounwind {
; X87_WIN-NEXT: flds 8(%ebp)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -513,9 +515,9 @@ define i64 @f_to_s64(float %a) nounwind {
; X87_LIN-NEXT: flds {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -686,23 +688,24 @@ define i64 @d_to_u64(double %a) nounwind {
; SSE2_32_WIN-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
; SSE2_32_WIN-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
; SSE2_32_WIN-NEXT: movapd %xmm0, %xmm2
-; SSE2_32_WIN-NEXT: cmpltsd %xmm1, %xmm2
-; SSE2_32_WIN-NEXT: movapd %xmm2, %xmm3
-; SSE2_32_WIN-NEXT: andpd %xmm0, %xmm2
-; SSE2_32_WIN-NEXT: xorl %edx, %edx
-; SSE2_32_WIN-NEXT: ucomisd %xmm0, %xmm1
-; SSE2_32_WIN-NEXT: subsd %xmm1, %xmm0
-; SSE2_32_WIN-NEXT: andnpd %xmm0, %xmm3
-; SSE2_32_WIN-NEXT: orpd %xmm3, %xmm2
-; SSE2_32_WIN-NEXT: movsd %xmm2, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: subsd %xmm1, %xmm2
+; SSE2_32_WIN-NEXT: movapd %xmm0, %xmm3
+; SSE2_32_WIN-NEXT: cmpltsd %xmm1, %xmm3
+; SSE2_32_WIN-NEXT: movapd %xmm3, %xmm4
+; SSE2_32_WIN-NEXT: andnpd %xmm2, %xmm4
+; SSE2_32_WIN-NEXT: andpd %xmm0, %xmm3
+; SSE2_32_WIN-NEXT: orpd %xmm4, %xmm3
+; SSE2_32_WIN-NEXT: movsd %xmm3, {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldl {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: xorl %edx, %edx
+; SSE2_32_WIN-NEXT: ucomisd %xmm0, %xmm1
; SSE2_32_WIN-NEXT: setbe %dl
; SSE2_32_WIN-NEXT: shll $31, %edx
; SSE2_32_WIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
@@ -717,23 +720,24 @@ define i64 @d_to_u64(double %a) nounwind {
; SSE2_32_LIN-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero
; SSE2_32_LIN-NEXT: movsd {{.*#+}} xmm1 = mem[0],zero
; SSE2_32_LIN-NEXT: movapd %xmm0, %xmm2
-; SSE2_32_LIN-NEXT: cmpltsd %xmm1, %xmm2
-; SSE2_32_LIN-NEXT: movapd %xmm2, %xmm3
-; SSE2_32_LIN-NEXT: andpd %xmm0, %xmm2
-; SSE2_32_LIN-NEXT: xorl %edx, %edx
-; SSE2_32_LIN-NEXT: ucomisd %xmm0, %xmm1
-; SSE2_32_LIN-NEXT: subsd %xmm1, %xmm0
-; SSE2_32_LIN-NEXT: andnpd %xmm0, %xmm3
-; SSE2_32_LIN-NEXT: orpd %xmm3, %xmm2
-; SSE2_32_LIN-NEXT: movsd %xmm2, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: subsd %xmm1, %xmm2
+; SSE2_32_LIN-NEXT: movapd %xmm0, %xmm3
+; SSE2_32_LIN-NEXT: cmpltsd %xmm1, %xmm3
+; SSE2_32_LIN-NEXT: movapd %xmm3, %xmm4
+; SSE2_32_LIN-NEXT: andnpd %xmm2, %xmm4
+; SSE2_32_LIN-NEXT: andpd %xmm0, %xmm3
+; SSE2_32_LIN-NEXT: orpd %xmm4, %xmm3
+; SSE2_32_LIN-NEXT: movsd %xmm3, {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldl {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: xorl %edx, %edx
+; SSE2_32_LIN-NEXT: ucomisd %xmm0, %xmm1
; SSE2_32_LIN-NEXT: setbe %dl
; SSE2_32_LIN-NEXT: shll $31, %edx
; SSE2_32_LIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
@@ -777,13 +781,13 @@ define i64 @d_to_u64(double %a) nounwind {
; X87_WIN-NEXT: fstp %st(0)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: xorl %edx, %edx
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT: setbe %al
-; X87_WIN-NEXT: movzbl %al, %edx
+; X87_WIN-NEXT: setbe %dl
; X87_WIN-NEXT: shll $31, %edx
; X87_WIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -811,13 +815,13 @@ define i64 @d_to_u64(double %a) nounwind {
; X87_LIN-NEXT: fstp %st(0)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: xorl %edx, %edx
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT: setbe %al
-; X87_LIN-NEXT: movzbl %al, %edx
+; X87_LIN-NEXT: setbe %dl
; X87_LIN-NEXT: shll $31, %edx
; X87_LIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -941,9 +945,9 @@ define i64 @d_to_s64(double %a) nounwind {
; SSE2_32_WIN-NEXT: fldl {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -960,9 +964,9 @@ define i64 @d_to_s64(double %a) nounwind {
; SSE2_32_LIN-NEXT: fldl {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -984,9 +988,9 @@ define i64 @d_to_s64(double %a) nounwind {
; X87_WIN-NEXT: fldl 8(%ebp)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1001,9 +1005,9 @@ define i64 @d_to_s64(double %a) nounwind {
; X87_LIN-NEXT: fldl {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1185,16 +1189,16 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; SSE2_32_WIN-NEXT: flds __real@5f000000
; SSE2_32_WIN-NEXT: fld %st(1)
; SSE2_32_WIN-NEXT: fsub %st(1), %st
-; SSE2_32_WIN-NEXT: xorl %edx, %edx
; SSE2_32_WIN-NEXT: fxch %st(1)
; SSE2_32_WIN-NEXT: fucompi %st(2), %st
; SSE2_32_WIN-NEXT: fcmovnbe %st(1), %st
; SSE2_32_WIN-NEXT: fstp %st(1)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: xorl %edx, %edx
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: setbe %dl
@@ -1212,16 +1216,16 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; SSE2_32_LIN-NEXT: flds {{\.LCPI.*}}
; SSE2_32_LIN-NEXT: fld %st(1)
; SSE2_32_LIN-NEXT: fsub %st(1), %st
-; SSE2_32_LIN-NEXT: xorl %edx, %edx
; SSE2_32_LIN-NEXT: fxch %st(1)
; SSE2_32_LIN-NEXT: fucompi %st(2), %st
; SSE2_32_LIN-NEXT: fcmovnbe %st(1), %st
; SSE2_32_LIN-NEXT: fstp %st(1)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: xorl %edx, %edx
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: setbe %dl
@@ -1238,16 +1242,16 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; SSE2_64_WIN-NEXT: flds __real@{{.*}}(%rip)
; SSE2_64_WIN-NEXT: fld %st(1)
; SSE2_64_WIN-NEXT: fsub %st(1), %st
-; SSE2_64_WIN-NEXT: xorl %eax, %eax
; SSE2_64_WIN-NEXT: fxch %st(1)
; SSE2_64_WIN-NEXT: fucompi %st(2), %st
; SSE2_64_WIN-NEXT: fcmovnbe %st(1), %st
; SSE2_64_WIN-NEXT: fstp %st(1)
; SSE2_64_WIN-NEXT: fnstcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %ecx
-; SSE2_64_WIN-NEXT: movw $3199, {{[0-9]+}}(%rsp) # imm = 0xC7F
-; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
+; SSE2_64_WIN-NEXT: xorl %eax, %eax
+; SSE2_64_WIN-NEXT: orl $3072, %ecx # imm = 0xC00
; SSE2_64_WIN-NEXT: movw %cx, {{[0-9]+}}(%rsp)
+; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: fistpll {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: setbe %al
@@ -1262,16 +1266,16 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; SSE2_64_LIN-NEXT: flds {{.*}}(%rip)
; SSE2_64_LIN-NEXT: fld %st(1)
; SSE2_64_LIN-NEXT: fsub %st(1), %st
-; SSE2_64_LIN-NEXT: xorl %eax, %eax
; SSE2_64_LIN-NEXT: fxch %st(1)
; SSE2_64_LIN-NEXT: fucompi %st(2), %st
; SSE2_64_LIN-NEXT: fcmovnbe %st(1), %st
; SSE2_64_LIN-NEXT: fstp %st(1)
; SSE2_64_LIN-NEXT: fnstcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx
-; SSE2_64_LIN-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
-; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
+; SSE2_64_LIN-NEXT: xorl %eax, %eax
+; SSE2_64_LIN-NEXT: orl $3072, %ecx # imm = 0xC00
; SSE2_64_LIN-NEXT: movw %cx, -{{[0-9]+}}(%rsp)
+; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: fistpll -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: setbe %al
@@ -1302,13 +1306,13 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; X87_WIN-NEXT: fstp %st(0)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: xorl %edx, %edx
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT: setbe %al
-; X87_WIN-NEXT: movzbl %al, %edx
+; X87_WIN-NEXT: setbe %dl
; X87_WIN-NEXT: shll $31, %edx
; X87_WIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1336,13 +1340,13 @@ define i64 @x_to_u64(x86_fp80 %a) nounwind {
; X87_LIN-NEXT: fstp %st(0)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: xorl %edx, %edx
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT: setbe %al
-; X87_LIN-NEXT: movzbl %al, %edx
+; X87_LIN-NEXT: setbe %dl
; X87_LIN-NEXT: shll $31, %edx
; X87_LIN-NEXT: xorl {{[0-9]+}}(%esp), %edx
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1442,9 +1446,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; SSE2_32_WIN-NEXT: fldt 8(%ebp)
; SSE2_32_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1459,9 +1463,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; SSE2_32_LIN-NEXT: fldt {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_32_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; SSE2_32_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1475,9 +1479,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; SSE2_64_WIN-NEXT: fldt (%rcx)
; SSE2_64_WIN-NEXT: fnstcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: movzwl {{[0-9]+}}(%rsp), %eax
-; SSE2_64_WIN-NEXT: movw $3199, {{[0-9]+}}(%rsp) # imm = 0xC7F
-; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
+; SSE2_64_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_64_WIN-NEXT: movw %ax, {{[0-9]+}}(%rsp)
+; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: fistpll {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: fldcw {{[0-9]+}}(%rsp)
; SSE2_64_WIN-NEXT: movq {{[0-9]+}}(%rsp), %rax
@@ -1489,9 +1493,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; SSE2_64_LIN-NEXT: fldt {{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: fnstcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax
-; SSE2_64_LIN-NEXT: movw $3199, -{{[0-9]+}}(%rsp) # imm = 0xC7F
-; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
+; SSE2_64_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; SSE2_64_LIN-NEXT: movw %ax, -{{[0-9]+}}(%rsp)
+; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: fistpll -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: fldcw -{{[0-9]+}}(%rsp)
; SSE2_64_LIN-NEXT: movq -{{[0-9]+}}(%rsp), %rax
@@ -1506,9 +1510,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; X87_WIN-NEXT: fldt 8(%ebp)
; X87_WIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_WIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_WIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_WIN-NEXT: movl {{[0-9]+}}(%esp), %eax
@@ -1523,9 +1527,9 @@ define i64 @x_to_s64(x86_fp80 %a) nounwind {
; X87_LIN-NEXT: fldt {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fnstcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movzwl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT: movw $3199, {{[0-9]+}}(%esp) # imm = 0xC7F
-; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: orl $3072, %eax # imm = 0xC00
; X87_LIN-NEXT: movw %ax, {{[0-9]+}}(%esp)
+; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fistpll {{[0-9]+}}(%esp)
; X87_LIN-NEXT: fldcw {{[0-9]+}}(%esp)
; X87_LIN-NEXT: movl {{[0-9]+}}(%esp), %eax
OpenPOWER on IntegriCloud