11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2- ; RUN: llc < %s -mtriple=i686-unknown-unknown | FileCheck %s
2+ ; RUN: llc < %s -mtriple=i686-unknown-linux-gnu | FileCheck %s
33
44define half @maximum_half (half %x , half %y ) nounwind {
55; CHECK-LABEL: maximum_half:
66; CHECK: # %bb.0:
77; CHECK-NEXT: pushl %esi
8- ; CHECK-NEXT: subl $16 , %esp
8+ ; CHECK-NEXT: subl $24 , %esp
99; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %esi
1010; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %eax
1111; CHECK-NEXT: movl %eax, (%esp)
@@ -74,7 +74,7 @@ define half @maximum_half(half %x, half %y) nounwind {
7474; CHECK-NEXT: fstp %st(1)
7575; CHECK-NEXT: fstps (%esp)
7676; CHECK-NEXT: calll __truncsfhf2
77- ; CHECK-NEXT: addl $16 , %esp
77+ ; CHECK-NEXT: addl $24 , %esp
7878; CHECK-NEXT: popl %esi
7979; CHECK-NEXT: retl
8080 %res = call half @llvm.maximum.f16 (half %x , half %y )
@@ -154,12 +154,9 @@ define float @maximum_float(float %x, float %y) nounwind {
154154define double @maximum_double (double %x , double %y ) nounwind {
155155; CHECK-LABEL: maximum_double:
156156; CHECK: # %bb.0:
157- ; CHECK-NEXT: pushl %ebp
158- ; CHECK-NEXT: movl %esp, %ebp
159- ; CHECK-NEXT: andl $-8, %esp
160- ; CHECK-NEXT: subl $16, %esp
161- ; CHECK-NEXT: fldl 16(%ebp)
162- ; CHECK-NEXT: fldl 8(%ebp)
157+ ; CHECK-NEXT: subl $20, %esp
158+ ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
159+ ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
163160; CHECK-NEXT: fstl {{[0-9]+}}(%esp)
164161; CHECK-NEXT: fxch %st(1)
165162; CHECK-NEXT: fstl (%esp)
@@ -218,8 +215,7 @@ define double @maximum_double(double %x, double %y) nounwind {
218215; CHECK-NEXT: fxch %st(1)
219216; CHECK-NEXT: .LBB2_13:
220217; CHECK-NEXT: fstp %st(1)
221- ; CHECK-NEXT: movl %ebp, %esp
222- ; CHECK-NEXT: popl %ebp
218+ ; CHECK-NEXT: addl $20, %esp
223219; CHECK-NEXT: retl
224220 %res = call double @llvm.maximum.f64 (double %x , double %y )
225221 ret double %res
@@ -228,25 +224,23 @@ define double @maximum_double(double %x, double %y) nounwind {
228224define fp128 @maximum_fp128 (fp128 %x , fp128 %y ) nounwind {
229225; CHECK-LABEL: maximum_fp128:
230226; CHECK: # %bb.0:
231- ; CHECK-NEXT: pushl %ebp
232- ; CHECK-NEXT: movl %esp, %ebp
233227; CHECK-NEXT: pushl %edi
234228; CHECK-NEXT: pushl %esi
235- ; CHECK-NEXT: andl $-16 , %esp
236- ; CHECK-NEXT: subl $16 , %esp
237- ; CHECK-NEXT: movl 8(%ebp) , %esi
238- ; CHECK-NEXT: movl %esp, %eax
239- ; CHECK-NEXT: pushl 40(%ebp )
240- ; CHECK-NEXT: pushl 36(%ebp )
241- ; CHECK-NEXT: pushl 32(%ebp )
242- ; CHECK-NEXT: pushl 28(%ebp )
243- ; CHECK-NEXT: pushl 24(%ebp )
244- ; CHECK-NEXT: pushl 20(%ebp )
245- ; CHECK-NEXT: pushl 16(%ebp )
246- ; CHECK-NEXT: pushl 12(%ebp )
229+ ; CHECK-NEXT: subl $20 , %esp
230+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp) , %esi
231+ ; CHECK-NEXT: subl $12 , %esp
232+ ; CHECK-NEXT: leal {{[0-9]+}}( %esp) , %eax
233+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
234+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
235+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
236+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
237+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
238+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
239+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
240+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
247241; CHECK-NEXT: pushl %eax
248242; CHECK-NEXT: calll fmaximuml
249- ; CHECK-NEXT: addl $32 , %esp
243+ ; CHECK-NEXT: addl $44 , %esp
250244; CHECK-NEXT: movl (%esp), %eax
251245; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
252246; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
@@ -256,10 +250,9 @@ define fp128 @maximum_fp128(fp128 %x, fp128 %y) nounwind {
256250; CHECK-NEXT: movl %ecx, 4(%esi)
257251; CHECK-NEXT: movl %eax, (%esi)
258252; CHECK-NEXT: movl %esi, %eax
259- ; CHECK-NEXT: leal -8(%ebp) , %esp
253+ ; CHECK-NEXT: addl $20 , %esp
260254; CHECK-NEXT: popl %esi
261255; CHECK-NEXT: popl %edi
262- ; CHECK-NEXT: popl %ebp
263256; CHECK-NEXT: retl $4
264257 %res = call fp128 @llvm.maximum.f128 (fp128 %x , fp128 %y )
265258 ret fp128 %res
@@ -269,7 +262,7 @@ define half @minimum_half(half %x, half %y) nounwind {
269262; CHECK-LABEL: minimum_half:
270263; CHECK: # %bb.0:
271264; CHECK-NEXT: pushl %esi
272- ; CHECK-NEXT: subl $16 , %esp
265+ ; CHECK-NEXT: subl $24 , %esp
273266; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %esi
274267; CHECK-NEXT: movzwl {{[0-9]+}}(%esp), %eax
275268; CHECK-NEXT: movl %eax, (%esp)
@@ -338,7 +331,7 @@ define half @minimum_half(half %x, half %y) nounwind {
338331; CHECK-NEXT: fstp %st(0)
339332; CHECK-NEXT: fstps (%esp)
340333; CHECK-NEXT: calll __truncsfhf2
341- ; CHECK-NEXT: addl $16 , %esp
334+ ; CHECK-NEXT: addl $24 , %esp
342335; CHECK-NEXT: popl %esi
343336; CHECK-NEXT: retl
344337 %res = call half @llvm.minimum.f16 (half %x , half %y )
@@ -418,12 +411,9 @@ define float @minimum_float(float %x, float %y) nounwind {
418411define double @minimum_double (double %x , double %y ) nounwind {
419412; CHECK-LABEL: minimum_double:
420413; CHECK: # %bb.0:
421- ; CHECK-NEXT: pushl %ebp
422- ; CHECK-NEXT: movl %esp, %ebp
423- ; CHECK-NEXT: andl $-8, %esp
424- ; CHECK-NEXT: subl $16, %esp
425- ; CHECK-NEXT: fldl 16(%ebp)
426- ; CHECK-NEXT: fldl 8(%ebp)
414+ ; CHECK-NEXT: subl $20, %esp
415+ ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
416+ ; CHECK-NEXT: fldl {{[0-9]+}}(%esp)
427417; CHECK-NEXT: fstl {{[0-9]+}}(%esp)
428418; CHECK-NEXT: fxch %st(1)
429419; CHECK-NEXT: fstl (%esp)
@@ -482,8 +472,7 @@ define double @minimum_double(double %x, double %y) nounwind {
482472; CHECK-NEXT: fldz
483473; CHECK-NEXT: .LBB6_13:
484474; CHECK-NEXT: fstp %st(0)
485- ; CHECK-NEXT: movl %ebp, %esp
486- ; CHECK-NEXT: popl %ebp
475+ ; CHECK-NEXT: addl $20, %esp
487476; CHECK-NEXT: retl
488477 %res = call double @llvm.minimum.f64 (double %x , double %y )
489478 ret double %res
@@ -492,25 +481,23 @@ define double @minimum_double(double %x, double %y) nounwind {
492481define fp128 @minimum_fp128 (fp128 %x , fp128 %y ) nounwind {
493482; CHECK-LABEL: minimum_fp128:
494483; CHECK: # %bb.0:
495- ; CHECK-NEXT: pushl %ebp
496- ; CHECK-NEXT: movl %esp, %ebp
497484; CHECK-NEXT: pushl %edi
498485; CHECK-NEXT: pushl %esi
499- ; CHECK-NEXT: andl $-16 , %esp
500- ; CHECK-NEXT: subl $16 , %esp
501- ; CHECK-NEXT: movl 8(%ebp) , %esi
502- ; CHECK-NEXT: movl %esp, %eax
503- ; CHECK-NEXT: pushl 40(%ebp )
504- ; CHECK-NEXT: pushl 36(%ebp )
505- ; CHECK-NEXT: pushl 32(%ebp )
506- ; CHECK-NEXT: pushl 28(%ebp )
507- ; CHECK-NEXT: pushl 24(%ebp )
508- ; CHECK-NEXT: pushl 20(%ebp )
509- ; CHECK-NEXT: pushl 16(%ebp )
510- ; CHECK-NEXT: pushl 12(%ebp )
486+ ; CHECK-NEXT: subl $20 , %esp
487+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp) , %esi
488+ ; CHECK-NEXT: subl $12 , %esp
489+ ; CHECK-NEXT: leal {{[0-9]+}}( %esp) , %eax
490+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
491+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
492+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
493+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
494+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
495+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
496+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
497+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp )
511498; CHECK-NEXT: pushl %eax
512499; CHECK-NEXT: calll fminimuml
513- ; CHECK-NEXT: addl $32 , %esp
500+ ; CHECK-NEXT: addl $44 , %esp
514501; CHECK-NEXT: movl (%esp), %eax
515502; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
516503; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
@@ -520,11 +507,84 @@ define fp128 @minimum_fp128(fp128 %x, fp128 %y) nounwind {
520507; CHECK-NEXT: movl %ecx, 4(%esi)
521508; CHECK-NEXT: movl %eax, (%esi)
522509; CHECK-NEXT: movl %esi, %eax
523- ; CHECK-NEXT: leal -8(%ebp) , %esp
510+ ; CHECK-NEXT: addl $20 , %esp
524511; CHECK-NEXT: popl %esi
525512; CHECK-NEXT: popl %edi
526- ; CHECK-NEXT: popl %ebp
527513; CHECK-NEXT: retl $4
528514 %res = call fp128 @llvm.minimum.f128 (fp128 %x , fp128 %y )
529515 ret fp128 %res
530516}
517+
518+ define fp128 @maximumnum_fp128 (fp128 %x , fp128 %y ) nounwind {
519+ ; CHECK-LABEL: maximumnum_fp128:
520+ ; CHECK: # %bb.0:
521+ ; CHECK-NEXT: pushl %edi
522+ ; CHECK-NEXT: pushl %esi
523+ ; CHECK-NEXT: subl $20, %esp
524+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %esi
525+ ; CHECK-NEXT: subl $12, %esp
526+ ; CHECK-NEXT: leal {{[0-9]+}}(%esp), %eax
527+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
528+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
529+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
530+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
531+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
532+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
533+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
534+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
535+ ; CHECK-NEXT: pushl %eax
536+ ; CHECK-NEXT: calll fmaximum_numl
537+ ; CHECK-NEXT: addl $44, %esp
538+ ; CHECK-NEXT: movl (%esp), %eax
539+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
540+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
541+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edi
542+ ; CHECK-NEXT: movl %edi, 12(%esi)
543+ ; CHECK-NEXT: movl %edx, 8(%esi)
544+ ; CHECK-NEXT: movl %ecx, 4(%esi)
545+ ; CHECK-NEXT: movl %eax, (%esi)
546+ ; CHECK-NEXT: movl %esi, %eax
547+ ; CHECK-NEXT: addl $20, %esp
548+ ; CHECK-NEXT: popl %esi
549+ ; CHECK-NEXT: popl %edi
550+ ; CHECK-NEXT: retl $4
551+ %res = call fp128 @llvm.maximumnum.f128 (fp128 %x , fp128 %y )
552+ ret fp128 %res
553+ }
554+
555+ define fp128 @minimumnum_fp128 (fp128 %x , fp128 %y ) nounwind {
556+ ; CHECK-LABEL: minimumnum_fp128:
557+ ; CHECK: # %bb.0:
558+ ; CHECK-NEXT: pushl %edi
559+ ; CHECK-NEXT: pushl %esi
560+ ; CHECK-NEXT: subl $20, %esp
561+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %esi
562+ ; CHECK-NEXT: subl $12, %esp
563+ ; CHECK-NEXT: leal {{[0-9]+}}(%esp), %eax
564+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
565+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
566+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
567+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
568+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
569+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
570+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
571+ ; CHECK-NEXT: pushl {{[0-9]+}}(%esp)
572+ ; CHECK-NEXT: pushl %eax
573+ ; CHECK-NEXT: calll fminimum_numl
574+ ; CHECK-NEXT: addl $44, %esp
575+ ; CHECK-NEXT: movl (%esp), %eax
576+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %ecx
577+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
578+ ; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edi
579+ ; CHECK-NEXT: movl %edi, 12(%esi)
580+ ; CHECK-NEXT: movl %edx, 8(%esi)
581+ ; CHECK-NEXT: movl %ecx, 4(%esi)
582+ ; CHECK-NEXT: movl %eax, (%esi)
583+ ; CHECK-NEXT: movl %esi, %eax
584+ ; CHECK-NEXT: addl $20, %esp
585+ ; CHECK-NEXT: popl %esi
586+ ; CHECK-NEXT: popl %edi
587+ ; CHECK-NEXT: retl $4
588+ %res = call fp128 @llvm.minimumnum.f128 (fp128 %x , fp128 %y )
589+ ret fp128 %res
590+ }
0 commit comments