1139 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=X64,X64-X874; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ssse3 | FileCheck %s --check-prefixes=X64,X64-SSSE35 6;7; fptosi8;9 10define i16 @fptosi_i16_fp80(x86_fp80 %a0) nounwind {11; X86-LABEL: fptosi_i16_fp80:12; X86: # %bb.0:13; X86-NEXT: subl $8, %esp14; X86-NEXT: fldt {{[0-9]+}}(%esp)15; X86-NEXT: fnstcw {{[0-9]+}}(%esp)16; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax17; X86-NEXT: orl $3072, %eax # imm = 0xC0018; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)19; X86-NEXT: fldcw {{[0-9]+}}(%esp)20; X86-NEXT: fistps {{[0-9]+}}(%esp)21; X86-NEXT: fldcw {{[0-9]+}}(%esp)22; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax23; X86-NEXT: addl $8, %esp24; X86-NEXT: retl25;26; X64-X87-LABEL: fptosi_i16_fp80:27; X64-X87: # %bb.0:28; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)29; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)30; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax31; X64-X87-NEXT: orl $3072, %eax # imm = 0xC0032; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)33; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)34; X64-X87-NEXT: fistps -{{[0-9]+}}(%rsp)35; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)36; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax37; X64-X87-NEXT: retq38;39; X64-SSSE3-LABEL: fptosi_i16_fp80:40; X64-SSSE3: # %bb.0:41; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)42; X64-SSSE3-NEXT: fisttps -{{[0-9]+}}(%rsp)43; X64-SSSE3-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax44; X64-SSSE3-NEXT: retq45 %1 = fptosi x86_fp80 %a0 to i1646 ret i16 %147}48 49define i16 @fptosi_i16_fp80_ld(ptr%a0) nounwind {50; X86-LABEL: fptosi_i16_fp80_ld:51; X86: # %bb.0:52; X86-NEXT: subl $8, %esp53; X86-NEXT: movl {{[0-9]+}}(%esp), %eax54; X86-NEXT: fldt (%eax)55; X86-NEXT: fnstcw {{[0-9]+}}(%esp)56; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax57; X86-NEXT: orl $3072, %eax # imm = 0xC0058; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)59; X86-NEXT: fldcw {{[0-9]+}}(%esp)60; X86-NEXT: fistps {{[0-9]+}}(%esp)61; X86-NEXT: fldcw {{[0-9]+}}(%esp)62; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax63; X86-NEXT: addl $8, %esp64; X86-NEXT: retl65;66; X64-X87-LABEL: fptosi_i16_fp80_ld:67; X64-X87: # %bb.0:68; X64-X87-NEXT: fldt (%rdi)69; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)70; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax71; X64-X87-NEXT: orl $3072, %eax # imm = 0xC0072; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)73; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)74; X64-X87-NEXT: fistps -{{[0-9]+}}(%rsp)75; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)76; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax77; X64-X87-NEXT: retq78;79; X64-SSSE3-LABEL: fptosi_i16_fp80_ld:80; X64-SSSE3: # %bb.0:81; X64-SSSE3-NEXT: fldt (%rdi)82; X64-SSSE3-NEXT: fisttps -{{[0-9]+}}(%rsp)83; X64-SSSE3-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax84; X64-SSSE3-NEXT: retq85 %1 = load x86_fp80, ptr%a086 %2 = fptosi x86_fp80 %1 to i1687 ret i16 %288}89 90define i32 @fptosi_i32_fp80(x86_fp80 %a0) nounwind {91; X86-LABEL: fptosi_i32_fp80:92; X86: # %bb.0:93; X86-NEXT: subl $8, %esp94; X86-NEXT: fldt {{[0-9]+}}(%esp)95; X86-NEXT: fnstcw (%esp)96; X86-NEXT: movzwl (%esp), %eax97; X86-NEXT: orl $3072, %eax # imm = 0xC0098; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)99; X86-NEXT: fldcw {{[0-9]+}}(%esp)100; X86-NEXT: fistpl {{[0-9]+}}(%esp)101; X86-NEXT: fldcw (%esp)102; X86-NEXT: movl {{[0-9]+}}(%esp), %eax103; X86-NEXT: addl $8, %esp104; X86-NEXT: retl105;106; X64-X87-LABEL: fptosi_i32_fp80:107; X64-X87: # %bb.0:108; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)109; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)110; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax111; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00112; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)113; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)114; X64-X87-NEXT: fistpl -{{[0-9]+}}(%rsp)115; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)116; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax117; X64-X87-NEXT: retq118;119; X64-SSSE3-LABEL: fptosi_i32_fp80:120; X64-SSSE3: # %bb.0:121; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)122; X64-SSSE3-NEXT: fisttpl -{{[0-9]+}}(%rsp)123; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax124; X64-SSSE3-NEXT: retq125 %1 = fptosi x86_fp80 %a0 to i32126 ret i32 %1127}128 129define i32 @fptosi_i32_fp80_ld(ptr%a0) nounwind {130; X86-LABEL: fptosi_i32_fp80_ld:131; X86: # %bb.0:132; X86-NEXT: subl $8, %esp133; X86-NEXT: movl {{[0-9]+}}(%esp), %eax134; X86-NEXT: fldt (%eax)135; X86-NEXT: fnstcw (%esp)136; X86-NEXT: movzwl (%esp), %eax137; X86-NEXT: orl $3072, %eax # imm = 0xC00138; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)139; X86-NEXT: fldcw {{[0-9]+}}(%esp)140; X86-NEXT: fistpl {{[0-9]+}}(%esp)141; X86-NEXT: fldcw (%esp)142; X86-NEXT: movl {{[0-9]+}}(%esp), %eax143; X86-NEXT: addl $8, %esp144; X86-NEXT: retl145;146; X64-X87-LABEL: fptosi_i32_fp80_ld:147; X64-X87: # %bb.0:148; X64-X87-NEXT: fldt (%rdi)149; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)150; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax151; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00152; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)153; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)154; X64-X87-NEXT: fistpl -{{[0-9]+}}(%rsp)155; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)156; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax157; X64-X87-NEXT: retq158;159; X64-SSSE3-LABEL: fptosi_i32_fp80_ld:160; X64-SSSE3: # %bb.0:161; X64-SSSE3-NEXT: fldt (%rdi)162; X64-SSSE3-NEXT: fisttpl -{{[0-9]+}}(%rsp)163; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax164; X64-SSSE3-NEXT: retq165 %1 = load x86_fp80, ptr%a0166 %2 = fptosi x86_fp80 %1 to i32167 ret i32 %2168}169 170define i64 @fptosi_i64_fp80(x86_fp80 %a0) nounwind {171; X86-LABEL: fptosi_i64_fp80:172; X86: # %bb.0:173; X86-NEXT: pushl %ebp174; X86-NEXT: movl %esp, %ebp175; X86-NEXT: andl $-8, %esp176; X86-NEXT: subl $16, %esp177; X86-NEXT: fldt 8(%ebp)178; X86-NEXT: fnstcw {{[0-9]+}}(%esp)179; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax180; X86-NEXT: orl $3072, %eax # imm = 0xC00181; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)182; X86-NEXT: fldcw {{[0-9]+}}(%esp)183; X86-NEXT: fistpll {{[0-9]+}}(%esp)184; X86-NEXT: fldcw {{[0-9]+}}(%esp)185; X86-NEXT: movl {{[0-9]+}}(%esp), %eax186; X86-NEXT: movl {{[0-9]+}}(%esp), %edx187; X86-NEXT: movl %ebp, %esp188; X86-NEXT: popl %ebp189; X86-NEXT: retl190;191; X64-X87-LABEL: fptosi_i64_fp80:192; X64-X87: # %bb.0:193; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)194; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)195; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax196; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00197; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)198; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)199; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)200; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)201; X64-X87-NEXT: movq -{{[0-9]+}}(%rsp), %rax202; X64-X87-NEXT: retq203;204; X64-SSSE3-LABEL: fptosi_i64_fp80:205; X64-SSSE3: # %bb.0:206; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)207; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)208; X64-SSSE3-NEXT: movq -{{[0-9]+}}(%rsp), %rax209; X64-SSSE3-NEXT: retq210 %1 = fptosi x86_fp80 %a0 to i64211 ret i64 %1212}213 214define i64 @fptosi_i64_fp80_ld(ptr%a0) nounwind {215; X86-LABEL: fptosi_i64_fp80_ld:216; X86: # %bb.0:217; X86-NEXT: pushl %ebp218; X86-NEXT: movl %esp, %ebp219; X86-NEXT: andl $-8, %esp220; X86-NEXT: subl $16, %esp221; X86-NEXT: movl 8(%ebp), %eax222; X86-NEXT: fldt (%eax)223; X86-NEXT: fnstcw {{[0-9]+}}(%esp)224; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax225; X86-NEXT: orl $3072, %eax # imm = 0xC00226; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)227; X86-NEXT: fldcw {{[0-9]+}}(%esp)228; X86-NEXT: fistpll {{[0-9]+}}(%esp)229; X86-NEXT: fldcw {{[0-9]+}}(%esp)230; X86-NEXT: movl {{[0-9]+}}(%esp), %eax231; X86-NEXT: movl {{[0-9]+}}(%esp), %edx232; X86-NEXT: movl %ebp, %esp233; X86-NEXT: popl %ebp234; X86-NEXT: retl235;236; X64-X87-LABEL: fptosi_i64_fp80_ld:237; X64-X87: # %bb.0:238; X64-X87-NEXT: fldt (%rdi)239; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)240; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax241; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00242; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)243; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)244; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)245; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)246; X64-X87-NEXT: movq -{{[0-9]+}}(%rsp), %rax247; X64-X87-NEXT: retq248;249; X64-SSSE3-LABEL: fptosi_i64_fp80_ld:250; X64-SSSE3: # %bb.0:251; X64-SSSE3-NEXT: fldt (%rdi)252; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)253; X64-SSSE3-NEXT: movq -{{[0-9]+}}(%rsp), %rax254; X64-SSSE3-NEXT: retq255 %1 = load x86_fp80, ptr%a0256 %2 = fptosi x86_fp80 %1 to i64257 ret i64 %2258}259 260;261; fptoui262;263 264define i16 @fptoui_i16_fp80(x86_fp80 %a0) nounwind {265; X86-LABEL: fptoui_i16_fp80:266; X86: # %bb.0:267; X86-NEXT: subl $8, %esp268; X86-NEXT: fldt {{[0-9]+}}(%esp)269; X86-NEXT: fnstcw (%esp)270; X86-NEXT: movzwl (%esp), %eax271; X86-NEXT: orl $3072, %eax # imm = 0xC00272; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)273; X86-NEXT: fldcw {{[0-9]+}}(%esp)274; X86-NEXT: fistpl {{[0-9]+}}(%esp)275; X86-NEXT: fldcw (%esp)276; X86-NEXT: movl {{[0-9]+}}(%esp), %eax277; X86-NEXT: # kill: def $ax killed $ax killed $eax278; X86-NEXT: addl $8, %esp279; X86-NEXT: retl280;281; X64-X87-LABEL: fptoui_i16_fp80:282; X64-X87: # %bb.0:283; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)284; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)285; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax286; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00287; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)288; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)289; X64-X87-NEXT: fistpl -{{[0-9]+}}(%rsp)290; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)291; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax292; X64-X87-NEXT: # kill: def $ax killed $ax killed $eax293; X64-X87-NEXT: retq294;295; X64-SSSE3-LABEL: fptoui_i16_fp80:296; X64-SSSE3: # %bb.0:297; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)298; X64-SSSE3-NEXT: fisttpl -{{[0-9]+}}(%rsp)299; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax300; X64-SSSE3-NEXT: # kill: def $ax killed $ax killed $eax301; X64-SSSE3-NEXT: retq302 %1 = fptoui x86_fp80 %a0 to i16303 ret i16 %1304}305 306define i16 @fptoui_i16_fp80_ld(ptr%a0) nounwind {307; X86-LABEL: fptoui_i16_fp80_ld:308; X86: # %bb.0:309; X86-NEXT: subl $8, %esp310; X86-NEXT: movl {{[0-9]+}}(%esp), %eax311; X86-NEXT: fldt (%eax)312; X86-NEXT: fnstcw (%esp)313; X86-NEXT: movzwl (%esp), %eax314; X86-NEXT: orl $3072, %eax # imm = 0xC00315; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)316; X86-NEXT: fldcw {{[0-9]+}}(%esp)317; X86-NEXT: fistpl {{[0-9]+}}(%esp)318; X86-NEXT: fldcw (%esp)319; X86-NEXT: movl {{[0-9]+}}(%esp), %eax320; X86-NEXT: # kill: def $ax killed $ax killed $eax321; X86-NEXT: addl $8, %esp322; X86-NEXT: retl323;324; X64-X87-LABEL: fptoui_i16_fp80_ld:325; X64-X87: # %bb.0:326; X64-X87-NEXT: fldt (%rdi)327; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)328; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax329; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00330; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)331; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)332; X64-X87-NEXT: fistpl -{{[0-9]+}}(%rsp)333; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)334; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax335; X64-X87-NEXT: # kill: def $ax killed $ax killed $eax336; X64-X87-NEXT: retq337;338; X64-SSSE3-LABEL: fptoui_i16_fp80_ld:339; X64-SSSE3: # %bb.0:340; X64-SSSE3-NEXT: fldt (%rdi)341; X64-SSSE3-NEXT: fisttpl -{{[0-9]+}}(%rsp)342; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax343; X64-SSSE3-NEXT: # kill: def $ax killed $ax killed $eax344; X64-SSSE3-NEXT: retq345 %1 = load x86_fp80, ptr%a0346 %2 = fptoui x86_fp80 %1 to i16347 ret i16 %2348}349 350define i32 @fptoui_i32_fp80(x86_fp80 %a0) nounwind {351; X86-LABEL: fptoui_i32_fp80:352; X86: # %bb.0:353; X86-NEXT: pushl %ebp354; X86-NEXT: movl %esp, %ebp355; X86-NEXT: andl $-8, %esp356; X86-NEXT: subl $16, %esp357; X86-NEXT: fldt 8(%ebp)358; X86-NEXT: fnstcw {{[0-9]+}}(%esp)359; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax360; X86-NEXT: orl $3072, %eax # imm = 0xC00361; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)362; X86-NEXT: fldcw {{[0-9]+}}(%esp)363; X86-NEXT: fistpll {{[0-9]+}}(%esp)364; X86-NEXT: fldcw {{[0-9]+}}(%esp)365; X86-NEXT: movl {{[0-9]+}}(%esp), %eax366; X86-NEXT: movl %ebp, %esp367; X86-NEXT: popl %ebp368; X86-NEXT: retl369;370; X64-X87-LABEL: fptoui_i32_fp80:371; X64-X87: # %bb.0:372; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)373; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)374; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax375; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00376; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)377; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)378; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)379; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)380; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax381; X64-X87-NEXT: retq382;383; X64-SSSE3-LABEL: fptoui_i32_fp80:384; X64-SSSE3: # %bb.0:385; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)386; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)387; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax388; X64-SSSE3-NEXT: retq389 %1 = fptoui x86_fp80 %a0 to i32390 ret i32 %1391}392 393define i32 @fptoui_i32_fp80_ld(ptr%a0) nounwind {394; X86-LABEL: fptoui_i32_fp80_ld:395; X86: # %bb.0:396; X86-NEXT: pushl %ebp397; X86-NEXT: movl %esp, %ebp398; X86-NEXT: andl $-8, %esp399; X86-NEXT: subl $16, %esp400; X86-NEXT: movl 8(%ebp), %eax401; X86-NEXT: fldt (%eax)402; X86-NEXT: fnstcw {{[0-9]+}}(%esp)403; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax404; X86-NEXT: orl $3072, %eax # imm = 0xC00405; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)406; X86-NEXT: fldcw {{[0-9]+}}(%esp)407; X86-NEXT: fistpll {{[0-9]+}}(%esp)408; X86-NEXT: fldcw {{[0-9]+}}(%esp)409; X86-NEXT: movl {{[0-9]+}}(%esp), %eax410; X86-NEXT: movl %ebp, %esp411; X86-NEXT: popl %ebp412; X86-NEXT: retl413;414; X64-X87-LABEL: fptoui_i32_fp80_ld:415; X64-X87: # %bb.0:416; X64-X87-NEXT: fldt (%rdi)417; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)418; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %eax419; X64-X87-NEXT: orl $3072, %eax # imm = 0xC00420; X64-X87-NEXT: movw %ax, -{{[0-9]+}}(%rsp)421; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)422; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)423; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)424; X64-X87-NEXT: movl -{{[0-9]+}}(%rsp), %eax425; X64-X87-NEXT: retq426;427; X64-SSSE3-LABEL: fptoui_i32_fp80_ld:428; X64-SSSE3: # %bb.0:429; X64-SSSE3-NEXT: fldt (%rdi)430; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)431; X64-SSSE3-NEXT: movl -{{[0-9]+}}(%rsp), %eax432; X64-SSSE3-NEXT: retq433 %1 = load x86_fp80, ptr%a0434 %2 = fptoui x86_fp80 %1 to i32435 ret i32 %2436}437 438define i64 @fptoui_i64_fp80(x86_fp80 %a0) nounwind {439; X86-LABEL: fptoui_i64_fp80:440; X86: # %bb.0:441; X86-NEXT: pushl %ebp442; X86-NEXT: movl %esp, %ebp443; X86-NEXT: andl $-8, %esp444; X86-NEXT: subl $16, %esp445; X86-NEXT: fldt 8(%ebp)446; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}447; X86-NEXT: fucom %st(1)448; X86-NEXT: fnstsw %ax449; X86-NEXT: xorl %edx, %edx450; X86-NEXT: # kill: def $ah killed $ah killed $ax451; X86-NEXT: sahf452; X86-NEXT: setbe %al453; X86-NEXT: fldz454; X86-NEXT: jbe .LBB10_2455; X86-NEXT: # %bb.1:456; X86-NEXT: fstp %st(1)457; X86-NEXT: fldz458; X86-NEXT: .LBB10_2:459; X86-NEXT: fstp %st(0)460; X86-NEXT: fsubrp %st, %st(1)461; X86-NEXT: fnstcw {{[0-9]+}}(%esp)462; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx463; X86-NEXT: orl $3072, %ecx # imm = 0xC00464; X86-NEXT: movw %cx, {{[0-9]+}}(%esp)465; X86-NEXT: fldcw {{[0-9]+}}(%esp)466; X86-NEXT: fistpll {{[0-9]+}}(%esp)467; X86-NEXT: fldcw {{[0-9]+}}(%esp)468; X86-NEXT: movb %al, %dl469; X86-NEXT: shll $31, %edx470; X86-NEXT: xorl {{[0-9]+}}(%esp), %edx471; X86-NEXT: movl {{[0-9]+}}(%esp), %eax472; X86-NEXT: movl %ebp, %esp473; X86-NEXT: popl %ebp474; X86-NEXT: retl475;476; X64-X87-LABEL: fptoui_i64_fp80:477; X64-X87: # %bb.0:478; X64-X87-NEXT: fldt {{[0-9]+}}(%rsp)479; X64-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)480; X64-X87-NEXT: xorl %eax, %eax481; X64-X87-NEXT: fucomi %st(1), %st482; X64-X87-NEXT: setbe %al483; X64-X87-NEXT: fldz484; X64-X87-NEXT: fcmovbe %st(1), %st485; X64-X87-NEXT: fstp %st(1)486; X64-X87-NEXT: fsubrp %st, %st(1)487; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)488; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx489; X64-X87-NEXT: orl $3072, %ecx # imm = 0xC00490; X64-X87-NEXT: movw %cx, -{{[0-9]+}}(%rsp)491; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)492; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)493; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)494; X64-X87-NEXT: shlq $63, %rax495; X64-X87-NEXT: xorq -{{[0-9]+}}(%rsp), %rax496; X64-X87-NEXT: retq497;498; X64-SSSE3-LABEL: fptoui_i64_fp80:499; X64-SSSE3: # %bb.0:500; X64-SSSE3-NEXT: fldt {{[0-9]+}}(%rsp)501; X64-SSSE3-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)502; X64-SSSE3-NEXT: xorl %eax, %eax503; X64-SSSE3-NEXT: fucomi %st(1), %st504; X64-SSSE3-NEXT: fldz505; X64-SSSE3-NEXT: fcmovbe %st(1), %st506; X64-SSSE3-NEXT: fstp %st(1)507; X64-SSSE3-NEXT: fsubrp %st, %st(1)508; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)509; X64-SSSE3-NEXT: setbe %al510; X64-SSSE3-NEXT: shlq $63, %rax511; X64-SSSE3-NEXT: xorq -{{[0-9]+}}(%rsp), %rax512; X64-SSSE3-NEXT: retq513 %1 = fptoui x86_fp80 %a0 to i64514 ret i64 %1515}516 517define i64 @fptoui_i64_fp80_ld(ptr%a0) nounwind {518; X86-LABEL: fptoui_i64_fp80_ld:519; X86: # %bb.0:520; X86-NEXT: pushl %ebp521; X86-NEXT: movl %esp, %ebp522; X86-NEXT: andl $-8, %esp523; X86-NEXT: subl $16, %esp524; X86-NEXT: movl 8(%ebp), %eax525; X86-NEXT: fldt (%eax)526; X86-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}527; X86-NEXT: fucom %st(1)528; X86-NEXT: fnstsw %ax529; X86-NEXT: xorl %edx, %edx530; X86-NEXT: # kill: def $ah killed $ah killed $ax531; X86-NEXT: sahf532; X86-NEXT: setbe %al533; X86-NEXT: fldz534; X86-NEXT: jbe .LBB11_2535; X86-NEXT: # %bb.1:536; X86-NEXT: fstp %st(1)537; X86-NEXT: fldz538; X86-NEXT: .LBB11_2:539; X86-NEXT: fstp %st(0)540; X86-NEXT: fsubrp %st, %st(1)541; X86-NEXT: fnstcw {{[0-9]+}}(%esp)542; X86-NEXT: movzwl {{[0-9]+}}(%esp), %ecx543; X86-NEXT: orl $3072, %ecx # imm = 0xC00544; X86-NEXT: movw %cx, {{[0-9]+}}(%esp)545; X86-NEXT: fldcw {{[0-9]+}}(%esp)546; X86-NEXT: fistpll {{[0-9]+}}(%esp)547; X86-NEXT: fldcw {{[0-9]+}}(%esp)548; X86-NEXT: movb %al, %dl549; X86-NEXT: shll $31, %edx550; X86-NEXT: xorl {{[0-9]+}}(%esp), %edx551; X86-NEXT: movl {{[0-9]+}}(%esp), %eax552; X86-NEXT: movl %ebp, %esp553; X86-NEXT: popl %ebp554; X86-NEXT: retl555;556; X64-X87-LABEL: fptoui_i64_fp80_ld:557; X64-X87: # %bb.0:558; X64-X87-NEXT: fldt (%rdi)559; X64-X87-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)560; X64-X87-NEXT: xorl %eax, %eax561; X64-X87-NEXT: fucomi %st(1), %st562; X64-X87-NEXT: setbe %al563; X64-X87-NEXT: fldz564; X64-X87-NEXT: fcmovbe %st(1), %st565; X64-X87-NEXT: fstp %st(1)566; X64-X87-NEXT: fsubrp %st, %st(1)567; X64-X87-NEXT: fnstcw -{{[0-9]+}}(%rsp)568; X64-X87-NEXT: movzwl -{{[0-9]+}}(%rsp), %ecx569; X64-X87-NEXT: orl $3072, %ecx # imm = 0xC00570; X64-X87-NEXT: movw %cx, -{{[0-9]+}}(%rsp)571; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)572; X64-X87-NEXT: fistpll -{{[0-9]+}}(%rsp)573; X64-X87-NEXT: fldcw -{{[0-9]+}}(%rsp)574; X64-X87-NEXT: shlq $63, %rax575; X64-X87-NEXT: xorq -{{[0-9]+}}(%rsp), %rax576; X64-X87-NEXT: retq577;578; X64-SSSE3-LABEL: fptoui_i64_fp80_ld:579; X64-SSSE3: # %bb.0:580; X64-SSSE3-NEXT: fldt (%rdi)581; X64-SSSE3-NEXT: flds {{\.?LCPI[0-9]+_[0-9]+}}(%rip)582; X64-SSSE3-NEXT: xorl %eax, %eax583; X64-SSSE3-NEXT: fucomi %st(1), %st584; X64-SSSE3-NEXT: fldz585; X64-SSSE3-NEXT: fcmovbe %st(1), %st586; X64-SSSE3-NEXT: fstp %st(1)587; X64-SSSE3-NEXT: fsubrp %st, %st(1)588; X64-SSSE3-NEXT: fisttpll -{{[0-9]+}}(%rsp)589; X64-SSSE3-NEXT: setbe %al590; X64-SSSE3-NEXT: shlq $63, %rax591; X64-SSSE3-NEXT: xorq -{{[0-9]+}}(%rsp), %rax592; X64-SSSE3-NEXT: retq593 %1 = load x86_fp80, ptr%a0594 %2 = fptoui x86_fp80 %1 to i64595 ret i64 %2596}597 598;599; sitofp600;601 602define x86_fp80 @sitofp_fp80_i16(i16 %a0) nounwind {603; X86-LABEL: sitofp_fp80_i16:604; X86: # %bb.0:605; X86-NEXT: pushl %eax606; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax607; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)608; X86-NEXT: filds {{[0-9]+}}(%esp)609; X86-NEXT: popl %eax610; X86-NEXT: retl611;612; X64-LABEL: sitofp_fp80_i16:613; X64: # %bb.0:614; X64-NEXT: movw %di, -{{[0-9]+}}(%rsp)615; X64-NEXT: filds -{{[0-9]+}}(%rsp)616; X64-NEXT: retq617 %1 = sitofp i16 %a0 to x86_fp80618 ret x86_fp80 %1619}620 621define x86_fp80 @sitofp_fp80_i16_ld(ptr%a0) nounwind {622; X86-LABEL: sitofp_fp80_i16_ld:623; X86: # %bb.0:624; X86-NEXT: pushl %eax625; X86-NEXT: movl {{[0-9]+}}(%esp), %eax626; X86-NEXT: movzwl (%eax), %eax627; X86-NEXT: movw %ax, {{[0-9]+}}(%esp)628; X86-NEXT: filds {{[0-9]+}}(%esp)629; X86-NEXT: popl %eax630; X86-NEXT: retl631;632; X64-LABEL: sitofp_fp80_i16_ld:633; X64: # %bb.0:634; X64-NEXT: movzwl (%rdi), %eax635; X64-NEXT: movw %ax, -{{[0-9]+}}(%rsp)636; X64-NEXT: filds -{{[0-9]+}}(%rsp)637; X64-NEXT: retq638 %1 = load i16, ptr%a0639 %2 = sitofp i16 %1 to x86_fp80640 ret x86_fp80 %2641}642 643define x86_fp80 @sitofp_fp80_i32(i32 %a0) nounwind {644; X86-LABEL: sitofp_fp80_i32:645; X86: # %bb.0:646; X86-NEXT: pushl %eax647; X86-NEXT: movl {{[0-9]+}}(%esp), %eax648; X86-NEXT: movl %eax, (%esp)649; X86-NEXT: fildl (%esp)650; X86-NEXT: popl %eax651; X86-NEXT: retl652;653; X64-LABEL: sitofp_fp80_i32:654; X64: # %bb.0:655; X64-NEXT: movl %edi, -{{[0-9]+}}(%rsp)656; X64-NEXT: fildl -{{[0-9]+}}(%rsp)657; X64-NEXT: retq658 %1 = sitofp i32 %a0 to x86_fp80659 ret x86_fp80 %1660}661 662define x86_fp80 @sitofp_fp80_i32_ld(ptr%a0) nounwind {663; X86-LABEL: sitofp_fp80_i32_ld:664; X86: # %bb.0:665; X86-NEXT: pushl %eax666; X86-NEXT: movl {{[0-9]+}}(%esp), %eax667; X86-NEXT: movl (%eax), %eax668; X86-NEXT: movl %eax, (%esp)669; X86-NEXT: fildl (%esp)670; X86-NEXT: popl %eax671; X86-NEXT: retl672;673; X64-LABEL: sitofp_fp80_i32_ld:674; X64: # %bb.0:675; X64-NEXT: movl (%rdi), %eax676; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)677; X64-NEXT: fildl -{{[0-9]+}}(%rsp)678; X64-NEXT: retq679 %1 = load i32, ptr%a0680 %2 = sitofp i32 %1 to x86_fp80681 ret x86_fp80 %2682}683 684define x86_fp80 @sitofp_fp80_i64(i64 %a0) nounwind {685; X86-LABEL: sitofp_fp80_i64:686; X86: # %bb.0:687; X86-NEXT: fildll {{[0-9]+}}(%esp)688; X86-NEXT: retl689;690; X64-LABEL: sitofp_fp80_i64:691; X64: # %bb.0:692; X64-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)693; X64-NEXT: fildll -{{[0-9]+}}(%rsp)694; X64-NEXT: retq695 %1 = sitofp i64 %a0 to x86_fp80696 ret x86_fp80 %1697}698 699define x86_fp80 @sitofp_fp80_i64_ld(ptr%a0) nounwind {700; X86-LABEL: sitofp_fp80_i64_ld:701; X86: # %bb.0:702; X86-NEXT: movl {{[0-9]+}}(%esp), %eax703; X86-NEXT: fildll (%eax)704; X86-NEXT: retl705;706; X64-LABEL: sitofp_fp80_i64_ld:707; X64: # %bb.0:708; X64-NEXT: movq (%rdi), %rax709; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)710; X64-NEXT: fildll -{{[0-9]+}}(%rsp)711; X64-NEXT: retq712 %1 = load i64, ptr%a0713 %2 = sitofp i64 %1 to x86_fp80714 ret x86_fp80 %2715}716 717;718; uitofp719;720 721define x86_fp80 @uitofp_fp80_i16(i16 %a0) nounwind {722; X86-LABEL: uitofp_fp80_i16:723; X86: # %bb.0:724; X86-NEXT: pushl %eax725; X86-NEXT: movzwl {{[0-9]+}}(%esp), %eax726; X86-NEXT: movl %eax, (%esp)727; X86-NEXT: fildl (%esp)728; X86-NEXT: popl %eax729; X86-NEXT: retl730;731; X64-LABEL: uitofp_fp80_i16:732; X64: # %bb.0:733; X64-NEXT: movzwl %di, %eax734; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)735; X64-NEXT: fildl -{{[0-9]+}}(%rsp)736; X64-NEXT: retq737 %1 = uitofp i16 %a0 to x86_fp80738 ret x86_fp80 %1739}740 741define x86_fp80 @uitofp_fp80_i16_ld(ptr%a0) nounwind {742; X86-LABEL: uitofp_fp80_i16_ld:743; X86: # %bb.0:744; X86-NEXT: pushl %eax745; X86-NEXT: movl {{[0-9]+}}(%esp), %eax746; X86-NEXT: movzwl (%eax), %eax747; X86-NEXT: movl %eax, (%esp)748; X86-NEXT: fildl (%esp)749; X86-NEXT: popl %eax750; X86-NEXT: retl751;752; X64-LABEL: uitofp_fp80_i16_ld:753; X64: # %bb.0:754; X64-NEXT: movzwl (%rdi), %eax755; X64-NEXT: movl %eax, -{{[0-9]+}}(%rsp)756; X64-NEXT: fildl -{{[0-9]+}}(%rsp)757; X64-NEXT: retq758 %1 = load i16, ptr%a0759 %2 = uitofp i16 %1 to x86_fp80760 ret x86_fp80 %2761}762 763define x86_fp80 @uitofp_fp80_i32(i32 %a0) nounwind {764; X86-LABEL: uitofp_fp80_i32:765; X86: # %bb.0:766; X86-NEXT: pushl %ebp767; X86-NEXT: movl %esp, %ebp768; X86-NEXT: andl $-8, %esp769; X86-NEXT: subl $8, %esp770; X86-NEXT: movl 8(%ebp), %eax771; X86-NEXT: movl %eax, (%esp)772; X86-NEXT: movl $0, {{[0-9]+}}(%esp)773; X86-NEXT: fildll (%esp)774; X86-NEXT: movl %ebp, %esp775; X86-NEXT: popl %ebp776; X86-NEXT: retl777;778; X64-LABEL: uitofp_fp80_i32:779; X64: # %bb.0:780; X64-NEXT: movl %edi, %eax781; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)782; X64-NEXT: fildll -{{[0-9]+}}(%rsp)783; X64-NEXT: retq784 %1 = uitofp i32 %a0 to x86_fp80785 ret x86_fp80 %1786}787 788define x86_fp80 @uitofp_fp80_i32_ld(ptr%a0) nounwind {789; X86-LABEL: uitofp_fp80_i32_ld:790; X86: # %bb.0:791; X86-NEXT: pushl %ebp792; X86-NEXT: movl %esp, %ebp793; X86-NEXT: andl $-8, %esp794; X86-NEXT: subl $8, %esp795; X86-NEXT: movl 8(%ebp), %eax796; X86-NEXT: movl (%eax), %eax797; X86-NEXT: movl %eax, (%esp)798; X86-NEXT: movl $0, {{[0-9]+}}(%esp)799; X86-NEXT: fildll (%esp)800; X86-NEXT: movl %ebp, %esp801; X86-NEXT: popl %ebp802; X86-NEXT: retl803;804; X64-LABEL: uitofp_fp80_i32_ld:805; X64: # %bb.0:806; X64-NEXT: movl (%rdi), %eax807; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)808; X64-NEXT: fildll -{{[0-9]+}}(%rsp)809; X64-NEXT: retq810 %1 = load i32, ptr%a0811 %2 = uitofp i32 %1 to x86_fp80812 ret x86_fp80 %2813}814 815define x86_fp80 @uitofp_fp80_i64(i64 %a0) nounwind {816; X86-LABEL: uitofp_fp80_i64:817; X86: # %bb.0:818; X86-NEXT: pushl %ebp819; X86-NEXT: movl %esp, %ebp820; X86-NEXT: andl $-8, %esp821; X86-NEXT: subl $8, %esp822; X86-NEXT: movl 8(%ebp), %eax823; X86-NEXT: movl 12(%ebp), %ecx824; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp)825; X86-NEXT: movl %eax, (%esp)826; X86-NEXT: shrl $31, %ecx827; X86-NEXT: fildll (%esp)828; X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%ecx,4)829; X86-NEXT: movl %ebp, %esp830; X86-NEXT: popl %ebp831; X86-NEXT: retl832;833; X64-LABEL: uitofp_fp80_i64:834; X64: # %bb.0:835; X64-NEXT: movq %rdi, -{{[0-9]+}}(%rsp)836; X64-NEXT: xorl %eax, %eax837; X64-NEXT: testq %rdi, %rdi838; X64-NEXT: sets %al839; X64-NEXT: fildll -{{[0-9]+}}(%rsp)840; X64-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%rax,4)841; X64-NEXT: retq842 %1 = uitofp i64 %a0 to x86_fp80843 ret x86_fp80 %1844}845 846define x86_fp80 @uitofp_fp80_i64_ld(ptr%a0) nounwind {847; X86-LABEL: uitofp_fp80_i64_ld:848; X86: # %bb.0:849; X86-NEXT: pushl %ebp850; X86-NEXT: movl %esp, %ebp851; X86-NEXT: andl $-8, %esp852; X86-NEXT: subl $8, %esp853; X86-NEXT: movl 8(%ebp), %eax854; X86-NEXT: movl (%eax), %ecx855; X86-NEXT: movl 4(%eax), %eax856; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)857; X86-NEXT: movl %ecx, (%esp)858; X86-NEXT: shrl $31, %eax859; X86-NEXT: fildll (%esp)860; X86-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%eax,4)861; X86-NEXT: movl %ebp, %esp862; X86-NEXT: popl %ebp863; X86-NEXT: retl864;865; X64-LABEL: uitofp_fp80_i64_ld:866; X64: # %bb.0:867; X64-NEXT: movq (%rdi), %rax868; X64-NEXT: movq %rax, -{{[0-9]+}}(%rsp)869; X64-NEXT: xorl %ecx, %ecx870; X64-NEXT: testq %rax, %rax871; X64-NEXT: sets %cl872; X64-NEXT: fildll -{{[0-9]+}}(%rsp)873; X64-NEXT: fadds {{\.?LCPI[0-9]+_[0-9]+}}(,%rcx,4)874; X64-NEXT: retq875 %1 = load i64, ptr%a0876 %2 = uitofp i64 %1 to x86_fp80877 ret x86_fp80 %2878}879 880;881; floor882;883 884define x86_fp80 @floor_fp80(x86_fp80 %a0) nounwind {885; X86-LABEL: floor_fp80:886; X86: # %bb.0:887; X86-NEXT: subl $12, %esp888; X86-NEXT: fldt {{[0-9]+}}(%esp)889; X86-NEXT: fstpt (%esp)890; X86-NEXT: calll floorl891; X86-NEXT: addl $12, %esp892; X86-NEXT: retl893;894; X64-LABEL: floor_fp80:895; X64: # %bb.0:896; X64-NEXT: subq $24, %rsp897; X64-NEXT: fldt {{[0-9]+}}(%rsp)898; X64-NEXT: fstpt (%rsp)899; X64-NEXT: callq floorl@PLT900; X64-NEXT: addq $24, %rsp901; X64-NEXT: retq902 %1 = call x86_fp80 @llvm.floor.f80(x86_fp80 %a0)903 ret x86_fp80 %1904}905 906define x86_fp80 @floor_fp80_ld(ptr%a0) nounwind {907; X86-LABEL: floor_fp80_ld:908; X86: # %bb.0:909; X86-NEXT: subl $12, %esp910; X86-NEXT: movl {{[0-9]+}}(%esp), %eax911; X86-NEXT: fldt (%eax)912; X86-NEXT: fstpt (%esp)913; X86-NEXT: calll floorl914; X86-NEXT: addl $12, %esp915; X86-NEXT: retl916;917; X64-LABEL: floor_fp80_ld:918; X64: # %bb.0:919; X64-NEXT: subq $24, %rsp920; X64-NEXT: fldt (%rdi)921; X64-NEXT: fstpt (%rsp)922; X64-NEXT: callq floorl@PLT923; X64-NEXT: addq $24, %rsp924; X64-NEXT: retq925 %1 = load x86_fp80, ptr%a0926 %2 = call x86_fp80 @llvm.floor.f80(x86_fp80 %1)927 ret x86_fp80 %2928}929 930declare x86_fp80 @llvm.floor.f80(x86_fp80 %p)931 932;933; ceil934;935 936define x86_fp80 @ceil_fp80(x86_fp80 %a0) nounwind {937; X86-LABEL: ceil_fp80:938; X86: # %bb.0:939; X86-NEXT: subl $12, %esp940; X86-NEXT: fldt {{[0-9]+}}(%esp)941; X86-NEXT: fstpt (%esp)942; X86-NEXT: calll ceill943; X86-NEXT: addl $12, %esp944; X86-NEXT: retl945;946; X64-LABEL: ceil_fp80:947; X64: # %bb.0:948; X64-NEXT: subq $24, %rsp949; X64-NEXT: fldt {{[0-9]+}}(%rsp)950; X64-NEXT: fstpt (%rsp)951; X64-NEXT: callq ceill@PLT952; X64-NEXT: addq $24, %rsp953; X64-NEXT: retq954 %1 = call x86_fp80 @llvm.ceil.f80(x86_fp80 %a0)955 ret x86_fp80 %1956}957 958define x86_fp80 @ceil_fp80_ld(ptr%a0) nounwind {959; X86-LABEL: ceil_fp80_ld:960; X86: # %bb.0:961; X86-NEXT: subl $12, %esp962; X86-NEXT: movl {{[0-9]+}}(%esp), %eax963; X86-NEXT: fldt (%eax)964; X86-NEXT: fstpt (%esp)965; X86-NEXT: calll ceill966; X86-NEXT: addl $12, %esp967; X86-NEXT: retl968;969; X64-LABEL: ceil_fp80_ld:970; X64: # %bb.0:971; X64-NEXT: subq $24, %rsp972; X64-NEXT: fldt (%rdi)973; X64-NEXT: fstpt (%rsp)974; X64-NEXT: callq ceill@PLT975; X64-NEXT: addq $24, %rsp976; X64-NEXT: retq977 %1 = load x86_fp80, ptr%a0978 %2 = call x86_fp80 @llvm.ceil.f80(x86_fp80 %1)979 ret x86_fp80 %2980}981 982declare x86_fp80 @llvm.ceil.f80(x86_fp80 %p)983 984;985; trunc986;987 988define x86_fp80 @trunc_fp80(x86_fp80 %a0) nounwind {989; X86-LABEL: trunc_fp80:990; X86: # %bb.0:991; X86-NEXT: subl $12, %esp992; X86-NEXT: fldt {{[0-9]+}}(%esp)993; X86-NEXT: fstpt (%esp)994; X86-NEXT: calll truncl995; X86-NEXT: addl $12, %esp996; X86-NEXT: retl997;998; X64-LABEL: trunc_fp80:999; X64: # %bb.0:1000; X64-NEXT: subq $24, %rsp1001; X64-NEXT: fldt {{[0-9]+}}(%rsp)1002; X64-NEXT: fstpt (%rsp)1003; X64-NEXT: callq truncl@PLT1004; X64-NEXT: addq $24, %rsp1005; X64-NEXT: retq1006 %1 = call x86_fp80 @llvm.trunc.f80(x86_fp80 %a0)1007 ret x86_fp80 %11008}1009 1010define x86_fp80 @trunc_fp80_ld(ptr%a0) nounwind {1011; X86-LABEL: trunc_fp80_ld:1012; X86: # %bb.0:1013; X86-NEXT: subl $12, %esp1014; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1015; X86-NEXT: fldt (%eax)1016; X86-NEXT: fstpt (%esp)1017; X86-NEXT: calll truncl1018; X86-NEXT: addl $12, %esp1019; X86-NEXT: retl1020;1021; X64-LABEL: trunc_fp80_ld:1022; X64: # %bb.0:1023; X64-NEXT: subq $24, %rsp1024; X64-NEXT: fldt (%rdi)1025; X64-NEXT: fstpt (%rsp)1026; X64-NEXT: callq truncl@PLT1027; X64-NEXT: addq $24, %rsp1028; X64-NEXT: retq1029 %1 = load x86_fp80, ptr%a01030 %2 = call x86_fp80 @llvm.trunc.f80(x86_fp80 %1)1031 ret x86_fp80 %21032}1033 1034declare x86_fp80 @llvm.trunc.f80(x86_fp80 %p)1035 1036;1037; rint1038;1039 1040define x86_fp80 @rint_fp80(x86_fp80 %a0) nounwind {1041; X86-LABEL: rint_fp80:1042; X86: # %bb.0:1043; X86-NEXT: subl $12, %esp1044; X86-NEXT: fldt {{[0-9]+}}(%esp)1045; X86-NEXT: fstpt (%esp)1046; X86-NEXT: calll rintl1047; X86-NEXT: addl $12, %esp1048; X86-NEXT: retl1049;1050; X64-LABEL: rint_fp80:1051; X64: # %bb.0:1052; X64-NEXT: subq $24, %rsp1053; X64-NEXT: fldt {{[0-9]+}}(%rsp)1054; X64-NEXT: fstpt (%rsp)1055; X64-NEXT: callq rintl@PLT1056; X64-NEXT: addq $24, %rsp1057; X64-NEXT: retq1058 %1 = call x86_fp80 @llvm.rint.f80(x86_fp80 %a0)1059 ret x86_fp80 %11060}1061 1062define x86_fp80 @rint_fp80_ld(ptr%a0) nounwind {1063; X86-LABEL: rint_fp80_ld:1064; X86: # %bb.0:1065; X86-NEXT: subl $12, %esp1066; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1067; X86-NEXT: fldt (%eax)1068; X86-NEXT: fstpt (%esp)1069; X86-NEXT: calll rintl1070; X86-NEXT: addl $12, %esp1071; X86-NEXT: retl1072;1073; X64-LABEL: rint_fp80_ld:1074; X64: # %bb.0:1075; X64-NEXT: subq $24, %rsp1076; X64-NEXT: fldt (%rdi)1077; X64-NEXT: fstpt (%rsp)1078; X64-NEXT: callq rintl@PLT1079; X64-NEXT: addq $24, %rsp1080; X64-NEXT: retq1081 %1 = load x86_fp80, ptr%a01082 %2 = call x86_fp80 @llvm.rint.f80(x86_fp80 %1)1083 ret x86_fp80 %21084}1085 1086declare x86_fp80 @llvm.rint.f80(x86_fp80 %p)1087 1088;1089; roundeven1090;1091 1092define x86_fp80 @roundeven_fp80(x86_fp80 %a0) nounwind {1093; X86-LABEL: roundeven_fp80:1094; X86: # %bb.0:1095; X86-NEXT: subl $12, %esp1096; X86-NEXT: fldt {{[0-9]+}}(%esp)1097; X86-NEXT: fstpt (%esp)1098; X86-NEXT: calll roundevenl1099; X86-NEXT: addl $12, %esp1100; X86-NEXT: retl1101;1102; X64-LABEL: roundeven_fp80:1103; X64: # %bb.0:1104; X64-NEXT: subq $24, %rsp1105; X64-NEXT: fldt {{[0-9]+}}(%rsp)1106; X64-NEXT: fstpt (%rsp)1107; X64-NEXT: callq roundevenl@PLT1108; X64-NEXT: addq $24, %rsp1109; X64-NEXT: retq1110 %1 = call x86_fp80 @llvm.roundeven.f80(x86_fp80 %a0)1111 ret x86_fp80 %11112}1113 1114define x86_fp80 @roundeven_fp80_ld(ptr%a0) nounwind {1115; X86-LABEL: roundeven_fp80_ld:1116; X86: # %bb.0:1117; X86-NEXT: subl $12, %esp1118; X86-NEXT: movl {{[0-9]+}}(%esp), %eax1119; X86-NEXT: fldt (%eax)1120; X86-NEXT: fstpt (%esp)1121; X86-NEXT: calll roundevenl1122; X86-NEXT: addl $12, %esp1123; X86-NEXT: retl1124;1125; X64-LABEL: roundeven_fp80_ld:1126; X64: # %bb.0:1127; X64-NEXT: subq $24, %rsp1128; X64-NEXT: fldt (%rdi)1129; X64-NEXT: fstpt (%rsp)1130; X64-NEXT: callq roundevenl@PLT1131; X64-NEXT: addq $24, %rsp1132; X64-NEXT: retq1133 %1 = load x86_fp80, ptr%a01134 %2 = call x86_fp80 @llvm.roundeven.f80(x86_fp80 %1)1135 ret x86_fp80 %21136}1137 1138declare x86_fp80 @llvm.roundeven.f80(x86_fp80 %p)1139