870 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown-unknown -O3 | FileCheck %s --check-prefixes=X863; RUN: llc < %s -mtriple=x86_64-unknown-unknown -O3 | FileCheck %s --check-prefixes=X644 5define x86_fp80 @fma(x86_fp80 %x, x86_fp80 %y, x86_fp80 %z) nounwind strictfp {6; X86-LABEL: fma:7; X86: # %bb.0: # %entry8; X86-NEXT: subl $36, %esp9; X86-NEXT: fldt {{[0-9]+}}(%esp)10; X86-NEXT: fldt {{[0-9]+}}(%esp)11; X86-NEXT: fldt {{[0-9]+}}(%esp)12; X86-NEXT: fstpt {{[0-9]+}}(%esp)13; X86-NEXT: fstpt {{[0-9]+}}(%esp)14; X86-NEXT: fstpt (%esp)15; X86-NEXT: wait16; X86-NEXT: calll fmal17; X86-NEXT: addl $36, %esp18; X86-NEXT: retl19;20; X64-LABEL: fma:21; X64: # %bb.0: # %entry22; X64-NEXT: subq $56, %rsp23; X64-NEXT: fldt {{[0-9]+}}(%rsp)24; X64-NEXT: fldt {{[0-9]+}}(%rsp)25; X64-NEXT: fldt {{[0-9]+}}(%rsp)26; X64-NEXT: fstpt {{[0-9]+}}(%rsp)27; X64-NEXT: fstpt {{[0-9]+}}(%rsp)28; X64-NEXT: fstpt (%rsp)29; X64-NEXT: wait30; X64-NEXT: callq fmal@PLT31; X64-NEXT: addq $56, %rsp32; X64-NEXT: retq33entry:34 %fma = call x86_fp80 @llvm.experimental.constrained.fma.f80(x86_fp80 %x, x86_fp80 %y, x86_fp80 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #035 ret x86_fp80 %fma36}37 38define x86_fp80 @frem(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {39; X86-LABEL: frem:40; X86: # %bb.0: # %entry41; X86-NEXT: subl $24, %esp42; X86-NEXT: fldt {{[0-9]+}}(%esp)43; X86-NEXT: fldt {{[0-9]+}}(%esp)44; X86-NEXT: fstpt {{[0-9]+}}(%esp)45; X86-NEXT: fstpt (%esp)46; X86-NEXT: wait47; X86-NEXT: calll fmodl48; X86-NEXT: addl $24, %esp49; X86-NEXT: retl50;51; X64-LABEL: frem:52; X64: # %bb.0: # %entry53; X64-NEXT: subq $40, %rsp54; X64-NEXT: fldt {{[0-9]+}}(%rsp)55; X64-NEXT: fldt {{[0-9]+}}(%rsp)56; X64-NEXT: fstpt {{[0-9]+}}(%rsp)57; X64-NEXT: fstpt (%rsp)58; X64-NEXT: wait59; X64-NEXT: callq fmodl@PLT60; X64-NEXT: addq $40, %rsp61; X64-NEXT: retq62entry:63 %div = call x86_fp80 @llvm.experimental.constrained.frem.f80(x86_fp80 %x, x86_fp80 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #064 ret x86_fp80 %div65}66 67define x86_fp80 @ceil(x86_fp80 %x) nounwind strictfp {68; X86-LABEL: ceil:69; X86: # %bb.0: # %entry70; X86-NEXT: subl $12, %esp71; X86-NEXT: fldt {{[0-9]+}}(%esp)72; X86-NEXT: fstpt (%esp)73; X86-NEXT: wait74; X86-NEXT: calll ceill75; X86-NEXT: addl $12, %esp76; X86-NEXT: retl77;78; X64-LABEL: ceil:79; X64: # %bb.0: # %entry80; X64-NEXT: subq $24, %rsp81; X64-NEXT: fldt {{[0-9]+}}(%rsp)82; X64-NEXT: fstpt (%rsp)83; X64-NEXT: wait84; X64-NEXT: callq ceill@PLT85; X64-NEXT: addq $24, %rsp86; X64-NEXT: retq87entry:88 %ceil = call x86_fp80 @llvm.experimental.constrained.ceil.f80(x86_fp80 %x, metadata !"fpexcept.strict") #089 ret x86_fp80 %ceil90}91 92define x86_fp80 @acos(x86_fp80 %x) nounwind strictfp {93; X86-LABEL: acos:94; X86: # %bb.0: # %entry95; X86-NEXT: subl $12, %esp96; X86-NEXT: fldt {{[0-9]+}}(%esp)97; X86-NEXT: fstpt (%esp)98; X86-NEXT: wait99; X86-NEXT: calll acosl100; X86-NEXT: addl $12, %esp101; X86-NEXT: retl102;103; X64-LABEL: acos:104; X64: # %bb.0: # %entry105; X64-NEXT: subq $24, %rsp106; X64-NEXT: fldt {{[0-9]+}}(%rsp)107; X64-NEXT: fstpt (%rsp)108; X64-NEXT: wait109; X64-NEXT: callq acosl@PLT110; X64-NEXT: addq $24, %rsp111; X64-NEXT: retq112entry:113 %acos = call x86_fp80 @llvm.experimental.constrained.acos.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0114 ret x86_fp80 %acos115}116 117define x86_fp80 @cos(x86_fp80 %x) nounwind strictfp {118; X86-LABEL: cos:119; X86: # %bb.0: # %entry120; X86-NEXT: subl $12, %esp121; X86-NEXT: fldt {{[0-9]+}}(%esp)122; X86-NEXT: fstpt (%esp)123; X86-NEXT: wait124; X86-NEXT: calll cosl125; X86-NEXT: addl $12, %esp126; X86-NEXT: retl127;128; X64-LABEL: cos:129; X64: # %bb.0: # %entry130; X64-NEXT: subq $24, %rsp131; X64-NEXT: fldt {{[0-9]+}}(%rsp)132; X64-NEXT: fstpt (%rsp)133; X64-NEXT: wait134; X64-NEXT: callq cosl@PLT135; X64-NEXT: addq $24, %rsp136; X64-NEXT: retq137entry:138 %cos = call x86_fp80 @llvm.experimental.constrained.cos.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0139 ret x86_fp80 %cos140}141 142define x86_fp80 @cosh(x86_fp80 %x) nounwind strictfp {143; X86-LABEL: cosh:144; X86: # %bb.0: # %entry145; X86-NEXT: subl $12, %esp146; X86-NEXT: fldt {{[0-9]+}}(%esp)147; X86-NEXT: fstpt (%esp)148; X86-NEXT: wait149; X86-NEXT: calll coshl150; X86-NEXT: addl $12, %esp151; X86-NEXT: retl152;153; X64-LABEL: cosh:154; X64: # %bb.0: # %entry155; X64-NEXT: subq $24, %rsp156; X64-NEXT: fldt {{[0-9]+}}(%rsp)157; X64-NEXT: fstpt (%rsp)158; X64-NEXT: wait159; X64-NEXT: callq coshl@PLT160; X64-NEXT: addq $24, %rsp161; X64-NEXT: retq162entry:163 %cosh = call x86_fp80 @llvm.experimental.constrained.cosh.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0164 ret x86_fp80 %cosh165}166 167define x86_fp80 @exp(x86_fp80 %x) nounwind strictfp {168; X86-LABEL: exp:169; X86: # %bb.0: # %entry170; X86-NEXT: subl $12, %esp171; X86-NEXT: fldt {{[0-9]+}}(%esp)172; X86-NEXT: fstpt (%esp)173; X86-NEXT: wait174; X86-NEXT: calll expl175; X86-NEXT: addl $12, %esp176; X86-NEXT: retl177;178; X64-LABEL: exp:179; X64: # %bb.0: # %entry180; X64-NEXT: subq $24, %rsp181; X64-NEXT: fldt {{[0-9]+}}(%rsp)182; X64-NEXT: fstpt (%rsp)183; X64-NEXT: wait184; X64-NEXT: callq expl@PLT185; X64-NEXT: addq $24, %rsp186; X64-NEXT: retq187entry:188 %exp = call x86_fp80 @llvm.experimental.constrained.exp.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0189 ret x86_fp80 %exp190}191 192define x86_fp80 @exp2(x86_fp80 %x) nounwind strictfp {193; X86-LABEL: exp2:194; X86: # %bb.0: # %entry195; X86-NEXT: subl $12, %esp196; X86-NEXT: fldt {{[0-9]+}}(%esp)197; X86-NEXT: fstpt (%esp)198; X86-NEXT: wait199; X86-NEXT: calll exp2l200; X86-NEXT: addl $12, %esp201; X86-NEXT: retl202;203; X64-LABEL: exp2:204; X64: # %bb.0: # %entry205; X64-NEXT: subq $24, %rsp206; X64-NEXT: fldt {{[0-9]+}}(%rsp)207; X64-NEXT: fstpt (%rsp)208; X64-NEXT: wait209; X64-NEXT: callq exp2l@PLT210; X64-NEXT: addq $24, %rsp211; X64-NEXT: retq212entry:213 %exp2 = call x86_fp80 @llvm.experimental.constrained.exp2.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0214 ret x86_fp80 %exp2215}216 217define x86_fp80 @floor(x86_fp80 %x) nounwind strictfp {218; X86-LABEL: floor:219; X86: # %bb.0: # %entry220; X86-NEXT: subl $12, %esp221; X86-NEXT: fldt {{[0-9]+}}(%esp)222; X86-NEXT: fstpt (%esp)223; X86-NEXT: wait224; X86-NEXT: calll floorl225; X86-NEXT: addl $12, %esp226; X86-NEXT: retl227;228; X64-LABEL: floor:229; X64: # %bb.0: # %entry230; X64-NEXT: subq $24, %rsp231; X64-NEXT: fldt {{[0-9]+}}(%rsp)232; X64-NEXT: fstpt (%rsp)233; X64-NEXT: wait234; X64-NEXT: callq floorl@PLT235; X64-NEXT: addq $24, %rsp236; X64-NEXT: retq237entry:238 %floor = call x86_fp80 @llvm.experimental.constrained.floor.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0239 ret x86_fp80 %floor240}241 242define x86_fp80 @log(x86_fp80 %x) nounwind strictfp {243; X86-LABEL: log:244; X86: # %bb.0: # %entry245; X86-NEXT: subl $12, %esp246; X86-NEXT: fldt {{[0-9]+}}(%esp)247; X86-NEXT: fstpt (%esp)248; X86-NEXT: wait249; X86-NEXT: calll logl250; X86-NEXT: addl $12, %esp251; X86-NEXT: retl252;253; X64-LABEL: log:254; X64: # %bb.0: # %entry255; X64-NEXT: subq $24, %rsp256; X64-NEXT: fldt {{[0-9]+}}(%rsp)257; X64-NEXT: fstpt (%rsp)258; X64-NEXT: wait259; X64-NEXT: callq logl@PLT260; X64-NEXT: addq $24, %rsp261; X64-NEXT: retq262entry:263 %log = call x86_fp80 @llvm.experimental.constrained.log.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0264 ret x86_fp80 %log265}266 267define x86_fp80 @log10(x86_fp80 %x) nounwind strictfp {268; X86-LABEL: log10:269; X86: # %bb.0: # %entry270; X86-NEXT: subl $12, %esp271; X86-NEXT: fldt {{[0-9]+}}(%esp)272; X86-NEXT: fstpt (%esp)273; X86-NEXT: wait274; X86-NEXT: calll log10l275; X86-NEXT: addl $12, %esp276; X86-NEXT: retl277;278; X64-LABEL: log10:279; X64: # %bb.0: # %entry280; X64-NEXT: subq $24, %rsp281; X64-NEXT: fldt {{[0-9]+}}(%rsp)282; X64-NEXT: fstpt (%rsp)283; X64-NEXT: wait284; X64-NEXT: callq log10l@PLT285; X64-NEXT: addq $24, %rsp286; X64-NEXT: retq287entry:288 %log10 = call x86_fp80 @llvm.experimental.constrained.log10.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0289 ret x86_fp80 %log10290}291 292define x86_fp80 @log2(x86_fp80 %x) nounwind strictfp {293; X86-LABEL: log2:294; X86: # %bb.0: # %entry295; X86-NEXT: subl $12, %esp296; X86-NEXT: fldt {{[0-9]+}}(%esp)297; X86-NEXT: fstpt (%esp)298; X86-NEXT: wait299; X86-NEXT: calll log2l300; X86-NEXT: addl $12, %esp301; X86-NEXT: retl302;303; X64-LABEL: log2:304; X64: # %bb.0: # %entry305; X64-NEXT: subq $24, %rsp306; X64-NEXT: fldt {{[0-9]+}}(%rsp)307; X64-NEXT: fstpt (%rsp)308; X64-NEXT: wait309; X64-NEXT: callq log2l@PLT310; X64-NEXT: addq $24, %rsp311; X64-NEXT: retq312entry:313 %log2 = call x86_fp80 @llvm.experimental.constrained.log2.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0314 ret x86_fp80 %log2315}316 317define x86_fp80 @maxnum(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {318; X86-LABEL: maxnum:319; X86: # %bb.0: # %entry320; X86-NEXT: subl $24, %esp321; X86-NEXT: fldt {{[0-9]+}}(%esp)322; X86-NEXT: fldt {{[0-9]+}}(%esp)323; X86-NEXT: fstpt {{[0-9]+}}(%esp)324; X86-NEXT: fstpt (%esp)325; X86-NEXT: wait326; X86-NEXT: calll fmaxl327; X86-NEXT: addl $24, %esp328; X86-NEXT: retl329;330; X64-LABEL: maxnum:331; X64: # %bb.0: # %entry332; X64-NEXT: subq $40, %rsp333; X64-NEXT: fldt {{[0-9]+}}(%rsp)334; X64-NEXT: fldt {{[0-9]+}}(%rsp)335; X64-NEXT: fstpt {{[0-9]+}}(%rsp)336; X64-NEXT: fstpt (%rsp)337; X64-NEXT: wait338; X64-NEXT: callq fmaxl@PLT339; X64-NEXT: addq $40, %rsp340; X64-NEXT: retq341entry:342 %maxnum = call x86_fp80 @llvm.experimental.constrained.maxnum.f80(x86_fp80 %x, x86_fp80 %y, metadata !"fpexcept.strict") #0343 ret x86_fp80 %maxnum344}345 346define x86_fp80 @minnum(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {347; X86-LABEL: minnum:348; X86: # %bb.0: # %entry349; X86-NEXT: subl $24, %esp350; X86-NEXT: fldt {{[0-9]+}}(%esp)351; X86-NEXT: fldt {{[0-9]+}}(%esp)352; X86-NEXT: fstpt {{[0-9]+}}(%esp)353; X86-NEXT: fstpt (%esp)354; X86-NEXT: wait355; X86-NEXT: calll fminl356; X86-NEXT: addl $24, %esp357; X86-NEXT: retl358;359; X64-LABEL: minnum:360; X64: # %bb.0: # %entry361; X64-NEXT: subq $40, %rsp362; X64-NEXT: fldt {{[0-9]+}}(%rsp)363; X64-NEXT: fldt {{[0-9]+}}(%rsp)364; X64-NEXT: fstpt {{[0-9]+}}(%rsp)365; X64-NEXT: fstpt (%rsp)366; X64-NEXT: wait367; X64-NEXT: callq fminl@PLT368; X64-NEXT: addq $40, %rsp369; X64-NEXT: retq370entry:371 %minnum = call x86_fp80 @llvm.experimental.constrained.minnum.f80(x86_fp80 %x, x86_fp80 %y, metadata !"fpexcept.strict") #0372 ret x86_fp80 %minnum373}374 375define x86_fp80 @nearbyint(x86_fp80 %x) nounwind strictfp {376; X86-LABEL: nearbyint:377; X86: # %bb.0: # %entry378; X86-NEXT: subl $12, %esp379; X86-NEXT: fldt {{[0-9]+}}(%esp)380; X86-NEXT: fstpt (%esp)381; X86-NEXT: wait382; X86-NEXT: calll nearbyintl383; X86-NEXT: addl $12, %esp384; X86-NEXT: retl385;386; X64-LABEL: nearbyint:387; X64: # %bb.0: # %entry388; X64-NEXT: subq $24, %rsp389; X64-NEXT: fldt {{[0-9]+}}(%rsp)390; X64-NEXT: fstpt (%rsp)391; X64-NEXT: wait392; X64-NEXT: callq nearbyintl@PLT393; X64-NEXT: addq $24, %rsp394; X64-NEXT: retq395entry:396 %nearbyint = call x86_fp80 @llvm.experimental.constrained.nearbyint.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0397 ret x86_fp80 %nearbyint398}399 400define x86_fp80 @pow(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {401; X86-LABEL: pow:402; X86: # %bb.0: # %entry403; X86-NEXT: subl $24, %esp404; X86-NEXT: fldt {{[0-9]+}}(%esp)405; X86-NEXT: fldt {{[0-9]+}}(%esp)406; X86-NEXT: fstpt {{[0-9]+}}(%esp)407; X86-NEXT: fstpt (%esp)408; X86-NEXT: wait409; X86-NEXT: calll powl410; X86-NEXT: addl $24, %esp411; X86-NEXT: retl412;413; X64-LABEL: pow:414; X64: # %bb.0: # %entry415; X64-NEXT: subq $40, %rsp416; X64-NEXT: fldt {{[0-9]+}}(%rsp)417; X64-NEXT: fldt {{[0-9]+}}(%rsp)418; X64-NEXT: fstpt {{[0-9]+}}(%rsp)419; X64-NEXT: fstpt (%rsp)420; X64-NEXT: wait421; X64-NEXT: callq powl@PLT422; X64-NEXT: addq $40, %rsp423; X64-NEXT: retq424entry:425 %pow = call x86_fp80 @llvm.experimental.constrained.pow.f80(x86_fp80 %x, x86_fp80 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0426 ret x86_fp80 %pow427}428 429define x86_fp80 @powi(x86_fp80 %x, i32 %y) nounwind strictfp {430; X86-LABEL: powi:431; X86: # %bb.0: # %entry432; X86-NEXT: subl $16, %esp433; X86-NEXT: fldt {{[0-9]+}}(%esp)434; X86-NEXT: wait435; X86-NEXT: movl {{[0-9]+}}(%esp), %eax436; X86-NEXT: movl %eax, {{[0-9]+}}(%esp)437; X86-NEXT: fstpt (%esp)438; X86-NEXT: wait439; X86-NEXT: calll __powixf2440; X86-NEXT: addl $16, %esp441; X86-NEXT: retl442;443; X64-LABEL: powi:444; X64: # %bb.0: # %entry445; X64-NEXT: subq $24, %rsp446; X64-NEXT: fldt {{[0-9]+}}(%rsp)447; X64-NEXT: fstpt (%rsp)448; X64-NEXT: wait449; X64-NEXT: callq __powixf2@PLT450; X64-NEXT: addq $24, %rsp451; X64-NEXT: retq452entry:453 %powi = call x86_fp80 @llvm.experimental.constrained.powi.f80(x86_fp80 %x, i32 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0454 ret x86_fp80 %powi455}456 457define x86_fp80 @rint(x86_fp80 %x) nounwind strictfp {458; X86-LABEL: rint:459; X86: # %bb.0: # %entry460; X86-NEXT: subl $12, %esp461; X86-NEXT: fldt {{[0-9]+}}(%esp)462; X86-NEXT: fstpt (%esp)463; X86-NEXT: wait464; X86-NEXT: calll rintl465; X86-NEXT: addl $12, %esp466; X86-NEXT: retl467;468; X64-LABEL: rint:469; X64: # %bb.0: # %entry470; X64-NEXT: subq $24, %rsp471; X64-NEXT: fldt {{[0-9]+}}(%rsp)472; X64-NEXT: fstpt (%rsp)473; X64-NEXT: wait474; X64-NEXT: callq rintl@PLT475; X64-NEXT: addq $24, %rsp476; X64-NEXT: retq477entry:478 %rint = call x86_fp80 @llvm.experimental.constrained.rint.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0479 ret x86_fp80 %rint480}481 482define x86_fp80 @round(x86_fp80 %x) nounwind strictfp {483; X86-LABEL: round:484; X86: # %bb.0: # %entry485; X86-NEXT: subl $12, %esp486; X86-NEXT: fldt {{[0-9]+}}(%esp)487; X86-NEXT: fstpt (%esp)488; X86-NEXT: wait489; X86-NEXT: calll roundl490; X86-NEXT: addl $12, %esp491; X86-NEXT: retl492;493; X64-LABEL: round:494; X64: # %bb.0: # %entry495; X64-NEXT: subq $24, %rsp496; X64-NEXT: fldt {{[0-9]+}}(%rsp)497; X64-NEXT: fstpt (%rsp)498; X64-NEXT: wait499; X64-NEXT: callq roundl@PLT500; X64-NEXT: addq $24, %rsp501; X64-NEXT: retq502entry:503 %round = call x86_fp80 @llvm.experimental.constrained.round.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0504 ret x86_fp80 %round505}506 507define x86_fp80 @roundeven(x86_fp80 %x) nounwind strictfp {508; X86-LABEL: roundeven:509; X86: # %bb.0: # %entry510; X86-NEXT: subl $12, %esp511; X86-NEXT: fldt {{[0-9]+}}(%esp)512; X86-NEXT: fstpt (%esp)513; X86-NEXT: wait514; X86-NEXT: calll roundevenl515; X86-NEXT: addl $12, %esp516; X86-NEXT: retl517;518; X64-LABEL: roundeven:519; X64: # %bb.0: # %entry520; X64-NEXT: subq $24, %rsp521; X64-NEXT: fldt {{[0-9]+}}(%rsp)522; X64-NEXT: fstpt (%rsp)523; X64-NEXT: wait524; X64-NEXT: callq roundevenl@PLT525; X64-NEXT: addq $24, %rsp526; X64-NEXT: retq527entry:528 %roundeven = call x86_fp80 @llvm.experimental.constrained.roundeven.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0529 ret x86_fp80 %roundeven530}531 532define x86_fp80 @asin(x86_fp80 %x) nounwind strictfp {533; X86-LABEL: asin:534; X86: # %bb.0: # %entry535; X86-NEXT: subl $12, %esp536; X86-NEXT: fldt {{[0-9]+}}(%esp)537; X86-NEXT: fstpt (%esp)538; X86-NEXT: wait539; X86-NEXT: calll asinl540; X86-NEXT: addl $12, %esp541; X86-NEXT: retl542;543; X64-LABEL: asin:544; X64: # %bb.0: # %entry545; X64-NEXT: subq $24, %rsp546; X64-NEXT: fldt {{[0-9]+}}(%rsp)547; X64-NEXT: fstpt (%rsp)548; X64-NEXT: wait549; X64-NEXT: callq asinl@PLT550; X64-NEXT: addq $24, %rsp551; X64-NEXT: retq552entry:553 %asin = call x86_fp80 @llvm.experimental.constrained.asin.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0554 ret x86_fp80 %asin555}556 557define x86_fp80 @sin(x86_fp80 %x) nounwind strictfp {558; X86-LABEL: sin:559; X86: # %bb.0: # %entry560; X86-NEXT: subl $12, %esp561; X86-NEXT: fldt {{[0-9]+}}(%esp)562; X86-NEXT: fstpt (%esp)563; X86-NEXT: wait564; X86-NEXT: calll sinl565; X86-NEXT: addl $12, %esp566; X86-NEXT: retl567;568; X64-LABEL: sin:569; X64: # %bb.0: # %entry570; X64-NEXT: subq $24, %rsp571; X64-NEXT: fldt {{[0-9]+}}(%rsp)572; X64-NEXT: fstpt (%rsp)573; X64-NEXT: wait574; X64-NEXT: callq sinl@PLT575; X64-NEXT: addq $24, %rsp576; X64-NEXT: retq577entry:578 %sin = call x86_fp80 @llvm.experimental.constrained.sin.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0579 ret x86_fp80 %sin580}581 582define x86_fp80 @sinh(x86_fp80 %x) nounwind strictfp {583; X86-LABEL: sinh:584; X86: # %bb.0: # %entry585; X86-NEXT: subl $12, %esp586; X86-NEXT: fldt {{[0-9]+}}(%esp)587; X86-NEXT: fstpt (%esp)588; X86-NEXT: wait589; X86-NEXT: calll sinhl590; X86-NEXT: addl $12, %esp591; X86-NEXT: retl592;593; X64-LABEL: sinh:594; X64: # %bb.0: # %entry595; X64-NEXT: subq $24, %rsp596; X64-NEXT: fldt {{[0-9]+}}(%rsp)597; X64-NEXT: fstpt (%rsp)598; X64-NEXT: wait599; X64-NEXT: callq sinhl@PLT600; X64-NEXT: addq $24, %rsp601; X64-NEXT: retq602entry:603 %sinh = call x86_fp80 @llvm.experimental.constrained.sinh.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0604 ret x86_fp80 %sinh605}606 607define x86_fp80 @atan(x86_fp80 %x) nounwind strictfp {608; X86-LABEL: atan:609; X86: # %bb.0: # %entry610; X86-NEXT: subl $12, %esp611; X86-NEXT: fldt {{[0-9]+}}(%esp)612; X86-NEXT: fstpt (%esp)613; X86-NEXT: wait614; X86-NEXT: calll atanl615; X86-NEXT: addl $12, %esp616; X86-NEXT: retl617;618; X64-LABEL: atan:619; X64: # %bb.0: # %entry620; X64-NEXT: subq $24, %rsp621; X64-NEXT: fldt {{[0-9]+}}(%rsp)622; X64-NEXT: fstpt (%rsp)623; X64-NEXT: wait624; X64-NEXT: callq atanl@PLT625; X64-NEXT: addq $24, %rsp626; X64-NEXT: retq627entry:628 %atan = call x86_fp80 @llvm.experimental.constrained.atan.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0629 ret x86_fp80 %atan630}631 632define x86_fp80 @atan2(x86_fp80 %x, x86_fp80 %y) nounwind strictfp {633; X86-LABEL: atan2:634; X86: # %bb.0: # %entry635; X86-NEXT: subl $24, %esp636; X86-NEXT: fldt {{[0-9]+}}(%esp)637; X86-NEXT: fldt {{[0-9]+}}(%esp)638; X86-NEXT: fstpt {{[0-9]+}}(%esp)639; X86-NEXT: fstpt (%esp)640; X86-NEXT: wait641; X86-NEXT: calll atan2l642; X86-NEXT: addl $24, %esp643; X86-NEXT: retl644;645; X64-LABEL: atan2:646; X64: # %bb.0: # %entry647; X64-NEXT: subq $40, %rsp648; X64-NEXT: fldt {{[0-9]+}}(%rsp)649; X64-NEXT: fldt {{[0-9]+}}(%rsp)650; X64-NEXT: fstpt {{[0-9]+}}(%rsp)651; X64-NEXT: fstpt (%rsp)652; X64-NEXT: wait653; X64-NEXT: callq atan2l@PLT654; X64-NEXT: addq $40, %rsp655; X64-NEXT: retq656entry:657 %atan2 = call x86_fp80 @llvm.experimental.constrained.atan2.f80(x86_fp80 %x, x86_fp80 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0658 ret x86_fp80 %atan2659}660 661define x86_fp80 @tan(x86_fp80 %x) nounwind strictfp {662; X86-LABEL: tan:663; X86: # %bb.0: # %entry664; X86-NEXT: subl $12, %esp665; X86-NEXT: fldt {{[0-9]+}}(%esp)666; X86-NEXT: fstpt (%esp)667; X86-NEXT: wait668; X86-NEXT: calll tanl669; X86-NEXT: addl $12, %esp670; X86-NEXT: retl671;672; X64-LABEL: tan:673; X64: # %bb.0: # %entry674; X64-NEXT: subq $24, %rsp675; X64-NEXT: fldt {{[0-9]+}}(%rsp)676; X64-NEXT: fstpt (%rsp)677; X64-NEXT: wait678; X64-NEXT: callq tanl@PLT679; X64-NEXT: addq $24, %rsp680; X64-NEXT: retq681entry:682 %tan = call x86_fp80 @llvm.experimental.constrained.tan.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0683 ret x86_fp80 %tan684}685 686define x86_fp80 @tanh(x86_fp80 %x) nounwind strictfp {687; X86-LABEL: tanh:688; X86: # %bb.0: # %entry689; X86-NEXT: subl $12, %esp690; X86-NEXT: fldt {{[0-9]+}}(%esp)691; X86-NEXT: fstpt (%esp)692; X86-NEXT: wait693; X86-NEXT: calll tanhl694; X86-NEXT: addl $12, %esp695; X86-NEXT: retl696;697; X64-LABEL: tanh:698; X64: # %bb.0: # %entry699; X64-NEXT: subq $24, %rsp700; X64-NEXT: fldt {{[0-9]+}}(%rsp)701; X64-NEXT: fstpt (%rsp)702; X64-NEXT: wait703; X64-NEXT: callq tanhl@PLT704; X64-NEXT: addq $24, %rsp705; X64-NEXT: retq706entry:707 %tanh = call x86_fp80 @llvm.experimental.constrained.tanh.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0708 ret x86_fp80 %tanh709}710 711define x86_fp80 @trunc(x86_fp80 %x) nounwind strictfp {712; X86-LABEL: trunc:713; X86: # %bb.0: # %entry714; X86-NEXT: subl $12, %esp715; X86-NEXT: fldt {{[0-9]+}}(%esp)716; X86-NEXT: fstpt (%esp)717; X86-NEXT: wait718; X86-NEXT: calll truncl719; X86-NEXT: addl $12, %esp720; X86-NEXT: retl721;722; X64-LABEL: trunc:723; X64: # %bb.0: # %entry724; X64-NEXT: subq $24, %rsp725; X64-NEXT: fldt {{[0-9]+}}(%rsp)726; X64-NEXT: fstpt (%rsp)727; X64-NEXT: wait728; X64-NEXT: callq truncl@PLT729; X64-NEXT: addq $24, %rsp730; X64-NEXT: retq731entry:732 %trunc = call x86_fp80 @llvm.experimental.constrained.trunc.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0733 ret x86_fp80 %trunc734}735 736define i32 @lrint(x86_fp80 %x) nounwind strictfp {737; X86-LABEL: lrint:738; X86: # %bb.0: # %entry739; X86-NEXT: subl $12, %esp740; X86-NEXT: fldt {{[0-9]+}}(%esp)741; X86-NEXT: fstpt (%esp)742; X86-NEXT: wait743; X86-NEXT: calll lrintl744; X86-NEXT: addl $12, %esp745; X86-NEXT: retl746;747; X64-LABEL: lrint:748; X64: # %bb.0: # %entry749; X64-NEXT: subq $24, %rsp750; X64-NEXT: fldt {{[0-9]+}}(%rsp)751; X64-NEXT: fstpt (%rsp)752; X64-NEXT: wait753; X64-NEXT: callq lrintl@PLT754; X64-NEXT: addq $24, %rsp755; X64-NEXT: retq756entry:757 %rint = call i32 @llvm.experimental.constrained.lrint.i32.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0758 ret i32 %rint759}760 761define i64 @llrint(x86_fp80 %x) nounwind strictfp {762; X86-LABEL: llrint:763; X86: # %bb.0: # %entry764; X86-NEXT: subl $12, %esp765; X86-NEXT: fldt {{[0-9]+}}(%esp)766; X86-NEXT: fstpt (%esp)767; X86-NEXT: wait768; X86-NEXT: calll llrintl769; X86-NEXT: addl $12, %esp770; X86-NEXT: retl771;772; X64-LABEL: llrint:773; X64: # %bb.0: # %entry774; X64-NEXT: subq $24, %rsp775; X64-NEXT: fldt {{[0-9]+}}(%rsp)776; X64-NEXT: fstpt (%rsp)777; X64-NEXT: wait778; X64-NEXT: callq llrintl@PLT779; X64-NEXT: addq $24, %rsp780; X64-NEXT: retq781entry:782 %rint = call i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0783 ret i64 %rint784}785 786define i32 @lround(x86_fp80 %x) nounwind strictfp {787; X86-LABEL: lround:788; X86: # %bb.0: # %entry789; X86-NEXT: subl $12, %esp790; X86-NEXT: fldt {{[0-9]+}}(%esp)791; X86-NEXT: fstpt (%esp)792; X86-NEXT: wait793; X86-NEXT: calll lroundl794; X86-NEXT: addl $12, %esp795; X86-NEXT: retl796;797; X64-LABEL: lround:798; X64: # %bb.0: # %entry799; X64-NEXT: subq $24, %rsp800; X64-NEXT: fldt {{[0-9]+}}(%rsp)801; X64-NEXT: fstpt (%rsp)802; X64-NEXT: wait803; X64-NEXT: callq lroundl@PLT804; X64-NEXT: addq $24, %rsp805; X64-NEXT: retq806entry:807 %round = call i32 @llvm.experimental.constrained.lround.i32.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0808 ret i32 %round809}810 811define i64 @llround(x86_fp80 %x) nounwind strictfp {812; X86-LABEL: llround:813; X86: # %bb.0: # %entry814; X86-NEXT: subl $12, %esp815; X86-NEXT: fldt {{[0-9]+}}(%esp)816; X86-NEXT: fstpt (%esp)817; X86-NEXT: wait818; X86-NEXT: calll llroundl819; X86-NEXT: addl $12, %esp820; X86-NEXT: retl821;822; X64-LABEL: llround:823; X64: # %bb.0: # %entry824; X64-NEXT: subq $24, %rsp825; X64-NEXT: fldt {{[0-9]+}}(%rsp)826; X64-NEXT: fstpt (%rsp)827; X64-NEXT: wait828; X64-NEXT: callq llroundl@PLT829; X64-NEXT: addq $24, %rsp830; X64-NEXT: retq831entry:832 %round = call i64 @llvm.experimental.constrained.llround.i64.f80(x86_fp80 %x, metadata !"fpexcept.strict") #0833 ret i64 %round834}835 836attributes #0 = { strictfp }837 838declare x86_fp80 @llvm.experimental.constrained.fma.f80(x86_fp80, x86_fp80, x86_fp80, metadata, metadata)839declare x86_fp80 @llvm.experimental.constrained.frem.f80(x86_fp80, x86_fp80, metadata, metadata)840declare x86_fp80 @llvm.experimental.constrained.ceil.f80(x86_fp80, metadata)841declare x86_fp80 @llvm.experimental.constrained.acos.f80(x86_fp80, metadata, metadata)842declare x86_fp80 @llvm.experimental.constrained.cos.f80(x86_fp80, metadata, metadata)843declare x86_fp80 @llvm.experimental.constrained.cosh.f80(x86_fp80, metadata, metadata)844declare x86_fp80 @llvm.experimental.constrained.exp.f80(x86_fp80, metadata, metadata)845declare x86_fp80 @llvm.experimental.constrained.exp2.f80(x86_fp80, metadata, metadata)846declare x86_fp80 @llvm.experimental.constrained.floor.f80(x86_fp80, metadata)847declare x86_fp80 @llvm.experimental.constrained.log.f80(x86_fp80, metadata, metadata)848declare x86_fp80 @llvm.experimental.constrained.log10.f80(x86_fp80, metadata, metadata)849declare x86_fp80 @llvm.experimental.constrained.log2.f80(x86_fp80, metadata, metadata)850declare x86_fp80 @llvm.experimental.constrained.maxnum.f80(x86_fp80, x86_fp80, metadata)851declare x86_fp80 @llvm.experimental.constrained.minnum.f80(x86_fp80, x86_fp80, metadata)852declare x86_fp80 @llvm.experimental.constrained.nearbyint.f80(x86_fp80, metadata, metadata)853declare x86_fp80 @llvm.experimental.constrained.pow.f80(x86_fp80, x86_fp80, metadata, metadata)854declare x86_fp80 @llvm.experimental.constrained.powi.f80(x86_fp80, i32, metadata, metadata)855declare x86_fp80 @llvm.experimental.constrained.rint.f80(x86_fp80, metadata, metadata)856declare x86_fp80 @llvm.experimental.constrained.round.f80(x86_fp80, metadata)857declare x86_fp80 @llvm.experimental.constrained.roundeven.f80(x86_fp80, metadata)858declare x86_fp80 @llvm.experimental.constrained.asin.f80(x86_fp80, metadata, metadata)859declare x86_fp80 @llvm.experimental.constrained.sin.f80(x86_fp80, metadata, metadata)860declare x86_fp80 @llvm.experimental.constrained.sinh.f80(x86_fp80, metadata, metadata)861declare x86_fp80 @llvm.experimental.constrained.atan.f80(x86_fp80, metadata, metadata)862declare x86_fp80 @llvm.experimental.constrained.atan2.f80(x86_fp80, x86_fp80, metadata, metadata)863declare x86_fp80 @llvm.experimental.constrained.tan.f80(x86_fp80, metadata, metadata)864declare x86_fp80 @llvm.experimental.constrained.tanh.f80(x86_fp80, metadata, metadata)865declare x86_fp80 @llvm.experimental.constrained.trunc.f80(x86_fp80, metadata)866declare i32 @llvm.experimental.constrained.lrint.i32.f80(x86_fp80, metadata, metadata)867declare i64 @llvm.experimental.constrained.llrint.i64.f80(x86_fp80, metadata, metadata)868declare i32 @llvm.experimental.constrained.lround.i32.f80(x86_fp80, metadata)869declare i64 @llvm.experimental.constrained.llround.i64.f80(x86_fp80, metadata)870