brintos

brintos / llvm-project-archived public Read only

0
0
Text · 62.6 KiB · 3287869 Raw
1644 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86-AVX512DQVL,X86-AVX512-WIN3; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X86-AVX512DQVL,X86-AVX512-LIN4; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN5; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq,+avx512vl | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN6; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X86-AVX512DQ,X86-AVX512-WIN7; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X86-AVX512DQ,X86-AVX512-LIN8; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN9; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512dq | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN10; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+avx512f | FileCheck %s --check-prefixes=X86-AVX512-WIN,X86-AVX512F-WIN11; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+avx512f | FileCheck %s --check-prefixes=X86-AVX512-LIN,X86-AVX512F-LIN12; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+avx512f | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-WIN13; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=X64-AVX512,X64-AVX512-LIN14; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse3 | FileCheck %s --check-prefixes=X86-SSE-WIN,X86-SSE3-WIN15; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse3 | FileCheck %s --check-prefixes=X86-SSE-LIN,X86-SSE3-LIN16; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse3 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-WIN,X64-SSE3-WIN17; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse3 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-LIN,X64-SSE3-LIN18; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=+sse2 | FileCheck %s --check-prefixes=X86-SSE-WIN,X86-SSE2-WIN19; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=+sse2 | FileCheck %s --check-prefixes=X86-SSE-LIN,X86-SSE2-LIN20; RUN: llc < %s -mtriple=x86_64-pc-windows-msvc   -mattr=+sse2 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-WIN,X64-SSE2-WIN21; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -mattr=+sse2 | FileCheck %s --check-prefixes=X64-SSE,X64-SSE-LIN,X64-SSE2-LIN22; RUN: llc < %s -mtriple=i386-pc-windows-msvc     -mattr=-sse  | FileCheck %s --check-prefix=X87-WIN23; RUN: llc < %s -mtriple=i386-unknown-linux-gnu   -mattr=-sse  | FileCheck %s --check-prefix=X87-LIN24 25; Check that scalar FP conversions to signed and unsigned int64 are using26; reasonable sequences, across platforms and target switches.27;28; The signed case is straight forward, and the tests here basically29; ensure successful compilation (f80 with avx512 was broken at one point).30;31; For the unsigned case there are many possible sequences, so to avoid32; a fragile test we just check for the presence of a few key instructions.33; AVX512 on Intel64 can use vcvtts[ds]2usi directly for float and double.34; Otherwise the sequence will involve an FP subtract (fsub, subss or subsd),35; and a truncating conversion (cvtts[ds]2si, fisttp, or fnstcw+fist).  When36; both a subtract and fnstcw are needed, they can occur in either order.37;38; The interesting subtargets are AVX512F (vcvtts[ds]2usi), SSE3 (fisttp),39; SSE2 (cvtts[ds]2si) and vanilla X87 (fnstcw+fist, 32-bit only).40 41define i64 @f_to_u64(float %a) nounwind {42; X86-AVX512DQVL-LABEL: f_to_u64:43; X86-AVX512DQVL:       # %bb.0:44; X86-AVX512DQVL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero45; X86-AVX512DQVL-NEXT:    vcvttps2uqq %xmm0, %xmm046; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax47; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx48; X86-AVX512DQVL-NEXT:    retl49;50; X64-AVX512-LABEL: f_to_u64:51; X64-AVX512:       # %bb.0:52; X64-AVX512-NEXT:    vcvttss2usi %xmm0, %rax53; X64-AVX512-NEXT:    retq54;55; X86-AVX512DQ-LABEL: f_to_u64:56; X86-AVX512DQ:       # %bb.0:57; X86-AVX512DQ-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero58; X86-AVX512DQ-NEXT:    vcvttps2uqq %ymm0, %zmm059; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax60; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx61; X86-AVX512DQ-NEXT:    vzeroupper62; X86-AVX512DQ-NEXT:    retl63;64; X86-AVX512F-WIN-LABEL: f_to_u64:65; X86-AVX512F-WIN:       # %bb.0:66; X86-AVX512F-WIN-NEXT:    pushl %ebp67; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp68; X86-AVX512F-WIN-NEXT:    andl $-8, %esp69; X86-AVX512F-WIN-NEXT:    subl $8, %esp70; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero71; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]72; X86-AVX512F-WIN-NEXT:    xorl %edx, %edx73; X86-AVX512F-WIN-NEXT:    vucomiss %xmm0, %xmm174; X86-AVX512F-WIN-NEXT:    setbe %dl75; X86-AVX512F-WIN-NEXT:    kmovw %edx, %k176; X86-AVX512F-WIN-NEXT:    vmovss %xmm1, %xmm1, %xmm1 {%k1} {z}77; X86-AVX512F-WIN-NEXT:    vsubss %xmm1, %xmm0, %xmm078; X86-AVX512F-WIN-NEXT:    vmovss %xmm0, (%esp)79; X86-AVX512F-WIN-NEXT:    flds (%esp)80; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)81; X86-AVX512F-WIN-NEXT:    shll $31, %edx82; X86-AVX512F-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx83; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax84; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp85; X86-AVX512F-WIN-NEXT:    popl %ebp86; X86-AVX512F-WIN-NEXT:    retl87;88; X86-AVX512F-LIN-LABEL: f_to_u64:89; X86-AVX512F-LIN:       # %bb.0:90; X86-AVX512F-LIN-NEXT:    subl $12, %esp91; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero92; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]93; X86-AVX512F-LIN-NEXT:    xorl %edx, %edx94; X86-AVX512F-LIN-NEXT:    vucomiss %xmm0, %xmm195; X86-AVX512F-LIN-NEXT:    setbe %dl96; X86-AVX512F-LIN-NEXT:    kmovw %edx, %k197; X86-AVX512F-LIN-NEXT:    vmovss %xmm1, %xmm1, %xmm1 {%k1} {z}98; X86-AVX512F-LIN-NEXT:    vsubss %xmm1, %xmm0, %xmm099; X86-AVX512F-LIN-NEXT:    vmovss %xmm0, (%esp)100; X86-AVX512F-LIN-NEXT:    flds (%esp)101; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)102; X86-AVX512F-LIN-NEXT:    shll $31, %edx103; X86-AVX512F-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx104; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax105; X86-AVX512F-LIN-NEXT:    addl $12, %esp106; X86-AVX512F-LIN-NEXT:    retl107;108; X86-SSE3-WIN-LABEL: f_to_u64:109; X86-SSE3-WIN:       # %bb.0:110; X86-SSE3-WIN-NEXT:    pushl %ebp111; X86-SSE3-WIN-NEXT:    movl %esp, %ebp112; X86-SSE3-WIN-NEXT:    andl $-8, %esp113; X86-SSE3-WIN-NEXT:    subl $8, %esp114; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero115; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]116; X86-SSE3-WIN-NEXT:    ucomiss %xmm0, %xmm1117; X86-SSE3-WIN-NEXT:    jbe LBB0_2118; X86-SSE3-WIN-NEXT:  # %bb.1:119; X86-SSE3-WIN-NEXT:    xorps %xmm1, %xmm1120; X86-SSE3-WIN-NEXT:  LBB0_2:121; X86-SSE3-WIN-NEXT:    subss %xmm1, %xmm0122; X86-SSE3-WIN-NEXT:    movss %xmm0, (%esp)123; X86-SSE3-WIN-NEXT:    flds (%esp)124; X86-SSE3-WIN-NEXT:    fisttpll (%esp)125; X86-SSE3-WIN-NEXT:    setbe %al126; X86-SSE3-WIN-NEXT:    movzbl %al, %edx127; X86-SSE3-WIN-NEXT:    shll $31, %edx128; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx129; X86-SSE3-WIN-NEXT:    movl (%esp), %eax130; X86-SSE3-WIN-NEXT:    movl %ebp, %esp131; X86-SSE3-WIN-NEXT:    popl %ebp132; X86-SSE3-WIN-NEXT:    retl133;134; X86-SSE3-LIN-LABEL: f_to_u64:135; X86-SSE3-LIN:       # %bb.0:136; X86-SSE3-LIN-NEXT:    subl $12, %esp137; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero138; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]139; X86-SSE3-LIN-NEXT:    ucomiss %xmm0, %xmm1140; X86-SSE3-LIN-NEXT:    jbe .LBB0_2141; X86-SSE3-LIN-NEXT:  # %bb.1:142; X86-SSE3-LIN-NEXT:    xorps %xmm1, %xmm1143; X86-SSE3-LIN-NEXT:  .LBB0_2:144; X86-SSE3-LIN-NEXT:    subss %xmm1, %xmm0145; X86-SSE3-LIN-NEXT:    movss %xmm0, (%esp)146; X86-SSE3-LIN-NEXT:    flds (%esp)147; X86-SSE3-LIN-NEXT:    fisttpll (%esp)148; X86-SSE3-LIN-NEXT:    setbe %al149; X86-SSE3-LIN-NEXT:    movzbl %al, %edx150; X86-SSE3-LIN-NEXT:    shll $31, %edx151; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx152; X86-SSE3-LIN-NEXT:    movl (%esp), %eax153; X86-SSE3-LIN-NEXT:    addl $12, %esp154; X86-SSE3-LIN-NEXT:    retl155;156; X64-SSE-WIN-LABEL: f_to_u64:157; X64-SSE-WIN:       # %bb.0:158; X64-SSE-WIN-NEXT:    cvttss2si %xmm0, %rcx159; X64-SSE-WIN-NEXT:    movq %rcx, %rdx160; X64-SSE-WIN-NEXT:    sarq $63, %rdx161; X64-SSE-WIN-NEXT:    subss __real@5f000000(%rip), %xmm0162; X64-SSE-WIN-NEXT:    cvttss2si %xmm0, %rax163; X64-SSE-WIN-NEXT:    andq %rdx, %rax164; X64-SSE-WIN-NEXT:    orq %rcx, %rax165; X64-SSE-WIN-NEXT:    retq166;167; X64-SSE-LIN-LABEL: f_to_u64:168; X64-SSE-LIN:       # %bb.0:169; X64-SSE-LIN-NEXT:    cvttss2si %xmm0, %rcx170; X64-SSE-LIN-NEXT:    movq %rcx, %rdx171; X64-SSE-LIN-NEXT:    sarq $63, %rdx172; X64-SSE-LIN-NEXT:    subss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0173; X64-SSE-LIN-NEXT:    cvttss2si %xmm0, %rax174; X64-SSE-LIN-NEXT:    andq %rdx, %rax175; X64-SSE-LIN-NEXT:    orq %rcx, %rax176; X64-SSE-LIN-NEXT:    retq177;178; X86-SSE2-WIN-LABEL: f_to_u64:179; X86-SSE2-WIN:       # %bb.0:180; X86-SSE2-WIN-NEXT:    pushl %ebp181; X86-SSE2-WIN-NEXT:    movl %esp, %ebp182; X86-SSE2-WIN-NEXT:    andl $-8, %esp183; X86-SSE2-WIN-NEXT:    subl $16, %esp184; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero185; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]186; X86-SSE2-WIN-NEXT:    ucomiss %xmm0, %xmm1187; X86-SSE2-WIN-NEXT:    jbe LBB0_2188; X86-SSE2-WIN-NEXT:  # %bb.1:189; X86-SSE2-WIN-NEXT:    xorps %xmm1, %xmm1190; X86-SSE2-WIN-NEXT:  LBB0_2:191; X86-SSE2-WIN-NEXT:    subss %xmm1, %xmm0192; X86-SSE2-WIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)193; X86-SSE2-WIN-NEXT:    setbe %al194; X86-SSE2-WIN-NEXT:    flds {{[0-9]+}}(%esp)195; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)196; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx197; X86-SSE2-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00198; X86-SSE2-WIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)199; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)200; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)201; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)202; X86-SSE2-WIN-NEXT:    movzbl %al, %edx203; X86-SSE2-WIN-NEXT:    shll $31, %edx204; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx205; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax206; X86-SSE2-WIN-NEXT:    movl %ebp, %esp207; X86-SSE2-WIN-NEXT:    popl %ebp208; X86-SSE2-WIN-NEXT:    retl209;210; X86-SSE2-LIN-LABEL: f_to_u64:211; X86-SSE2-LIN:       # %bb.0:212; X86-SSE2-LIN-NEXT:    subl $20, %esp213; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero214; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm1 = [9.22337203E+18,0.0E+0,0.0E+0,0.0E+0]215; X86-SSE2-LIN-NEXT:    ucomiss %xmm0, %xmm1216; X86-SSE2-LIN-NEXT:    jbe .LBB0_2217; X86-SSE2-LIN-NEXT:  # %bb.1:218; X86-SSE2-LIN-NEXT:    xorps %xmm1, %xmm1219; X86-SSE2-LIN-NEXT:  .LBB0_2:220; X86-SSE2-LIN-NEXT:    subss %xmm1, %xmm0221; X86-SSE2-LIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)222; X86-SSE2-LIN-NEXT:    setbe %al223; X86-SSE2-LIN-NEXT:    flds {{[0-9]+}}(%esp)224; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)225; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx226; X86-SSE2-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00227; X86-SSE2-LIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)228; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)229; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)230; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)231; X86-SSE2-LIN-NEXT:    movzbl %al, %edx232; X86-SSE2-LIN-NEXT:    shll $31, %edx233; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx234; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax235; X86-SSE2-LIN-NEXT:    addl $20, %esp236; X86-SSE2-LIN-NEXT:    retl237;238; X87-WIN-LABEL: f_to_u64:239; X87-WIN:       # %bb.0:240; X87-WIN-NEXT:    pushl %ebp241; X87-WIN-NEXT:    movl %esp, %ebp242; X87-WIN-NEXT:    andl $-8, %esp243; X87-WIN-NEXT:    subl $16, %esp244; X87-WIN-NEXT:    flds 8(%ebp)245; X87-WIN-NEXT:    flds __real@5f000000246; X87-WIN-NEXT:    fucom %st(1)247; X87-WIN-NEXT:    fnstsw %ax248; X87-WIN-NEXT:    xorl %edx, %edx249; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax250; X87-WIN-NEXT:    sahf251; X87-WIN-NEXT:    setbe %al252; X87-WIN-NEXT:    fldz253; X87-WIN-NEXT:    jbe LBB0_2254; X87-WIN-NEXT:  # %bb.1:255; X87-WIN-NEXT:    fstp %st(1)256; X87-WIN-NEXT:    fldz257; X87-WIN-NEXT:  LBB0_2:258; X87-WIN-NEXT:    fstp %st(0)259; X87-WIN-NEXT:    fsubrp %st, %st(1)260; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)261; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx262; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00263; X87-WIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)264; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)265; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)266; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)267; X87-WIN-NEXT:    movb %al, %dl268; X87-WIN-NEXT:    shll $31, %edx269; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx270; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax271; X87-WIN-NEXT:    movl %ebp, %esp272; X87-WIN-NEXT:    popl %ebp273; X87-WIN-NEXT:    retl274;275; X87-LIN-LABEL: f_to_u64:276; X87-LIN:       # %bb.0:277; X87-LIN-NEXT:    subl $20, %esp278; X87-LIN-NEXT:    flds {{[0-9]+}}(%esp)279; X87-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}280; X87-LIN-NEXT:    fucom %st(1)281; X87-LIN-NEXT:    fnstsw %ax282; X87-LIN-NEXT:    xorl %edx, %edx283; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax284; X87-LIN-NEXT:    sahf285; X87-LIN-NEXT:    setbe %al286; X87-LIN-NEXT:    fldz287; X87-LIN-NEXT:    jbe .LBB0_2288; X87-LIN-NEXT:  # %bb.1:289; X87-LIN-NEXT:    fstp %st(1)290; X87-LIN-NEXT:    fldz291; X87-LIN-NEXT:  .LBB0_2:292; X87-LIN-NEXT:    fstp %st(0)293; X87-LIN-NEXT:    fsubrp %st, %st(1)294; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)295; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx296; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00297; X87-LIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)298; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)299; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)300; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)301; X87-LIN-NEXT:    movb %al, %dl302; X87-LIN-NEXT:    shll $31, %edx303; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx304; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax305; X87-LIN-NEXT:    addl $20, %esp306; X87-LIN-NEXT:    retl307  %r = fptoui float %a to i64308  ret i64 %r309}310 311define i64 @f_to_s64(float %a) nounwind {312; X86-AVX512DQVL-LABEL: f_to_s64:313; X86-AVX512DQVL:       # %bb.0:314; X86-AVX512DQVL-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero315; X86-AVX512DQVL-NEXT:    vcvttps2qq %xmm0, %xmm0316; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax317; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx318; X86-AVX512DQVL-NEXT:    retl319;320; X64-AVX512-LABEL: f_to_s64:321; X64-AVX512:       # %bb.0:322; X64-AVX512-NEXT:    vcvttss2si %xmm0, %rax323; X64-AVX512-NEXT:    retq324;325; X86-AVX512DQ-LABEL: f_to_s64:326; X86-AVX512DQ:       # %bb.0:327; X86-AVX512DQ-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero328; X86-AVX512DQ-NEXT:    vcvttps2qq %ymm0, %zmm0329; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax330; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx331; X86-AVX512DQ-NEXT:    vzeroupper332; X86-AVX512DQ-NEXT:    retl333;334; X86-AVX512F-WIN-LABEL: f_to_s64:335; X86-AVX512F-WIN:       # %bb.0:336; X86-AVX512F-WIN-NEXT:    pushl %ebp337; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp338; X86-AVX512F-WIN-NEXT:    andl $-8, %esp339; X86-AVX512F-WIN-NEXT:    subl $8, %esp340; X86-AVX512F-WIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero341; X86-AVX512F-WIN-NEXT:    vmovss %xmm0, (%esp)342; X86-AVX512F-WIN-NEXT:    flds (%esp)343; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)344; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax345; X86-AVX512F-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx346; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp347; X86-AVX512F-WIN-NEXT:    popl %ebp348; X86-AVX512F-WIN-NEXT:    retl349;350; X86-AVX512F-LIN-LABEL: f_to_s64:351; X86-AVX512F-LIN:       # %bb.0:352; X86-AVX512F-LIN-NEXT:    subl $12, %esp353; X86-AVX512F-LIN-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero354; X86-AVX512F-LIN-NEXT:    vmovss %xmm0, (%esp)355; X86-AVX512F-LIN-NEXT:    flds (%esp)356; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)357; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax358; X86-AVX512F-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx359; X86-AVX512F-LIN-NEXT:    addl $12, %esp360; X86-AVX512F-LIN-NEXT:    retl361;362; X86-SSE3-WIN-LABEL: f_to_s64:363; X86-SSE3-WIN:       # %bb.0:364; X86-SSE3-WIN-NEXT:    pushl %ebp365; X86-SSE3-WIN-NEXT:    movl %esp, %ebp366; X86-SSE3-WIN-NEXT:    andl $-8, %esp367; X86-SSE3-WIN-NEXT:    subl $8, %esp368; X86-SSE3-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero369; X86-SSE3-WIN-NEXT:    movss %xmm0, (%esp)370; X86-SSE3-WIN-NEXT:    flds (%esp)371; X86-SSE3-WIN-NEXT:    fisttpll (%esp)372; X86-SSE3-WIN-NEXT:    movl (%esp), %eax373; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx374; X86-SSE3-WIN-NEXT:    movl %ebp, %esp375; X86-SSE3-WIN-NEXT:    popl %ebp376; X86-SSE3-WIN-NEXT:    retl377;378; X86-SSE3-LIN-LABEL: f_to_s64:379; X86-SSE3-LIN:       # %bb.0:380; X86-SSE3-LIN-NEXT:    subl $12, %esp381; X86-SSE3-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero382; X86-SSE3-LIN-NEXT:    movss %xmm0, (%esp)383; X86-SSE3-LIN-NEXT:    flds (%esp)384; X86-SSE3-LIN-NEXT:    fisttpll (%esp)385; X86-SSE3-LIN-NEXT:    movl (%esp), %eax386; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx387; X86-SSE3-LIN-NEXT:    addl $12, %esp388; X86-SSE3-LIN-NEXT:    retl389;390; X64-SSE-LABEL: f_to_s64:391; X64-SSE:       # %bb.0:392; X64-SSE-NEXT:    cvttss2si %xmm0, %rax393; X64-SSE-NEXT:    retq394;395; X86-SSE2-WIN-LABEL: f_to_s64:396; X86-SSE2-WIN:       # %bb.0:397; X86-SSE2-WIN-NEXT:    pushl %ebp398; X86-SSE2-WIN-NEXT:    movl %esp, %ebp399; X86-SSE2-WIN-NEXT:    andl $-8, %esp400; X86-SSE2-WIN-NEXT:    subl $16, %esp401; X86-SSE2-WIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero402; X86-SSE2-WIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)403; X86-SSE2-WIN-NEXT:    flds {{[0-9]+}}(%esp)404; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)405; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax406; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00407; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)408; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)409; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)410; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)411; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax412; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx413; X86-SSE2-WIN-NEXT:    movl %ebp, %esp414; X86-SSE2-WIN-NEXT:    popl %ebp415; X86-SSE2-WIN-NEXT:    retl416;417; X86-SSE2-LIN-LABEL: f_to_s64:418; X86-SSE2-LIN:       # %bb.0:419; X86-SSE2-LIN-NEXT:    subl $20, %esp420; X86-SSE2-LIN-NEXT:    movss {{.*#+}} xmm0 = mem[0],zero,zero,zero421; X86-SSE2-LIN-NEXT:    movss %xmm0, {{[0-9]+}}(%esp)422; X86-SSE2-LIN-NEXT:    flds {{[0-9]+}}(%esp)423; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)424; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax425; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00426; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)427; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)428; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)429; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)430; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax431; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx432; X86-SSE2-LIN-NEXT:    addl $20, %esp433; X86-SSE2-LIN-NEXT:    retl434;435; X87-WIN-LABEL: f_to_s64:436; X87-WIN:       # %bb.0:437; X87-WIN-NEXT:    pushl %ebp438; X87-WIN-NEXT:    movl %esp, %ebp439; X87-WIN-NEXT:    andl $-8, %esp440; X87-WIN-NEXT:    subl $16, %esp441; X87-WIN-NEXT:    flds 8(%ebp)442; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)443; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax444; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00445; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)446; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)447; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)448; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)449; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax450; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx451; X87-WIN-NEXT:    movl %ebp, %esp452; X87-WIN-NEXT:    popl %ebp453; X87-WIN-NEXT:    retl454;455; X87-LIN-LABEL: f_to_s64:456; X87-LIN:       # %bb.0:457; X87-LIN-NEXT:    subl $20, %esp458; X87-LIN-NEXT:    flds {{[0-9]+}}(%esp)459; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)460; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax461; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00462; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)463; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)464; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)465; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)466; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax467; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx468; X87-LIN-NEXT:    addl $20, %esp469; X87-LIN-NEXT:    retl470  %r = fptosi float %a to i64471  ret i64 %r472}473 474define i64 @d_to_u64(double %a) nounwind {475; X86-AVX512DQVL-LABEL: d_to_u64:476; X86-AVX512DQVL:       # %bb.0:477; X86-AVX512DQVL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero478; X86-AVX512DQVL-NEXT:    vcvttpd2uqq %xmm0, %xmm0479; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax480; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx481; X86-AVX512DQVL-NEXT:    retl482;483; X64-AVX512-LABEL: d_to_u64:484; X64-AVX512:       # %bb.0:485; X64-AVX512-NEXT:    vcvttsd2usi %xmm0, %rax486; X64-AVX512-NEXT:    retq487;488; X86-AVX512DQ-LABEL: d_to_u64:489; X86-AVX512DQ:       # %bb.0:490; X86-AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero491; X86-AVX512DQ-NEXT:    vcvttpd2uqq %zmm0, %zmm0492; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax493; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx494; X86-AVX512DQ-NEXT:    vzeroupper495; X86-AVX512DQ-NEXT:    retl496;497; X86-AVX512F-WIN-LABEL: d_to_u64:498; X86-AVX512F-WIN:       # %bb.0:499; X86-AVX512F-WIN-NEXT:    pushl %ebp500; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp501; X86-AVX512F-WIN-NEXT:    andl $-8, %esp502; X86-AVX512F-WIN-NEXT:    subl $8, %esp503; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero504; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]505; X86-AVX512F-WIN-NEXT:    xorl %edx, %edx506; X86-AVX512F-WIN-NEXT:    vucomisd %xmm0, %xmm1507; X86-AVX512F-WIN-NEXT:    setbe %dl508; X86-AVX512F-WIN-NEXT:    kmovw %edx, %k1509; X86-AVX512F-WIN-NEXT:    vmovsd %xmm1, %xmm1, %xmm1 {%k1} {z}510; X86-AVX512F-WIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0511; X86-AVX512F-WIN-NEXT:    vmovsd %xmm0, (%esp)512; X86-AVX512F-WIN-NEXT:    fldl (%esp)513; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)514; X86-AVX512F-WIN-NEXT:    shll $31, %edx515; X86-AVX512F-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx516; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax517; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp518; X86-AVX512F-WIN-NEXT:    popl %ebp519; X86-AVX512F-WIN-NEXT:    retl520;521; X86-AVX512F-LIN-LABEL: d_to_u64:522; X86-AVX512F-LIN:       # %bb.0:523; X86-AVX512F-LIN-NEXT:    subl $12, %esp524; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero525; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]526; X86-AVX512F-LIN-NEXT:    xorl %edx, %edx527; X86-AVX512F-LIN-NEXT:    vucomisd %xmm0, %xmm1528; X86-AVX512F-LIN-NEXT:    setbe %dl529; X86-AVX512F-LIN-NEXT:    kmovw %edx, %k1530; X86-AVX512F-LIN-NEXT:    vmovsd %xmm1, %xmm1, %xmm1 {%k1} {z}531; X86-AVX512F-LIN-NEXT:    vsubsd %xmm1, %xmm0, %xmm0532; X86-AVX512F-LIN-NEXT:    vmovsd %xmm0, (%esp)533; X86-AVX512F-LIN-NEXT:    fldl (%esp)534; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)535; X86-AVX512F-LIN-NEXT:    shll $31, %edx536; X86-AVX512F-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx537; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax538; X86-AVX512F-LIN-NEXT:    addl $12, %esp539; X86-AVX512F-LIN-NEXT:    retl540;541; X86-SSE3-WIN-LABEL: d_to_u64:542; X86-SSE3-WIN:       # %bb.0:543; X86-SSE3-WIN-NEXT:    pushl %ebp544; X86-SSE3-WIN-NEXT:    movl %esp, %ebp545; X86-SSE3-WIN-NEXT:    andl $-8, %esp546; X86-SSE3-WIN-NEXT:    subl $8, %esp547; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero548; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]549; X86-SSE3-WIN-NEXT:    ucomisd %xmm0, %xmm1550; X86-SSE3-WIN-NEXT:    jbe LBB2_2551; X86-SSE3-WIN-NEXT:  # %bb.1:552; X86-SSE3-WIN-NEXT:    xorpd %xmm1, %xmm1553; X86-SSE3-WIN-NEXT:  LBB2_2:554; X86-SSE3-WIN-NEXT:    subsd %xmm1, %xmm0555; X86-SSE3-WIN-NEXT:    movsd %xmm0, (%esp)556; X86-SSE3-WIN-NEXT:    fldl (%esp)557; X86-SSE3-WIN-NEXT:    fisttpll (%esp)558; X86-SSE3-WIN-NEXT:    setbe %al559; X86-SSE3-WIN-NEXT:    movzbl %al, %edx560; X86-SSE3-WIN-NEXT:    shll $31, %edx561; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx562; X86-SSE3-WIN-NEXT:    movl (%esp), %eax563; X86-SSE3-WIN-NEXT:    movl %ebp, %esp564; X86-SSE3-WIN-NEXT:    popl %ebp565; X86-SSE3-WIN-NEXT:    retl566;567; X86-SSE3-LIN-LABEL: d_to_u64:568; X86-SSE3-LIN:       # %bb.0:569; X86-SSE3-LIN-NEXT:    subl $12, %esp570; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero571; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]572; X86-SSE3-LIN-NEXT:    ucomisd %xmm0, %xmm1573; X86-SSE3-LIN-NEXT:    jbe .LBB2_2574; X86-SSE3-LIN-NEXT:  # %bb.1:575; X86-SSE3-LIN-NEXT:    xorpd %xmm1, %xmm1576; X86-SSE3-LIN-NEXT:  .LBB2_2:577; X86-SSE3-LIN-NEXT:    subsd %xmm1, %xmm0578; X86-SSE3-LIN-NEXT:    movsd %xmm0, (%esp)579; X86-SSE3-LIN-NEXT:    fldl (%esp)580; X86-SSE3-LIN-NEXT:    fisttpll (%esp)581; X86-SSE3-LIN-NEXT:    setbe %al582; X86-SSE3-LIN-NEXT:    movzbl %al, %edx583; X86-SSE3-LIN-NEXT:    shll $31, %edx584; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx585; X86-SSE3-LIN-NEXT:    movl (%esp), %eax586; X86-SSE3-LIN-NEXT:    addl $12, %esp587; X86-SSE3-LIN-NEXT:    retl588;589; X64-SSE-WIN-LABEL: d_to_u64:590; X64-SSE-WIN:       # %bb.0:591; X64-SSE-WIN-NEXT:    cvttsd2si %xmm0, %rcx592; X64-SSE-WIN-NEXT:    movq %rcx, %rdx593; X64-SSE-WIN-NEXT:    sarq $63, %rdx594; X64-SSE-WIN-NEXT:    subsd __real@43e0000000000000(%rip), %xmm0595; X64-SSE-WIN-NEXT:    cvttsd2si %xmm0, %rax596; X64-SSE-WIN-NEXT:    andq %rdx, %rax597; X64-SSE-WIN-NEXT:    orq %rcx, %rax598; X64-SSE-WIN-NEXT:    retq599;600; X64-SSE-LIN-LABEL: d_to_u64:601; X64-SSE-LIN:       # %bb.0:602; X64-SSE-LIN-NEXT:    cvttsd2si %xmm0, %rcx603; X64-SSE-LIN-NEXT:    movq %rcx, %rdx604; X64-SSE-LIN-NEXT:    sarq $63, %rdx605; X64-SSE-LIN-NEXT:    subsd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0606; X64-SSE-LIN-NEXT:    cvttsd2si %xmm0, %rax607; X64-SSE-LIN-NEXT:    andq %rdx, %rax608; X64-SSE-LIN-NEXT:    orq %rcx, %rax609; X64-SSE-LIN-NEXT:    retq610;611; X86-SSE2-WIN-LABEL: d_to_u64:612; X86-SSE2-WIN:       # %bb.0:613; X86-SSE2-WIN-NEXT:    pushl %ebp614; X86-SSE2-WIN-NEXT:    movl %esp, %ebp615; X86-SSE2-WIN-NEXT:    andl $-8, %esp616; X86-SSE2-WIN-NEXT:    subl $16, %esp617; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero618; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]619; X86-SSE2-WIN-NEXT:    ucomisd %xmm0, %xmm1620; X86-SSE2-WIN-NEXT:    jbe LBB2_2621; X86-SSE2-WIN-NEXT:  # %bb.1:622; X86-SSE2-WIN-NEXT:    xorpd %xmm1, %xmm1623; X86-SSE2-WIN-NEXT:  LBB2_2:624; X86-SSE2-WIN-NEXT:    subsd %xmm1, %xmm0625; X86-SSE2-WIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)626; X86-SSE2-WIN-NEXT:    setbe %al627; X86-SSE2-WIN-NEXT:    fldl {{[0-9]+}}(%esp)628; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)629; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx630; X86-SSE2-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00631; X86-SSE2-WIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)632; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)633; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)634; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)635; X86-SSE2-WIN-NEXT:    movzbl %al, %edx636; X86-SSE2-WIN-NEXT:    shll $31, %edx637; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx638; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax639; X86-SSE2-WIN-NEXT:    movl %ebp, %esp640; X86-SSE2-WIN-NEXT:    popl %ebp641; X86-SSE2-WIN-NEXT:    retl642;643; X86-SSE2-LIN-LABEL: d_to_u64:644; X86-SSE2-LIN:       # %bb.0:645; X86-SSE2-LIN-NEXT:    subl $20, %esp646; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero647; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm1 = [9.2233720368547758E+18,0.0E+0]648; X86-SSE2-LIN-NEXT:    ucomisd %xmm0, %xmm1649; X86-SSE2-LIN-NEXT:    jbe .LBB2_2650; X86-SSE2-LIN-NEXT:  # %bb.1:651; X86-SSE2-LIN-NEXT:    xorpd %xmm1, %xmm1652; X86-SSE2-LIN-NEXT:  .LBB2_2:653; X86-SSE2-LIN-NEXT:    subsd %xmm1, %xmm0654; X86-SSE2-LIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)655; X86-SSE2-LIN-NEXT:    setbe %al656; X86-SSE2-LIN-NEXT:    fldl {{[0-9]+}}(%esp)657; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)658; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx659; X86-SSE2-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00660; X86-SSE2-LIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)661; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)662; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)663; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)664; X86-SSE2-LIN-NEXT:    movzbl %al, %edx665; X86-SSE2-LIN-NEXT:    shll $31, %edx666; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx667; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax668; X86-SSE2-LIN-NEXT:    addl $20, %esp669; X86-SSE2-LIN-NEXT:    retl670;671; X87-WIN-LABEL: d_to_u64:672; X87-WIN:       # %bb.0:673; X87-WIN-NEXT:    pushl %ebp674; X87-WIN-NEXT:    movl %esp, %ebp675; X87-WIN-NEXT:    andl $-8, %esp676; X87-WIN-NEXT:    subl $16, %esp677; X87-WIN-NEXT:    fldl 8(%ebp)678; X87-WIN-NEXT:    flds __real@5f000000679; X87-WIN-NEXT:    fucom %st(1)680; X87-WIN-NEXT:    fnstsw %ax681; X87-WIN-NEXT:    xorl %edx, %edx682; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax683; X87-WIN-NEXT:    sahf684; X87-WIN-NEXT:    setbe %al685; X87-WIN-NEXT:    fldz686; X87-WIN-NEXT:    jbe LBB2_2687; X87-WIN-NEXT:  # %bb.1:688; X87-WIN-NEXT:    fstp %st(1)689; X87-WIN-NEXT:    fldz690; X87-WIN-NEXT:  LBB2_2:691; X87-WIN-NEXT:    fstp %st(0)692; X87-WIN-NEXT:    fsubrp %st, %st(1)693; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)694; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx695; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC00696; X87-WIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)697; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)698; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)699; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)700; X87-WIN-NEXT:    movb %al, %dl701; X87-WIN-NEXT:    shll $31, %edx702; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx703; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax704; X87-WIN-NEXT:    movl %ebp, %esp705; X87-WIN-NEXT:    popl %ebp706; X87-WIN-NEXT:    retl707;708; X87-LIN-LABEL: d_to_u64:709; X87-LIN:       # %bb.0:710; X87-LIN-NEXT:    subl $20, %esp711; X87-LIN-NEXT:    fldl {{[0-9]+}}(%esp)712; X87-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}713; X87-LIN-NEXT:    fucom %st(1)714; X87-LIN-NEXT:    fnstsw %ax715; X87-LIN-NEXT:    xorl %edx, %edx716; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax717; X87-LIN-NEXT:    sahf718; X87-LIN-NEXT:    setbe %al719; X87-LIN-NEXT:    fldz720; X87-LIN-NEXT:    jbe .LBB2_2721; X87-LIN-NEXT:  # %bb.1:722; X87-LIN-NEXT:    fstp %st(1)723; X87-LIN-NEXT:    fldz724; X87-LIN-NEXT:  .LBB2_2:725; X87-LIN-NEXT:    fstp %st(0)726; X87-LIN-NEXT:    fsubrp %st, %st(1)727; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)728; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx729; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC00730; X87-LIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)731; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)732; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)733; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)734; X87-LIN-NEXT:    movb %al, %dl735; X87-LIN-NEXT:    shll $31, %edx736; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx737; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax738; X87-LIN-NEXT:    addl $20, %esp739; X87-LIN-NEXT:    retl740  %r = fptoui double %a to i64741  ret i64 %r742}743 744define i64 @d_to_s64(double %a) nounwind {745; X86-AVX512DQVL-LABEL: d_to_s64:746; X86-AVX512DQVL:       # %bb.0:747; X86-AVX512DQVL-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero748; X86-AVX512DQVL-NEXT:    vcvttpd2qq %xmm0, %xmm0749; X86-AVX512DQVL-NEXT:    vmovd %xmm0, %eax750; X86-AVX512DQVL-NEXT:    vpextrd $1, %xmm0, %edx751; X86-AVX512DQVL-NEXT:    retl752;753; X64-AVX512-LABEL: d_to_s64:754; X64-AVX512:       # %bb.0:755; X64-AVX512-NEXT:    vcvttsd2si %xmm0, %rax756; X64-AVX512-NEXT:    retq757;758; X86-AVX512DQ-LABEL: d_to_s64:759; X86-AVX512DQ:       # %bb.0:760; X86-AVX512DQ-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero761; X86-AVX512DQ-NEXT:    vcvttpd2qq %zmm0, %zmm0762; X86-AVX512DQ-NEXT:    vmovd %xmm0, %eax763; X86-AVX512DQ-NEXT:    vpextrd $1, %xmm0, %edx764; X86-AVX512DQ-NEXT:    vzeroupper765; X86-AVX512DQ-NEXT:    retl766;767; X86-AVX512F-WIN-LABEL: d_to_s64:768; X86-AVX512F-WIN:       # %bb.0:769; X86-AVX512F-WIN-NEXT:    pushl %ebp770; X86-AVX512F-WIN-NEXT:    movl %esp, %ebp771; X86-AVX512F-WIN-NEXT:    andl $-8, %esp772; X86-AVX512F-WIN-NEXT:    subl $8, %esp773; X86-AVX512F-WIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero774; X86-AVX512F-WIN-NEXT:    vmovsd %xmm0, (%esp)775; X86-AVX512F-WIN-NEXT:    fldl (%esp)776; X86-AVX512F-WIN-NEXT:    fisttpll (%esp)777; X86-AVX512F-WIN-NEXT:    movl (%esp), %eax778; X86-AVX512F-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx779; X86-AVX512F-WIN-NEXT:    movl %ebp, %esp780; X86-AVX512F-WIN-NEXT:    popl %ebp781; X86-AVX512F-WIN-NEXT:    retl782;783; X86-AVX512F-LIN-LABEL: d_to_s64:784; X86-AVX512F-LIN:       # %bb.0:785; X86-AVX512F-LIN-NEXT:    subl $12, %esp786; X86-AVX512F-LIN-NEXT:    vmovsd {{.*#+}} xmm0 = mem[0],zero787; X86-AVX512F-LIN-NEXT:    vmovsd %xmm0, (%esp)788; X86-AVX512F-LIN-NEXT:    fldl (%esp)789; X86-AVX512F-LIN-NEXT:    fisttpll (%esp)790; X86-AVX512F-LIN-NEXT:    movl (%esp), %eax791; X86-AVX512F-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx792; X86-AVX512F-LIN-NEXT:    addl $12, %esp793; X86-AVX512F-LIN-NEXT:    retl794;795; X86-SSE3-WIN-LABEL: d_to_s64:796; X86-SSE3-WIN:       # %bb.0:797; X86-SSE3-WIN-NEXT:    pushl %ebp798; X86-SSE3-WIN-NEXT:    movl %esp, %ebp799; X86-SSE3-WIN-NEXT:    andl $-8, %esp800; X86-SSE3-WIN-NEXT:    subl $8, %esp801; X86-SSE3-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero802; X86-SSE3-WIN-NEXT:    movsd %xmm0, (%esp)803; X86-SSE3-WIN-NEXT:    fldl (%esp)804; X86-SSE3-WIN-NEXT:    fisttpll (%esp)805; X86-SSE3-WIN-NEXT:    movl (%esp), %eax806; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx807; X86-SSE3-WIN-NEXT:    movl %ebp, %esp808; X86-SSE3-WIN-NEXT:    popl %ebp809; X86-SSE3-WIN-NEXT:    retl810;811; X86-SSE3-LIN-LABEL: d_to_s64:812; X86-SSE3-LIN:       # %bb.0:813; X86-SSE3-LIN-NEXT:    subl $12, %esp814; X86-SSE3-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero815; X86-SSE3-LIN-NEXT:    movsd %xmm0, (%esp)816; X86-SSE3-LIN-NEXT:    fldl (%esp)817; X86-SSE3-LIN-NEXT:    fisttpll (%esp)818; X86-SSE3-LIN-NEXT:    movl (%esp), %eax819; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx820; X86-SSE3-LIN-NEXT:    addl $12, %esp821; X86-SSE3-LIN-NEXT:    retl822;823; X64-SSE-LABEL: d_to_s64:824; X64-SSE:       # %bb.0:825; X64-SSE-NEXT:    cvttsd2si %xmm0, %rax826; X64-SSE-NEXT:    retq827;828; X86-SSE2-WIN-LABEL: d_to_s64:829; X86-SSE2-WIN:       # %bb.0:830; X86-SSE2-WIN-NEXT:    pushl %ebp831; X86-SSE2-WIN-NEXT:    movl %esp, %ebp832; X86-SSE2-WIN-NEXT:    andl $-8, %esp833; X86-SSE2-WIN-NEXT:    subl $16, %esp834; X86-SSE2-WIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero835; X86-SSE2-WIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)836; X86-SSE2-WIN-NEXT:    fldl {{[0-9]+}}(%esp)837; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)838; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax839; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC00840; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)841; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)842; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)843; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)844; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax845; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx846; X86-SSE2-WIN-NEXT:    movl %ebp, %esp847; X86-SSE2-WIN-NEXT:    popl %ebp848; X86-SSE2-WIN-NEXT:    retl849;850; X86-SSE2-LIN-LABEL: d_to_s64:851; X86-SSE2-LIN:       # %bb.0:852; X86-SSE2-LIN-NEXT:    subl $20, %esp853; X86-SSE2-LIN-NEXT:    movsd {{.*#+}} xmm0 = mem[0],zero854; X86-SSE2-LIN-NEXT:    movsd %xmm0, {{[0-9]+}}(%esp)855; X86-SSE2-LIN-NEXT:    fldl {{[0-9]+}}(%esp)856; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)857; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax858; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC00859; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)860; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)861; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)862; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)863; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax864; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx865; X86-SSE2-LIN-NEXT:    addl $20, %esp866; X86-SSE2-LIN-NEXT:    retl867;868; X87-WIN-LABEL: d_to_s64:869; X87-WIN:       # %bb.0:870; X87-WIN-NEXT:    pushl %ebp871; X87-WIN-NEXT:    movl %esp, %ebp872; X87-WIN-NEXT:    andl $-8, %esp873; X87-WIN-NEXT:    subl $16, %esp874; X87-WIN-NEXT:    fldl 8(%ebp)875; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)876; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax877; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC00878; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)879; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)880; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)881; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)882; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax883; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx884; X87-WIN-NEXT:    movl %ebp, %esp885; X87-WIN-NEXT:    popl %ebp886; X87-WIN-NEXT:    retl887;888; X87-LIN-LABEL: d_to_s64:889; X87-LIN:       # %bb.0:890; X87-LIN-NEXT:    subl $20, %esp891; X87-LIN-NEXT:    fldl {{[0-9]+}}(%esp)892; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)893; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax894; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC00895; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)896; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)897; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)898; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)899; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax900; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx901; X87-LIN-NEXT:    addl $20, %esp902; X87-LIN-NEXT:    retl903  %r = fptosi double %a to i64904  ret i64 %r905}906 907define i64 @x_to_u64(x86_fp80 %a) nounwind {908; X86-AVX512-WIN-LABEL: x_to_u64:909; X86-AVX512-WIN:       # %bb.0:910; X86-AVX512-WIN-NEXT:    pushl %ebp911; X86-AVX512-WIN-NEXT:    movl %esp, %ebp912; X86-AVX512-WIN-NEXT:    andl $-16, %esp913; X86-AVX512-WIN-NEXT:    subl $16, %esp914; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)915; X86-AVX512-WIN-NEXT:    flds __real@5f000000916; X86-AVX512-WIN-NEXT:    xorl %edx, %edx917; X86-AVX512-WIN-NEXT:    fucomi %st(1), %st918; X86-AVX512-WIN-NEXT:    fldz919; X86-AVX512-WIN-NEXT:    fcmovbe %st(1), %st920; X86-AVX512-WIN-NEXT:    fstp %st(1)921; X86-AVX512-WIN-NEXT:    fsubrp %st, %st(1)922; X86-AVX512-WIN-NEXT:    fisttpll (%esp)923; X86-AVX512-WIN-NEXT:    setbe %dl924; X86-AVX512-WIN-NEXT:    shll $31, %edx925; X86-AVX512-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx926; X86-AVX512-WIN-NEXT:    movl (%esp), %eax927; X86-AVX512-WIN-NEXT:    movl %ebp, %esp928; X86-AVX512-WIN-NEXT:    popl %ebp929; X86-AVX512-WIN-NEXT:    retl930;931; X86-AVX512-LIN-LABEL: x_to_u64:932; X86-AVX512-LIN:       # %bb.0:933; X86-AVX512-LIN-NEXT:    subl $12, %esp934; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)935; X86-AVX512-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}936; X86-AVX512-LIN-NEXT:    xorl %edx, %edx937; X86-AVX512-LIN-NEXT:    fucomi %st(1), %st938; X86-AVX512-LIN-NEXT:    fldz939; X86-AVX512-LIN-NEXT:    fcmovbe %st(1), %st940; X86-AVX512-LIN-NEXT:    fstp %st(1)941; X86-AVX512-LIN-NEXT:    fsubrp %st, %st(1)942; X86-AVX512-LIN-NEXT:    fisttpll (%esp)943; X86-AVX512-LIN-NEXT:    setbe %dl944; X86-AVX512-LIN-NEXT:    shll $31, %edx945; X86-AVX512-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx946; X86-AVX512-LIN-NEXT:    movl (%esp), %eax947; X86-AVX512-LIN-NEXT:    addl $12, %esp948; X86-AVX512-LIN-NEXT:    retl949;950; X64-AVX512-WIN-LABEL: x_to_u64:951; X64-AVX512-WIN:       # %bb.0:952; X64-AVX512-WIN-NEXT:    pushq %rax953; X64-AVX512-WIN-NEXT:    fldt (%rcx)954; X64-AVX512-WIN-NEXT:    flds __real@5f000000(%rip)955; X64-AVX512-WIN-NEXT:    xorl %eax, %eax956; X64-AVX512-WIN-NEXT:    fucomi %st(1), %st957; X64-AVX512-WIN-NEXT:    fldz958; X64-AVX512-WIN-NEXT:    fcmovbe %st(1), %st959; X64-AVX512-WIN-NEXT:    fstp %st(1)960; X64-AVX512-WIN-NEXT:    fsubrp %st, %st(1)961; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)962; X64-AVX512-WIN-NEXT:    setbe %al963; X64-AVX512-WIN-NEXT:    shlq $63, %rax964; X64-AVX512-WIN-NEXT:    xorq (%rsp), %rax965; X64-AVX512-WIN-NEXT:    popq %rcx966; X64-AVX512-WIN-NEXT:    retq967;968; X64-AVX512-LIN-LABEL: x_to_u64:969; X64-AVX512-LIN:       # %bb.0:970; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)971; X64-AVX512-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)972; X64-AVX512-LIN-NEXT:    xorl %eax, %eax973; X64-AVX512-LIN-NEXT:    fucomi %st(1), %st974; X64-AVX512-LIN-NEXT:    fldz975; X64-AVX512-LIN-NEXT:    fcmovbe %st(1), %st976; X64-AVX512-LIN-NEXT:    fstp %st(1)977; X64-AVX512-LIN-NEXT:    fsubrp %st, %st(1)978; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)979; X64-AVX512-LIN-NEXT:    setbe %al980; X64-AVX512-LIN-NEXT:    shlq $63, %rax981; X64-AVX512-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax982; X64-AVX512-LIN-NEXT:    retq983;984; X86-SSE3-WIN-LABEL: x_to_u64:985; X86-SSE3-WIN:       # %bb.0:986; X86-SSE3-WIN-NEXT:    pushl %ebp987; X86-SSE3-WIN-NEXT:    movl %esp, %ebp988; X86-SSE3-WIN-NEXT:    andl $-16, %esp989; X86-SSE3-WIN-NEXT:    subl $16, %esp990; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)991; X86-SSE3-WIN-NEXT:    flds __real@5f000000992; X86-SSE3-WIN-NEXT:    xorl %edx, %edx993; X86-SSE3-WIN-NEXT:    fucomi %st(1), %st994; X86-SSE3-WIN-NEXT:    fldz995; X86-SSE3-WIN-NEXT:    fcmovbe %st(1), %st996; X86-SSE3-WIN-NEXT:    fstp %st(1)997; X86-SSE3-WIN-NEXT:    fsubrp %st, %st(1)998; X86-SSE3-WIN-NEXT:    fisttpll (%esp)999; X86-SSE3-WIN-NEXT:    setbe %dl1000; X86-SSE3-WIN-NEXT:    shll $31, %edx1001; X86-SSE3-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1002; X86-SSE3-WIN-NEXT:    movl (%esp), %eax1003; X86-SSE3-WIN-NEXT:    movl %ebp, %esp1004; X86-SSE3-WIN-NEXT:    popl %ebp1005; X86-SSE3-WIN-NEXT:    retl1006;1007; X86-SSE3-LIN-LABEL: x_to_u64:1008; X86-SSE3-LIN:       # %bb.0:1009; X86-SSE3-LIN-NEXT:    subl $12, %esp1010; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1011; X86-SSE3-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1012; X86-SSE3-LIN-NEXT:    xorl %edx, %edx1013; X86-SSE3-LIN-NEXT:    fucomi %st(1), %st1014; X86-SSE3-LIN-NEXT:    fldz1015; X86-SSE3-LIN-NEXT:    fcmovbe %st(1), %st1016; X86-SSE3-LIN-NEXT:    fstp %st(1)1017; X86-SSE3-LIN-NEXT:    fsubrp %st, %st(1)1018; X86-SSE3-LIN-NEXT:    fisttpll (%esp)1019; X86-SSE3-LIN-NEXT:    setbe %dl1020; X86-SSE3-LIN-NEXT:    shll $31, %edx1021; X86-SSE3-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1022; X86-SSE3-LIN-NEXT:    movl (%esp), %eax1023; X86-SSE3-LIN-NEXT:    addl $12, %esp1024; X86-SSE3-LIN-NEXT:    retl1025;1026; X64-SSE3-WIN-LABEL: x_to_u64:1027; X64-SSE3-WIN:       # %bb.0:1028; X64-SSE3-WIN-NEXT:    pushq %rax1029; X64-SSE3-WIN-NEXT:    fldt (%rcx)1030; X64-SSE3-WIN-NEXT:    flds __real@5f000000(%rip)1031; X64-SSE3-WIN-NEXT:    xorl %eax, %eax1032; X64-SSE3-WIN-NEXT:    fucomi %st(1), %st1033; X64-SSE3-WIN-NEXT:    fldz1034; X64-SSE3-WIN-NEXT:    fcmovbe %st(1), %st1035; X64-SSE3-WIN-NEXT:    fstp %st(1)1036; X64-SSE3-WIN-NEXT:    fsubrp %st, %st(1)1037; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)1038; X64-SSE3-WIN-NEXT:    setbe %al1039; X64-SSE3-WIN-NEXT:    shlq $63, %rax1040; X64-SSE3-WIN-NEXT:    xorq (%rsp), %rax1041; X64-SSE3-WIN-NEXT:    popq %rcx1042; X64-SSE3-WIN-NEXT:    retq1043;1044; X64-SSE3-LIN-LABEL: x_to_u64:1045; X64-SSE3-LIN:       # %bb.0:1046; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)1047; X64-SSE3-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)1048; X64-SSE3-LIN-NEXT:    xorl %eax, %eax1049; X64-SSE3-LIN-NEXT:    fucomi %st(1), %st1050; X64-SSE3-LIN-NEXT:    fldz1051; X64-SSE3-LIN-NEXT:    fcmovbe %st(1), %st1052; X64-SSE3-LIN-NEXT:    fstp %st(1)1053; X64-SSE3-LIN-NEXT:    fsubrp %st, %st(1)1054; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)1055; X64-SSE3-LIN-NEXT:    setbe %al1056; X64-SSE3-LIN-NEXT:    shlq $63, %rax1057; X64-SSE3-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax1058; X64-SSE3-LIN-NEXT:    retq1059;1060; X86-SSE2-WIN-LABEL: x_to_u64:1061; X86-SSE2-WIN:       # %bb.0:1062; X86-SSE2-WIN-NEXT:    pushl %ebp1063; X86-SSE2-WIN-NEXT:    movl %esp, %ebp1064; X86-SSE2-WIN-NEXT:    andl $-16, %esp1065; X86-SSE2-WIN-NEXT:    subl $32, %esp1066; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)1067; X86-SSE2-WIN-NEXT:    flds __real@5f0000001068; X86-SSE2-WIN-NEXT:    xorl %edx, %edx1069; X86-SSE2-WIN-NEXT:    fucomi %st(1), %st1070; X86-SSE2-WIN-NEXT:    setbe %dl1071; X86-SSE2-WIN-NEXT:    fldz1072; X86-SSE2-WIN-NEXT:    fcmovbe %st(1), %st1073; X86-SSE2-WIN-NEXT:    fstp %st(1)1074; X86-SSE2-WIN-NEXT:    fsubrp %st, %st(1)1075; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1076; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1077; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC001078; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1079; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1080; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)1081; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1082; X86-SSE2-WIN-NEXT:    shll $31, %edx1083; X86-SSE2-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1084; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1085; X86-SSE2-WIN-NEXT:    movl %ebp, %esp1086; X86-SSE2-WIN-NEXT:    popl %ebp1087; X86-SSE2-WIN-NEXT:    retl1088;1089; X86-SSE2-LIN-LABEL: x_to_u64:1090; X86-SSE2-LIN:       # %bb.0:1091; X86-SSE2-LIN-NEXT:    subl $20, %esp1092; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1093; X86-SSE2-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1094; X86-SSE2-LIN-NEXT:    xorl %edx, %edx1095; X86-SSE2-LIN-NEXT:    fucomi %st(1), %st1096; X86-SSE2-LIN-NEXT:    setbe %dl1097; X86-SSE2-LIN-NEXT:    fldz1098; X86-SSE2-LIN-NEXT:    fcmovbe %st(1), %st1099; X86-SSE2-LIN-NEXT:    fstp %st(1)1100; X86-SSE2-LIN-NEXT:    fsubrp %st, %st(1)1101; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1102; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1103; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC001104; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1105; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1106; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)1107; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1108; X86-SSE2-LIN-NEXT:    shll $31, %edx1109; X86-SSE2-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1110; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1111; X86-SSE2-LIN-NEXT:    addl $20, %esp1112; X86-SSE2-LIN-NEXT:    retl1113;1114; X64-SSE2-WIN-LABEL: x_to_u64:1115; X64-SSE2-WIN:       # %bb.0:1116; X64-SSE2-WIN-NEXT:    subq $16, %rsp1117; X64-SSE2-WIN-NEXT:    fldt (%rcx)1118; X64-SSE2-WIN-NEXT:    flds __real@5f000000(%rip)1119; X64-SSE2-WIN-NEXT:    xorl %eax, %eax1120; X64-SSE2-WIN-NEXT:    fucomi %st(1), %st1121; X64-SSE2-WIN-NEXT:    setbe %al1122; X64-SSE2-WIN-NEXT:    fldz1123; X64-SSE2-WIN-NEXT:    fcmovbe %st(1), %st1124; X64-SSE2-WIN-NEXT:    fstp %st(1)1125; X64-SSE2-WIN-NEXT:    fsubrp %st, %st(1)1126; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)1127; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %ecx1128; X64-SSE2-WIN-NEXT:    orl $3072, %ecx # imm = 0xC001129; X64-SSE2-WIN-NEXT:    movw %cx, {{[0-9]+}}(%rsp)1130; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)1131; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)1132; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)1133; X64-SSE2-WIN-NEXT:    shlq $63, %rax1134; X64-SSE2-WIN-NEXT:    xorq {{[0-9]+}}(%rsp), %rax1135; X64-SSE2-WIN-NEXT:    addq $16, %rsp1136; X64-SSE2-WIN-NEXT:    retq1137;1138; X64-SSE2-LIN-LABEL: x_to_u64:1139; X64-SSE2-LIN:       # %bb.0:1140; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)1141; X64-SSE2-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)1142; X64-SSE2-LIN-NEXT:    xorl %eax, %eax1143; X64-SSE2-LIN-NEXT:    fucomi %st(1), %st1144; X64-SSE2-LIN-NEXT:    setbe %al1145; X64-SSE2-LIN-NEXT:    fldz1146; X64-SSE2-LIN-NEXT:    fcmovbe %st(1), %st1147; X64-SSE2-LIN-NEXT:    fstp %st(1)1148; X64-SSE2-LIN-NEXT:    fsubrp %st, %st(1)1149; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)1150; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %ecx1151; X64-SSE2-LIN-NEXT:    orl $3072, %ecx # imm = 0xC001152; X64-SSE2-LIN-NEXT:    movw %cx, -{{[0-9]+}}(%rsp)1153; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)1154; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)1155; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)1156; X64-SSE2-LIN-NEXT:    shlq $63, %rax1157; X64-SSE2-LIN-NEXT:    xorq -{{[0-9]+}}(%rsp), %rax1158; X64-SSE2-LIN-NEXT:    retq1159;1160; X87-WIN-LABEL: x_to_u64:1161; X87-WIN:       # %bb.0:1162; X87-WIN-NEXT:    pushl %ebp1163; X87-WIN-NEXT:    movl %esp, %ebp1164; X87-WIN-NEXT:    andl $-16, %esp1165; X87-WIN-NEXT:    subl $32, %esp1166; X87-WIN-NEXT:    fldt 8(%ebp)1167; X87-WIN-NEXT:    flds __real@5f0000001168; X87-WIN-NEXT:    fucom %st(1)1169; X87-WIN-NEXT:    fnstsw %ax1170; X87-WIN-NEXT:    xorl %edx, %edx1171; X87-WIN-NEXT:    # kill: def $ah killed $ah killed $ax1172; X87-WIN-NEXT:    sahf1173; X87-WIN-NEXT:    setbe %al1174; X87-WIN-NEXT:    fldz1175; X87-WIN-NEXT:    jbe LBB4_21176; X87-WIN-NEXT:  # %bb.1:1177; X87-WIN-NEXT:    fstp %st(1)1178; X87-WIN-NEXT:    fldz1179; X87-WIN-NEXT:  LBB4_2:1180; X87-WIN-NEXT:    fstp %st(0)1181; X87-WIN-NEXT:    fsubrp %st, %st(1)1182; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1183; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx1184; X87-WIN-NEXT:    orl $3072, %ecx # imm = 0xC001185; X87-WIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)1186; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1187; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)1188; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1189; X87-WIN-NEXT:    movb %al, %dl1190; X87-WIN-NEXT:    shll $31, %edx1191; X87-WIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1192; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1193; X87-WIN-NEXT:    movl %ebp, %esp1194; X87-WIN-NEXT:    popl %ebp1195; X87-WIN-NEXT:    retl1196;1197; X87-LIN-LABEL: x_to_u64:1198; X87-LIN:       # %bb.0:1199; X87-LIN-NEXT:    subl $20, %esp1200; X87-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1201; X87-LIN-NEXT:    flds {{\.?LCPI[0-9]+_[0-9]+}}1202; X87-LIN-NEXT:    fucom %st(1)1203; X87-LIN-NEXT:    fnstsw %ax1204; X87-LIN-NEXT:    xorl %edx, %edx1205; X87-LIN-NEXT:    # kill: def $ah killed $ah killed $ax1206; X87-LIN-NEXT:    sahf1207; X87-LIN-NEXT:    setbe %al1208; X87-LIN-NEXT:    fldz1209; X87-LIN-NEXT:    jbe .LBB4_21210; X87-LIN-NEXT:  # %bb.1:1211; X87-LIN-NEXT:    fstp %st(1)1212; X87-LIN-NEXT:    fldz1213; X87-LIN-NEXT:  .LBB4_2:1214; X87-LIN-NEXT:    fstp %st(0)1215; X87-LIN-NEXT:    fsubrp %st, %st(1)1216; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1217; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %ecx1218; X87-LIN-NEXT:    orl $3072, %ecx # imm = 0xC001219; X87-LIN-NEXT:    movw %cx, {{[0-9]+}}(%esp)1220; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1221; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)1222; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1223; X87-LIN-NEXT:    movb %al, %dl1224; X87-LIN-NEXT:    shll $31, %edx1225; X87-LIN-NEXT:    xorl {{[0-9]+}}(%esp), %edx1226; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1227; X87-LIN-NEXT:    addl $20, %esp1228; X87-LIN-NEXT:    retl1229  %r = fptoui x86_fp80 %a to i641230  ret i64 %r1231}1232 1233define i64 @x_to_s64(x86_fp80 %a) nounwind {1234; X86-AVX512-WIN-LABEL: x_to_s64:1235; X86-AVX512-WIN:       # %bb.0:1236; X86-AVX512-WIN-NEXT:    pushl %ebp1237; X86-AVX512-WIN-NEXT:    movl %esp, %ebp1238; X86-AVX512-WIN-NEXT:    andl $-16, %esp1239; X86-AVX512-WIN-NEXT:    subl $16, %esp1240; X86-AVX512-WIN-NEXT:    fldt 8(%ebp)1241; X86-AVX512-WIN-NEXT:    fisttpll (%esp)1242; X86-AVX512-WIN-NEXT:    movl (%esp), %eax1243; X86-AVX512-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1244; X86-AVX512-WIN-NEXT:    movl %ebp, %esp1245; X86-AVX512-WIN-NEXT:    popl %ebp1246; X86-AVX512-WIN-NEXT:    retl1247;1248; X86-AVX512-LIN-LABEL: x_to_s64:1249; X86-AVX512-LIN:       # %bb.0:1250; X86-AVX512-LIN-NEXT:    subl $12, %esp1251; X86-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1252; X86-AVX512-LIN-NEXT:    fisttpll (%esp)1253; X86-AVX512-LIN-NEXT:    movl (%esp), %eax1254; X86-AVX512-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1255; X86-AVX512-LIN-NEXT:    addl $12, %esp1256; X86-AVX512-LIN-NEXT:    retl1257;1258; X64-AVX512-WIN-LABEL: x_to_s64:1259; X64-AVX512-WIN:       # %bb.0:1260; X64-AVX512-WIN-NEXT:    pushq %rax1261; X64-AVX512-WIN-NEXT:    fldt (%rcx)1262; X64-AVX512-WIN-NEXT:    fisttpll (%rsp)1263; X64-AVX512-WIN-NEXT:    movq (%rsp), %rax1264; X64-AVX512-WIN-NEXT:    popq %rcx1265; X64-AVX512-WIN-NEXT:    retq1266;1267; X64-AVX512-LIN-LABEL: x_to_s64:1268; X64-AVX512-LIN:       # %bb.0:1269; X64-AVX512-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)1270; X64-AVX512-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)1271; X64-AVX512-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax1272; X64-AVX512-LIN-NEXT:    retq1273;1274; X86-SSE3-WIN-LABEL: x_to_s64:1275; X86-SSE3-WIN:       # %bb.0:1276; X86-SSE3-WIN-NEXT:    pushl %ebp1277; X86-SSE3-WIN-NEXT:    movl %esp, %ebp1278; X86-SSE3-WIN-NEXT:    andl $-16, %esp1279; X86-SSE3-WIN-NEXT:    subl $16, %esp1280; X86-SSE3-WIN-NEXT:    fldt 8(%ebp)1281; X86-SSE3-WIN-NEXT:    fisttpll (%esp)1282; X86-SSE3-WIN-NEXT:    movl (%esp), %eax1283; X86-SSE3-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1284; X86-SSE3-WIN-NEXT:    movl %ebp, %esp1285; X86-SSE3-WIN-NEXT:    popl %ebp1286; X86-SSE3-WIN-NEXT:    retl1287;1288; X86-SSE3-LIN-LABEL: x_to_s64:1289; X86-SSE3-LIN:       # %bb.0:1290; X86-SSE3-LIN-NEXT:    subl $12, %esp1291; X86-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1292; X86-SSE3-LIN-NEXT:    fisttpll (%esp)1293; X86-SSE3-LIN-NEXT:    movl (%esp), %eax1294; X86-SSE3-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1295; X86-SSE3-LIN-NEXT:    addl $12, %esp1296; X86-SSE3-LIN-NEXT:    retl1297;1298; X64-SSE3-WIN-LABEL: x_to_s64:1299; X64-SSE3-WIN:       # %bb.0:1300; X64-SSE3-WIN-NEXT:    pushq %rax1301; X64-SSE3-WIN-NEXT:    fldt (%rcx)1302; X64-SSE3-WIN-NEXT:    fisttpll (%rsp)1303; X64-SSE3-WIN-NEXT:    movq (%rsp), %rax1304; X64-SSE3-WIN-NEXT:    popq %rcx1305; X64-SSE3-WIN-NEXT:    retq1306;1307; X64-SSE3-LIN-LABEL: x_to_s64:1308; X64-SSE3-LIN:       # %bb.0:1309; X64-SSE3-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)1310; X64-SSE3-LIN-NEXT:    fisttpll -{{[0-9]+}}(%rsp)1311; X64-SSE3-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax1312; X64-SSE3-LIN-NEXT:    retq1313;1314; X86-SSE2-WIN-LABEL: x_to_s64:1315; X86-SSE2-WIN:       # %bb.0:1316; X86-SSE2-WIN-NEXT:    pushl %ebp1317; X86-SSE2-WIN-NEXT:    movl %esp, %ebp1318; X86-SSE2-WIN-NEXT:    andl $-16, %esp1319; X86-SSE2-WIN-NEXT:    subl $32, %esp1320; X86-SSE2-WIN-NEXT:    fldt 8(%ebp)1321; X86-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1322; X86-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1323; X86-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC001324; X86-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1325; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1326; X86-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)1327; X86-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1328; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1329; X86-SSE2-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1330; X86-SSE2-WIN-NEXT:    movl %ebp, %esp1331; X86-SSE2-WIN-NEXT:    popl %ebp1332; X86-SSE2-WIN-NEXT:    retl1333;1334; X86-SSE2-LIN-LABEL: x_to_s64:1335; X86-SSE2-LIN:       # %bb.0:1336; X86-SSE2-LIN-NEXT:    subl $20, %esp1337; X86-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1338; X86-SSE2-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1339; X86-SSE2-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1340; X86-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC001341; X86-SSE2-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1342; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1343; X86-SSE2-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)1344; X86-SSE2-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1345; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1346; X86-SSE2-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1347; X86-SSE2-LIN-NEXT:    addl $20, %esp1348; X86-SSE2-LIN-NEXT:    retl1349;1350; X64-SSE2-WIN-LABEL: x_to_s64:1351; X64-SSE2-WIN:       # %bb.0:1352; X64-SSE2-WIN-NEXT:    subq $16, %rsp1353; X64-SSE2-WIN-NEXT:    fldt (%rcx)1354; X64-SSE2-WIN-NEXT:    fnstcw {{[0-9]+}}(%rsp)1355; X64-SSE2-WIN-NEXT:    movzwl {{[0-9]+}}(%rsp), %eax1356; X64-SSE2-WIN-NEXT:    orl $3072, %eax # imm = 0xC001357; X64-SSE2-WIN-NEXT:    movw %ax, {{[0-9]+}}(%rsp)1358; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)1359; X64-SSE2-WIN-NEXT:    fistpll {{[0-9]+}}(%rsp)1360; X64-SSE2-WIN-NEXT:    fldcw {{[0-9]+}}(%rsp)1361; X64-SSE2-WIN-NEXT:    movq {{[0-9]+}}(%rsp), %rax1362; X64-SSE2-WIN-NEXT:    addq $16, %rsp1363; X64-SSE2-WIN-NEXT:    retq1364;1365; X64-SSE2-LIN-LABEL: x_to_s64:1366; X64-SSE2-LIN:       # %bb.0:1367; X64-SSE2-LIN-NEXT:    fldt {{[0-9]+}}(%rsp)1368; X64-SSE2-LIN-NEXT:    fnstcw -{{[0-9]+}}(%rsp)1369; X64-SSE2-LIN-NEXT:    movzwl -{{[0-9]+}}(%rsp), %eax1370; X64-SSE2-LIN-NEXT:    orl $3072, %eax # imm = 0xC001371; X64-SSE2-LIN-NEXT:    movw %ax, -{{[0-9]+}}(%rsp)1372; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)1373; X64-SSE2-LIN-NEXT:    fistpll -{{[0-9]+}}(%rsp)1374; X64-SSE2-LIN-NEXT:    fldcw -{{[0-9]+}}(%rsp)1375; X64-SSE2-LIN-NEXT:    movq -{{[0-9]+}}(%rsp), %rax1376; X64-SSE2-LIN-NEXT:    retq1377;1378; X87-WIN-LABEL: x_to_s64:1379; X87-WIN:       # %bb.0:1380; X87-WIN-NEXT:    pushl %ebp1381; X87-WIN-NEXT:    movl %esp, %ebp1382; X87-WIN-NEXT:    andl $-16, %esp1383; X87-WIN-NEXT:    subl $32, %esp1384; X87-WIN-NEXT:    fldt 8(%ebp)1385; X87-WIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1386; X87-WIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1387; X87-WIN-NEXT:    orl $3072, %eax # imm = 0xC001388; X87-WIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1389; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1390; X87-WIN-NEXT:    fistpll {{[0-9]+}}(%esp)1391; X87-WIN-NEXT:    fldcw {{[0-9]+}}(%esp)1392; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1393; X87-WIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1394; X87-WIN-NEXT:    movl %ebp, %esp1395; X87-WIN-NEXT:    popl %ebp1396; X87-WIN-NEXT:    retl1397;1398; X87-LIN-LABEL: x_to_s64:1399; X87-LIN:       # %bb.0:1400; X87-LIN-NEXT:    subl $20, %esp1401; X87-LIN-NEXT:    fldt {{[0-9]+}}(%esp)1402; X87-LIN-NEXT:    fnstcw {{[0-9]+}}(%esp)1403; X87-LIN-NEXT:    movzwl {{[0-9]+}}(%esp), %eax1404; X87-LIN-NEXT:    orl $3072, %eax # imm = 0xC001405; X87-LIN-NEXT:    movw %ax, {{[0-9]+}}(%esp)1406; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1407; X87-LIN-NEXT:    fistpll {{[0-9]+}}(%esp)1408; X87-LIN-NEXT:    fldcw {{[0-9]+}}(%esp)1409; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %eax1410; X87-LIN-NEXT:    movl {{[0-9]+}}(%esp), %edx1411; X87-LIN-NEXT:    addl $20, %esp1412; X87-LIN-NEXT:    retl1413  %r = fptosi x86_fp80 %a to i641414  ret i64 %r1415}1416 1417define i64 @t_to_u64(fp128 %a) nounwind {1418; X86-AVX512-WIN-LABEL: t_to_u64:1419; X86-AVX512-WIN:       # %bb.0:1420; X86-AVX512-WIN-NEXT:    pushl %ebp1421; X86-AVX512-WIN-NEXT:    movl %esp, %ebp1422; X86-AVX512-WIN-NEXT:    andl $-16, %esp1423; X86-AVX512-WIN-NEXT:    subl $32, %esp1424; X86-AVX512-WIN-NEXT:    vmovups 8(%ebp), %xmm01425; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)1426; X86-AVX512-WIN-NEXT:    calll ___fixunstfdi1427; X86-AVX512-WIN-NEXT:    movl %ebp, %esp1428; X86-AVX512-WIN-NEXT:    popl %ebp1429; X86-AVX512-WIN-NEXT:    retl1430;1431; X86-AVX512-LIN-LABEL: t_to_u64:1432; X86-AVX512-LIN:       # %bb.0:1433; X86-AVX512-LIN-NEXT:    subl $28, %esp1434; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm01435; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)1436; X86-AVX512-LIN-NEXT:    calll __fixunstfdi1437; X86-AVX512-LIN-NEXT:    addl $28, %esp1438; X86-AVX512-LIN-NEXT:    retl1439;1440; X64-AVX512-WIN-LABEL: t_to_u64:1441; X64-AVX512-WIN:       # %bb.0:1442; X64-AVX512-WIN-NEXT:    subq $56, %rsp1443; X64-AVX512-WIN-NEXT:    vmovaps (%rcx), %xmm01444; X64-AVX512-WIN-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%rsp)1445; X64-AVX512-WIN-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx1446; X64-AVX512-WIN-NEXT:    callq __fixunstfdi1447; X64-AVX512-WIN-NEXT:    addq $56, %rsp1448; X64-AVX512-WIN-NEXT:    retq1449;1450; X64-AVX512-LIN-LABEL: t_to_u64:1451; X64-AVX512-LIN:       # %bb.0:1452; X64-AVX512-LIN-NEXT:    pushq %rax1453; X64-AVX512-LIN-NEXT:    callq __fixunstfdi@PLT1454; X64-AVX512-LIN-NEXT:    popq %rcx1455; X64-AVX512-LIN-NEXT:    retq1456;1457; X86-SSE-WIN-LABEL: t_to_u64:1458; X86-SSE-WIN:       # %bb.0:1459; X86-SSE-WIN-NEXT:    pushl %ebp1460; X86-SSE-WIN-NEXT:    movl %esp, %ebp1461; X86-SSE-WIN-NEXT:    andl $-16, %esp1462; X86-SSE-WIN-NEXT:    subl $16, %esp1463; X86-SSE-WIN-NEXT:    pushl 20(%ebp)1464; X86-SSE-WIN-NEXT:    pushl 16(%ebp)1465; X86-SSE-WIN-NEXT:    pushl 12(%ebp)1466; X86-SSE-WIN-NEXT:    pushl 8(%ebp)1467; X86-SSE-WIN-NEXT:    calll ___fixunstfdi1468; X86-SSE-WIN-NEXT:    addl $16, %esp1469; X86-SSE-WIN-NEXT:    movl %ebp, %esp1470; X86-SSE-WIN-NEXT:    popl %ebp1471; X86-SSE-WIN-NEXT:    retl1472;1473; X86-SSE-LIN-LABEL: t_to_u64:1474; X86-SSE-LIN:       # %bb.0:1475; X86-SSE-LIN-NEXT:    subl $12, %esp1476; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1477; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1478; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1479; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1480; X86-SSE-LIN-NEXT:    calll __fixunstfdi1481; X86-SSE-LIN-NEXT:    addl $28, %esp1482; X86-SSE-LIN-NEXT:    retl1483;1484; X64-SSE-WIN-LABEL: t_to_u64:1485; X64-SSE-WIN:       # %bb.0:1486; X64-SSE-WIN-NEXT:    subq $56, %rsp1487; X64-SSE-WIN-NEXT:    movaps (%rcx), %xmm01488; X64-SSE-WIN-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)1489; X64-SSE-WIN-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx1490; X64-SSE-WIN-NEXT:    callq __fixunstfdi1491; X64-SSE-WIN-NEXT:    addq $56, %rsp1492; X64-SSE-WIN-NEXT:    retq1493;1494; X64-SSE-LIN-LABEL: t_to_u64:1495; X64-SSE-LIN:       # %bb.0:1496; X64-SSE-LIN-NEXT:    pushq %rax1497; X64-SSE-LIN-NEXT:    callq __fixunstfdi@PLT1498; X64-SSE-LIN-NEXT:    popq %rcx1499; X64-SSE-LIN-NEXT:    retq1500;1501; X87-WIN-LABEL: t_to_u64:1502; X87-WIN:       # %bb.0:1503; X87-WIN-NEXT:    pushl %ebp1504; X87-WIN-NEXT:    movl %esp, %ebp1505; X87-WIN-NEXT:    andl $-16, %esp1506; X87-WIN-NEXT:    subl $16, %esp1507; X87-WIN-NEXT:    pushl 20(%ebp)1508; X87-WIN-NEXT:    pushl 16(%ebp)1509; X87-WIN-NEXT:    pushl 12(%ebp)1510; X87-WIN-NEXT:    pushl 8(%ebp)1511; X87-WIN-NEXT:    calll ___fixunstfdi1512; X87-WIN-NEXT:    addl $16, %esp1513; X87-WIN-NEXT:    movl %ebp, %esp1514; X87-WIN-NEXT:    popl %ebp1515; X87-WIN-NEXT:    retl1516;1517; X87-LIN-LABEL: t_to_u64:1518; X87-LIN:       # %bb.0:1519; X87-LIN-NEXT:    subl $12, %esp1520; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1521; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1522; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1523; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1524; X87-LIN-NEXT:    calll __fixunstfdi1525; X87-LIN-NEXT:    addl $28, %esp1526; X87-LIN-NEXT:    retl1527  %r = fptoui fp128 %a to i641528  ret i64 %r1529}1530 1531define i64 @t_to_s64(fp128 %a) nounwind {1532; X86-AVX512-WIN-LABEL: t_to_s64:1533; X86-AVX512-WIN:       # %bb.0:1534; X86-AVX512-WIN-NEXT:    pushl %ebp1535; X86-AVX512-WIN-NEXT:    movl %esp, %ebp1536; X86-AVX512-WIN-NEXT:    andl $-16, %esp1537; X86-AVX512-WIN-NEXT:    subl $32, %esp1538; X86-AVX512-WIN-NEXT:    vmovups 8(%ebp), %xmm01539; X86-AVX512-WIN-NEXT:    vmovups %xmm0, (%esp)1540; X86-AVX512-WIN-NEXT:    calll ___fixtfdi1541; X86-AVX512-WIN-NEXT:    movl %ebp, %esp1542; X86-AVX512-WIN-NEXT:    popl %ebp1543; X86-AVX512-WIN-NEXT:    retl1544;1545; X86-AVX512-LIN-LABEL: t_to_s64:1546; X86-AVX512-LIN:       # %bb.0:1547; X86-AVX512-LIN-NEXT:    subl $28, %esp1548; X86-AVX512-LIN-NEXT:    vmovaps {{[0-9]+}}(%esp), %xmm01549; X86-AVX512-LIN-NEXT:    vmovups %xmm0, (%esp)1550; X86-AVX512-LIN-NEXT:    calll __fixtfdi1551; X86-AVX512-LIN-NEXT:    addl $28, %esp1552; X86-AVX512-LIN-NEXT:    retl1553;1554; X64-AVX512-WIN-LABEL: t_to_s64:1555; X64-AVX512-WIN:       # %bb.0:1556; X64-AVX512-WIN-NEXT:    subq $56, %rsp1557; X64-AVX512-WIN-NEXT:    vmovaps (%rcx), %xmm01558; X64-AVX512-WIN-NEXT:    vmovaps %xmm0, {{[0-9]+}}(%rsp)1559; X64-AVX512-WIN-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx1560; X64-AVX512-WIN-NEXT:    callq __fixtfdi1561; X64-AVX512-WIN-NEXT:    addq $56, %rsp1562; X64-AVX512-WIN-NEXT:    retq1563;1564; X64-AVX512-LIN-LABEL: t_to_s64:1565; X64-AVX512-LIN:       # %bb.0:1566; X64-AVX512-LIN-NEXT:    pushq %rax1567; X64-AVX512-LIN-NEXT:    callq __fixtfdi@PLT1568; X64-AVX512-LIN-NEXT:    popq %rcx1569; X64-AVX512-LIN-NEXT:    retq1570;1571; X86-SSE-WIN-LABEL: t_to_s64:1572; X86-SSE-WIN:       # %bb.0:1573; X86-SSE-WIN-NEXT:    pushl %ebp1574; X86-SSE-WIN-NEXT:    movl %esp, %ebp1575; X86-SSE-WIN-NEXT:    andl $-16, %esp1576; X86-SSE-WIN-NEXT:    subl $16, %esp1577; X86-SSE-WIN-NEXT:    pushl 20(%ebp)1578; X86-SSE-WIN-NEXT:    pushl 16(%ebp)1579; X86-SSE-WIN-NEXT:    pushl 12(%ebp)1580; X86-SSE-WIN-NEXT:    pushl 8(%ebp)1581; X86-SSE-WIN-NEXT:    calll ___fixtfdi1582; X86-SSE-WIN-NEXT:    addl $16, %esp1583; X86-SSE-WIN-NEXT:    movl %ebp, %esp1584; X86-SSE-WIN-NEXT:    popl %ebp1585; X86-SSE-WIN-NEXT:    retl1586;1587; X86-SSE-LIN-LABEL: t_to_s64:1588; X86-SSE-LIN:       # %bb.0:1589; X86-SSE-LIN-NEXT:    subl $12, %esp1590; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1591; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1592; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1593; X86-SSE-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1594; X86-SSE-LIN-NEXT:    calll __fixtfdi1595; X86-SSE-LIN-NEXT:    addl $28, %esp1596; X86-SSE-LIN-NEXT:    retl1597;1598; X64-SSE-WIN-LABEL: t_to_s64:1599; X64-SSE-WIN:       # %bb.0:1600; X64-SSE-WIN-NEXT:    subq $56, %rsp1601; X64-SSE-WIN-NEXT:    movaps (%rcx), %xmm01602; X64-SSE-WIN-NEXT:    movaps %xmm0, {{[0-9]+}}(%rsp)1603; X64-SSE-WIN-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx1604; X64-SSE-WIN-NEXT:    callq __fixtfdi1605; X64-SSE-WIN-NEXT:    addq $56, %rsp1606; X64-SSE-WIN-NEXT:    retq1607;1608; X64-SSE-LIN-LABEL: t_to_s64:1609; X64-SSE-LIN:       # %bb.0:1610; X64-SSE-LIN-NEXT:    pushq %rax1611; X64-SSE-LIN-NEXT:    callq __fixtfdi@PLT1612; X64-SSE-LIN-NEXT:    popq %rcx1613; X64-SSE-LIN-NEXT:    retq1614;1615; X87-WIN-LABEL: t_to_s64:1616; X87-WIN:       # %bb.0:1617; X87-WIN-NEXT:    pushl %ebp1618; X87-WIN-NEXT:    movl %esp, %ebp1619; X87-WIN-NEXT:    andl $-16, %esp1620; X87-WIN-NEXT:    subl $16, %esp1621; X87-WIN-NEXT:    pushl 20(%ebp)1622; X87-WIN-NEXT:    pushl 16(%ebp)1623; X87-WIN-NEXT:    pushl 12(%ebp)1624; X87-WIN-NEXT:    pushl 8(%ebp)1625; X87-WIN-NEXT:    calll ___fixtfdi1626; X87-WIN-NEXT:    addl $16, %esp1627; X87-WIN-NEXT:    movl %ebp, %esp1628; X87-WIN-NEXT:    popl %ebp1629; X87-WIN-NEXT:    retl1630;1631; X87-LIN-LABEL: t_to_s64:1632; X87-LIN:       # %bb.0:1633; X87-LIN-NEXT:    subl $12, %esp1634; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1635; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1636; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1637; X87-LIN-NEXT:    pushl {{[0-9]+}}(%esp)1638; X87-LIN-NEXT:    calll __fixtfdi1639; X87-LIN-NEXT:    addl $28, %esp1640; X87-LIN-NEXT:    retl1641  %r = fptosi fp128 %a to i641642  ret i64 %r1643}1644