
If we're passing an i128 value and we no longer have enough argument registers (only r9 unallocated), the value gets passed via the stack. However, r9 is still allocated as a shadow register, which means that a following i64 argument will not use it. This doesn't match the x86-64 psABI. Fix this by making i128 arguments as requiring consecutive registers, and then adding a custom CC lowering that will allocate both parts of the i128 at the same time, either to register or to stack, without reserving a shadow register. Fixes https://github.com/llvm/llvm-project/issues/123935.
1778 lines
81 KiB
LLVM
1778 lines
81 KiB
LLVM
; 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)
|