228 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-- | FileCheck %s -check-prefix=X873; RUN: llc < %s -mtriple=i686-- -mattr=-x87 | FileCheck %s -check-prefixes=NOX87,NOSSE-NOX874; RUN: llc < %s -mtriple=i686-- -mattr=-x87,-sse2 | FileCheck %s -check-prefixes=NOX87,NOSSE-NOX875; RUN: llc < %s -mtriple=i686-- -mattr=-x87,+sse2 | FileCheck %s -check-prefixes=NOX87,SSE-NOX876 7define float @f1(float %a, float %b) nounwind {8; X87-LABEL: f1:9; X87: # %bb.0: # %entry10; X87-NEXT: flds {{[0-9]+}}(%esp)11; X87-NEXT: retl12;13; NOSSE-NOX87-LABEL: f1:14; NOSSE-NOX87: # %bb.0: # %entry15; NOSSE-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax16; NOSSE-NOX87-NEXT: retl17;18; SSE-NOX87-LABEL: f1:19; SSE-NOX87: # %bb.0: # %entry20; SSE-NOX87-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero21; SSE-NOX87-NEXT: movd %xmm0, %eax22; SSE-NOX87-NEXT: retl23entry:24 ret float %b25}26 27define double @f2(double %a, double %b) nounwind {28; X87-LABEL: f2:29; X87: # %bb.0: # %entry30; X87-NEXT: fldl {{[0-9]+}}(%esp)31; X87-NEXT: retl32;33; NOX87-LABEL: f2:34; NOX87: # %bb.0: # %entry35; NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax36; NOX87-NEXT: movl {{[0-9]+}}(%esp), %edx37; NOX87-NEXT: retl38entry:39 ret double %b40}41 42define x86_fp80 @f3(x86_fp80 %a, x86_fp80 %b) nounwind {43; X87-LABEL: f3:44; X87: # %bb.0: # %entry45; X87-NEXT: fldt {{[0-9]+}}(%esp)46; X87-NEXT: retl47;48; NOX87-LABEL: f3:49; NOX87: # %bb.0: # %entry50; NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax51; NOX87-NEXT: movl {{[0-9]+}}(%esp), %edx52; NOX87-NEXT: movl {{[0-9]+}}(%esp), %ecx53; NOX87-NEXT: retl54entry:55 ret x86_fp80 %b56}57 58define float @f4(float %a, float %b) nounwind {59; X87-LABEL: f4:60; X87: # %bb.0: # %entry61; X87-NEXT: flds {{[0-9]+}}(%esp)62; X87-NEXT: fadds {{[0-9]+}}(%esp)63; X87-NEXT: retl64;65; NOSSE-NOX87-LABEL: f4:66; NOSSE-NOX87: # %bb.0: # %entry67; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)68; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)69; NOSSE-NOX87-NEXT: calll __addsf370; NOSSE-NOX87-NEXT: addl $8, %esp71; NOSSE-NOX87-NEXT: retl72;73; SSE-NOX87-LABEL: f4:74; SSE-NOX87: # %bb.0: # %entry75; SSE-NOX87-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero76; SSE-NOX87-NEXT: addss {{[0-9]+}}(%esp), %xmm077; SSE-NOX87-NEXT: movd %xmm0, %eax78; SSE-NOX87-NEXT: retl79entry:80 %0 = fadd float %a, %b81 ret float %082}83 84define double @f5(double %a, double %b) nounwind {85; X87-LABEL: f5:86; X87: # %bb.0: # %entry87; X87-NEXT: fldl {{[0-9]+}}(%esp)88; X87-NEXT: faddl {{[0-9]+}}(%esp)89; X87-NEXT: retl90;91; NOSSE-NOX87-LABEL: f5:92; NOSSE-NOX87: # %bb.0: # %entry93; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)94; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)95; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)96; NOSSE-NOX87-NEXT: pushl {{[0-9]+}}(%esp)97; NOSSE-NOX87-NEXT: calll __adddf398; NOSSE-NOX87-NEXT: addl $16, %esp99; NOSSE-NOX87-NEXT: retl100;101; SSE-NOX87-LABEL: f5:102; SSE-NOX87: # %bb.0: # %entry103; SSE-NOX87-NEXT: pushl %ebp104; SSE-NOX87-NEXT: movl %esp, %ebp105; SSE-NOX87-NEXT: andl $-8, %esp106; SSE-NOX87-NEXT: subl $8, %esp107; SSE-NOX87-NEXT: movsd {{.*#+}} xmm0 = mem[0],zero108; SSE-NOX87-NEXT: addsd 16(%ebp), %xmm0109; SSE-NOX87-NEXT: movsd %xmm0, (%esp)110; SSE-NOX87-NEXT: movl (%esp), %eax111; SSE-NOX87-NEXT: movl {{[0-9]+}}(%esp), %edx112; SSE-NOX87-NEXT: movl %ebp, %esp113; SSE-NOX87-NEXT: popl %ebp114; SSE-NOX87-NEXT: retl115entry:116 %0 = fadd double %a, %b117 ret double %0118}119 120define x86_fp80 @f6(x86_fp80 %a, x86_fp80 %b) nounwind {121; X87-LABEL: f6:122; X87: # %bb.0: # %entry123; X87-NEXT: fldt {{[0-9]+}}(%esp)124; X87-NEXT: fldt {{[0-9]+}}(%esp)125; X87-NEXT: faddp %st, %st(1)126; X87-NEXT: retl127;128; NOX87-LABEL: f6:129; NOX87: # %bb.0: # %entry130; NOX87-NEXT: movzwl {{[0-9]+}}(%esp), %eax131; NOX87-NEXT: movzwl {{[0-9]+}}(%esp), %ecx132; NOX87-NEXT: pushl %ecx133; NOX87-NEXT: pushl {{[0-9]+}}(%esp)134; NOX87-NEXT: pushl {{[0-9]+}}(%esp)135; NOX87-NEXT: pushl %eax136; NOX87-NEXT: pushl {{[0-9]+}}(%esp)137; NOX87-NEXT: pushl {{[0-9]+}}(%esp)138; NOX87-NEXT: calll __addxf3139; NOX87-NEXT: addl $24, %esp140; NOX87-NEXT: movzwl %cx, %ecx141; NOX87-NEXT: retl142entry:143 %0 = fadd x86_fp80 %a, %b144 ret x86_fp80 %0145}146 147define {float, float, float} @f7(float %a, float %b) nounwind {148; X87-LABEL: f7:149; X87: # %bb.0: # %entry150; X87-NEXT: movl {{[0-9]+}}(%esp), %eax151; X87-NEXT: flds {{[0-9]+}}(%esp)152; X87-NEXT: flds {{[0-9]+}}(%esp)153; X87-NEXT: fstps 8(%eax)154; X87-NEXT: fsts 4(%eax)155; X87-NEXT: fstps (%eax)156; X87-NEXT: retl $4157;158; NOSSE-NOX87-LABEL: f7:159; NOSSE-NOX87: # %bb.0: # %entry160; NOSSE-NOX87-NEXT: movl {{[0-9]+}}(%esp), %eax161; NOSSE-NOX87-NEXT: movl {{[0-9]+}}(%esp), %ecx162; NOSSE-NOX87-NEXT: movl %eax, %edx163; NOSSE-NOX87-NEXT: retl164;165; SSE-NOX87-LABEL: f7:166; SSE-NOX87: # %bb.0: # %entry167; SSE-NOX87-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero168; SSE-NOX87-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero169; SSE-NOX87-NEXT: movd %xmm0, %eax170; SSE-NOX87-NEXT: movd %xmm0, %edx171; SSE-NOX87-NEXT: movd %xmm1, %ecx172; SSE-NOX87-NEXT: retl173entry:174 %0 = insertvalue {float, float, float} undef, float %a, 0175 %1 = insertvalue {float, float, float} %0, float %a, 1176 %2 = insertvalue {float, float, float} %1, float %b, 2177 ret {float, float, float} %2178}179 180define x86_fp80 @f8(i64 %a) nounwind {181; X87-LABEL: f8:182; X87: # %bb.0: # %entry183; X87-NEXT: fildll {{[0-9]+}}(%esp)184; X87-NEXT: retl185;186; NOX87-LABEL: f8:187; NOX87: # %bb.0: # %entry188; NOX87-NEXT: pushl {{[0-9]+}}(%esp)189; NOX87-NEXT: pushl {{[0-9]+}}(%esp)190; NOX87-NEXT: calll __floatdixf191; NOX87-NEXT: addl $8, %esp192; NOX87-NEXT: movzwl %cx, %ecx193; NOX87-NEXT: retl194entry:195 %0 = sitofp i64 %a to x86_fp80196 ret x86_fp80 %0197}198 199define i32 @f9(x86_fp80 %a) nounwind {200; X87-LABEL: f9:201; X87: # %bb.0: # %entry202; X87-NEXT: subl $8, %esp203; X87-NEXT: fldt {{[0-9]+}}(%esp)204; X87-NEXT: fnstcw (%esp)205; X87-NEXT: movzwl (%esp), %eax206; X87-NEXT: orl $3072, %eax # imm = 0xC00207; X87-NEXT: movw %ax, {{[0-9]+}}(%esp)208; X87-NEXT: fldcw {{[0-9]+}}(%esp)209; X87-NEXT: fistpl {{[0-9]+}}(%esp)210; X87-NEXT: fldcw (%esp)211; X87-NEXT: movl {{[0-9]+}}(%esp), %eax212; X87-NEXT: addl $8, %esp213; X87-NEXT: retl214;215; NOX87-LABEL: f9:216; NOX87: # %bb.0: # %entry217; NOX87-NEXT: movzwl {{[0-9]+}}(%esp), %eax218; NOX87-NEXT: pushl %eax219; NOX87-NEXT: pushl {{[0-9]+}}(%esp)220; NOX87-NEXT: pushl {{[0-9]+}}(%esp)221; NOX87-NEXT: calll __fixxfsi222; NOX87-NEXT: addl $12, %esp223; NOX87-NEXT: retl224entry:225 %0 = fptosi x86_fp80 %a to i32226 ret i32 %0227}228