diff options
Diffstat (limited to 'llvm/test/CodeGen/X86/scalar-fp-to-i64.ll')
-rw-r--r-- | llvm/test/CodeGen/X86/scalar-fp-to-i64.ll | 220 |
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 |