
Mips requires fp128 args/returns to be passed differently than i128. It handles this by inspecting the pre-legalization type. However, for soft float libcalls, the original type is currently not provided (it will look like a i128 call). To work around that, MIPS maintains a list of libcalls working on fp128. This patch removes that list by providing the original, pre-softening type to calling convention lowering. This is done by carrying additional information in CallLoweringInfo, as we unfortunately do need both types (we want the un-softened type for OrigTy, but we need the softened type for the actual register assignment etc.) This is in preparation for completely removing all the custom pre-analysis code in the Mips backend and replacing it with use of OrigTy.
945 lines
42 KiB
LLVM
945 lines
42 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc -mtriple=mips < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32
|
|
; RUN: llc -mtriple=mips -mcpu mips32r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-32R2
|
|
; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64
|
|
; RUN: llc -mtriple=mips64 -mcpu mips64r2 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64R2
|
|
|
|
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: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -8
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $16, $6
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $16
|
|
; SOFT-FLOAT-32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f32:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -8
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-32R2-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f32:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f32:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16
|
|
%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: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: nop
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 40($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 44($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_intrinsic_f64:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: nop
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 40($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 44($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_intrinsic_f64:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_intrinsic_f64:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16
|
|
%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: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -8
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $16, $6
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $16
|
|
; SOFT-FLOAT-32-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f32:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $16, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -8
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-32R2-NEXT: lw $16, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_contract_f32:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f32:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16
|
|
%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: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: nop
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 40($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 44($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_f64:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 24
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: nop
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 40($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 44($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 24
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_contract_f64:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 16
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_f64:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 16
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -16
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $16
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 16
|
|
%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: addiu $sp, $sp, -48
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 48
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $21, 40($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $20, 36($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $19, 32($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $18, 28($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $17, 24($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $16, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 21, -8
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 20, -12
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 19, -16
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 18, -20
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 17, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -28
|
|
; SOFT-FLOAT-32-NEXT: move $17, $7
|
|
; SOFT-FLOAT-32-NEXT: move $16, $4
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 64($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 80($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $18, $6
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 96($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 68($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 84($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $19, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 100($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: move $20, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 76($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $4, $17
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $17, 88($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $21, 72($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 92($sp)
|
|
; SOFT-FLOAT-32-NEXT: sw $20, 12($16)
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: sw $19, 8($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $2, 4($16)
|
|
; SOFT-FLOAT-32-NEXT: move $4, $18
|
|
; SOFT-FLOAT-32-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $21
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $17
|
|
; SOFT-FLOAT-32-NEXT: sw $2, 0($16)
|
|
; SOFT-FLOAT-32-NEXT: lw $16, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $17, 24($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $18, 28($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $19, 32($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $20, 36($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $21, 40($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 48
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f32:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -48
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 48
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $21, 40($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $20, 36($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $19, 32($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $18, 28($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $17, 24($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $16, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 21, -8
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 20, -12
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 19, -16
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 18, -20
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 17, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -28
|
|
; SOFT-FLOAT-32R2-NEXT: move $17, $7
|
|
; SOFT-FLOAT-32R2-NEXT: move $16, $4
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 64($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 80($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $18, $6
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 96($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 68($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 84($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $19, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 100($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: move $20, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 76($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $17
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $17, 88($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $21, 72($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 92($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $20, 12($16)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: sw $19, 8($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $2, 4($16)
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $18
|
|
; SOFT-FLOAT-32R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $21
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $17
|
|
; SOFT-FLOAT-32R2-NEXT: sw $2, 0($16)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $16, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $17, 24($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $18, 28($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $19, 32($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $20, 36($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $21, 40($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 48
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f32:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -80
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 80
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 72($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $23, 64($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $22, 56($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $21, 48($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $20, 40($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $19, 32($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $18, 24($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $17, 16($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 23, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 22, -24
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 21, -32
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 20, -40
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 19, -48
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 18, -56
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 17, -64
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -72
|
|
; SOFT-FLOAT-64-NEXT: move $16, $9
|
|
; SOFT-FLOAT-64-NEXT: move $19, $8
|
|
; SOFT-FLOAT-64-NEXT: move $17, $7
|
|
; SOFT-FLOAT-64-NEXT: move $20, $6
|
|
; SOFT-FLOAT-64-NEXT: move $18, $5
|
|
; SOFT-FLOAT-64-NEXT: move $21, $4
|
|
; SOFT-FLOAT-64-NEXT: sll $4, $21, 0
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $20, 0
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $19, 0
|
|
; SOFT-FLOAT-64-NEXT: move $22, $2
|
|
; SOFT-FLOAT-64-NEXT: sll $4, $18, 0
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $17, 0
|
|
; SOFT-FLOAT-64-NEXT: move $23, $2
|
|
; SOFT-FLOAT-64-NEXT: dsrl $1, $21, 32
|
|
; SOFT-FLOAT-64-NEXT: sll $4, $1, 0
|
|
; SOFT-FLOAT-64-NEXT: dsrl $1, $20, 32
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: dsll $1, $22, 32
|
|
; SOFT-FLOAT-64-NEXT: dsrl $2, $19, 32
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $2, 0
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: dsrl $19, $1, 32
|
|
; SOFT-FLOAT-64-NEXT: # kill: def $v0 killed $v0 def $v0_64
|
|
; SOFT-FLOAT-64-NEXT: dsll $1, $2, 32
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $16, 0
|
|
; SOFT-FLOAT-64-NEXT: or $19, $19, $1
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: move $4, $23
|
|
; SOFT-FLOAT-64-NEXT: move $20, $2
|
|
; SOFT-FLOAT-64-NEXT: dsrl $1, $18, 32
|
|
; SOFT-FLOAT-64-NEXT: sll $4, $1, 0
|
|
; SOFT-FLOAT-64-NEXT: dsrl $1, $17, 32
|
|
; SOFT-FLOAT-64-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: dsll $1, $20, 32
|
|
; SOFT-FLOAT-64-NEXT: dsrl $17, $1, 32
|
|
; SOFT-FLOAT-64-NEXT: dsrl $1, $16, 32
|
|
; SOFT-FLOAT-64-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64-NEXT: # kill: def $v0 killed $v0 def $v0_64
|
|
; SOFT-FLOAT-64-NEXT: dsll $1, $2, 32
|
|
; SOFT-FLOAT-64-NEXT: or $3, $17, $1
|
|
; SOFT-FLOAT-64-NEXT: move $2, $19
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $17, 16($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $18, 24($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $19, 32($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $20, 40($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $21, 48($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $22, 56($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $23, 64($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 72($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 80
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f32:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -80
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 80
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 72($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $23, 64($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $22, 56($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $21, 48($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $20, 40($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $19, 32($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $18, 24($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $17, 16($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 23, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 22, -24
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 21, -32
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 20, -40
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 19, -48
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 18, -56
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 17, -64
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -72
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $9
|
|
; SOFT-FLOAT-64R2-NEXT: move $19, $8
|
|
; SOFT-FLOAT-64R2-NEXT: move $17, $7
|
|
; SOFT-FLOAT-64R2-NEXT: move $20, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $18, $5
|
|
; SOFT-FLOAT-64R2-NEXT: move $21, $4
|
|
; SOFT-FLOAT-64R2-NEXT: sll $4, $21, 0
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $20, 0
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $19, 0
|
|
; SOFT-FLOAT-64R2-NEXT: move $22, $2
|
|
; SOFT-FLOAT-64R2-NEXT: sll $4, $18, 0
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $17, 0
|
|
; SOFT-FLOAT-64R2-NEXT: move $23, $2
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $21, 32
|
|
; SOFT-FLOAT-64R2-NEXT: sll $4, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $20, 32
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $19, 32
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: dext $19, $22, 0, 32
|
|
; SOFT-FLOAT-64R2-NEXT: # kill: def $v0 killed $v0 def $v0_64
|
|
; SOFT-FLOAT-64R2-NEXT: dsll $1, $2, 32
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $16, 0
|
|
; SOFT-FLOAT-64R2-NEXT: or $19, $19, $1
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $23
|
|
; SOFT-FLOAT-64R2-NEXT: move $20, $2
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $18, 32
|
|
; SOFT-FLOAT-64R2-NEXT: sll $4, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $17, 32
|
|
; SOFT-FLOAT-64R2-NEXT: jal __mulsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: dext $17, $20, 0, 32
|
|
; SOFT-FLOAT-64R2-NEXT: dsrl $1, $16, 32
|
|
; SOFT-FLOAT-64R2-NEXT: jal __addsf3
|
|
; SOFT-FLOAT-64R2-NEXT: sll $5, $1, 0
|
|
; SOFT-FLOAT-64R2-NEXT: # kill: def $v0 killed $v0 def $v0_64
|
|
; SOFT-FLOAT-64R2-NEXT: dsll $1, $2, 32
|
|
; SOFT-FLOAT-64R2-NEXT: or $3, $17, $1
|
|
; SOFT-FLOAT-64R2-NEXT: move $2, $19
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $17, 16($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $18, 24($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $19, 32($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $20, 40($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $21, 48($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $22, 56($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $23, 64($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 72($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 80
|
|
%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: addiu $sp, $sp, -64
|
|
; SOFT-FLOAT-32-NEXT: .cfi_def_cfa_offset 64
|
|
; SOFT-FLOAT-32-NEXT: sw $ra, 60($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $fp, 56($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $23, 52($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $22, 48($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $21, 44($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $20, 40($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $19, 36($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $18, 32($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $17, 28($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $16, 24($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 30, -8
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 23, -12
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 22, -16
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 21, -20
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 20, -24
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 19, -28
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 18, -32
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 17, -36
|
|
; SOFT-FLOAT-32-NEXT: .cfi_offset 16, -40
|
|
; SOFT-FLOAT-32-NEXT: sw $7, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: sw $6, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32-NEXT: move $16, $4
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 88($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 92($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 120($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 124($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: nop
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 152($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 156($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: move $19, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 96($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 100($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 128($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 132($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: move $20, $3
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 160($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 164($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: move $21, $2
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 80($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 84($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 112($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 116($sp)
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: move $22, $3
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: lw $23, 140($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $fp, 136($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $17, 108($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $18, 104($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $7, 148($sp)
|
|
; SOFT-FLOAT-32-NEXT: lw $6, 144($sp)
|
|
; SOFT-FLOAT-32-NEXT: sw $22, 28($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $21, 24($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $20, 20($16)
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: sw $19, 16($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $3, 12($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $2, 8($16)
|
|
; SOFT-FLOAT-32-NEXT: lw $4, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $5, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: move $6, $18
|
|
; SOFT-FLOAT-32-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32-NEXT: move $7, $17
|
|
; SOFT-FLOAT-32-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32-NEXT: move $6, $fp
|
|
; SOFT-FLOAT-32-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32-NEXT: move $7, $23
|
|
; SOFT-FLOAT-32-NEXT: sw $3, 4($16)
|
|
; SOFT-FLOAT-32-NEXT: sw $2, 0($16)
|
|
; SOFT-FLOAT-32-NEXT: lw $16, 24($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $17, 28($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $18, 32($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $19, 36($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $20, 40($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $21, 44($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $22, 48($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $23, 52($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $fp, 56($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: lw $ra, 60($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32-NEXT: jr $ra
|
|
; SOFT-FLOAT-32-NEXT: addiu $sp, $sp, 64
|
|
;
|
|
; SOFT-FLOAT-32R2-LABEL: fmuladd_contract_v4f64:
|
|
; SOFT-FLOAT-32R2: # %bb.0:
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, -64
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_def_cfa_offset 64
|
|
; SOFT-FLOAT-32R2-NEXT: sw $ra, 60($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $fp, 56($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $23, 52($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $22, 48($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $21, 44($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $20, 40($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $19, 36($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $18, 32($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $17, 28($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $16, 24($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 31, -4
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 30, -8
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 23, -12
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 22, -16
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 21, -20
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 20, -24
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 19, -28
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 18, -32
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 17, -36
|
|
; SOFT-FLOAT-32R2-NEXT: .cfi_offset 16, -40
|
|
; SOFT-FLOAT-32R2-NEXT: sw $7, 20($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: sw $6, 16($sp) # 4-byte Folded Spill
|
|
; SOFT-FLOAT-32R2-NEXT: move $16, $4
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 88($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 92($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 120($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 124($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: nop
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 152($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 156($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: move $19, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 96($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 100($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 128($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 132($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $20, $3
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 160($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 164($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: move $21, $2
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 80($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 84($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 112($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 116($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $22, $3
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: lw $23, 140($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $fp, 136($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $17, 108($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $18, 104($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $7, 148($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $6, 144($sp)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $22, 28($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $21, 24($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $20, 20($16)
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: sw $19, 16($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $3, 12($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $2, 8($16)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $4, 16($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $5, 20($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: move $6, $18
|
|
; SOFT-FLOAT-32R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $7, $17
|
|
; SOFT-FLOAT-32R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-32R2-NEXT: move $5, $3
|
|
; SOFT-FLOAT-32R2-NEXT: move $6, $fp
|
|
; SOFT-FLOAT-32R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-32R2-NEXT: move $7, $23
|
|
; SOFT-FLOAT-32R2-NEXT: sw $3, 4($16)
|
|
; SOFT-FLOAT-32R2-NEXT: sw $2, 0($16)
|
|
; SOFT-FLOAT-32R2-NEXT: lw $16, 24($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $17, 28($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $18, 32($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $19, 36($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $20, 40($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $21, 44($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $22, 48($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $23, 52($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $fp, 56($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: lw $ra, 60($sp) # 4-byte Folded Reload
|
|
; SOFT-FLOAT-32R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-32R2-NEXT: addiu $sp, $sp, 64
|
|
;
|
|
; SOFT-FLOAT-64-LABEL: fmuladd_contract_v4f64:
|
|
; SOFT-FLOAT-64: # %bb.0:
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -64
|
|
; SOFT-FLOAT-64-NEXT: .cfi_def_cfa_offset 64
|
|
; SOFT-FLOAT-64-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $22, 48($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $21, 40($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $20, 32($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $19, 24($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $18, 16($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $17, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 22, -16
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 21, -24
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 20, -32
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 19, -40
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 18, -48
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 17, -56
|
|
; SOFT-FLOAT-64-NEXT: .cfi_offset 16, -64
|
|
; SOFT-FLOAT-64-NEXT: move $17, $10
|
|
; SOFT-FLOAT-64-NEXT: move $18, $9
|
|
; SOFT-FLOAT-64-NEXT: move $19, $8
|
|
; SOFT-FLOAT-64-NEXT: move $20, $6
|
|
; SOFT-FLOAT-64-NEXT: move $21, $5
|
|
; SOFT-FLOAT-64-NEXT: move $16, $4
|
|
; SOFT-FLOAT-64-NEXT: move $4, $7
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $11
|
|
; SOFT-FLOAT-64-NEXT: ld $5, 88($sp)
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: move $22, $2
|
|
; SOFT-FLOAT-64-NEXT: ld $5, 64($sp)
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $4, $19
|
|
; SOFT-FLOAT-64-NEXT: ld $5, 96($sp)
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: move $19, $2
|
|
; SOFT-FLOAT-64-NEXT: move $4, $20
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $17
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: ld $17, 72($sp)
|
|
; SOFT-FLOAT-64-NEXT: ld $5, 80($sp)
|
|
; SOFT-FLOAT-64-NEXT: sd $19, 24($16)
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: sd $22, 16($16)
|
|
; SOFT-FLOAT-64-NEXT: sd $2, 8($16)
|
|
; SOFT-FLOAT-64-NEXT: move $4, $21
|
|
; SOFT-FLOAT-64-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $18
|
|
; SOFT-FLOAT-64-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64-NEXT: move $5, $17
|
|
; SOFT-FLOAT-64-NEXT: sd $2, 0($16)
|
|
; SOFT-FLOAT-64-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $17, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $18, 16($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $19, 24($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $20, 32($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $21, 40($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $22, 48($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64-NEXT: jr $ra
|
|
; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 64
|
|
;
|
|
; SOFT-FLOAT-64R2-LABEL: fmuladd_contract_v4f64:
|
|
; SOFT-FLOAT-64R2: # %bb.0:
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, -64
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_def_cfa_offset 64
|
|
; SOFT-FLOAT-64R2-NEXT: sd $ra, 56($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $22, 48($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $21, 40($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $20, 32($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $19, 24($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $18, 16($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $17, 8($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: sd $16, 0($sp) # 8-byte Folded Spill
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 31, -8
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 22, -16
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 21, -24
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 20, -32
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 19, -40
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 18, -48
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 17, -56
|
|
; SOFT-FLOAT-64R2-NEXT: .cfi_offset 16, -64
|
|
; SOFT-FLOAT-64R2-NEXT: move $17, $10
|
|
; SOFT-FLOAT-64R2-NEXT: move $18, $9
|
|
; SOFT-FLOAT-64R2-NEXT: move $19, $8
|
|
; SOFT-FLOAT-64R2-NEXT: move $20, $6
|
|
; SOFT-FLOAT-64R2-NEXT: move $21, $5
|
|
; SOFT-FLOAT-64R2-NEXT: move $16, $4
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $7
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $11
|
|
; SOFT-FLOAT-64R2-NEXT: ld $5, 88($sp)
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: move $22, $2
|
|
; SOFT-FLOAT-64R2-NEXT: ld $5, 64($sp)
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $19
|
|
; SOFT-FLOAT-64R2-NEXT: ld $5, 96($sp)
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: move $19, $2
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $20
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $17
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: ld $17, 72($sp)
|
|
; SOFT-FLOAT-64R2-NEXT: ld $5, 80($sp)
|
|
; SOFT-FLOAT-64R2-NEXT: sd $19, 24($16)
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: sd $22, 16($16)
|
|
; SOFT-FLOAT-64R2-NEXT: sd $2, 8($16)
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $21
|
|
; SOFT-FLOAT-64R2-NEXT: jal __muldf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $18
|
|
; SOFT-FLOAT-64R2-NEXT: move $4, $2
|
|
; SOFT-FLOAT-64R2-NEXT: jal __adddf3
|
|
; SOFT-FLOAT-64R2-NEXT: move $5, $17
|
|
; SOFT-FLOAT-64R2-NEXT: sd $2, 0($16)
|
|
; SOFT-FLOAT-64R2-NEXT: ld $16, 0($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $17, 8($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $18, 16($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $19, 24($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $20, 32($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $21, 40($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $22, 48($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: ld $ra, 56($sp) # 8-byte Folded Reload
|
|
; SOFT-FLOAT-64R2-NEXT: jr $ra
|
|
; SOFT-FLOAT-64R2-NEXT: daddiu $sp, $sp, 64
|
|
%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)
|