[llvm] 64d3ed3 - [X86] Regenerate scalar fptosi/fptoui tests. NFCI.

Simon Pilgrim via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 27 10:56:51 PDT 2020


Author: Simon Pilgrim
Date: 2020-10-27T17:44:30Z
New Revision: 64d3ed304fe7aa7c4d753da70beaff9f23c4896b

URL: https://github.com/llvm/llvm-project/commit/64d3ed304fe7aa7c4d753da70beaff9f23c4896b
DIFF: https://github.com/llvm/llvm-project/commit/64d3ed304fe7aa7c4d753da70beaff9f23c4896b.diff

LOG: [X86] Regenerate scalar fptosi/fptoui tests. NFCI.

Merge prefixes where possible, use 'X86' instead of 'X32' (which we try to only use for gnux32 triple tests).

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/scalar-fp-to-i32.ll
    llvm/test/CodeGen/X86/scalar-fp-to-i64.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/CodeGen/X86/scalar-fp-to-i32.ll b/llvm/test/CodeGen/X86/scalar-fp-to-i32.ll
index 4ca20a778fdf..9e0868f63b95 100644
--- a/llvm/test/CodeGen/X86/scalar-fp-to-i32.ll
+++ b/llvm/test/CodeGen/X86/scalar-fp-to-i32.ll
@@ -1,179 +1,158 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512DQVL_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512DQVL_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512DQVL_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512DQVL_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512DQ_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512DQ_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512DQ_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512DQ_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512F_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512F_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512F_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512F_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X32,SSE3_32,SSE3_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X32,SSE3_32,SSE3_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,SSE3_64,SSE3_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,SSE3_64,SSE3_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X32,SSE2_32,SSE2_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X32,SSE2_32,SSE2_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE2_64,SSE2_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE2_64,SSE2_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse | FileCheck %s --check-prefixes=CHECK,X32,SSE_32,SSE_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse | FileCheck %s --check-prefixes=CHECK,X32,SSE_32,SSE_32_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X32,X87,X87_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X32,X87,X87_LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQVL,X86-AVX512-WIN,X86-AVX512DQVL-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQVL,X86-AVX512-LIN,X86-AVX512DQVL-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512DQVL,X64-AVX512-WIN,X64-AVX512DQVL-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512DQVL,X64-AVX512-LIN,X64-AVX512DQVL-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQ,X86-AVX512-WIN,X86-AVX512DQ-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQ,X86-AVX512-LIN,X86-AVX512DQ-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512DQ,X64-AVX512-WIN,X64-AVX512DQ-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512DQ,X64-AVX512-LIN,X64-AVX512DQ-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512F,X86-AVX512-WIN,X86-AVX512F-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512F,X86-AVX512-LIN,X86-AVX512F-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512F,X64-AVX512-WIN,X64-AVX512F-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512F,X64-AVX512-LIN,X64-AVX512F-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE3,X86-SSE-WIN,X86-SSE3-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE3,X86-SSE-LIN,X86-SSE3-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE3,X64-SSE-WIN,X64-SSE3-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE3,X64-SSE-LIN,X64-SSE3-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE2,X86-SSE-WIN,X86-SSE2-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE2,X86-SSE-LIN,X86-SSE2-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE2,X64-SSE-WIN,X64-SSE2-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE2,X64-SSE-LIN,X64-SSE2-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse  | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE1,X86-SSE-WIN,X86-SSE1-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse  | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE1,X86-SSE-LIN,X86-SSE1-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X86,X87,X87-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X86,X87,X87-LIN
 
 ; Check that scalar FP conversions to signed and unsigned int32 are using
 ; reasonable sequences, across platforms and target switches.
 
 define i32 @f_to_u32(float %a) nounwind {
-; AVX512_32-LABEL: f_to_u32:
-; AVX512_32:       # %bb.0:
-; AVX512_32-NEXT:    vcvttss2usi {{[0-9]+}}(%esp), %eax
-; AVX512_32-NEXT:    retl
-;
-; AVX512_64-LABEL: f_to_u32:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttss2usi %xmm0, %eax
-; AVX512_64-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: f_to_u32:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_WIN-NEXT:    movss %xmm0, (%esp)
-; SSE3_32_WIN-NEXT:    flds (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: f_to_u32:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_LIN-NEXT:    movss %xmm0, (%esp)
-; SSE3_32_LIN-NEXT:    flds (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: f_to_u32:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE3_64-NEXT:    # kill: def $eax killed $eax killed $rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32-LABEL: f_to_u32:
-; SSE2_32:       # %bb.0:
-; SSE2_32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE2_32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE2_32-NEXT:    movaps %xmm0, %xmm2
-; SSE2_32-NEXT:    subss %xmm1, %xmm2
-; SSE2_32-NEXT:    cvttss2si %xmm2, %ecx
-; SSE2_32-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
-; SSE2_32-NEXT:    cvttss2si %xmm0, %eax
-; SSE2_32-NEXT:    ucomiss %xmm0, %xmm1
-; SSE2_32-NEXT:    cmovbel %ecx, %eax
-; SSE2_32-NEXT:    retl
-;
-; SSE2_64-LABEL: f_to_u32:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE2_64-NEXT:    # kill: def $eax killed $eax killed $rax
-; SSE2_64-NEXT:    retq
-;
-; SSE_32-LABEL: f_to_u32:
-; SSE_32:       # %bb.0:
-; SSE_32-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE_32-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE_32-NEXT:    movaps %xmm0, %xmm2
-; SSE_32-NEXT:    subss %xmm1, %xmm2
-; SSE_32-NEXT:    cvttss2si %xmm2, %ecx
-; SSE_32-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
-; SSE_32-NEXT:    cvttss2si %xmm0, %eax
-; SSE_32-NEXT:    ucomiss %xmm0, %xmm1
-; SSE_32-NEXT:    cmovbel %ecx, %eax
-; SSE_32-NEXT:    retl
-;
-; X87_WIN-LABEL: f_to_u32:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    flds 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: f_to_u32:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-LABEL: f_to_u32:
+; X86-AVX512:       # %bb.0:
+; X86-AVX512-NEXT:    vcvttss2usi {{[0-9]+}}(%esp), %eax
+; X86-AVX512-NEXT:    retl
+;
+; X64-AVX512-LABEL: f_to_u32:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttss2usi %xmm0, %eax
+; X64-AVX512-NEXT:    retq
+;
+; X86-SSE3-WIN-LABEL: f_to_u32:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-WIN-NEXT:    movss %xmm0, (%esp)
+; X86-SSE3-WIN-NEXT:    flds (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: f_to_u32:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-LIN-NEXT:    movss %xmm0, (%esp)
+; X86-SSE3-LIN-NEXT:    flds (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: f_to_u32:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttss2si %xmm0, %rax
+; X64-SSE-NEXT:    # kill: def $eax killed $eax killed $rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-LABEL: f_to_u32:
+; X86-SSE2:       # %bb.0:
+; X86-SSE2-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE2-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE2-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE2-NEXT:    subss %xmm1, %xmm2
+; X86-SSE2-NEXT:    cvttss2si %xmm2, %ecx
+; X86-SSE2-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
+; X86-SSE2-NEXT:    cvttss2si %xmm0, %eax
+; X86-SSE2-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE2-NEXT:    cmovbel %ecx, %eax
+; X86-SSE2-NEXT:    retl
+;
+; X86-SSE1-LABEL: f_to_u32:
+; X86-SSE1:       # %bb.0:
+; X86-SSE1-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE1-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE1-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE1-NEXT:    subss %xmm1, %xmm2
+; X86-SSE1-NEXT:    cvttss2si %xmm2, %ecx
+; X86-SSE1-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
+; X86-SSE1-NEXT:    cvttss2si %xmm0, %eax
+; X86-SSE1-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE1-NEXT:    cmovbel %ecx, %eax
+; X86-SSE1-NEXT:    retl
+;
+; X87-WIN-LABEL: f_to_u32:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    flds 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: f_to_u32:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui float %a to i32
   ret i32 %r
 }
 
 define i32 @f_to_s32(float %a) nounwind {
-; AVX512_32-LABEL: f_to_s32:
-; AVX512_32:       # %bb.0:
-; AVX512_32-NEXT:    vcvttss2si {{[0-9]+}}(%esp), %eax
-; AVX512_32-NEXT:    retl
-;
-; AVX512_64-LABEL: f_to_s32:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttss2si %xmm0, %eax
-; AVX512_64-NEXT:    retq
-;
-; SSE3_32-LABEL: f_to_s32:
-; SSE3_32:       # %bb.0:
-; SSE3_32-NEXT:    cvttss2si {{[0-9]+}}(%esp), %eax
-; SSE3_32-NEXT:    retl
-;
-; SSE3_64-LABEL: f_to_s32:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttss2si %xmm0, %eax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32-LABEL: f_to_s32:
-; SSE2_32:       # %bb.0:
-; SSE2_32-NEXT:    cvttss2si {{[0-9]+}}(%esp), %eax
-; SSE2_32-NEXT:    retl
-;
-; SSE2_64-LABEL: f_to_s32:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttss2si %xmm0, %eax
-; SSE2_64-NEXT:    retq
-;
-; SSE_32-LABEL: f_to_s32:
-; SSE_32:       # %bb.0:
-; SSE_32-NEXT:    cvttss2si {{[0-9]+}}(%esp), %eax
-; SSE_32-NEXT:    retl
+; X86-AVX512-LABEL: f_to_s32:
+; X86-AVX512:       # %bb.0:
+; X86-AVX512-NEXT:    vcvttss2si {{[0-9]+}}(%esp), %eax
+; X86-AVX512-NEXT:    retl
+;
+; X64-AVX512-LABEL: f_to_s32:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttss2si %xmm0, %eax
+; X64-AVX512-NEXT:    retq
+;
+; X86-SSE-LABEL: f_to_s32:
+; X86-SSE:       # %bb.0:
+; X86-SSE-NEXT:    cvttss2si {{[0-9]+}}(%esp), %eax
+; X86-SSE-NEXT:    retl
+;
+; X64-SSE-LABEL: f_to_s32:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttss2si %xmm0, %eax
+; X64-SSE-NEXT:    retq
 ;
 ; X87-LABEL: f_to_s32:
 ; X87:       # %bb.0:
@@ -194,183 +173,172 @@ define i32 @f_to_s32(float %a) nounwind {
 }
 
 define i32 @d_to_u32(double %a) nounwind {
-; AVX512_32-LABEL: d_to_u32:
-; AVX512_32:       # %bb.0:
-; AVX512_32-NEXT:    vcvttsd2usi {{[0-9]+}}(%esp), %eax
-; AVX512_32-NEXT:    retl
-;
-; AVX512_64-LABEL: d_to_u32:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttsd2usi %xmm0, %eax
-; AVX512_64-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: d_to_u32:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_WIN-NEXT:    movsd %xmm0, (%esp)
-; SSE3_32_WIN-NEXT:    fldl (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: d_to_u32:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_LIN-NEXT:    movsd %xmm0, (%esp)
-; SSE3_32_LIN-NEXT:    fldl (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: d_to_u32:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE3_64-NEXT:    # kill: def $eax killed $eax killed $rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32-LABEL: d_to_u32:
-; SSE2_32:       # %bb.0:
-; SSE2_32-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE2_32-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
-; SSE2_32-NEXT:    movapd %xmm0, %xmm2
-; SSE2_32-NEXT:    subsd %xmm1, %xmm2
-; SSE2_32-NEXT:    cvttsd2si %xmm2, %ecx
-; SSE2_32-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
-; SSE2_32-NEXT:    cvttsd2si %xmm0, %eax
-; SSE2_32-NEXT:    ucomisd %xmm0, %xmm1
-; SSE2_32-NEXT:    cmovbel %ecx, %eax
-; SSE2_32-NEXT:    retl
-;
-; SSE2_64-LABEL: d_to_u32:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE2_64-NEXT:    # kill: def $eax killed $eax killed $rax
-; SSE2_64-NEXT:    retq
-;
-; SSE_32_WIN-LABEL: d_to_u32:
-; SSE_32_WIN:       # %bb.0:
-; SSE_32_WIN-NEXT:    pushl %ebp
-; SSE_32_WIN-NEXT:    movl %esp, %ebp
-; SSE_32_WIN-NEXT:    andl $-8, %esp
-; SSE_32_WIN-NEXT:    subl $16, %esp
-; SSE_32_WIN-NEXT:    fldl 8(%ebp)
-; SSE_32_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; SSE_32_WIN-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32_WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32_WIN-NEXT:    movl %ebp, %esp
-; SSE_32_WIN-NEXT:    popl %ebp
-; SSE_32_WIN-NEXT:    retl
-;
-; SSE_32_LIN-LABEL: d_to_u32:
-; SSE_32_LIN:       # %bb.0:
-; SSE_32_LIN-NEXT:    subl $20, %esp
-; SSE_32_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; SSE_32_LIN-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32_LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32_LIN-NEXT:    addl $20, %esp
-; SSE_32_LIN-NEXT:    retl
-;
-; X87_WIN-LABEL: d_to_u32:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldl 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: d_to_u32:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-LABEL: d_to_u32:
+; X86-AVX512:       # %bb.0:
+; X86-AVX512-NEXT:    vcvttsd2usi {{[0-9]+}}(%esp), %eax
+; X86-AVX512-NEXT:    retl
+;
+; X64-AVX512-LABEL: d_to_u32:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttsd2usi %xmm0, %eax
+; X64-AVX512-NEXT:    retq
+;
+; X86-SSE3-WIN-LABEL: d_to_u32:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-WIN-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE3-WIN-NEXT:    fldl (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: d_to_u32:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-LIN-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE3-LIN-NEXT:    fldl (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: d_to_u32:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttsd2si %xmm0, %rax
+; X64-SSE-NEXT:    # kill: def $eax killed $eax killed $rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-LABEL: d_to_u32:
+; X86-SSE2:       # %bb.0:
+; X86-SSE2-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE2-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X86-SSE2-NEXT:    movapd %xmm0, %xmm2
+; X86-SSE2-NEXT:    subsd %xmm1, %xmm2
+; X86-SSE2-NEXT:    cvttsd2si %xmm2, %ecx
+; X86-SSE2-NEXT:    xorl $-2147483648, %ecx # imm = 0x80000000
+; X86-SSE2-NEXT:    cvttsd2si %xmm0, %eax
+; X86-SSE2-NEXT:    ucomisd %xmm0, %xmm1
+; X86-SSE2-NEXT:    cmovbel %ecx, %eax
+; X86-SSE2-NEXT:    retl
+;
+; X86-SSE1-WIN-LABEL: d_to_u32:
+; X86-SSE1-WIN:       # %bb.0:
+; X86-SSE1-WIN-NEXT:    pushl %ebp
+; X86-SSE1-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE1-WIN-NEXT:    andl $-8, %esp
+; X86-SSE1-WIN-NEXT:    subl $16, %esp
+; X86-SSE1-WIN-NEXT:    fldl 8(%ebp)
+; X86-SSE1-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE1-WIN-NEXT:    popl %ebp
+; X86-SSE1-WIN-NEXT:    retl
+;
+; X86-SSE1-LIN-LABEL: d_to_u32:
+; X86-SSE1-LIN:       # %bb.0:
+; X86-SSE1-LIN-NEXT:    subl $20, %esp
+; X86-SSE1-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-LIN-NEXT:    addl $20, %esp
+; X86-SSE1-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: d_to_u32:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldl 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: d_to_u32:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui double %a to i32
   ret i32 %r
 }
 
 define i32 @d_to_s32(double %a) nounwind {
-; AVX512_32-LABEL: d_to_s32:
-; AVX512_32:       # %bb.0:
-; AVX512_32-NEXT:    vcvttsd2si {{[0-9]+}}(%esp), %eax
-; AVX512_32-NEXT:    retl
-;
-; AVX512_64-LABEL: d_to_s32:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttsd2si %xmm0, %eax
-; AVX512_64-NEXT:    retq
-;
-; SSE3_32-LABEL: d_to_s32:
-; SSE3_32:       # %bb.0:
-; SSE3_32-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
-; SSE3_32-NEXT:    retl
-;
-; SSE3_64-LABEL: d_to_s32:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttsd2si %xmm0, %eax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32-LABEL: d_to_s32:
-; SSE2_32:       # %bb.0:
-; SSE2_32-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
-; SSE2_32-NEXT:    retl
-;
-; SSE2_64-LABEL: d_to_s32:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttsd2si %xmm0, %eax
-; SSE2_64-NEXT:    retq
-;
-; SSE_32-LABEL: d_to_s32:
-; SSE_32:       # %bb.0:
-; SSE_32-NEXT:    subl $8, %esp
-; SSE_32-NEXT:    fldl {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fnstcw (%esp)
-; SSE_32-NEXT:    movzwl (%esp), %eax
-; SSE_32-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fistpl {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fldcw (%esp)
-; SSE_32-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32-NEXT:    addl $8, %esp
-; SSE_32-NEXT:    retl
+; X86-AVX512-LABEL: d_to_s32:
+; X86-AVX512:       # %bb.0:
+; X86-AVX512-NEXT:    vcvttsd2si {{[0-9]+}}(%esp), %eax
+; X86-AVX512-NEXT:    retl
+;
+; X64-AVX512-LABEL: d_to_s32:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttsd2si %xmm0, %eax
+; X64-AVX512-NEXT:    retq
+;
+; X86-SSE3-LABEL: d_to_s32:
+; X86-SSE3:       # %bb.0:
+; X86-SSE3-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
+; X86-SSE3-NEXT:    retl
+;
+; X64-SSE-LABEL: d_to_s32:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttsd2si %xmm0, %eax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-LABEL: d_to_s32:
+; X86-SSE2:       # %bb.0:
+; X86-SSE2-NEXT:    cvttsd2si {{[0-9]+}}(%esp), %eax
+; X86-SSE2-NEXT:    retl
+;
+; X86-SSE1-LABEL: d_to_s32:
+; X86-SSE1:       # %bb.0:
+; X86-SSE1-NEXT:    subl $8, %esp
+; X86-SSE1-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fnstcw (%esp)
+; X86-SSE1-NEXT:    movzwl (%esp), %eax
+; X86-SSE1-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fistpl {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fldcw (%esp)
+; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-NEXT:    addl $8, %esp
+; X86-SSE1-NEXT:    retl
 ;
 ; X87-LABEL: d_to_s32:
 ; X87:       # %bb.0:
@@ -391,323 +359,323 @@ define i32 @d_to_s32(double %a) nounwind {
 }
 
 define i32 @x_to_u32(x86_fp80 %a) nounwind {
-; AVX512_32_WIN-LABEL: x_to_u32:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    pushl %ebp
-; AVX512_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512_32_WIN-NEXT:    andl $-8, %esp
-; AVX512_32_WIN-NEXT:    subl $8, %esp
-; AVX512_32_WIN-NEXT:    fldt 8(%ebp)
-; AVX512_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512_32_WIN-NEXT:    popl %ebp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: x_to_u32:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $12, %esp
-; AVX512_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; AVX512_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512_32_LIN-NEXT:    addl $12, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: x_to_u32:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    pushq %rax
-; AVX512_64_WIN-NEXT:    fldt (%rcx)
-; AVX512_64_WIN-NEXT:    fisttpll (%rsp)
-; AVX512_64_WIN-NEXT:    movl (%rsp), %eax
-; AVX512_64_WIN-NEXT:    popq %rcx
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: x_to_u32:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: x_to_u32:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    fldt 8(%ebp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: x_to_u32:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: x_to_u32:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    pushq %rax
-; SSE3_64_WIN-NEXT:    fldt (%rcx)
-; SSE3_64_WIN-NEXT:    fisttpll (%rsp)
-; SSE3_64_WIN-NEXT:    movl (%rsp), %eax
-; SSE3_64_WIN-NEXT:    popq %rcx
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: x_to_u32:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: x_to_u32:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; 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:    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
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: x_to_u32:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: x_to_u32:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $16, %rsp
-; 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:    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:    movl {{[0-9]+}}(%rsp), %eax
-; SSE2_64_WIN-NEXT:    addq $16, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: x_to_u32:
-; SSE2_64_LIN:       # %bb.0:
-; 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:    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:    movl -{{[0-9]+}}(%rsp), %eax
-; SSE2_64_LIN-NEXT:    retq
-;
-; SSE_32_WIN-LABEL: x_to_u32:
-; SSE_32_WIN:       # %bb.0:
-; SSE_32_WIN-NEXT:    pushl %ebp
-; SSE_32_WIN-NEXT:    movl %esp, %ebp
-; SSE_32_WIN-NEXT:    andl $-8, %esp
-; SSE_32_WIN-NEXT:    subl $16, %esp
-; SSE_32_WIN-NEXT:    fldt 8(%ebp)
-; SSE_32_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; SSE_32_WIN-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32_WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32_WIN-NEXT:    movl %ebp, %esp
-; SSE_32_WIN-NEXT:    popl %ebp
-; SSE_32_WIN-NEXT:    retl
-;
-; SSE_32_LIN-LABEL: x_to_u32:
-; SSE_32_LIN:       # %bb.0:
-; SSE_32_LIN-NEXT:    subl $20, %esp
-; SSE_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; SSE_32_LIN-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32_LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32_LIN-NEXT:    addl $20, %esp
-; SSE_32_LIN-NEXT:    retl
-;
-; X87_WIN-LABEL: x_to_u32:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldt 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: x_to_u32:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: x_to_u32:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    pushl %ebp
+; X86-AVX512-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512-WIN-NEXT:    subl $8, %esp
+; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)
+; X86-AVX512-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512-WIN-NEXT:    popl %ebp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: x_to_u32:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $12, %esp
+; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-AVX512-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-LIN-NEXT:    addl $12, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: x_to_u32:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    pushq %rax
+; X64-AVX512-WIN-NEXT:    fldt (%rcx)
+; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)
+; X64-AVX512-WIN-NEXT:    movl (%rsp), %eax
+; X64-AVX512-WIN-NEXT:    popq %rcx
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: x_to_u32:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE3-WIN-LABEL: x_to_u32:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: x_to_u32:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE3-WIN-LABEL: x_to_u32:
+; X64-SSE3-WIN:       # %bb.0:
+; X64-SSE3-WIN-NEXT:    pushq %rax
+; X64-SSE3-WIN-NEXT:    fldt (%rcx)
+; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)
+; X64-SSE3-WIN-NEXT:    movl (%rsp), %eax
+; X64-SSE3-WIN-NEXT:    popq %rcx
+; X64-SSE3-WIN-NEXT:    retq
+;
+; X64-SSE3-LIN-LABEL: x_to_u32:
+; X64-SSE3-LIN:       # %bb.0:
+; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE3-LIN-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: x_to_u32:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: x_to_u32:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X64-SSE2-WIN-LABEL: x_to_u32:
+; X64-SSE2-WIN:       # %bb.0:
+; X64-SSE2-WIN-NEXT:    subq $16, %rsp
+; X64-SSE2-WIN-NEXT:    fldt (%rcx)
+; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax
+; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; X64-SSE2-WIN-NEXT:    addq $16, %rsp
+; X64-SSE2-WIN-NEXT:    retq
+;
+; X64-SSE2-LIN-LABEL: x_to_u32:
+; X64-SSE2-LIN:       # %bb.0:
+; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE2-LIN-NEXT:    retq
+;
+; X86-SSE1-WIN-LABEL: x_to_u32:
+; X86-SSE1-WIN:       # %bb.0:
+; X86-SSE1-WIN-NEXT:    pushl %ebp
+; X86-SSE1-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE1-WIN-NEXT:    andl $-8, %esp
+; X86-SSE1-WIN-NEXT:    subl $16, %esp
+; X86-SSE1-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE1-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE1-WIN-NEXT:    popl %ebp
+; X86-SSE1-WIN-NEXT:    retl
+;
+; X86-SSE1-LIN-LABEL: x_to_u32:
+; X86-SSE1-LIN:       # %bb.0:
+; X86-SSE1-LIN-NEXT:    subl $20, %esp
+; X86-SSE1-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-LIN-NEXT:    addl $20, %esp
+; X86-SSE1-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: x_to_u32:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldt 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: x_to_u32:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui x86_fp80 %a to i32
   ret i32 %r
 }
 
 define i32 @x_to_s32(x86_fp80 %a) nounwind {
-; AVX512_32-LABEL: x_to_s32:
-; AVX512_32:       # %bb.0:
-; AVX512_32-NEXT:    pushl %eax
-; AVX512_32-NEXT:    fldt {{[0-9]+}}(%esp)
-; AVX512_32-NEXT:    fisttpl (%esp)
-; AVX512_32-NEXT:    movl (%esp), %eax
-; AVX512_32-NEXT:    popl %ecx
-; AVX512_32-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: x_to_s32:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    pushq %rax
-; AVX512_64_WIN-NEXT:    fldt (%rcx)
-; AVX512_64_WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
-; AVX512_64_WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; AVX512_64_WIN-NEXT:    popq %rcx
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: x_to_s32:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32-LABEL: x_to_s32:
-; SSE3_32:       # %bb.0:
-; SSE3_32-NEXT:    pushl %eax
-; SSE3_32-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE3_32-NEXT:    fisttpl (%esp)
-; SSE3_32-NEXT:    movl (%esp), %eax
-; SSE3_32-NEXT:    popl %ecx
-; SSE3_32-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: x_to_s32:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    pushq %rax
-; SSE3_64_WIN-NEXT:    fldt (%rcx)
-; SSE3_64_WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
-; SSE3_64_WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; SSE3_64_WIN-NEXT:    popq %rcx
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: x_to_s32:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32-LABEL: x_to_s32:
-; SSE2_32:       # %bb.0:
-; SSE2_32-NEXT:    subl $8, %esp
-; SSE2_32-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE2_32-NEXT:    fnstcw (%esp)
-; SSE2_32-NEXT:    movzwl (%esp), %eax
-; SSE2_32-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE2_32-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE2_32-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE2_32-NEXT:    fistpl {{[0-9]+}}(%esp)
-; SSE2_32-NEXT:    fldcw (%esp)
-; SSE2_32-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32-NEXT:    addl $8, %esp
-; SSE2_32-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: x_to_s32:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    pushq %rax
-; SSE2_64_WIN-NEXT:    fldt (%rcx)
-; SSE2_64_WIN-NEXT:    fnstcw (%rsp)
-; SSE2_64_WIN-NEXT:    movzwl (%rsp), %eax
-; 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:    fistpl {{[0-9]+}}(%rsp)
-; SSE2_64_WIN-NEXT:    fldcw (%rsp)
-; SSE2_64_WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
-; SSE2_64_WIN-NEXT:    popq %rcx
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: x_to_s32:
-; SSE2_64_LIN:       # %bb.0:
-; 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:    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:    fistpl -{{[0-9]+}}(%rsp)
-; SSE2_64_LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
-; SSE2_64_LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
-; SSE2_64_LIN-NEXT:    retq
-;
-; SSE_32-LABEL: x_to_s32:
-; SSE_32:       # %bb.0:
-; SSE_32-NEXT:    subl $8, %esp
-; SSE_32-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fnstcw (%esp)
-; SSE_32-NEXT:    movzwl (%esp), %eax
-; SSE_32-NEXT:    orl $3072, %eax # imm = 0xC00
-; SSE_32-NEXT:    movw %ax, {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fldcw {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fistpl {{[0-9]+}}(%esp)
-; SSE_32-NEXT:    fldcw (%esp)
-; SSE_32-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE_32-NEXT:    addl $8, %esp
-; SSE_32-NEXT:    retl
+; X86-AVX512-LABEL: x_to_s32:
+; X86-AVX512:       # %bb.0:
+; X86-AVX512-NEXT:    pushl %eax
+; X86-AVX512-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-AVX512-NEXT:    fisttpl (%esp)
+; X86-AVX512-NEXT:    movl (%esp), %eax
+; X86-AVX512-NEXT:    popl %ecx
+; X86-AVX512-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: x_to_s32:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    pushq %rax
+; X64-AVX512-WIN-NEXT:    fldt (%rcx)
+; X64-AVX512-WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
+; X64-AVX512-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; X64-AVX512-WIN-NEXT:    popq %rcx
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: x_to_s32:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE3-LABEL: x_to_s32:
+; X86-SSE3:       # %bb.0:
+; X86-SSE3-NEXT:    pushl %eax
+; X86-SSE3-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE3-NEXT:    fisttpl (%esp)
+; X86-SSE3-NEXT:    movl (%esp), %eax
+; X86-SSE3-NEXT:    popl %ecx
+; X86-SSE3-NEXT:    retl
+;
+; X64-SSE3-WIN-LABEL: x_to_s32:
+; X64-SSE3-WIN:       # %bb.0:
+; X64-SSE3-WIN-NEXT:    pushq %rax
+; X64-SSE3-WIN-NEXT:    fldt (%rcx)
+; X64-SSE3-WIN-NEXT:    fisttpl {{[0-9]+}}(%rsp)
+; X64-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; X64-SSE3-WIN-NEXT:    popq %rcx
+; X64-SSE3-WIN-NEXT:    retq
+;
+; X64-SSE3-LIN-LABEL: x_to_s32:
+; X64-SSE3-LIN:       # %bb.0:
+; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    fisttpl -{{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE3-LIN-NEXT:    retq
+;
+; X86-SSE2-LABEL: x_to_s32:
+; X86-SSE2:       # %bb.0:
+; X86-SSE2-NEXT:    subl $8, %esp
+; X86-SSE2-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE2-NEXT:    fnstcw (%esp)
+; X86-SSE2-NEXT:    movzwl (%esp), %eax
+; X86-SSE2-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-NEXT:    fistpl {{[0-9]+}}(%esp)
+; X86-SSE2-NEXT:    fldcw (%esp)
+; X86-SSE2-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-NEXT:    addl $8, %esp
+; X86-SSE2-NEXT:    retl
+;
+; X64-SSE2-WIN-LABEL: x_to_s32:
+; X64-SSE2-WIN:       # %bb.0:
+; X64-SSE2-WIN-NEXT:    pushq %rax
+; X64-SSE2-WIN-NEXT:    fldt (%rcx)
+; X64-SSE2-WIN-NEXT:    fnstcw (%rsp)
+; X64-SSE2-WIN-NEXT:    movzwl (%rsp), %eax
+; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fistpl {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw (%rsp)
+; X64-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%rsp), %eax
+; X64-SSE2-WIN-NEXT:    popq %rcx
+; X64-SSE2-WIN-NEXT:    retq
+;
+; X64-SSE2-LIN-LABEL: x_to_s32:
+; X64-SSE2-LIN:       # %bb.0:
+; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fistpl -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE2-LIN-NEXT:    retq
+;
+; X86-SSE1-LABEL: x_to_s32:
+; X86-SSE1:       # %bb.0:
+; X86-SSE1-NEXT:    subl $8, %esp
+; X86-SSE1-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fnstcw (%esp)
+; X86-SSE1-NEXT:    movzwl (%esp), %eax
+; X86-SSE1-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE1-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fistpl {{[0-9]+}}(%esp)
+; X86-SSE1-NEXT:    fldcw (%esp)
+; X86-SSE1-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE1-NEXT:    addl $8, %esp
+; X86-SSE1-NEXT:    retl
 ;
 ; X87-LABEL: x_to_s32:
 ; X87:       # %bb.0:
@@ -728,297 +696,185 @@ define i32 @x_to_s32(x86_fp80 %a) nounwind {
 }
 
 define i32 @t_to_u32(fp128 %a) nounwind {
-; AVX512_32_WIN-LABEL: t_to_u32:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    subl $16, %esp
-; AVX512_32_WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_WIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_WIN-NEXT:    calll ___fixunstfsi
-; AVX512_32_WIN-NEXT:    addl $16, %esp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: t_to_u32:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $28, %esp
-; AVX512_32_LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_LIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_LIN-NEXT:    calll __fixunstfsi
-; AVX512_32_LIN-NEXT:    addl $28, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: t_to_u32:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    subq $40, %rsp
-; AVX512_64_WIN-NEXT:    callq __fixunstfsi
-; AVX512_64_WIN-NEXT:    addq $40, %rsp
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: t_to_u32:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    pushq %rax
-; AVX512_64_LIN-NEXT:    callq __fixunstfsi
-; AVX512_64_LIN-NEXT:    popq %rcx
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: t_to_u32:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    calll ___fixunstfsi
-; SSE3_32_WIN-NEXT:    addl $16, %esp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: t_to_u32:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    calll __fixunstfsi
-; SSE3_32_LIN-NEXT:    addl $28, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: t_to_u32:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    subq $40, %rsp
-; SSE3_64_WIN-NEXT:    callq __fixunstfsi
-; SSE3_64_WIN-NEXT:    addq $40, %rsp
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: t_to_u32:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    pushq %rax
-; SSE3_64_LIN-NEXT:    callq __fixunstfsi
-; SSE3_64_LIN-NEXT:    popq %rcx
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: t_to_u32:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    calll ___fixunstfsi
-; SSE2_32_WIN-NEXT:    addl $16, %esp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: t_to_u32:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $12, %esp
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    calll __fixunstfsi
-; SSE2_32_LIN-NEXT:    addl $28, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: t_to_u32:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $40, %rsp
-; SSE2_64_WIN-NEXT:    callq __fixunstfsi
-; SSE2_64_WIN-NEXT:    addq $40, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: t_to_u32:
-; SSE2_64_LIN:       # %bb.0:
-; SSE2_64_LIN-NEXT:    pushq %rax
-; SSE2_64_LIN-NEXT:    callq __fixunstfsi
-; SSE2_64_LIN-NEXT:    popq %rcx
-; SSE2_64_LIN-NEXT:    retq
-;
-; SSE_32_WIN-LABEL: t_to_u32:
-; SSE_32_WIN:       # %bb.0:
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    calll ___fixunstfsi
-; SSE_32_WIN-NEXT:    addl $16, %esp
-; SSE_32_WIN-NEXT:    retl
-;
-; SSE_32_LIN-LABEL: t_to_u32:
-; SSE_32_LIN:       # %bb.0:
-; SSE_32_LIN-NEXT:    subl $12, %esp
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    calll __fixunstfsi
-; SSE_32_LIN-NEXT:    addl $28, %esp
-; SSE_32_LIN-NEXT:    retl
-;
-; X87_WIN-LABEL: t_to_u32:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    calll ___fixunstfsi
-; X87_WIN-NEXT:    addl $16, %esp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: t_to_u32:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $12, %esp
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    calll __fixunstfsi
-; X87_LIN-NEXT:    addl $28, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: t_to_u32:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    subl $16, %esp
+; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-WIN-NEXT:    calll ___fixunstfsi
+; X86-AVX512-WIN-NEXT:    addl $16, %esp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: t_to_u32:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $28, %esp
+; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-LIN-NEXT:    calll __fixunstfsi
+; X86-AVX512-LIN-NEXT:    addl $28, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: t_to_u32:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    subq $40, %rsp
+; X64-AVX512-WIN-NEXT:    callq __fixunstfsi
+; X64-AVX512-WIN-NEXT:    addq $40, %rsp
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: t_to_u32:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    pushq %rax
+; X64-AVX512-LIN-NEXT:    callq __fixunstfsi
+; X64-AVX512-LIN-NEXT:    popq %rcx
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE-WIN-LABEL: t_to_u32:
+; X86-SSE-WIN:       # %bb.0:
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    calll ___fixunstfsi
+; X86-SSE-WIN-NEXT:    addl $16, %esp
+; X86-SSE-WIN-NEXT:    retl
+;
+; X86-SSE-LIN-LABEL: t_to_u32:
+; X86-SSE-LIN:       # %bb.0:
+; X86-SSE-LIN-NEXT:    subl $12, %esp
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    calll __fixunstfsi
+; X86-SSE-LIN-NEXT:    addl $28, %esp
+; X86-SSE-LIN-NEXT:    retl
+;
+; X64-SSE-WIN-LABEL: t_to_u32:
+; X64-SSE-WIN:       # %bb.0:
+; X64-SSE-WIN-NEXT:    subq $40, %rsp
+; X64-SSE-WIN-NEXT:    callq __fixunstfsi
+; X64-SSE-WIN-NEXT:    addq $40, %rsp
+; X64-SSE-WIN-NEXT:    retq
+;
+; X64-SSE-LIN-LABEL: t_to_u32:
+; X64-SSE-LIN:       # %bb.0:
+; X64-SSE-LIN-NEXT:    pushq %rax
+; X64-SSE-LIN-NEXT:    callq __fixunstfsi
+; X64-SSE-LIN-NEXT:    popq %rcx
+; X64-SSE-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: t_to_u32:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    calll ___fixunstfsi
+; X87-WIN-NEXT:    addl $16, %esp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: t_to_u32:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $12, %esp
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    calll __fixunstfsi
+; X87-LIN-NEXT:    addl $28, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui fp128 %a to i32
   ret i32 %r
 }
 
 define i32 @t_to_s32(fp128 %a) nounwind {
-; AVX512_32_WIN-LABEL: t_to_s32:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    subl $16, %esp
-; AVX512_32_WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_WIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_WIN-NEXT:    calll ___fixtfsi
-; AVX512_32_WIN-NEXT:    addl $16, %esp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: t_to_s32:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $28, %esp
-; AVX512_32_LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_LIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_LIN-NEXT:    calll __fixtfsi
-; AVX512_32_LIN-NEXT:    addl $28, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: t_to_s32:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    subq $40, %rsp
-; AVX512_64_WIN-NEXT:    callq __fixtfsi
-; AVX512_64_WIN-NEXT:    addq $40, %rsp
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: t_to_s32:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    pushq %rax
-; AVX512_64_LIN-NEXT:    callq __fixtfsi
-; AVX512_64_LIN-NEXT:    popq %rcx
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: t_to_s32:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    calll ___fixtfsi
-; SSE3_32_WIN-NEXT:    addl $16, %esp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: t_to_s32:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    calll __fixtfsi
-; SSE3_32_LIN-NEXT:    addl $28, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: t_to_s32:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    subq $40, %rsp
-; SSE3_64_WIN-NEXT:    callq __fixtfsi
-; SSE3_64_WIN-NEXT:    addq $40, %rsp
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: t_to_s32:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    pushq %rax
-; SSE3_64_LIN-NEXT:    callq __fixtfsi
-; SSE3_64_LIN-NEXT:    popq %rcx
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: t_to_s32:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    calll ___fixtfsi
-; SSE2_32_WIN-NEXT:    addl $16, %esp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: t_to_s32:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $12, %esp
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    calll __fixtfsi
-; SSE2_32_LIN-NEXT:    addl $28, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: t_to_s32:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $40, %rsp
-; SSE2_64_WIN-NEXT:    callq __fixtfsi
-; SSE2_64_WIN-NEXT:    addq $40, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: t_to_s32:
-; SSE2_64_LIN:       # %bb.0:
-; SSE2_64_LIN-NEXT:    pushq %rax
-; SSE2_64_LIN-NEXT:    callq __fixtfsi
-; SSE2_64_LIN-NEXT:    popq %rcx
-; SSE2_64_LIN-NEXT:    retq
-;
-; SSE_32_WIN-LABEL: t_to_s32:
-; SSE_32_WIN:       # %bb.0:
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_WIN-NEXT:    calll ___fixtfsi
-; SSE_32_WIN-NEXT:    addl $16, %esp
-; SSE_32_WIN-NEXT:    retl
-;
-; SSE_32_LIN-LABEL: t_to_s32:
-; SSE_32_LIN:       # %bb.0:
-; SSE_32_LIN-NEXT:    subl $12, %esp
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE_32_LIN-NEXT:    calll __fixtfsi
-; SSE_32_LIN-NEXT:    addl $28, %esp
-; SSE_32_LIN-NEXT:    retl
-;
-; X87_WIN-LABEL: t_to_s32:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    calll ___fixtfsi
-; X87_WIN-NEXT:    addl $16, %esp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: t_to_s32:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $12, %esp
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    calll __fixtfsi
-; X87_LIN-NEXT:    addl $28, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: t_to_s32:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    subl $16, %esp
+; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-WIN-NEXT:    calll ___fixtfsi
+; X86-AVX512-WIN-NEXT:    addl $16, %esp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: t_to_s32:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $28, %esp
+; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-LIN-NEXT:    calll __fixtfsi
+; X86-AVX512-LIN-NEXT:    addl $28, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: t_to_s32:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    subq $40, %rsp
+; X64-AVX512-WIN-NEXT:    callq __fixtfsi
+; X64-AVX512-WIN-NEXT:    addq $40, %rsp
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: t_to_s32:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    pushq %rax
+; X64-AVX512-LIN-NEXT:    callq __fixtfsi
+; X64-AVX512-LIN-NEXT:    popq %rcx
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE-WIN-LABEL: t_to_s32:
+; X86-SSE-WIN:       # %bb.0:
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    calll ___fixtfsi
+; X86-SSE-WIN-NEXT:    addl $16, %esp
+; X86-SSE-WIN-NEXT:    retl
+;
+; X86-SSE-LIN-LABEL: t_to_s32:
+; X86-SSE-LIN:       # %bb.0:
+; X86-SSE-LIN-NEXT:    subl $12, %esp
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    calll __fixtfsi
+; X86-SSE-LIN-NEXT:    addl $28, %esp
+; X86-SSE-LIN-NEXT:    retl
+;
+; X64-SSE-WIN-LABEL: t_to_s32:
+; X64-SSE-WIN:       # %bb.0:
+; X64-SSE-WIN-NEXT:    subq $40, %rsp
+; X64-SSE-WIN-NEXT:    callq __fixtfsi
+; X64-SSE-WIN-NEXT:    addq $40, %rsp
+; X64-SSE-WIN-NEXT:    retq
+;
+; X64-SSE-LIN-LABEL: t_to_s32:
+; X64-SSE-LIN:       # %bb.0:
+; X64-SSE-LIN-NEXT:    pushq %rax
+; X64-SSE-LIN-NEXT:    callq __fixtfsi
+; X64-SSE-LIN-NEXT:    popq %rcx
+; X64-SSE-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: t_to_s32:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    calll ___fixtfsi
+; X87-WIN-NEXT:    addl $16, %esp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: t_to_s32:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $12, %esp
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    calll __fixtfsi
+; X87-LIN-NEXT:    addl $28, %esp
+; X87-LIN-NEXT:    retl
   %r = fptosi fp128 %a to i32
   ret i32 %r
 }

diff  --git a/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll b/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
index 30e4996057aa..2405292f4efc 100644
--- a/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
+++ b/llvm/test/CodeGen/X86/scalar-fp-to-i64.ll
@@ -1,26 +1,26 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512DQVL_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512DQVL_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512DQVL_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512DQVL_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512DQ_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512DQ_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512DQ_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512DQ_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_WIN,AVX512F_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_32,AVX512_32_LIN,AVX512F_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X64,AVX512_64,AVX512_64_WIN,AVX512F_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X32,AVX512_64,AVX512_64_LIN,AVX512F_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X32,SSE3_32,SSE3_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X32,SSE3_32,SSE3_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,SSE3_64,SSE3_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,SSE3_64,SSE3_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X32,SSE2_32,SSE2_32_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X32,SSE2_32,SSE2_32_LIN
-; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE2_64,SSE2_64_WIN
-; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,SSE2_64,SSE2_64_LIN
-; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X32,X87,X87_WIN
-; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X32,X87,X87_LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQVL,X86-AVX512-WIN,X86-AVX512DQVL-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQVL,X86-AVX512-LIN,X86-AVX512DQVL-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512DQVL,X64-AVX512-WIN,X64-AVX512DQVL-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512DQVL,X64-AVX512-LIN,X64-AVX512DQVL-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQ,X86-AVX512-WIN,X86-AVX512DQ-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512DQ,X86-AVX512-LIN,X86-AVX512DQ-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512DQ,X64-AVX512-WIN,X64-AVX512DQ-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512DQ,X64-AVX512-LIN,X64-AVX512DQ-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512F,X86-AVX512-WIN,X86-AVX512F-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X86-AVX512,X86-AVX512F,X86-AVX512-LIN,X86-AVX512F-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X64,X64-AVX512,X64-AVX512F,X64-AVX512-WIN,X64-AVX512F-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,X86,X64-AVX512,X64-AVX512F,X64-AVX512-LIN,X64-AVX512F-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE3,X86-SSE-WIN,X86-SSE3-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE3,X86-SSE-LIN,X86-SSE3-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE3,X64-SSE-WIN,X64-SSE3-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE3,X64-SSE-LIN,X64-SSE3-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE2,X86-SSE-WIN,X86-SSE2-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X86,X86-SSE,X86-SSE2,X86-SSE-LIN,X86-SSE2-LIN
+; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE2,X64-SSE-WIN,X64-SSE2-WIN
+; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=CHECK,X64,X64-SSE,X64-SSE2,X64-SSE-LIN,X64-SSE2-LIN
+; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X86,X87,X87-WIN
+; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefixes=CHECK,X86,X87,X87-LIN
 
 ; Check that scalar FP conversions to signed and unsigned int64 are using
 ; reasonable sequences, across platforms and target switches.
@@ -39,1735 +39,1561 @@
 ; SSE2 (cvtts[ds]2si) and vanilla X87 (fnstcw+fist, 32-bit only).
 
 define i64 @f_to_u64(float %a) nounwind {
-; AVX512DQVL_32_WIN-LABEL: f_to_u64:
-; AVX512DQVL_32_WIN:       # %bb.0:
-; AVX512DQVL_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQVL_32_WIN-NEXT:    vcvttps2uqq %xmm0, %xmm0
-; AVX512DQVL_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_WIN-NEXT:    retl
-;
-; AVX512DQVL_32_LIN-LABEL: f_to_u64:
-; AVX512DQVL_32_LIN:       # %bb.0:
-; AVX512DQVL_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQVL_32_LIN-NEXT:    vcvttps2uqq %xmm0, %xmm0
-; AVX512DQVL_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_LIN-NEXT:    retl
-;
-; AVX512_64-LABEL: f_to_u64:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttss2usi %xmm0, %rax
-; AVX512_64-NEXT:    retq
-;
-; AVX512DQ_32_WIN-LABEL: f_to_u64:
-; AVX512DQ_32_WIN:       # %bb.0:
-; AVX512DQ_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQ_32_WIN-NEXT:    vcvttps2uqq %ymm0, %zmm0
-; AVX512DQ_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_WIN-NEXT:    vzeroupper
-; AVX512DQ_32_WIN-NEXT:    retl
-;
-; AVX512DQ_32_LIN-LABEL: f_to_u64:
-; AVX512DQ_32_LIN:       # %bb.0:
-; AVX512DQ_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQ_32_LIN-NEXT:    vcvttps2uqq %ymm0, %zmm0
-; AVX512DQ_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_LIN-NEXT:    vzeroupper
-; AVX512DQ_32_LIN-NEXT:    retl
-;
-; AVX512F_32_WIN-LABEL: f_to_u64:
-; AVX512F_32_WIN:       # %bb.0:
-; AVX512F_32_WIN-NEXT:    pushl %ebp
-; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $8, %esp
-; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX512F_32_WIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
-; AVX512F_32_WIN-NEXT:    vxorps %xmm2, %xmm2, %xmm2
-; AVX512F_32_WIN-NEXT:    xorl %edx, %edx
-; AVX512F_32_WIN-NEXT:    vucomiss %xmm0, %xmm1
-; AVX512F_32_WIN-NEXT:    vmovss %xmm2, %xmm1, %xmm1 {%k1}
-; AVX512F_32_WIN-NEXT:    vsubss %xmm1, %xmm0, %xmm0
-; AVX512F_32_WIN-NEXT:    vmovss %xmm0, (%esp)
-; AVX512F_32_WIN-NEXT:    flds (%esp)
-; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_WIN-NEXT:    setbe %dl
-; AVX512F_32_WIN-NEXT:    shll $31, %edx
-; AVX512F_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512F_32_WIN-NEXT:    popl %ebp
-; AVX512F_32_WIN-NEXT:    retl
-;
-; AVX512F_32_LIN-LABEL: f_to_u64:
-; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $12, %esp
-; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; AVX512F_32_LIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
-; AVX512F_32_LIN-NEXT:    vxorps %xmm2, %xmm2, %xmm2
-; AVX512F_32_LIN-NEXT:    xorl %edx, %edx
-; AVX512F_32_LIN-NEXT:    vucomiss %xmm0, %xmm1
-; AVX512F_32_LIN-NEXT:    vmovss %xmm2, %xmm1, %xmm1 {%k1}
-; AVX512F_32_LIN-NEXT:    vsubss %xmm1, %xmm0, %xmm0
-; AVX512F_32_LIN-NEXT:    vmovss %xmm0, (%esp)
-; AVX512F_32_LIN-NEXT:    flds (%esp)
-; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_LIN-NEXT:    setbe %dl
-; AVX512F_32_LIN-NEXT:    shll $31, %edx
-; AVX512F_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    addl $12, %esp
-; AVX512F_32_LIN-NEXT:    retl
-;
-; SSE3_32_WIN-LABEL: f_to_u64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE3_32_WIN-NEXT:    movaps %xmm0, %xmm2
-; SSE3_32_WIN-NEXT:    xorl %edx, %edx
-; SSE3_32_WIN-NEXT:    ucomiss %xmm0, %xmm1
-; SSE3_32_WIN-NEXT:    cmpltss %xmm1, %xmm0
-; SSE3_32_WIN-NEXT:    andnps %xmm1, %xmm0
-; SSE3_32_WIN-NEXT:    subss %xmm0, %xmm2
-; SSE3_32_WIN-NEXT:    movss %xmm2, (%esp)
-; SSE3_32_WIN-NEXT:    flds (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    setbe %dl
-; SSE3_32_WIN-NEXT:    shll $31, %edx
-; SSE3_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: f_to_u64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE3_32_LIN-NEXT:    movaps %xmm0, %xmm2
-; SSE3_32_LIN-NEXT:    xorl %edx, %edx
-; SSE3_32_LIN-NEXT:    ucomiss %xmm0, %xmm1
-; SSE3_32_LIN-NEXT:    cmpltss %xmm1, %xmm0
-; SSE3_32_LIN-NEXT:    andnps %xmm1, %xmm0
-; SSE3_32_LIN-NEXT:    subss %xmm0, %xmm2
-; SSE3_32_LIN-NEXT:    movss %xmm2, (%esp)
-; SSE3_32_LIN-NEXT:    flds (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    setbe %dl
-; SSE3_32_LIN-NEXT:    shll $31, %edx
-; SSE3_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: f_to_u64:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE3_64-NEXT:    movaps %xmm0, %xmm2
-; SSE3_64-NEXT:    subss %xmm1, %xmm2
-; SSE3_64-NEXT:    cvttss2si %xmm2, %rax
-; SSE3_64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; SSE3_64-NEXT:    xorq %rax, %rcx
-; SSE3_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE3_64-NEXT:    ucomiss %xmm1, %xmm0
-; SSE3_64-NEXT:    cmovaeq %rcx, %rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: f_to_u64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; 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:    andnps %xmm1, %xmm2
-; SSE2_32_WIN-NEXT:    movaps %xmm0, %xmm3
-; SSE2_32_WIN-NEXT:    subss %xmm2, %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:    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
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: f_to_u64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; 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:    andnps %xmm1, %xmm2
-; SSE2_32_LIN-NEXT:    movaps %xmm0, %xmm3
-; SSE2_32_LIN-NEXT:    subss %xmm2, %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:    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
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64-LABEL: f_to_u64:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
-; SSE2_64-NEXT:    movaps %xmm0, %xmm2
-; SSE2_64-NEXT:    subss %xmm1, %xmm2
-; SSE2_64-NEXT:    cvttss2si %xmm2, %rax
-; SSE2_64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; SSE2_64-NEXT:    xorq %rax, %rcx
-; SSE2_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE2_64-NEXT:    ucomiss %xmm1, %xmm0
-; SSE2_64-NEXT:    cmovaeq %rcx, %rax
-; SSE2_64-NEXT:    retq
-;
-; X87_WIN-LABEL: f_to_u64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    flds 8(%ebp)
-; X87_WIN-NEXT:    flds __real at 5f000000
-; X87_WIN-NEXT:    fucom %st(1)
-; X87_WIN-NEXT:    fnstsw %ax
-; X87_WIN-NEXT:    xorl %edx, %edx
-; X87_WIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_WIN-NEXT:    sahf
-; X87_WIN-NEXT:    setbe %al
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    ja LBB0_2
-; X87_WIN-NEXT:  # %bb.1:
-; X87_WIN-NEXT:    fstp %st(0)
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    fxch %st(1)
-; X87_WIN-NEXT:  LBB0_2:
-; X87_WIN-NEXT:    fstp %st(1)
-; X87_WIN-NEXT:    fsubrp %st, %st(1)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_WIN-NEXT:    shll $31, %edx
-; X87_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: f_to_u64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; X87_LIN-NEXT:    flds {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    flds {{\.LCPI.*}}
-; X87_LIN-NEXT:    fucom %st(1)
-; X87_LIN-NEXT:    fnstsw %ax
-; X87_LIN-NEXT:    xorl %edx, %edx
-; X87_LIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_LIN-NEXT:    sahf
-; X87_LIN-NEXT:    setbe %al
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    ja .LBB0_2
-; X87_LIN-NEXT:  # %bb.1:
-; X87_LIN-NEXT:    fstp %st(0)
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    fxch %st(1)
-; X87_LIN-NEXT:  .LBB0_2:
-; X87_LIN-NEXT:    fstp %st(1)
-; X87_LIN-NEXT:    fsubrp %st, %st(1)
-; X87_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_LIN-NEXT:    shll $31, %edx
-; X87_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512DQVL-LABEL: f_to_u64:
+; X86-AVX512DQVL:       # %bb.0:
+; X86-AVX512DQVL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512DQVL-NEXT:    vcvttps2uqq %xmm0, %xmm0
+; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQVL-NEXT:    retl
+;
+; X64-AVX512-LABEL: f_to_u64:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttss2usi %xmm0, %rax
+; X64-AVX512-NEXT:    retq
+;
+; X86-AVX512DQ-LABEL: f_to_u64:
+; X86-AVX512DQ:       # %bb.0:
+; X86-AVX512DQ-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm0
+; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQ-NEXT:    vzeroupper
+; X86-AVX512DQ-NEXT:    retl
+;
+; X86-AVX512F-WIN-LABEL: f_to_u64:
+; X86-AVX512F-WIN:       # %bb.0:
+; X86-AVX512F-WIN-NEXT:    pushl %ebp
+; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512F-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512F-WIN-NEXT:    subl $8, %esp
+; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-AVX512F-WIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
+; X86-AVX512F-WIN-NEXT:    vxorps %xmm2, %xmm2, %xmm2
+; X86-AVX512F-WIN-NEXT:    xorl %edx, %edx
+; X86-AVX512F-WIN-NEXT:    vucomiss %xmm0, %xmm1
+; X86-AVX512F-WIN-NEXT:    vmovss %xmm2, %xmm1, %xmm1 {%k1}
+; X86-AVX512F-WIN-NEXT:    vsubss %xmm1, %xmm0, %xmm0
+; X86-AVX512F-WIN-NEXT:    vmovss %xmm0, (%esp)
+; X86-AVX512F-WIN-NEXT:    flds (%esp)
+; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-WIN-NEXT:    setbe %dl
+; X86-AVX512F-WIN-NEXT:    shll $31, %edx
+; X86-AVX512F-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512F-WIN-NEXT:    popl %ebp
+; X86-AVX512F-WIN-NEXT:    retl
+;
+; X86-AVX512F-LIN-LABEL: f_to_u64:
+; X86-AVX512F-LIN:       # %bb.0:
+; X86-AVX512F-LIN-NEXT:    subl $12, %esp
+; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-AVX512F-LIN-NEXT:    vcmpltss %xmm1, %xmm0, %k1
+; X86-AVX512F-LIN-NEXT:    vxorps %xmm2, %xmm2, %xmm2
+; X86-AVX512F-LIN-NEXT:    xorl %edx, %edx
+; X86-AVX512F-LIN-NEXT:    vucomiss %xmm0, %xmm1
+; X86-AVX512F-LIN-NEXT:    vmovss %xmm2, %xmm1, %xmm1 {%k1}
+; X86-AVX512F-LIN-NEXT:    vsubss %xmm1, %xmm0, %xmm0
+; X86-AVX512F-LIN-NEXT:    vmovss %xmm0, (%esp)
+; X86-AVX512F-LIN-NEXT:    flds (%esp)
+; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-LIN-NEXT:    setbe %dl
+; X86-AVX512F-LIN-NEXT:    shll $31, %edx
+; X86-AVX512F-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-LIN-NEXT:    addl $12, %esp
+; X86-AVX512F-LIN-NEXT:    retl
+;
+; X86-SSE3-WIN-LABEL: f_to_u64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE3-WIN-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE3-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-WIN-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE3-WIN-NEXT:    cmpltss %xmm1, %xmm0
+; X86-SSE3-WIN-NEXT:    andnps %xmm1, %xmm0
+; X86-SSE3-WIN-NEXT:    subss %xmm0, %xmm2
+; X86-SSE3-WIN-NEXT:    movss %xmm2, (%esp)
+; X86-SSE3-WIN-NEXT:    flds (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    setbe %dl
+; X86-SSE3-WIN-NEXT:    shll $31, %edx
+; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: f_to_u64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE3-LIN-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE3-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-LIN-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE3-LIN-NEXT:    cmpltss %xmm1, %xmm0
+; X86-SSE3-LIN-NEXT:    andnps %xmm1, %xmm0
+; X86-SSE3-LIN-NEXT:    subss %xmm0, %xmm2
+; X86-SSE3-LIN-NEXT:    movss %xmm2, (%esp)
+; X86-SSE3-LIN-NEXT:    flds (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    setbe %dl
+; X86-SSE3-LIN-NEXT:    shll $31, %edx
+; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: f_to_u64:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X64-SSE-NEXT:    movaps %xmm0, %xmm2
+; X64-SSE-NEXT:    subss %xmm1, %xmm2
+; X64-SSE-NEXT:    cvttss2si %xmm2, %rax
+; X64-SSE-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
+; X64-SSE-NEXT:    xorq %rax, %rcx
+; X64-SSE-NEXT:    cvttss2si %xmm0, %rax
+; X64-SSE-NEXT:    ucomiss %xmm1, %xmm0
+; X64-SSE-NEXT:    cmovaeq %rcx, %rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: f_to_u64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE2-WIN-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE2-WIN-NEXT:    cmpltss %xmm1, %xmm2
+; X86-SSE2-WIN-NEXT:    andnps %xmm1, %xmm2
+; X86-SSE2-WIN-NEXT:    movaps %xmm0, %xmm3
+; X86-SSE2-WIN-NEXT:    subss %xmm2, %xmm3
+; X86-SSE2-WIN-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-WIN-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE2-WIN-NEXT:    setbe %dl
+; X86-SSE2-WIN-NEXT:    shll $31, %edx
+; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: f_to_u64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm1 = mem[0],zero,zero,zero
+; X86-SSE2-LIN-NEXT:    movaps %xmm0, %xmm2
+; X86-SSE2-LIN-NEXT:    cmpltss %xmm1, %xmm2
+; X86-SSE2-LIN-NEXT:    andnps %xmm1, %xmm2
+; X86-SSE2-LIN-NEXT:    movaps %xmm0, %xmm3
+; X86-SSE2-LIN-NEXT:    subss %xmm2, %xmm3
+; X86-SSE2-LIN-NEXT:    movss %xmm3, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-LIN-NEXT:    ucomiss %xmm0, %xmm1
+; X86-SSE2-LIN-NEXT:    setbe %dl
+; X86-SSE2-LIN-NEXT:    shll $31, %edx
+; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: f_to_u64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    flds 8(%ebp)
+; X87-WIN-NEXT:    flds __real at 5f000000
+; X87-WIN-NEXT:    fucom %st(1)
+; X87-WIN-NEXT:    fnstsw %ax
+; X87-WIN-NEXT:    xorl %edx, %edx
+; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-WIN-NEXT:    sahf
+; X87-WIN-NEXT:    setbe %al
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    ja LBB0_2
+; X87-WIN-NEXT:  # %bb.1:
+; X87-WIN-NEXT:    fstp %st(0)
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    fxch %st(1)
+; X87-WIN-NEXT:  LBB0_2:
+; X87-WIN-NEXT:    fstp %st(1)
+; X87-WIN-NEXT:    fsubrp %st, %st(1)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-WIN-NEXT:    shll $31, %edx
+; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: f_to_u64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; X87-LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    flds {{\.LCPI.*}}
+; X87-LIN-NEXT:    fucom %st(1)
+; X87-LIN-NEXT:    fnstsw %ax
+; X87-LIN-NEXT:    xorl %edx, %edx
+; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-LIN-NEXT:    sahf
+; X87-LIN-NEXT:    setbe %al
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    ja .LBB0_2
+; X87-LIN-NEXT:  # %bb.1:
+; X87-LIN-NEXT:    fstp %st(0)
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    fxch %st(1)
+; X87-LIN-NEXT:  .LBB0_2:
+; X87-LIN-NEXT:    fstp %st(1)
+; X87-LIN-NEXT:    fsubrp %st, %st(1)
+; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-LIN-NEXT:    shll $31, %edx
+; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui float %a to i64
   ret i64 %r
 }
 
 define i64 @f_to_s64(float %a) nounwind {
-; AVX512DQVL_32_WIN-LABEL: f_to_s64:
-; AVX512DQVL_32_WIN:       # %bb.0:
-; AVX512DQVL_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQVL_32_WIN-NEXT:    vcvttps2qq %xmm0, %xmm0
-; AVX512DQVL_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_WIN-NEXT:    retl
-;
-; AVX512DQVL_32_LIN-LABEL: f_to_s64:
-; AVX512DQVL_32_LIN:       # %bb.0:
-; AVX512DQVL_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQVL_32_LIN-NEXT:    vcvttps2qq %xmm0, %xmm0
-; AVX512DQVL_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_LIN-NEXT:    retl
-;
-; AVX512_64-LABEL: f_to_s64:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttss2si %xmm0, %rax
-; AVX512_64-NEXT:    retq
-;
-; AVX512DQ_32_WIN-LABEL: f_to_s64:
-; AVX512DQ_32_WIN:       # %bb.0:
-; AVX512DQ_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQ_32_WIN-NEXT:    vcvttps2qq %ymm0, %zmm0
-; AVX512DQ_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_WIN-NEXT:    vzeroupper
-; AVX512DQ_32_WIN-NEXT:    retl
-;
-; AVX512DQ_32_LIN-LABEL: f_to_s64:
-; AVX512DQ_32_LIN:       # %bb.0:
-; AVX512DQ_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512DQ_32_LIN-NEXT:    vcvttps2qq %ymm0, %zmm0
-; AVX512DQ_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_LIN-NEXT:    vzeroupper
-; AVX512DQ_32_LIN-NEXT:    retl
-;
-; AVX512F_32_WIN-LABEL: f_to_s64:
-; AVX512F_32_WIN:       # %bb.0:
-; AVX512F_32_WIN-NEXT:    pushl %ebp
-; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $8, %esp
-; AVX512F_32_WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_WIN-NEXT:    vmovss %xmm0, (%esp)
-; AVX512F_32_WIN-NEXT:    flds (%esp)
-; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512F_32_WIN-NEXT:    popl %ebp
-; AVX512F_32_WIN-NEXT:    retl
-;
-; AVX512F_32_LIN-LABEL: f_to_s64:
-; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $12, %esp
-; AVX512F_32_LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; AVX512F_32_LIN-NEXT:    vmovss %xmm0, (%esp)
-; AVX512F_32_LIN-NEXT:    flds (%esp)
-; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    addl $12, %esp
-; AVX512F_32_LIN-NEXT:    retl
-;
-; SSE3_32_WIN-LABEL: f_to_s64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_WIN-NEXT:    movss %xmm0, (%esp)
-; SSE3_32_WIN-NEXT:    flds (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: f_to_s64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE3_32_LIN-NEXT:    movss %xmm0, (%esp)
-; SSE3_32_LIN-NEXT:    flds (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: f_to_s64:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: f_to_s64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; SSE2_32_WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE2_32_WIN-NEXT:    movss %xmm0, {{[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:    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
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: f_to_s64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; SSE2_32_LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
-; SSE2_32_LIN-NEXT:    movss %xmm0, {{[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:    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
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64-LABEL: f_to_s64:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttss2si %xmm0, %rax
-; SSE2_64-NEXT:    retq
-;
-; X87_WIN-LABEL: f_to_s64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    flds 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: f_to_s64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512DQVL-LABEL: f_to_s64:
+; X86-AVX512DQVL:       # %bb.0:
+; X86-AVX512DQVL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512DQVL-NEXT:    vcvttps2qq %xmm0, %xmm0
+; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQVL-NEXT:    retl
+;
+; X64-AVX512-LABEL: f_to_s64:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttss2si %xmm0, %rax
+; X64-AVX512-NEXT:    retq
+;
+; X86-AVX512DQ-LABEL: f_to_s64:
+; X86-AVX512DQ:       # %bb.0:
+; X86-AVX512DQ-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm0
+; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQ-NEXT:    vzeroupper
+; X86-AVX512DQ-NEXT:    retl
+;
+; X86-AVX512F-WIN-LABEL: f_to_s64:
+; X86-AVX512F-WIN:       # %bb.0:
+; X86-AVX512F-WIN-NEXT:    pushl %ebp
+; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512F-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512F-WIN-NEXT:    subl $8, %esp
+; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512F-WIN-NEXT:    vmovss %xmm0, (%esp)
+; X86-AVX512F-WIN-NEXT:    flds (%esp)
+; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512F-WIN-NEXT:    popl %ebp
+; X86-AVX512F-WIN-NEXT:    retl
+;
+; X86-AVX512F-LIN-LABEL: f_to_s64:
+; X86-AVX512F-LIN:       # %bb.0:
+; X86-AVX512F-LIN-NEXT:    subl $12, %esp
+; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-AVX512F-LIN-NEXT:    vmovss %xmm0, (%esp)
+; X86-AVX512F-LIN-NEXT:    flds (%esp)
+; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-LIN-NEXT:    addl $12, %esp
+; X86-AVX512F-LIN-NEXT:    retl
+;
+; X86-SSE3-WIN-LABEL: f_to_s64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-WIN-NEXT:    movss %xmm0, (%esp)
+; X86-SSE3-WIN-NEXT:    flds (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: f_to_s64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE3-LIN-NEXT:    movss %xmm0, (%esp)
+; X86-SSE3-LIN-NEXT:    flds (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: f_to_s64:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttss2si %xmm0, %rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: f_to_s64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE2-WIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: f_to_s64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
+; X86-SSE2-LIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    flds {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: f_to_s64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    flds 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: f_to_s64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptosi float %a to i64
   ret i64 %r
 }
 
 define i64 @d_to_u64(double %a) nounwind {
-; AVX512DQVL_32_WIN-LABEL: d_to_u64:
-; AVX512DQVL_32_WIN:       # %bb.0:
-; AVX512DQVL_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQVL_32_WIN-NEXT:    vcvttpd2uqq %xmm0, %xmm0
-; AVX512DQVL_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_WIN-NEXT:    retl
-;
-; AVX512DQVL_32_LIN-LABEL: d_to_u64:
-; AVX512DQVL_32_LIN:       # %bb.0:
-; AVX512DQVL_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQVL_32_LIN-NEXT:    vcvttpd2uqq %xmm0, %xmm0
-; AVX512DQVL_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_LIN-NEXT:    retl
-;
-; AVX512_64-LABEL: d_to_u64:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttsd2usi %xmm0, %rax
-; AVX512_64-NEXT:    retq
-;
-; AVX512DQ_32_WIN-LABEL: d_to_u64:
-; AVX512DQ_32_WIN:       # %bb.0:
-; AVX512DQ_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQ_32_WIN-NEXT:    vcvttpd2uqq %zmm0, %zmm0
-; AVX512DQ_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_WIN-NEXT:    vzeroupper
-; AVX512DQ_32_WIN-NEXT:    retl
-;
-; AVX512DQ_32_LIN-LABEL: d_to_u64:
-; AVX512DQ_32_LIN:       # %bb.0:
-; AVX512DQ_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQ_32_LIN-NEXT:    vcvttpd2uqq %zmm0, %zmm0
-; AVX512DQ_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_LIN-NEXT:    vzeroupper
-; AVX512DQ_32_LIN-NEXT:    retl
-;
-; AVX512F_32_WIN-LABEL: d_to_u64:
-; AVX512F_32_WIN:       # %bb.0:
-; AVX512F_32_WIN-NEXT:    pushl %ebp
-; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $8, %esp
-; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
-; AVX512F_32_WIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
-; AVX512F_32_WIN-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
-; AVX512F_32_WIN-NEXT:    xorl %edx, %edx
-; AVX512F_32_WIN-NEXT:    vucomisd %xmm0, %xmm1
-; AVX512F_32_WIN-NEXT:    vmovsd %xmm2, %xmm1, %xmm1 {%k1}
-; AVX512F_32_WIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0
-; AVX512F_32_WIN-NEXT:    vmovsd %xmm0, (%esp)
-; AVX512F_32_WIN-NEXT:    fldl (%esp)
-; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_WIN-NEXT:    setbe %dl
-; AVX512F_32_WIN-NEXT:    shll $31, %edx
-; AVX512F_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512F_32_WIN-NEXT:    popl %ebp
-; AVX512F_32_WIN-NEXT:    retl
-;
-; AVX512F_32_LIN-LABEL: d_to_u64:
-; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $12, %esp
-; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
-; AVX512F_32_LIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
-; AVX512F_32_LIN-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
-; AVX512F_32_LIN-NEXT:    xorl %edx, %edx
-; AVX512F_32_LIN-NEXT:    vucomisd %xmm0, %xmm1
-; AVX512F_32_LIN-NEXT:    vmovsd %xmm2, %xmm1, %xmm1 {%k1}
-; AVX512F_32_LIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0
-; AVX512F_32_LIN-NEXT:    vmovsd %xmm0, (%esp)
-; AVX512F_32_LIN-NEXT:    fldl (%esp)
-; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_LIN-NEXT:    setbe %dl
-; AVX512F_32_LIN-NEXT:    shll $31, %edx
-; AVX512F_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    addl $12, %esp
-; AVX512F_32_LIN-NEXT:    retl
-;
-; SSE3_32_WIN-LABEL: d_to_u64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
-; SSE3_32_WIN-NEXT:    movapd %xmm0, %xmm2
-; SSE3_32_WIN-NEXT:    xorl %edx, %edx
-; SSE3_32_WIN-NEXT:    ucomisd %xmm0, %xmm1
-; SSE3_32_WIN-NEXT:    cmpltsd %xmm1, %xmm0
-; SSE3_32_WIN-NEXT:    andnpd %xmm1, %xmm0
-; SSE3_32_WIN-NEXT:    subsd %xmm0, %xmm2
-; SSE3_32_WIN-NEXT:    movsd %xmm2, (%esp)
-; SSE3_32_WIN-NEXT:    fldl (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    setbe %dl
-; SSE3_32_WIN-NEXT:    shll $31, %edx
-; SSE3_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: d_to_u64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
-; SSE3_32_LIN-NEXT:    movapd %xmm0, %xmm2
-; SSE3_32_LIN-NEXT:    xorl %edx, %edx
-; SSE3_32_LIN-NEXT:    ucomisd %xmm0, %xmm1
-; SSE3_32_LIN-NEXT:    cmpltsd %xmm1, %xmm0
-; SSE3_32_LIN-NEXT:    andnpd %xmm1, %xmm0
-; SSE3_32_LIN-NEXT:    subsd %xmm0, %xmm2
-; SSE3_32_LIN-NEXT:    movsd %xmm2, (%esp)
-; SSE3_32_LIN-NEXT:    fldl (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    setbe %dl
-; SSE3_32_LIN-NEXT:    shll $31, %edx
-; SSE3_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: d_to_u64:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
-; SSE3_64-NEXT:    movapd %xmm0, %xmm2
-; SSE3_64-NEXT:    subsd %xmm1, %xmm2
-; SSE3_64-NEXT:    cvttsd2si %xmm2, %rax
-; SSE3_64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; SSE3_64-NEXT:    xorq %rax, %rcx
-; SSE3_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE3_64-NEXT:    ucomisd %xmm1, %xmm0
-; SSE3_64-NEXT:    cmovaeq %rcx, %rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: d_to_u64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; 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:    andnpd %xmm1, %xmm2
-; SSE2_32_WIN-NEXT:    movapd %xmm0, %xmm3
-; SSE2_32_WIN-NEXT:    subsd %xmm2, %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:    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
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: d_to_u64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; 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:    andnpd %xmm1, %xmm2
-; SSE2_32_LIN-NEXT:    movapd %xmm0, %xmm3
-; SSE2_32_LIN-NEXT:    subsd %xmm2, %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:    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
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64-LABEL: d_to_u64:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
-; SSE2_64-NEXT:    movapd %xmm0, %xmm2
-; SSE2_64-NEXT:    subsd %xmm1, %xmm2
-; SSE2_64-NEXT:    cvttsd2si %xmm2, %rax
-; SSE2_64-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
-; SSE2_64-NEXT:    xorq %rax, %rcx
-; SSE2_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE2_64-NEXT:    ucomisd %xmm1, %xmm0
-; SSE2_64-NEXT:    cmovaeq %rcx, %rax
-; SSE2_64-NEXT:    retq
-;
-; X87_WIN-LABEL: d_to_u64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldl 8(%ebp)
-; X87_WIN-NEXT:    flds __real at 5f000000
-; X87_WIN-NEXT:    fucom %st(1)
-; X87_WIN-NEXT:    fnstsw %ax
-; X87_WIN-NEXT:    xorl %edx, %edx
-; X87_WIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_WIN-NEXT:    sahf
-; X87_WIN-NEXT:    setbe %al
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    ja LBB2_2
-; X87_WIN-NEXT:  # %bb.1:
-; X87_WIN-NEXT:    fstp %st(0)
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    fxch %st(1)
-; X87_WIN-NEXT:  LBB2_2:
-; X87_WIN-NEXT:    fstp %st(1)
-; X87_WIN-NEXT:    fsubrp %st, %st(1)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_WIN-NEXT:    shll $31, %edx
-; X87_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: d_to_u64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; X87_LIN-NEXT:    fldl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    flds {{\.LCPI.*}}
-; X87_LIN-NEXT:    fucom %st(1)
-; X87_LIN-NEXT:    fnstsw %ax
-; X87_LIN-NEXT:    xorl %edx, %edx
-; X87_LIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_LIN-NEXT:    sahf
-; X87_LIN-NEXT:    setbe %al
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    ja .LBB2_2
-; X87_LIN-NEXT:  # %bb.1:
-; X87_LIN-NEXT:    fstp %st(0)
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    fxch %st(1)
-; X87_LIN-NEXT:  .LBB2_2:
-; X87_LIN-NEXT:    fstp %st(1)
-; X87_LIN-NEXT:    fsubrp %st, %st(1)
-; X87_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_LIN-NEXT:    shll $31, %edx
-; X87_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512DQVL-LABEL: d_to_u64:
+; X86-AVX512DQVL:       # %bb.0:
+; X86-AVX512DQVL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512DQVL-NEXT:    vcvttpd2uqq %xmm0, %xmm0
+; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQVL-NEXT:    retl
+;
+; X64-AVX512-LABEL: d_to_u64:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttsd2usi %xmm0, %rax
+; X64-AVX512-NEXT:    retq
+;
+; X86-AVX512DQ-LABEL: d_to_u64:
+; X86-AVX512DQ:       # %bb.0:
+; X86-AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512DQ-NEXT:    vcvttpd2uqq %zmm0, %zmm0
+; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQ-NEXT:    vzeroupper
+; X86-AVX512DQ-NEXT:    retl
+;
+; X86-AVX512F-WIN-LABEL: d_to_u64:
+; X86-AVX512F-WIN:       # %bb.0:
+; X86-AVX512F-WIN-NEXT:    pushl %ebp
+; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512F-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512F-WIN-NEXT:    subl $8, %esp
+; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
+; X86-AVX512F-WIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
+; X86-AVX512F-WIN-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
+; X86-AVX512F-WIN-NEXT:    xorl %edx, %edx
+; X86-AVX512F-WIN-NEXT:    vucomisd %xmm0, %xmm1
+; X86-AVX512F-WIN-NEXT:    vmovsd %xmm2, %xmm1, %xmm1 {%k1}
+; X86-AVX512F-WIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0
+; X86-AVX512F-WIN-NEXT:    vmovsd %xmm0, (%esp)
+; X86-AVX512F-WIN-NEXT:    fldl (%esp)
+; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-WIN-NEXT:    setbe %dl
+; X86-AVX512F-WIN-NEXT:    shll $31, %edx
+; X86-AVX512F-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512F-WIN-NEXT:    popl %ebp
+; X86-AVX512F-WIN-NEXT:    retl
+;
+; X86-AVX512F-LIN-LABEL: d_to_u64:
+; X86-AVX512F-LIN:       # %bb.0:
+; X86-AVX512F-LIN-NEXT:    subl $12, %esp
+; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm1 = mem[0],zero
+; X86-AVX512F-LIN-NEXT:    vcmpltsd %xmm1, %xmm0, %k1
+; X86-AVX512F-LIN-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
+; X86-AVX512F-LIN-NEXT:    xorl %edx, %edx
+; X86-AVX512F-LIN-NEXT:    vucomisd %xmm0, %xmm1
+; X86-AVX512F-LIN-NEXT:    vmovsd %xmm2, %xmm1, %xmm1 {%k1}
+; X86-AVX512F-LIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0
+; X86-AVX512F-LIN-NEXT:    vmovsd %xmm0, (%esp)
+; X86-AVX512F-LIN-NEXT:    fldl (%esp)
+; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-LIN-NEXT:    setbe %dl
+; X86-AVX512F-LIN-NEXT:    shll $31, %edx
+; X86-AVX512F-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-LIN-NEXT:    addl $12, %esp
+; X86-AVX512F-LIN-NEXT:    retl
+;
+; X86-SSE3-WIN-LABEL: d_to_u64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X86-SSE3-WIN-NEXT:    movapd %xmm0, %xmm2
+; X86-SSE3-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-WIN-NEXT:    ucomisd %xmm0, %xmm1
+; X86-SSE3-WIN-NEXT:    cmpltsd %xmm1, %xmm0
+; X86-SSE3-WIN-NEXT:    andnpd %xmm1, %xmm0
+; X86-SSE3-WIN-NEXT:    subsd %xmm0, %xmm2
+; X86-SSE3-WIN-NEXT:    movsd %xmm2, (%esp)
+; X86-SSE3-WIN-NEXT:    fldl (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    setbe %dl
+; X86-SSE3-WIN-NEXT:    shll $31, %edx
+; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: d_to_u64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X86-SSE3-LIN-NEXT:    movapd %xmm0, %xmm2
+; X86-SSE3-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-LIN-NEXT:    ucomisd %xmm0, %xmm1
+; X86-SSE3-LIN-NEXT:    cmpltsd %xmm1, %xmm0
+; X86-SSE3-LIN-NEXT:    andnpd %xmm1, %xmm0
+; X86-SSE3-LIN-NEXT:    subsd %xmm0, %xmm2
+; X86-SSE3-LIN-NEXT:    movsd %xmm2, (%esp)
+; X86-SSE3-LIN-NEXT:    fldl (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    setbe %dl
+; X86-SSE3-LIN-NEXT:    shll $31, %edx
+; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: d_to_u64:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X64-SSE-NEXT:    movapd %xmm0, %xmm2
+; X64-SSE-NEXT:    subsd %xmm1, %xmm2
+; X64-SSE-NEXT:    cvttsd2si %xmm2, %rax
+; X64-SSE-NEXT:    movabsq $-9223372036854775808, %rcx # imm = 0x8000000000000000
+; X64-SSE-NEXT:    xorq %rax, %rcx
+; X64-SSE-NEXT:    cvttsd2si %xmm0, %rax
+; X64-SSE-NEXT:    ucomisd %xmm1, %xmm0
+; X64-SSE-NEXT:    cmovaeq %rcx, %rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: d_to_u64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X86-SSE2-WIN-NEXT:    movapd %xmm0, %xmm2
+; X86-SSE2-WIN-NEXT:    cmpltsd %xmm1, %xmm2
+; X86-SSE2-WIN-NEXT:    andnpd %xmm1, %xmm2
+; X86-SSE2-WIN-NEXT:    movapd %xmm0, %xmm3
+; X86-SSE2-WIN-NEXT:    subsd %xmm2, %xmm3
+; X86-SSE2-WIN-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-WIN-NEXT:    ucomisd %xmm0, %xmm1
+; X86-SSE2-WIN-NEXT:    setbe %dl
+; X86-SSE2-WIN-NEXT:    shll $31, %edx
+; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: d_to_u64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm1 = mem[0],zero
+; X86-SSE2-LIN-NEXT:    movapd %xmm0, %xmm2
+; X86-SSE2-LIN-NEXT:    cmpltsd %xmm1, %xmm2
+; X86-SSE2-LIN-NEXT:    andnpd %xmm1, %xmm2
+; X86-SSE2-LIN-NEXT:    movapd %xmm0, %xmm3
+; X86-SSE2-LIN-NEXT:    subsd %xmm2, %xmm3
+; X86-SSE2-LIN-NEXT:    movsd %xmm3, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-LIN-NEXT:    ucomisd %xmm0, %xmm1
+; X86-SSE2-LIN-NEXT:    setbe %dl
+; X86-SSE2-LIN-NEXT:    shll $31, %edx
+; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: d_to_u64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldl 8(%ebp)
+; X87-WIN-NEXT:    flds __real at 5f000000
+; X87-WIN-NEXT:    fucom %st(1)
+; X87-WIN-NEXT:    fnstsw %ax
+; X87-WIN-NEXT:    xorl %edx, %edx
+; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-WIN-NEXT:    sahf
+; X87-WIN-NEXT:    setbe %al
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    ja LBB2_2
+; X87-WIN-NEXT:  # %bb.1:
+; X87-WIN-NEXT:    fstp %st(0)
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    fxch %st(1)
+; X87-WIN-NEXT:  LBB2_2:
+; X87-WIN-NEXT:    fstp %st(1)
+; X87-WIN-NEXT:    fsubrp %st, %st(1)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-WIN-NEXT:    shll $31, %edx
+; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: d_to_u64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; X87-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    flds {{\.LCPI.*}}
+; X87-LIN-NEXT:    fucom %st(1)
+; X87-LIN-NEXT:    fnstsw %ax
+; X87-LIN-NEXT:    xorl %edx, %edx
+; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-LIN-NEXT:    sahf
+; X87-LIN-NEXT:    setbe %al
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    ja .LBB2_2
+; X87-LIN-NEXT:  # %bb.1:
+; X87-LIN-NEXT:    fstp %st(0)
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    fxch %st(1)
+; X87-LIN-NEXT:  .LBB2_2:
+; X87-LIN-NEXT:    fstp %st(1)
+; X87-LIN-NEXT:    fsubrp %st, %st(1)
+; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-LIN-NEXT:    shll $31, %edx
+; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui double %a to i64
   ret i64 %r
 }
 
 define i64 @d_to_s64(double %a) nounwind {
-; AVX512DQVL_32_WIN-LABEL: d_to_s64:
-; AVX512DQVL_32_WIN:       # %bb.0:
-; AVX512DQVL_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQVL_32_WIN-NEXT:    vcvttpd2qq %xmm0, %xmm0
-; AVX512DQVL_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_WIN-NEXT:    retl
-;
-; AVX512DQVL_32_LIN-LABEL: d_to_s64:
-; AVX512DQVL_32_LIN:       # %bb.0:
-; AVX512DQVL_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQVL_32_LIN-NEXT:    vcvttpd2qq %xmm0, %xmm0
-; AVX512DQVL_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQVL_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQVL_32_LIN-NEXT:    retl
-;
-; AVX512_64-LABEL: d_to_s64:
-; AVX512_64:       # %bb.0:
-; AVX512_64-NEXT:    vcvttsd2si %xmm0, %rax
-; AVX512_64-NEXT:    retq
-;
-; AVX512DQ_32_WIN-LABEL: d_to_s64:
-; AVX512DQ_32_WIN:       # %bb.0:
-; AVX512DQ_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQ_32_WIN-NEXT:    vcvttpd2qq %zmm0, %zmm0
-; AVX512DQ_32_WIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_WIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_WIN-NEXT:    vzeroupper
-; AVX512DQ_32_WIN-NEXT:    retl
-;
-; AVX512DQ_32_LIN-LABEL: d_to_s64:
-; AVX512DQ_32_LIN:       # %bb.0:
-; AVX512DQ_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512DQ_32_LIN-NEXT:    vcvttpd2qq %zmm0, %zmm0
-; AVX512DQ_32_LIN-NEXT:    vmovd %xmm0, %eax
-; AVX512DQ_32_LIN-NEXT:    vpextrd $1, %xmm0, %edx
-; AVX512DQ_32_LIN-NEXT:    vzeroupper
-; AVX512DQ_32_LIN-NEXT:    retl
-;
-; AVX512F_32_WIN-LABEL: d_to_s64:
-; AVX512F_32_WIN:       # %bb.0:
-; AVX512F_32_WIN-NEXT:    pushl %ebp
-; AVX512F_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512F_32_WIN-NEXT:    andl $-8, %esp
-; AVX512F_32_WIN-NEXT:    subl $8, %esp
-; AVX512F_32_WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_WIN-NEXT:    vmovsd %xmm0, (%esp)
-; AVX512F_32_WIN-NEXT:    fldl (%esp)
-; AVX512F_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512F_32_WIN-NEXT:    popl %ebp
-; AVX512F_32_WIN-NEXT:    retl
-;
-; AVX512F_32_LIN-LABEL: d_to_s64:
-; AVX512F_32_LIN:       # %bb.0:
-; AVX512F_32_LIN-NEXT:    subl $12, %esp
-; AVX512F_32_LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
-; AVX512F_32_LIN-NEXT:    vmovsd %xmm0, (%esp)
-; AVX512F_32_LIN-NEXT:    fldl (%esp)
-; AVX512F_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512F_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512F_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512F_32_LIN-NEXT:    addl $12, %esp
-; AVX512F_32_LIN-NEXT:    retl
-;
-; SSE3_32_WIN-LABEL: d_to_s64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_WIN-NEXT:    movsd %xmm0, (%esp)
-; SSE3_32_WIN-NEXT:    fldl (%esp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: d_to_s64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE3_32_LIN-NEXT:    movsd %xmm0, (%esp)
-; SSE3_32_LIN-NEXT:    fldl (%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64-LABEL: d_to_s64:
-; SSE3_64:       # %bb.0:
-; SSE3_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE3_64-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: d_to_s64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; SSE2_32_WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE2_32_WIN-NEXT:    movsd %xmm0, {{[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:    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
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: d_to_s64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; SSE2_32_LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
-; SSE2_32_LIN-NEXT:    movsd %xmm0, {{[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:    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
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64-LABEL: d_to_s64:
-; SSE2_64:       # %bb.0:
-; SSE2_64-NEXT:    cvttsd2si %xmm0, %rax
-; SSE2_64-NEXT:    retq
-;
-; X87_WIN-LABEL: d_to_s64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldl 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: d_to_s64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512DQVL-LABEL: d_to_s64:
+; X86-AVX512DQVL:       # %bb.0:
+; X86-AVX512DQVL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512DQVL-NEXT:    vcvttpd2qq %xmm0, %xmm0
+; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQVL-NEXT:    retl
+;
+; X64-AVX512-LABEL: d_to_s64:
+; X64-AVX512:       # %bb.0:
+; X64-AVX512-NEXT:    vcvttsd2si %xmm0, %rax
+; X64-AVX512-NEXT:    retq
+;
+; X86-AVX512DQ-LABEL: d_to_s64:
+; X86-AVX512DQ:       # %bb.0:
+; X86-AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512DQ-NEXT:    vcvttpd2qq %zmm0, %zmm0
+; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax
+; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx
+; X86-AVX512DQ-NEXT:    vzeroupper
+; X86-AVX512DQ-NEXT:    retl
+;
+; X86-AVX512F-WIN-LABEL: d_to_s64:
+; X86-AVX512F-WIN:       # %bb.0:
+; X86-AVX512F-WIN-NEXT:    pushl %ebp
+; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512F-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512F-WIN-NEXT:    subl $8, %esp
+; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512F-WIN-NEXT:    vmovsd %xmm0, (%esp)
+; X86-AVX512F-WIN-NEXT:    fldl (%esp)
+; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512F-WIN-NEXT:    popl %ebp
+; X86-AVX512F-WIN-NEXT:    retl
+;
+; X86-AVX512F-LIN-LABEL: d_to_s64:
+; X86-AVX512F-LIN:       # %bb.0:
+; X86-AVX512F-LIN-NEXT:    subl $12, %esp
+; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero
+; X86-AVX512F-LIN-NEXT:    vmovsd %xmm0, (%esp)
+; X86-AVX512F-LIN-NEXT:    fldl (%esp)
+; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512F-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512F-LIN-NEXT:    addl $12, %esp
+; X86-AVX512F-LIN-NEXT:    retl
+;
+; X86-SSE3-WIN-LABEL: d_to_s64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-WIN-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE3-WIN-NEXT:    fldl (%esp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: d_to_s64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE3-LIN-NEXT:    movsd %xmm0, (%esp)
+; X86-SSE3-LIN-NEXT:    fldl (%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE-LABEL: d_to_s64:
+; X64-SSE:       # %bb.0:
+; X64-SSE-NEXT:    cvttsd2si %xmm0, %rax
+; X64-SSE-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: d_to_s64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE2-WIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: d_to_s64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero
+; X86-SSE2-LIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldl {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X87-WIN-LABEL: d_to_s64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldl 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: d_to_s64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptosi double %a to i64
   ret i64 %r
 }
 
 define i64 @x_to_u64(x86_fp80 %a) nounwind {
-; AVX512_32_WIN-LABEL: x_to_u64:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    pushl %ebp
-; AVX512_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512_32_WIN-NEXT:    andl $-8, %esp
-; AVX512_32_WIN-NEXT:    subl $8, %esp
-; AVX512_32_WIN-NEXT:    fldt 8(%ebp)
-; AVX512_32_WIN-NEXT:    flds __real at 5f000000
-; AVX512_32_WIN-NEXT:    xorl %edx, %edx
-; AVX512_32_WIN-NEXT:    fucomi %st(1), %st
-; AVX512_32_WIN-NEXT:    fldz
-; AVX512_32_WIN-NEXT:    fxch %st(1)
-; AVX512_32_WIN-NEXT:    fcmovnbe %st(1), %st
-; AVX512_32_WIN-NEXT:    fstp %st(1)
-; AVX512_32_WIN-NEXT:    fsubrp %st, %st(1)
-; AVX512_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512_32_WIN-NEXT:    setbe %dl
-; AVX512_32_WIN-NEXT:    shll $31, %edx
-; AVX512_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512_32_WIN-NEXT:    popl %ebp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: x_to_u64:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $12, %esp
-; AVX512_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; AVX512_32_LIN-NEXT:    flds {{\.LCPI.*}}
-; AVX512_32_LIN-NEXT:    xorl %edx, %edx
-; AVX512_32_LIN-NEXT:    fucomi %st(1), %st
-; AVX512_32_LIN-NEXT:    fldz
-; AVX512_32_LIN-NEXT:    fxch %st(1)
-; AVX512_32_LIN-NEXT:    fcmovnbe %st(1), %st
-; AVX512_32_LIN-NEXT:    fstp %st(1)
-; AVX512_32_LIN-NEXT:    fsubrp %st, %st(1)
-; AVX512_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512_32_LIN-NEXT:    setbe %dl
-; AVX512_32_LIN-NEXT:    shll $31, %edx
-; AVX512_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; AVX512_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512_32_LIN-NEXT:    addl $12, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: x_to_u64:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    pushq %rax
-; AVX512_64_WIN-NEXT:    fldt (%rcx)
-; AVX512_64_WIN-NEXT:    flds __real@{{.*}}(%rip)
-; AVX512_64_WIN-NEXT:    xorl %eax, %eax
-; AVX512_64_WIN-NEXT:    fucomi %st(1), %st
-; AVX512_64_WIN-NEXT:    fldz
-; AVX512_64_WIN-NEXT:    fxch %st(1)
-; AVX512_64_WIN-NEXT:    fcmovnbe %st(1), %st
-; AVX512_64_WIN-NEXT:    fstp %st(1)
-; AVX512_64_WIN-NEXT:    fsubrp %st, %st(1)
-; AVX512_64_WIN-NEXT:    fisttpll (%rsp)
-; AVX512_64_WIN-NEXT:    setbe %al
-; AVX512_64_WIN-NEXT:    shlq $63, %rax
-; AVX512_64_WIN-NEXT:    xorq (%rsp), %rax
-; AVX512_64_WIN-NEXT:    popq %rcx
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: x_to_u64:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    flds {{.*}}(%rip)
-; AVX512_64_LIN-NEXT:    xorl %eax, %eax
-; AVX512_64_LIN-NEXT:    fucomi %st(1), %st
-; AVX512_64_LIN-NEXT:    fldz
-; AVX512_64_LIN-NEXT:    fxch %st(1)
-; AVX512_64_LIN-NEXT:    fcmovnbe %st(1), %st
-; AVX512_64_LIN-NEXT:    fstp %st(1)
-; AVX512_64_LIN-NEXT:    fsubrp %st, %st(1)
-; AVX512_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    setbe %al
-; AVX512_64_LIN-NEXT:    shlq $63, %rax
-; AVX512_64_LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: x_to_u64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    fldt 8(%ebp)
-; SSE3_32_WIN-NEXT:    flds __real at 5f000000
-; SSE3_32_WIN-NEXT:    xorl %edx, %edx
-; SSE3_32_WIN-NEXT:    fucomi %st(1), %st
-; SSE3_32_WIN-NEXT:    fldz
-; SSE3_32_WIN-NEXT:    fxch %st(1)
-; SSE3_32_WIN-NEXT:    fcmovnbe %st(1), %st
-; SSE3_32_WIN-NEXT:    fstp %st(1)
-; SSE3_32_WIN-NEXT:    fsubrp %st, %st(1)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    setbe %dl
-; SSE3_32_WIN-NEXT:    shll $31, %edx
-; SSE3_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: x_to_u64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    flds {{\.LCPI.*}}
-; SSE3_32_LIN-NEXT:    xorl %edx, %edx
-; SSE3_32_LIN-NEXT:    fucomi %st(1), %st
-; SSE3_32_LIN-NEXT:    fldz
-; SSE3_32_LIN-NEXT:    fxch %st(1)
-; SSE3_32_LIN-NEXT:    fcmovnbe %st(1), %st
-; SSE3_32_LIN-NEXT:    fstp %st(1)
-; SSE3_32_LIN-NEXT:    fsubrp %st, %st(1)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    setbe %dl
-; SSE3_32_LIN-NEXT:    shll $31, %edx
-; SSE3_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: x_to_u64:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    pushq %rax
-; SSE3_64_WIN-NEXT:    fldt (%rcx)
-; SSE3_64_WIN-NEXT:    flds __real@{{.*}}(%rip)
-; SSE3_64_WIN-NEXT:    xorl %eax, %eax
-; SSE3_64_WIN-NEXT:    fucomi %st(1), %st
-; SSE3_64_WIN-NEXT:    fldz
-; SSE3_64_WIN-NEXT:    fxch %st(1)
-; SSE3_64_WIN-NEXT:    fcmovnbe %st(1), %st
-; SSE3_64_WIN-NEXT:    fstp %st(1)
-; SSE3_64_WIN-NEXT:    fsubrp %st, %st(1)
-; SSE3_64_WIN-NEXT:    fisttpll (%rsp)
-; SSE3_64_WIN-NEXT:    setbe %al
-; SSE3_64_WIN-NEXT:    shlq $63, %rax
-; SSE3_64_WIN-NEXT:    xorq (%rsp), %rax
-; SSE3_64_WIN-NEXT:    popq %rcx
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: x_to_u64:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    flds {{.*}}(%rip)
-; SSE3_64_LIN-NEXT:    xorl %eax, %eax
-; SSE3_64_LIN-NEXT:    fucomi %st(1), %st
-; SSE3_64_LIN-NEXT:    fldz
-; SSE3_64_LIN-NEXT:    fxch %st(1)
-; SSE3_64_LIN-NEXT:    fcmovnbe %st(1), %st
-; SSE3_64_LIN-NEXT:    fstp %st(1)
-; SSE3_64_LIN-NEXT:    fsubrp %st, %st(1)
-; SSE3_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    setbe %al
-; SSE3_64_LIN-NEXT:    shlq $63, %rax
-; SSE3_64_LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: x_to_u64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; SSE2_32_WIN-NEXT:    fldt 8(%ebp)
-; SSE2_32_WIN-NEXT:    flds __real at 5f000000
-; SSE2_32_WIN-NEXT:    xorl %edx, %edx
-; SSE2_32_WIN-NEXT:    fucomi %st(1), %st
-; SSE2_32_WIN-NEXT:    setbe %dl
-; SSE2_32_WIN-NEXT:    fldz
-; SSE2_32_WIN-NEXT:    fxch %st(1)
-; SSE2_32_WIN-NEXT:    fcmovnbe %st(1), %st
-; SSE2_32_WIN-NEXT:    fstp %st(1)
-; SSE2_32_WIN-NEXT:    fsubrp %st, %st(1)
-; SSE2_32_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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:    shll $31, %edx
-; SSE2_32_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: x_to_u64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; SSE2_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    flds {{\.LCPI.*}}
-; SSE2_32_LIN-NEXT:    xorl %edx, %edx
-; SSE2_32_LIN-NEXT:    fucomi %st(1), %st
-; SSE2_32_LIN-NEXT:    setbe %dl
-; SSE2_32_LIN-NEXT:    fldz
-; SSE2_32_LIN-NEXT:    fxch %st(1)
-; SSE2_32_LIN-NEXT:    fcmovnbe %st(1), %st
-; SSE2_32_LIN-NEXT:    fstp %st(1)
-; SSE2_32_LIN-NEXT:    fsubrp %st, %st(1)
-; SSE2_32_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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:    shll $31, %edx
-; SSE2_32_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: x_to_u64:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $16, %rsp
-; SSE2_64_WIN-NEXT:    fldt (%rcx)
-; SSE2_64_WIN-NEXT:    flds __real@{{.*}}(%rip)
-; SSE2_64_WIN-NEXT:    xorl %eax, %eax
-; SSE2_64_WIN-NEXT:    fucomi %st(1), %st
-; SSE2_64_WIN-NEXT:    setbe %al
-; SSE2_64_WIN-NEXT:    fldz
-; SSE2_64_WIN-NEXT:    fxch %st(1)
-; SSE2_64_WIN-NEXT:    fcmovnbe %st(1), %st
-; SSE2_64_WIN-NEXT:    fstp %st(1)
-; SSE2_64_WIN-NEXT:    fsubrp %st, %st(1)
-; SSE2_64_WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)
-; SSE2_64_WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %ecx
-; 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:    shlq $63, %rax
-; SSE2_64_WIN-NEXT:    xorq {{[0-9]+}}(%rsp), %rax
-; SSE2_64_WIN-NEXT:    addq $16, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: x_to_u64:
-; SSE2_64_LIN:       # %bb.0:
-; SSE2_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SSE2_64_LIN-NEXT:    flds {{.*}}(%rip)
-; SSE2_64_LIN-NEXT:    xorl %eax, %eax
-; SSE2_64_LIN-NEXT:    fucomi %st(1), %st
-; SSE2_64_LIN-NEXT:    setbe %al
-; SSE2_64_LIN-NEXT:    fldz
-; SSE2_64_LIN-NEXT:    fxch %st(1)
-; SSE2_64_LIN-NEXT:    fcmovnbe %st(1), %st
-; SSE2_64_LIN-NEXT:    fstp %st(1)
-; SSE2_64_LIN-NEXT:    fsubrp %st, %st(1)
-; SSE2_64_LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
-; SSE2_64_LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx
-; 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:    shlq $63, %rax
-; SSE2_64_LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
-; SSE2_64_LIN-NEXT:    retq
-;
-; X87_WIN-LABEL: x_to_u64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldt 8(%ebp)
-; X87_WIN-NEXT:    flds __real at 5f000000
-; X87_WIN-NEXT:    fucom %st(1)
-; X87_WIN-NEXT:    fnstsw %ax
-; X87_WIN-NEXT:    xorl %edx, %edx
-; X87_WIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_WIN-NEXT:    sahf
-; X87_WIN-NEXT:    setbe %al
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    ja LBB4_2
-; X87_WIN-NEXT:  # %bb.1:
-; X87_WIN-NEXT:    fstp %st(0)
-; X87_WIN-NEXT:    fldz
-; X87_WIN-NEXT:    fxch %st(1)
-; X87_WIN-NEXT:  LBB4_2:
-; X87_WIN-NEXT:    fstp %st(1)
-; X87_WIN-NEXT:    fsubrp %st, %st(1)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_WIN-NEXT:    shll $31, %edx
-; X87_WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: x_to_u64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; X87_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    flds {{\.LCPI.*}}
-; X87_LIN-NEXT:    fucom %st(1)
-; X87_LIN-NEXT:    fnstsw %ax
-; X87_LIN-NEXT:    xorl %edx, %edx
-; X87_LIN-NEXT:    # kill: def $ah killed $ah killed $ax
-; X87_LIN-NEXT:    sahf
-; X87_LIN-NEXT:    setbe %al
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    ja .LBB4_2
-; X87_LIN-NEXT:  # %bb.1:
-; X87_LIN-NEXT:    fstp %st(0)
-; X87_LIN-NEXT:    fldz
-; X87_LIN-NEXT:    fxch %st(1)
-; X87_LIN-NEXT:  .LBB4_2:
-; X87_LIN-NEXT:    fstp %st(1)
-; X87_LIN-NEXT:    fsubrp %st, %st(1)
-; X87_LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
-; X87_LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
-; X87_LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
-; X87_LIN-NEXT:    shll $31, %edx
-; X87_LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: x_to_u64:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    pushl %ebp
+; X86-AVX512-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512-WIN-NEXT:    subl $8, %esp
+; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)
+; X86-AVX512-WIN-NEXT:    flds __real at 5f000000
+; X86-AVX512-WIN-NEXT:    xorl %edx, %edx
+; X86-AVX512-WIN-NEXT:    fucomi %st(1), %st
+; X86-AVX512-WIN-NEXT:    fldz
+; X86-AVX512-WIN-NEXT:    fxch %st(1)
+; X86-AVX512-WIN-NEXT:    fcmovnbe %st(1), %st
+; X86-AVX512-WIN-NEXT:    fstp %st(1)
+; X86-AVX512-WIN-NEXT:    fsubrp %st, %st(1)
+; X86-AVX512-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-WIN-NEXT:    setbe %dl
+; X86-AVX512-WIN-NEXT:    shll $31, %edx
+; X86-AVX512-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512-WIN-NEXT:    popl %ebp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: x_to_u64:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $12, %esp
+; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-AVX512-LIN-NEXT:    flds {{\.LCPI.*}}
+; X86-AVX512-LIN-NEXT:    xorl %edx, %edx
+; X86-AVX512-LIN-NEXT:    fucomi %st(1), %st
+; X86-AVX512-LIN-NEXT:    fldz
+; X86-AVX512-LIN-NEXT:    fxch %st(1)
+; X86-AVX512-LIN-NEXT:    fcmovnbe %st(1), %st
+; X86-AVX512-LIN-NEXT:    fstp %st(1)
+; X86-AVX512-LIN-NEXT:    fsubrp %st, %st(1)
+; X86-AVX512-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-LIN-NEXT:    setbe %dl
+; X86-AVX512-LIN-NEXT:    shll $31, %edx
+; X86-AVX512-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-AVX512-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-LIN-NEXT:    addl $12, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: x_to_u64:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    pushq %rax
+; X64-AVX512-WIN-NEXT:    fldt (%rcx)
+; X64-AVX512-WIN-NEXT:    flds __real@{{.*}}(%rip)
+; X64-AVX512-WIN-NEXT:    xorl %eax, %eax
+; X64-AVX512-WIN-NEXT:    fucomi %st(1), %st
+; X64-AVX512-WIN-NEXT:    fldz
+; X64-AVX512-WIN-NEXT:    fxch %st(1)
+; X64-AVX512-WIN-NEXT:    fcmovnbe %st(1), %st
+; X64-AVX512-WIN-NEXT:    fstp %st(1)
+; X64-AVX512-WIN-NEXT:    fsubrp %st, %st(1)
+; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)
+; X64-AVX512-WIN-NEXT:    setbe %al
+; X64-AVX512-WIN-NEXT:    shlq $63, %rax
+; X64-AVX512-WIN-NEXT:    xorq (%rsp), %rax
+; X64-AVX512-WIN-NEXT:    popq %rcx
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: x_to_u64:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    flds {{.*}}(%rip)
+; X64-AVX512-LIN-NEXT:    xorl %eax, %eax
+; X64-AVX512-LIN-NEXT:    fucomi %st(1), %st
+; X64-AVX512-LIN-NEXT:    fldz
+; X64-AVX512-LIN-NEXT:    fxch %st(1)
+; X64-AVX512-LIN-NEXT:    fcmovnbe %st(1), %st
+; X64-AVX512-LIN-NEXT:    fstp %st(1)
+; X64-AVX512-LIN-NEXT:    fsubrp %st, %st(1)
+; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    setbe %al
+; X64-AVX512-LIN-NEXT:    shlq $63, %rax
+; X64-AVX512-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE3-WIN-LABEL: x_to_u64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE3-WIN-NEXT:    flds __real at 5f000000
+; X86-SSE3-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-WIN-NEXT:    fucomi %st(1), %st
+; X86-SSE3-WIN-NEXT:    fldz
+; X86-SSE3-WIN-NEXT:    fxch %st(1)
+; X86-SSE3-WIN-NEXT:    fcmovnbe %st(1), %st
+; X86-SSE3-WIN-NEXT:    fstp %st(1)
+; X86-SSE3-WIN-NEXT:    fsubrp %st, %st(1)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    setbe %dl
+; X86-SSE3-WIN-NEXT:    shll $31, %edx
+; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: x_to_u64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE3-LIN-NEXT:    flds {{\.LCPI.*}}
+; X86-SSE3-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE3-LIN-NEXT:    fucomi %st(1), %st
+; X86-SSE3-LIN-NEXT:    fldz
+; X86-SSE3-LIN-NEXT:    fxch %st(1)
+; X86-SSE3-LIN-NEXT:    fcmovnbe %st(1), %st
+; X86-SSE3-LIN-NEXT:    fstp %st(1)
+; X86-SSE3-LIN-NEXT:    fsubrp %st, %st(1)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    setbe %dl
+; X86-SSE3-LIN-NEXT:    shll $31, %edx
+; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE3-WIN-LABEL: x_to_u64:
+; X64-SSE3-WIN:       # %bb.0:
+; X64-SSE3-WIN-NEXT:    pushq %rax
+; X64-SSE3-WIN-NEXT:    fldt (%rcx)
+; X64-SSE3-WIN-NEXT:    flds __real@{{.*}}(%rip)
+; X64-SSE3-WIN-NEXT:    xorl %eax, %eax
+; X64-SSE3-WIN-NEXT:    fucomi %st(1), %st
+; X64-SSE3-WIN-NEXT:    fldz
+; X64-SSE3-WIN-NEXT:    fxch %st(1)
+; X64-SSE3-WIN-NEXT:    fcmovnbe %st(1), %st
+; X64-SSE3-WIN-NEXT:    fstp %st(1)
+; X64-SSE3-WIN-NEXT:    fsubrp %st, %st(1)
+; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)
+; X64-SSE3-WIN-NEXT:    setbe %al
+; X64-SSE3-WIN-NEXT:    shlq $63, %rax
+; X64-SSE3-WIN-NEXT:    xorq (%rsp), %rax
+; X64-SSE3-WIN-NEXT:    popq %rcx
+; X64-SSE3-WIN-NEXT:    retq
+;
+; X64-SSE3-LIN-LABEL: x_to_u64:
+; X64-SSE3-LIN:       # %bb.0:
+; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    flds {{.*}}(%rip)
+; X64-SSE3-LIN-NEXT:    xorl %eax, %eax
+; X64-SSE3-LIN-NEXT:    fucomi %st(1), %st
+; X64-SSE3-LIN-NEXT:    fldz
+; X64-SSE3-LIN-NEXT:    fxch %st(1)
+; X64-SSE3-LIN-NEXT:    fcmovnbe %st(1), %st
+; X64-SSE3-LIN-NEXT:    fstp %st(1)
+; X64-SSE3-LIN-NEXT:    fsubrp %st, %st(1)
+; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    setbe %al
+; X64-SSE3-LIN-NEXT:    shlq $63, %rax
+; X64-SSE3-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
+; X64-SSE3-LIN-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: x_to_u64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE2-WIN-NEXT:    flds __real at 5f000000
+; X86-SSE2-WIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-WIN-NEXT:    fucomi %st(1), %st
+; X86-SSE2-WIN-NEXT:    setbe %dl
+; X86-SSE2-WIN-NEXT:    fldz
+; X86-SSE2-WIN-NEXT:    fxch %st(1)
+; X86-SSE2-WIN-NEXT:    fcmovnbe %st(1), %st
+; X86-SSE2-WIN-NEXT:    fstp %st(1)
+; X86-SSE2-WIN-NEXT:    fsubrp %st, %st(1)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    shll $31, %edx
+; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: x_to_u64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    flds {{\.LCPI.*}}
+; X86-SSE2-LIN-NEXT:    xorl %edx, %edx
+; X86-SSE2-LIN-NEXT:    fucomi %st(1), %st
+; X86-SSE2-LIN-NEXT:    setbe %dl
+; X86-SSE2-LIN-NEXT:    fldz
+; X86-SSE2-LIN-NEXT:    fxch %st(1)
+; X86-SSE2-LIN-NEXT:    fcmovnbe %st(1), %st
+; X86-SSE2-LIN-NEXT:    fstp %st(1)
+; X86-SSE2-LIN-NEXT:    fsubrp %st, %st(1)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    shll $31, %edx
+; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X64-SSE2-WIN-LABEL: x_to_u64:
+; X64-SSE2-WIN:       # %bb.0:
+; X64-SSE2-WIN-NEXT:    subq $16, %rsp
+; X64-SSE2-WIN-NEXT:    fldt (%rcx)
+; X64-SSE2-WIN-NEXT:    flds __real@{{.*}}(%rip)
+; X64-SSE2-WIN-NEXT:    xorl %eax, %eax
+; X64-SSE2-WIN-NEXT:    fucomi %st(1), %st
+; X64-SSE2-WIN-NEXT:    setbe %al
+; X64-SSE2-WIN-NEXT:    fldz
+; X64-SSE2-WIN-NEXT:    fxch %st(1)
+; X64-SSE2-WIN-NEXT:    fcmovnbe %st(1), %st
+; X64-SSE2-WIN-NEXT:    fstp %st(1)
+; X64-SSE2-WIN-NEXT:    fsubrp %st, %st(1)
+; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %ecx
+; X64-SSE2-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X64-SSE2-WIN-NEXT:    movw %cx, {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    shlq $63, %rax
+; X64-SSE2-WIN-NEXT:    xorq {{[0-9]+}}(%rsp), %rax
+; X64-SSE2-WIN-NEXT:    addq $16, %rsp
+; X64-SSE2-WIN-NEXT:    retq
+;
+; X64-SSE2-LIN-LABEL: x_to_u64:
+; X64-SSE2-LIN:       # %bb.0:
+; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    flds {{.*}}(%rip)
+; X64-SSE2-LIN-NEXT:    xorl %eax, %eax
+; X64-SSE2-LIN-NEXT:    fucomi %st(1), %st
+; X64-SSE2-LIN-NEXT:    setbe %al
+; X64-SSE2-LIN-NEXT:    fldz
+; X64-SSE2-LIN-NEXT:    fxch %st(1)
+; X64-SSE2-LIN-NEXT:    fcmovnbe %st(1), %st
+; X64-SSE2-LIN-NEXT:    fstp %st(1)
+; X64-SSE2-LIN-NEXT:    fsubrp %st, %st(1)
+; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx
+; X64-SSE2-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X64-SSE2-LIN-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    shlq $63, %rax
+; X64-SSE2-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax
+; X64-SSE2-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: x_to_u64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldt 8(%ebp)
+; X87-WIN-NEXT:    flds __real at 5f000000
+; X87-WIN-NEXT:    fucom %st(1)
+; X87-WIN-NEXT:    fnstsw %ax
+; X87-WIN-NEXT:    xorl %edx, %edx
+; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-WIN-NEXT:    sahf
+; X87-WIN-NEXT:    setbe %al
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    ja LBB4_2
+; X87-WIN-NEXT:  # %bb.1:
+; X87-WIN-NEXT:    fstp %st(0)
+; X87-WIN-NEXT:    fldz
+; X87-WIN-NEXT:    fxch %st(1)
+; X87-WIN-NEXT:  LBB4_2:
+; X87-WIN-NEXT:    fstp %st(1)
+; X87-WIN-NEXT:    fsubrp %st, %st(1)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-WIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-WIN-NEXT:    shll $31, %edx
+; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: x_to_u64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; X87-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    flds {{\.LCPI.*}}
+; X87-LIN-NEXT:    fucom %st(1)
+; X87-LIN-NEXT:    fnstsw %ax
+; X87-LIN-NEXT:    xorl %edx, %edx
+; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax
+; X87-LIN-NEXT:    sahf
+; X87-LIN-NEXT:    setbe %al
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    ja .LBB4_2
+; X87-LIN-NEXT:  # %bb.1:
+; X87-LIN-NEXT:    fstp %st(0)
+; X87-LIN-NEXT:    fldz
+; X87-LIN-NEXT:    fxch %st(1)
+; X87-LIN-NEXT:  .LBB4_2:
+; X87-LIN-NEXT:    fstp %st(1)
+; X87-LIN-NEXT:    fsubrp %st, %st(1)
+; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx
+; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00
+; X87-LIN-NEXT:    movw %cx, {{[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:    movb %al, %dl
+; X87-LIN-NEXT:    shll $31, %edx
+; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui x86_fp80 %a to i64
   ret i64 %r
 }
 
 define i64 @x_to_s64(x86_fp80 %a) nounwind {
-; AVX512_32_WIN-LABEL: x_to_s64:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    pushl %ebp
-; AVX512_32_WIN-NEXT:    movl %esp, %ebp
-; AVX512_32_WIN-NEXT:    andl $-8, %esp
-; AVX512_32_WIN-NEXT:    subl $8, %esp
-; AVX512_32_WIN-NEXT:    fldt 8(%ebp)
-; AVX512_32_WIN-NEXT:    fisttpll (%esp)
-; AVX512_32_WIN-NEXT:    movl (%esp), %eax
-; AVX512_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512_32_WIN-NEXT:    movl %ebp, %esp
-; AVX512_32_WIN-NEXT:    popl %ebp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: x_to_s64:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $12, %esp
-; AVX512_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; AVX512_32_LIN-NEXT:    fisttpll (%esp)
-; AVX512_32_LIN-NEXT:    movl (%esp), %eax
-; AVX512_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; AVX512_32_LIN-NEXT:    addl $12, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: x_to_s64:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    pushq %rax
-; AVX512_64_WIN-NEXT:    fldt (%rcx)
-; AVX512_64_WIN-NEXT:    fisttpll (%rsp)
-; AVX512_64_WIN-NEXT:    movq (%rsp), %rax
-; AVX512_64_WIN-NEXT:    popq %rcx
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: x_to_s64:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; AVX512_64_LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: x_to_s64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl %ebp
-; SSE3_32_WIN-NEXT:    movl %esp, %ebp
-; SSE3_32_WIN-NEXT:    andl $-8, %esp
-; SSE3_32_WIN-NEXT:    subl $8, %esp
-; SSE3_32_WIN-NEXT:    fldt 8(%ebp)
-; SSE3_32_WIN-NEXT:    fisttpll (%esp)
-; SSE3_32_WIN-NEXT:    movl (%esp), %eax
-; SSE3_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_WIN-NEXT:    movl %ebp, %esp
-; SSE3_32_WIN-NEXT:    popl %ebp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: x_to_s64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    fldt {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    fisttpll (%esp)
-; SSE3_32_LIN-NEXT:    movl (%esp), %eax
-; SSE3_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE3_32_LIN-NEXT:    addl $12, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: x_to_s64:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    pushq %rax
-; SSE3_64_WIN-NEXT:    fldt (%rcx)
-; SSE3_64_WIN-NEXT:    fisttpll (%rsp)
-; SSE3_64_WIN-NEXT:    movq (%rsp), %rax
-; SSE3_64_WIN-NEXT:    popq %rcx
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: x_to_s64:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
-; SSE3_64_LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: x_to_s64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl %ebp
-; SSE2_32_WIN-NEXT:    movl %esp, %ebp
-; SSE2_32_WIN-NEXT:    andl $-8, %esp
-; SSE2_32_WIN-NEXT:    subl $16, %esp
-; 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:    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
-; SSE2_32_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_WIN-NEXT:    movl %ebp, %esp
-; SSE2_32_WIN-NEXT:    popl %ebp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: x_to_s64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; SSE2_32_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; SSE2_32_LIN-NEXT:    addl $20, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: x_to_s64:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $16, %rsp
-; 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:    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
-; SSE2_64_WIN-NEXT:    addq $16, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: x_to_s64:
-; SSE2_64_LIN:       # %bb.0:
-; 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:    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
-; SSE2_64_LIN-NEXT:    retq
-;
-; X87_WIN-LABEL: x_to_s64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl %ebp
-; X87_WIN-NEXT:    movl %esp, %ebp
-; X87_WIN-NEXT:    andl $-8, %esp
-; X87_WIN-NEXT:    subl $16, %esp
-; X87_WIN-NEXT:    fldt 8(%ebp)
-; X87_WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
-; 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
-; X87_WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_WIN-NEXT:    movl %ebp, %esp
-; X87_WIN-NEXT:    popl %ebp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: x_to_s64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $20, %esp
-; 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:    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
-; X87_LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
-; X87_LIN-NEXT:    addl $20, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: x_to_s64:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    pushl %ebp
+; X86-AVX512-WIN-NEXT:    movl %esp, %ebp
+; X86-AVX512-WIN-NEXT:    andl $-8, %esp
+; X86-AVX512-WIN-NEXT:    subl $8, %esp
+; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)
+; X86-AVX512-WIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-WIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512-WIN-NEXT:    movl %ebp, %esp
+; X86-AVX512-WIN-NEXT:    popl %ebp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: x_to_s64:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $12, %esp
+; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-AVX512-LIN-NEXT:    fisttpll (%esp)
+; X86-AVX512-LIN-NEXT:    movl (%esp), %eax
+; X86-AVX512-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-AVX512-LIN-NEXT:    addl $12, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: x_to_s64:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    pushq %rax
+; X64-AVX512-WIN-NEXT:    fldt (%rcx)
+; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)
+; X64-AVX512-WIN-NEXT:    movq (%rsp), %rax
+; X64-AVX512-WIN-NEXT:    popq %rcx
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: x_to_s64:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-AVX512-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE3-WIN-LABEL: x_to_s64:
+; X86-SSE3-WIN:       # %bb.0:
+; X86-SSE3-WIN-NEXT:    pushl %ebp
+; X86-SSE3-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE3-WIN-NEXT:    andl $-8, %esp
+; X86-SSE3-WIN-NEXT:    subl $8, %esp
+; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE3-WIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-WIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE3-WIN-NEXT:    popl %ebp
+; X86-SSE3-WIN-NEXT:    retl
+;
+; X86-SSE3-LIN-LABEL: x_to_s64:
+; X86-SSE3-LIN:       # %bb.0:
+; X86-SSE3-LIN-NEXT:    subl $12, %esp
+; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE3-LIN-NEXT:    fisttpll (%esp)
+; X86-SSE3-LIN-NEXT:    movl (%esp), %eax
+; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE3-LIN-NEXT:    addl $12, %esp
+; X86-SSE3-LIN-NEXT:    retl
+;
+; X64-SSE3-WIN-LABEL: x_to_s64:
+; X64-SSE3-WIN:       # %bb.0:
+; X64-SSE3-WIN-NEXT:    pushq %rax
+; X64-SSE3-WIN-NEXT:    fldt (%rcx)
+; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)
+; X64-SSE3-WIN-NEXT:    movq (%rsp), %rax
+; X64-SSE3-WIN-NEXT:    popq %rcx
+; X64-SSE3-WIN-NEXT:    retq
+;
+; X64-SSE3-LIN-LABEL: x_to_s64:
+; X64-SSE3-LIN:       # %bb.0:
+; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)
+; X64-SSE3-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
+; X64-SSE3-LIN-NEXT:    retq
+;
+; X86-SSE2-WIN-LABEL: x_to_s64:
+; X86-SSE2-WIN:       # %bb.0:
+; X86-SSE2-WIN-NEXT:    pushl %ebp
+; X86-SSE2-WIN-NEXT:    movl %esp, %ebp
+; X86-SSE2-WIN-NEXT:    andl $-8, %esp
+; X86-SSE2-WIN-NEXT:    subl $16, %esp
+; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)
+; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-WIN-NEXT:    movl %ebp, %esp
+; X86-SSE2-WIN-NEXT:    popl %ebp
+; X86-SSE2-WIN-NEXT:    retl
+;
+; X86-SSE2-LIN-LABEL: x_to_s64:
+; X86-SSE2-LIN:       # %bb.0:
+; X86-SSE2-LIN-NEXT:    subl $20, %esp
+; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax
+; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X86-SSE2-LIN-NEXT:    addl $20, %esp
+; X86-SSE2-LIN-NEXT:    retl
+;
+; X64-SSE2-WIN-LABEL: x_to_s64:
+; X64-SSE2-WIN:       # %bb.0:
+; X64-SSE2-WIN-NEXT:    subq $16, %rsp
+; X64-SSE2-WIN-NEXT:    fldt (%rcx)
+; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax
+; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)
+; X64-SSE2-WIN-NEXT:    movq {{[0-9]+}}(%rsp), %rax
+; X64-SSE2-WIN-NEXT:    addq $16, %rsp
+; X64-SSE2-WIN-NEXT:    retq
+;
+; X64-SSE2-LIN-LABEL: x_to_s64:
+; X64-SSE2-LIN:       # %bb.0:
+; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax
+; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00
+; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)
+; X64-SSE2-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax
+; X64-SSE2-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: x_to_s64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl %ebp
+; X87-WIN-NEXT:    movl %esp, %ebp
+; X87-WIN-NEXT:    andl $-8, %esp
+; X87-WIN-NEXT:    subl $16, %esp
+; X87-WIN-NEXT:    fldt 8(%ebp)
+; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; 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
+; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-WIN-NEXT:    movl %ebp, %esp
+; X87-WIN-NEXT:    popl %ebp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: x_to_s64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $20, %esp
+; 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:    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
+; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx
+; X87-LIN-NEXT:    addl $20, %esp
+; X87-LIN-NEXT:    retl
   %r = fptosi x86_fp80 %a to i64
   ret i64 %r
 }
 
 define i64 @t_to_u64(fp128 %a) nounwind {
-; AVX512_32_WIN-LABEL: t_to_u64:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    subl $16, %esp
-; AVX512_32_WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_WIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_WIN-NEXT:    calll ___fixunstfdi
-; AVX512_32_WIN-NEXT:    addl $16, %esp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: t_to_u64:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $28, %esp
-; AVX512_32_LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_LIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_LIN-NEXT:    calll __fixunstfdi
-; AVX512_32_LIN-NEXT:    addl $28, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: t_to_u64:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    subq $40, %rsp
-; AVX512_64_WIN-NEXT:    callq __fixunstfdi
-; AVX512_64_WIN-NEXT:    addq $40, %rsp
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: t_to_u64:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    pushq %rax
-; AVX512_64_LIN-NEXT:    callq __fixunstfdi
-; AVX512_64_LIN-NEXT:    popq %rcx
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: t_to_u64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    calll ___fixunstfdi
-; SSE3_32_WIN-NEXT:    addl $16, %esp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: t_to_u64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    calll __fixunstfdi
-; SSE3_32_LIN-NEXT:    addl $28, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: t_to_u64:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    subq $40, %rsp
-; SSE3_64_WIN-NEXT:    callq __fixunstfdi
-; SSE3_64_WIN-NEXT:    addq $40, %rsp
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: t_to_u64:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    pushq %rax
-; SSE3_64_LIN-NEXT:    callq __fixunstfdi
-; SSE3_64_LIN-NEXT:    popq %rcx
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: t_to_u64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    calll ___fixunstfdi
-; SSE2_32_WIN-NEXT:    addl $16, %esp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: t_to_u64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $12, %esp
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    calll __fixunstfdi
-; SSE2_32_LIN-NEXT:    addl $28, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: t_to_u64:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $40, %rsp
-; SSE2_64_WIN-NEXT:    callq __fixunstfdi
-; SSE2_64_WIN-NEXT:    addq $40, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: t_to_u64:
-; SSE2_64_LIN:       # %bb.0:
-; SSE2_64_LIN-NEXT:    pushq %rax
-; SSE2_64_LIN-NEXT:    callq __fixunstfdi
-; SSE2_64_LIN-NEXT:    popq %rcx
-; SSE2_64_LIN-NEXT:    retq
-;
-; X87_WIN-LABEL: t_to_u64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    calll ___fixunstfdi
-; X87_WIN-NEXT:    addl $16, %esp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: t_to_u64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $12, %esp
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    calll __fixunstfdi
-; X87_LIN-NEXT:    addl $28, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: t_to_u64:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    subl $16, %esp
+; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-WIN-NEXT:    calll ___fixunstfdi
+; X86-AVX512-WIN-NEXT:    addl $16, %esp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: t_to_u64:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $28, %esp
+; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-LIN-NEXT:    calll __fixunstfdi
+; X86-AVX512-LIN-NEXT:    addl $28, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: t_to_u64:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    subq $40, %rsp
+; X64-AVX512-WIN-NEXT:    callq __fixunstfdi
+; X64-AVX512-WIN-NEXT:    addq $40, %rsp
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: t_to_u64:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    pushq %rax
+; X64-AVX512-LIN-NEXT:    callq __fixunstfdi
+; X64-AVX512-LIN-NEXT:    popq %rcx
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE-WIN-LABEL: t_to_u64:
+; X86-SSE-WIN:       # %bb.0:
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    calll ___fixunstfdi
+; X86-SSE-WIN-NEXT:    addl $16, %esp
+; X86-SSE-WIN-NEXT:    retl
+;
+; X86-SSE-LIN-LABEL: t_to_u64:
+; X86-SSE-LIN:       # %bb.0:
+; X86-SSE-LIN-NEXT:    subl $12, %esp
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    calll __fixunstfdi
+; X86-SSE-LIN-NEXT:    addl $28, %esp
+; X86-SSE-LIN-NEXT:    retl
+;
+; X64-SSE-WIN-LABEL: t_to_u64:
+; X64-SSE-WIN:       # %bb.0:
+; X64-SSE-WIN-NEXT:    subq $40, %rsp
+; X64-SSE-WIN-NEXT:    callq __fixunstfdi
+; X64-SSE-WIN-NEXT:    addq $40, %rsp
+; X64-SSE-WIN-NEXT:    retq
+;
+; X64-SSE-LIN-LABEL: t_to_u64:
+; X64-SSE-LIN:       # %bb.0:
+; X64-SSE-LIN-NEXT:    pushq %rax
+; X64-SSE-LIN-NEXT:    callq __fixunstfdi
+; X64-SSE-LIN-NEXT:    popq %rcx
+; X64-SSE-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: t_to_u64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    calll ___fixunstfdi
+; X87-WIN-NEXT:    addl $16, %esp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: t_to_u64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $12, %esp
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    calll __fixunstfdi
+; X87-LIN-NEXT:    addl $28, %esp
+; X87-LIN-NEXT:    retl
   %r = fptoui fp128 %a to i64
   ret i64 %r
 }
 
 define i64 @t_to_s64(fp128 %a) nounwind {
-; AVX512_32_WIN-LABEL: t_to_s64:
-; AVX512_32_WIN:       # %bb.0:
-; AVX512_32_WIN-NEXT:    subl $16, %esp
-; AVX512_32_WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_WIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_WIN-NEXT:    calll ___fixtfdi
-; AVX512_32_WIN-NEXT:    addl $16, %esp
-; AVX512_32_WIN-NEXT:    retl
-;
-; AVX512_32_LIN-LABEL: t_to_s64:
-; AVX512_32_LIN:       # %bb.0:
-; AVX512_32_LIN-NEXT:    subl $28, %esp
-; AVX512_32_LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
-; AVX512_32_LIN-NEXT:    vmovups %xmm0, (%esp)
-; AVX512_32_LIN-NEXT:    calll __fixtfdi
-; AVX512_32_LIN-NEXT:    addl $28, %esp
-; AVX512_32_LIN-NEXT:    retl
-;
-; AVX512_64_WIN-LABEL: t_to_s64:
-; AVX512_64_WIN:       # %bb.0:
-; AVX512_64_WIN-NEXT:    subq $40, %rsp
-; AVX512_64_WIN-NEXT:    callq __fixtfdi
-; AVX512_64_WIN-NEXT:    addq $40, %rsp
-; AVX512_64_WIN-NEXT:    retq
-;
-; AVX512_64_LIN-LABEL: t_to_s64:
-; AVX512_64_LIN:       # %bb.0:
-; AVX512_64_LIN-NEXT:    pushq %rax
-; AVX512_64_LIN-NEXT:    callq __fixtfdi
-; AVX512_64_LIN-NEXT:    popq %rcx
-; AVX512_64_LIN-NEXT:    retq
-;
-; SSE3_32_WIN-LABEL: t_to_s64:
-; SSE3_32_WIN:       # %bb.0:
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_WIN-NEXT:    calll ___fixtfdi
-; SSE3_32_WIN-NEXT:    addl $16, %esp
-; SSE3_32_WIN-NEXT:    retl
-;
-; SSE3_32_LIN-LABEL: t_to_s64:
-; SSE3_32_LIN:       # %bb.0:
-; SSE3_32_LIN-NEXT:    subl $12, %esp
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE3_32_LIN-NEXT:    calll __fixtfdi
-; SSE3_32_LIN-NEXT:    addl $28, %esp
-; SSE3_32_LIN-NEXT:    retl
-;
-; SSE3_64_WIN-LABEL: t_to_s64:
-; SSE3_64_WIN:       # %bb.0:
-; SSE3_64_WIN-NEXT:    subq $40, %rsp
-; SSE3_64_WIN-NEXT:    callq __fixtfdi
-; SSE3_64_WIN-NEXT:    addq $40, %rsp
-; SSE3_64_WIN-NEXT:    retq
-;
-; SSE3_64_LIN-LABEL: t_to_s64:
-; SSE3_64_LIN:       # %bb.0:
-; SSE3_64_LIN-NEXT:    pushq %rax
-; SSE3_64_LIN-NEXT:    callq __fixtfdi
-; SSE3_64_LIN-NEXT:    popq %rcx
-; SSE3_64_LIN-NEXT:    retq
-;
-; SSE2_32_WIN-LABEL: t_to_s64:
-; SSE2_32_WIN:       # %bb.0:
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_WIN-NEXT:    calll ___fixtfdi
-; SSE2_32_WIN-NEXT:    addl $16, %esp
-; SSE2_32_WIN-NEXT:    retl
-;
-; SSE2_32_LIN-LABEL: t_to_s64:
-; SSE2_32_LIN:       # %bb.0:
-; SSE2_32_LIN-NEXT:    subl $12, %esp
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; SSE2_32_LIN-NEXT:    calll __fixtfdi
-; SSE2_32_LIN-NEXT:    addl $28, %esp
-; SSE2_32_LIN-NEXT:    retl
-;
-; SSE2_64_WIN-LABEL: t_to_s64:
-; SSE2_64_WIN:       # %bb.0:
-; SSE2_64_WIN-NEXT:    subq $40, %rsp
-; SSE2_64_WIN-NEXT:    callq __fixtfdi
-; SSE2_64_WIN-NEXT:    addq $40, %rsp
-; SSE2_64_WIN-NEXT:    retq
-;
-; SSE2_64_LIN-LABEL: t_to_s64:
-; SSE2_64_LIN:       # %bb.0:
-; SSE2_64_LIN-NEXT:    pushq %rax
-; SSE2_64_LIN-NEXT:    callq __fixtfdi
-; SSE2_64_LIN-NEXT:    popq %rcx
-; SSE2_64_LIN-NEXT:    retq
-;
-; X87_WIN-LABEL: t_to_s64:
-; X87_WIN:       # %bb.0:
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_WIN-NEXT:    calll ___fixtfdi
-; X87_WIN-NEXT:    addl $16, %esp
-; X87_WIN-NEXT:    retl
-;
-; X87_LIN-LABEL: t_to_s64:
-; X87_LIN:       # %bb.0:
-; X87_LIN-NEXT:    subl $12, %esp
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    pushl {{[0-9]+}}(%esp)
-; X87_LIN-NEXT:    calll __fixtfdi
-; X87_LIN-NEXT:    addl $28, %esp
-; X87_LIN-NEXT:    retl
+; X86-AVX512-WIN-LABEL: t_to_s64:
+; X86-AVX512-WIN:       # %bb.0:
+; X86-AVX512-WIN-NEXT:    subl $16, %esp
+; X86-AVX512-WIN-NEXT:    vmovups {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-WIN-NEXT:    calll ___fixtfdi
+; X86-AVX512-WIN-NEXT:    addl $16, %esp
+; X86-AVX512-WIN-NEXT:    retl
+;
+; X86-AVX512-LIN-LABEL: t_to_s64:
+; X86-AVX512-LIN:       # %bb.0:
+; X86-AVX512-LIN-NEXT:    subl $28, %esp
+; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm0
+; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)
+; X86-AVX512-LIN-NEXT:    calll __fixtfdi
+; X86-AVX512-LIN-NEXT:    addl $28, %esp
+; X86-AVX512-LIN-NEXT:    retl
+;
+; X64-AVX512-WIN-LABEL: t_to_s64:
+; X64-AVX512-WIN:       # %bb.0:
+; X64-AVX512-WIN-NEXT:    subq $40, %rsp
+; X64-AVX512-WIN-NEXT:    callq __fixtfdi
+; X64-AVX512-WIN-NEXT:    addq $40, %rsp
+; X64-AVX512-WIN-NEXT:    retq
+;
+; X64-AVX512-LIN-LABEL: t_to_s64:
+; X64-AVX512-LIN:       # %bb.0:
+; X64-AVX512-LIN-NEXT:    pushq %rax
+; X64-AVX512-LIN-NEXT:    callq __fixtfdi
+; X64-AVX512-LIN-NEXT:    popq %rcx
+; X64-AVX512-LIN-NEXT:    retq
+;
+; X86-SSE-WIN-LABEL: t_to_s64:
+; X86-SSE-WIN:       # %bb.0:
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-WIN-NEXT:    calll ___fixtfdi
+; X86-SSE-WIN-NEXT:    addl $16, %esp
+; X86-SSE-WIN-NEXT:    retl
+;
+; X86-SSE-LIN-LABEL: t_to_s64:
+; X86-SSE-LIN:       # %bb.0:
+; X86-SSE-LIN-NEXT:    subl $12, %esp
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-SSE-LIN-NEXT:    calll __fixtfdi
+; X86-SSE-LIN-NEXT:    addl $28, %esp
+; X86-SSE-LIN-NEXT:    retl
+;
+; X64-SSE-WIN-LABEL: t_to_s64:
+; X64-SSE-WIN:       # %bb.0:
+; X64-SSE-WIN-NEXT:    subq $40, %rsp
+; X64-SSE-WIN-NEXT:    callq __fixtfdi
+; X64-SSE-WIN-NEXT:    addq $40, %rsp
+; X64-SSE-WIN-NEXT:    retq
+;
+; X64-SSE-LIN-LABEL: t_to_s64:
+; X64-SSE-LIN:       # %bb.0:
+; X64-SSE-LIN-NEXT:    pushq %rax
+; X64-SSE-LIN-NEXT:    callq __fixtfdi
+; X64-SSE-LIN-NEXT:    popq %rcx
+; X64-SSE-LIN-NEXT:    retq
+;
+; X87-WIN-LABEL: t_to_s64:
+; X87-WIN:       # %bb.0:
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-WIN-NEXT:    calll ___fixtfdi
+; X87-WIN-NEXT:    addl $16, %esp
+; X87-WIN-NEXT:    retl
+;
+; X87-LIN-LABEL: t_to_s64:
+; X87-LIN:       # %bb.0:
+; X87-LIN-NEXT:    subl $12, %esp
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)
+; X87-LIN-NEXT:    calll __fixtfdi
+; X87-LIN-NEXT:    addl $28, %esp
+; X87-LIN-NEXT:    retl
   %r = fptosi fp128 %a to i64
   ret i64 %r
 }


        


More information about the llvm-commits mailing list