; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 ; RUN: llc -mtriple=i386 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32 ; RUN: llc -mtriple=i386 -mattr +fma < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32-FMA ; RUN: llc -mtriple=i386 -mattr +fma4 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32-FMA4 ; RUN: llc -mtriple=x86_64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64 ; RUN: llc -mtriple=x86_64 -mattr +fma < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64-FMA ; RUN: llc -mtriple=x86_64 -mattr +fma4 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64-FMA4 define float @fmuladd_intrinsic_f32(float %a, float %b, float %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl ; ; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_intrinsic_f32: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %result = call float @llvm.fmuladd.f32(float %a, float %b, float %c) ret float %result } define double @fmuladd_intrinsic_f64(double %a, double %b, double %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: popl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: popl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl ; ; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_intrinsic_f64: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %result = call double @llvm.fmuladd.f64(double %a, double %b, double %c) ret double %result } define float @fmuladd_contract_f32(float %a, float %b, float %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl ; ; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_f32: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movl %edx, %ebx ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl %ebx, %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %product = fmul contract float %a, %b %result = fadd contract float %product, %c ret float %result } define double @fmuladd_contract_f64(double %a, double %b, double %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: popl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: popl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %edi, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl ; ; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_f64: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movq %rdx, %rbx ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq %rbx, %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %product = fmul contract double %a, %b %result = fadd contract double %product, %c ret double %result } define <4 x float> @fmuladd_contract_v4f32(<4 x float> %a, <4 x float> %b, <4 x float> %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-NEXT: pushl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __addsf3 ; SOFT-FLOAT-32-NEXT: addl $8, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-NEXT: movl %eax, 12(%esi) ; SOFT-FLOAT-32-NEXT: movl %ebx, 8(%esi) ; SOFT-FLOAT-32-NEXT: movl %edi, 4(%esi) ; SOFT-FLOAT-32-NEXT: movl %ebp, (%esi) ; SOFT-FLOAT-32-NEXT: movl %esi, %eax ; SOFT-FLOAT-32-NEXT: addl $4, %esp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-NEXT: popl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: popl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: popl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl $4 ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, 12(%esi) ; SOFT-FLOAT-32-FMA-NEXT: movl %ebx, 8(%esi) ; SOFT-FLOAT-32-FMA-NEXT: movl %edi, 4(%esi) ; SOFT-FLOAT-32-FMA-NEXT: movl %ebp, (%esi) ; SOFT-FLOAT-32-FMA-NEXT: movl %esi, %eax ; SOFT-FLOAT-32-FMA-NEXT: addl $4, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA-NEXT: popl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: popl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: popl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl $4 ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __mulsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %ebx ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __addsf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $8, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, 12(%esi) ; SOFT-FLOAT-32-FMA4-NEXT: movl %ebx, 8(%esi) ; SOFT-FLOAT-32-FMA4-NEXT: movl %edi, 4(%esi) ; SOFT-FLOAT-32-FMA4-NEXT: movl %ebp, (%esi) ; SOFT-FLOAT-32-FMA4-NEXT: movl %esi, %eax ; SOFT-FLOAT-32-FMA4-NEXT: addl $4, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA4-NEXT: popl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: popl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl $4 ; ; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: pushq %r15 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-NEXT: pushq %r14 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-NEXT: pushq %r13 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-NEXT: pushq %r12 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-NEXT: pushq %rax ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-NEXT: movl %r9d, %r13d ; SOFT-FLOAT-64-NEXT: movl %ecx, %ebp ; SOFT-FLOAT-64-NEXT: movl %edx, %r14d ; SOFT-FLOAT-64-NEXT: movl %esi, %r12d ; SOFT-FLOAT-64-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: movl %r8d, %edi ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %r15d ; SOFT-FLOAT-64-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-NEXT: movl %r12d, %edi ; SOFT-FLOAT-64-NEXT: movl %r13d, %esi ; SOFT-FLOAT-64-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %r12d ; SOFT-FLOAT-64-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-NEXT: movl %r15d, %edi ; SOFT-FLOAT-64-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-NEXT: movl %eax, 12(%rbx) ; SOFT-FLOAT-64-NEXT: movl %ebp, 8(%rbx) ; SOFT-FLOAT-64-NEXT: movl %r14d, 4(%rbx) ; SOFT-FLOAT-64-NEXT: movl %r12d, (%rbx) ; SOFT-FLOAT-64-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-NEXT: popq %r12 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-NEXT: popq %r13 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-NEXT: popq %r14 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-NEXT: popq %r15 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: popq %rbp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r15 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r14 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r13 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r12 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA-NEXT: pushq %rax ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-FMA-NEXT: movl %r9d, %r13d ; SOFT-FLOAT-64-FMA-NEXT: movl %ecx, %ebp ; SOFT-FLOAT-64-FMA-NEXT: movl %edx, %r14d ; SOFT-FLOAT-64-FMA-NEXT: movl %esi, %r12d ; SOFT-FLOAT-64-FMA-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: movl %r8d, %edi ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %r15d ; SOFT-FLOAT-64-FMA-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-FMA-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-FMA-NEXT: movl %r12d, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl %r13d, %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %r12d ; SOFT-FLOAT-64-FMA-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-FMA-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-FMA-NEXT: movl %r15d, %edi ; SOFT-FLOAT-64-FMA-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movl %eax, 12(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movl %ebp, 8(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movl %r14d, 4(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movl %r12d, (%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-FMA-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA-NEXT: popq %r12 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA-NEXT: popq %r13 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA-NEXT: popq %r14 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA-NEXT: popq %r15 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: popq %rbp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_v4f32: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r15 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r14 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r13 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r12 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rax ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movl %r9d, %r13d ; SOFT-FLOAT-64-FMA4-NEXT: movl %ecx, %ebp ; SOFT-FLOAT-64-FMA4-NEXT: movl %edx, %r14d ; SOFT-FLOAT-64-FMA4-NEXT: movl %esi, %r12d ; SOFT-FLOAT-64-FMA4-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: movl %r8d, %edi ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %r15d ; SOFT-FLOAT-64-FMA4-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-FMA4-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-FMA4-NEXT: movl %r12d, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl %r13d, %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __mulsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %r12d ; SOFT-FLOAT-64-FMA4-NEXT: movl %r14d, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %r14d ; SOFT-FLOAT-64-FMA4-NEXT: movl %ebp, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, %ebp ; SOFT-FLOAT-64-FMA4-NEXT: movl %r15d, %edi ; SOFT-FLOAT-64-FMA4-NEXT: movl {{[0-9]+}}(%rsp), %esi ; SOFT-FLOAT-64-FMA4-NEXT: callq __addsf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movl %eax, 12(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movl %ebp, 8(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movl %r14d, 4(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movl %r12d, (%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-FMA4-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r12 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r13 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r14 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r15 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %product = fmul contract <4 x float> %a, %b %result = fadd contract <4 x float> %product, %c ret <4 x float> %result } define <4 x double> @fmuladd_contract_v4f64(<4 x double> %a, <4 x double> %b, <4 x double> %c) #0 { ; SOFT-FLOAT-32-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-32: # %bb.0: ; SOFT-FLOAT-32-NEXT: pushl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-NEXT: subl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 36 ; SOFT-FLOAT-32-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-NEXT: pushl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, %esi ; SOFT-FLOAT-32-NEXT: movl %edx, %ebp ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __muldf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %eax ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-NEXT: movl %edx, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %edi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl %esi ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-NEXT: movl %edx, %esi ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: calll __adddf3 ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-NEXT: movl {{[0-9]+}}(%esp), %ecx ; SOFT-FLOAT-32-NEXT: movl %edx, 28(%ecx) ; SOFT-FLOAT-32-NEXT: movl %eax, 24(%ecx) ; SOFT-FLOAT-32-NEXT: movl %esi, 20(%ecx) ; SOFT-FLOAT-32-NEXT: movl %ebp, 16(%ecx) ; SOFT-FLOAT-32-NEXT: movl %ebx, 12(%ecx) ; SOFT-FLOAT-32-NEXT: movl %edi, 8(%ecx) ; SOFT-FLOAT-32-NEXT: movl (%esp), %eax # 4-byte Reload ; SOFT-FLOAT-32-NEXT: movl %eax, 4(%ecx) ; SOFT-FLOAT-32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload ; SOFT-FLOAT-32-NEXT: movl %eax, (%ecx) ; SOFT-FLOAT-32-NEXT: movl %ecx, %eax ; SOFT-FLOAT-32-NEXT: addl $16, %esp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-NEXT: popl %esi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-NEXT: popl %edi ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-NEXT: popl %ebx ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-NEXT: popl %ebp ; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-NEXT: retl $4 ; ; SOFT-FLOAT-32-FMA-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-32-FMA: # %bb.0: ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA-NEXT: subl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 36 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-FMA-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %esi ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, %ebp ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, %esi ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA-NEXT: movl {{[0-9]+}}(%esp), %ecx ; SOFT-FLOAT-32-FMA-NEXT: movl %edx, 28(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, 24(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %esi, 20(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %ebp, 16(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %ebx, 12(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %edi, 8(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl (%esp), %eax # 4-byte Reload ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, 4(%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload ; SOFT-FLOAT-32-FMA-NEXT: movl %eax, (%ecx) ; SOFT-FLOAT-32-FMA-NEXT: movl %ecx, %eax ; SOFT-FLOAT-32-FMA-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA-NEXT: popl %esi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA-NEXT: popl %edi ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA-NEXT: popl %ebx ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA-NEXT: popl %ebp ; SOFT-FLOAT-32-FMA-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA-NEXT: retl $4 ; ; SOFT-FLOAT-32-FMA4-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-32-FMA4: # %bb.0: ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA4-NEXT: subl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 36 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %esi, -20 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %edi, -16 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %ebx, -12 ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_offset %ebp, -8 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %edi ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %ebx ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %esi ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %ebp ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %esi ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, %ebp ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __muldf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %eax ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, (%esp) # 4-byte Spill ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %edi ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, %ebx ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, %ebp ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, %esi ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[0-9]+}}(%esp) ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: pushl {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Folded Reload ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: calll __adddf3 ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_adjust_cfa_offset -16 ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[0-9]+}}(%esp), %ecx ; SOFT-FLOAT-32-FMA4-NEXT: movl %edx, 28(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, 24(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %esi, 20(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %ebp, 16(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %ebx, 12(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %edi, 8(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl (%esp), %eax # 4-byte Reload ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, 4(%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload ; SOFT-FLOAT-32-FMA4-NEXT: movl %eax, (%ecx) ; SOFT-FLOAT-32-FMA4-NEXT: movl %ecx, %eax ; SOFT-FLOAT-32-FMA4-NEXT: addl $16, %esp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 20 ; SOFT-FLOAT-32-FMA4-NEXT: popl %esi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-32-FMA4-NEXT: popl %edi ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 12 ; SOFT-FLOAT-32-FMA4-NEXT: popl %ebx ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-32-FMA4-NEXT: popl %ebp ; SOFT-FLOAT-32-FMA4-NEXT: .cfi_def_cfa_offset 4 ; SOFT-FLOAT-32-FMA4-NEXT: retl $4 ; ; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-64: # %bb.0: ; SOFT-FLOAT-64-NEXT: pushq %rbp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: pushq %r15 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-NEXT: pushq %r14 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-NEXT: pushq %r13 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-NEXT: pushq %r12 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-NEXT: pushq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-NEXT: pushq %rax ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-NEXT: movq %r9, %rbp ; SOFT-FLOAT-64-NEXT: movq %rcx, %r14 ; SOFT-FLOAT-64-NEXT: movq %rdx, %r15 ; SOFT-FLOAT-64-NEXT: movq %rsi, %r13 ; SOFT-FLOAT-64-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: movq %r8, %rdi ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r12 ; SOFT-FLOAT-64-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-NEXT: movq %r13, %rdi ; SOFT-FLOAT-64-NEXT: movq %rbp, %rsi ; SOFT-FLOAT-64-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r13 ; SOFT-FLOAT-64-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-NEXT: movq %r12, %rdi ; SOFT-FLOAT-64-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-NEXT: movq %rax, 24(%rbx) ; SOFT-FLOAT-64-NEXT: movq %r14, 16(%rbx) ; SOFT-FLOAT-64-NEXT: movq %r15, 8(%rbx) ; SOFT-FLOAT-64-NEXT: movq %r13, (%rbx) ; SOFT-FLOAT-64-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-NEXT: popq %rbx ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-NEXT: popq %r12 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-NEXT: popq %r13 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-NEXT: popq %r14 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-NEXT: popq %r15 ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-NEXT: popq %rbp ; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-NEXT: retq ; ; SOFT-FLOAT-64-FMA-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-64-FMA: # %bb.0: ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r15 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r14 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r13 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA-NEXT: pushq %r12 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA-NEXT: pushq %rax ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-FMA-NEXT: movq %r9, %rbp ; SOFT-FLOAT-64-FMA-NEXT: movq %rcx, %r14 ; SOFT-FLOAT-64-FMA-NEXT: movq %rdx, %r15 ; SOFT-FLOAT-64-FMA-NEXT: movq %rsi, %r13 ; SOFT-FLOAT-64-FMA-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: movq %r8, %rdi ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r12 ; SOFT-FLOAT-64-FMA-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-FMA-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-FMA-NEXT: movq %r13, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq %rbp, %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r13 ; SOFT-FLOAT-64-FMA-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-FMA-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-FMA-NEXT: movq %r12, %rdi ; SOFT-FLOAT-64-FMA-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA-NEXT: movq %rax, 24(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movq %r14, 16(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movq %r15, 8(%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movq %r13, (%rbx) ; SOFT-FLOAT-64-FMA-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-FMA-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA-NEXT: popq %r12 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA-NEXT: popq %r13 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA-NEXT: popq %r14 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA-NEXT: popq %r15 ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA-NEXT: popq %rbp ; SOFT-FLOAT-64-FMA-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA-NEXT: retq ; ; SOFT-FLOAT-64-FMA4-LABEL: fmuladd_contract_v4f64: ; SOFT-FLOAT-64-FMA4: # %bb.0: ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r15 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r14 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r13 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %r12 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA4-NEXT: pushq %rax ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 64 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbx, -56 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r12, -48 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r13, -40 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r14, -32 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %r15, -24 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_offset %rbp, -16 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r9, %rbp ; SOFT-FLOAT-64-FMA4-NEXT: movq %rcx, %r14 ; SOFT-FLOAT-64-FMA4-NEXT: movq %rdx, %r15 ; SOFT-FLOAT-64-FMA4-NEXT: movq %rsi, %r13 ; SOFT-FLOAT-64-FMA4-NEXT: movq %rdi, %rbx ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: movq %r8, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r12 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r13, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq %rbp, %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __muldf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r13 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r15, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r15 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r14, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, %r14 ; SOFT-FLOAT-64-FMA4-NEXT: movq %r12, %rdi ; SOFT-FLOAT-64-FMA4-NEXT: movq {{[0-9]+}}(%rsp), %rsi ; SOFT-FLOAT-64-FMA4-NEXT: callq __adddf3@PLT ; SOFT-FLOAT-64-FMA4-NEXT: movq %rax, 24(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movq %r14, 16(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movq %r15, 8(%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movq %r13, (%rbx) ; SOFT-FLOAT-64-FMA4-NEXT: movq %rbx, %rax ; SOFT-FLOAT-64-FMA4-NEXT: addq $8, %rsp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 56 ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbx ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 48 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r12 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 40 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r13 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 32 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r14 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 24 ; SOFT-FLOAT-64-FMA4-NEXT: popq %r15 ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 16 ; SOFT-FLOAT-64-FMA4-NEXT: popq %rbp ; SOFT-FLOAT-64-FMA4-NEXT: .cfi_def_cfa_offset 8 ; SOFT-FLOAT-64-FMA4-NEXT: retq %product = fmul contract <4 x double> %a, %b %result = fadd contract <4 x double> %product, %c ret <4 x double> %result } attributes #0 = { "use-soft-float"="true" } declare float @llvm.fmuladd.f32(float %a, float %b, float %c) declare double @llvm.fmuladd.f64(double %a, double %b, double %c)