| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=mips64 < %s | FileCheck %s -check-prefix=SOFT-FLOAT-64 |
| ; RUN: not llc -mtriple=mipsel -filetype=null < %s 2>&1 | FileCheck %s -check-prefix=ERR |
| ; RUN: not llc -mtriple=mips -filetype=null < %s 2>&1 | FileCheck %s -check-prefix=ERR |
| |
| ; fp128 sincos lowers to the sincosl long double libcall only where long double |
| ; is IEEE quad (mips64/n64). On 32-bit MIPS long double is IEEE double, so |
| ; sincosl is the wrong type and no libcall is available; it must diagnose rather |
| ; than emit a wrongly-typed call. |
| |
| ; ERR: error: do not know how to soften fsincos |
| define { fp128, fp128 } @test_sincos_f128(fp128 %a) #0 { |
| ; SOFT-FLOAT-64-LABEL: test_sincos_f128: |
| ; SOFT-FLOAT-64: # %bb.0: |
| ; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -48 |
| ; SOFT-FLOAT-64-NEXT: sd $ra, 40($sp) # 8-byte Folded Spill |
| ; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 16 |
| ; SOFT-FLOAT-64-NEXT: jal sincosl |
| ; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 0 |
| ; SOFT-FLOAT-64-NEXT: ldc1 $f0, 16($sp) |
| ; SOFT-FLOAT-64-NEXT: ldc1 $f2, 24($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $2, 0($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $3, 8($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $ra, 40($sp) # 8-byte Folded Reload |
| ; SOFT-FLOAT-64-NEXT: jr $ra |
| ; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 48 |
| %result = call { fp128, fp128 } @llvm.sincos.f128(fp128 %a) |
| ret { fp128, fp128 } %result |
| } |
| |
| define { <2 x fp128>, <2 x fp128> } @test_sincos_v2f128(<2 x fp128> %a) #0 { |
| ; SOFT-FLOAT-64-LABEL: test_sincos_v2f128: |
| ; SOFT-FLOAT-64: # %bb.0: |
| ; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, -96 |
| ; SOFT-FLOAT-64-NEXT: sd $ra, 88($sp) # 8-byte Folded Spill |
| ; SOFT-FLOAT-64-NEXT: sd $18, 80($sp) # 8-byte Folded Spill |
| ; SOFT-FLOAT-64-NEXT: sd $17, 72($sp) # 8-byte Folded Spill |
| ; SOFT-FLOAT-64-NEXT: sd $16, 64($sp) # 8-byte Folded Spill |
| ; SOFT-FLOAT-64-NEXT: move $16, $6 |
| ; SOFT-FLOAT-64-NEXT: move $17, $5 |
| ; SOFT-FLOAT-64-NEXT: move $18, $4 |
| ; SOFT-FLOAT-64-NEXT: dmtc1 $7, $f12 |
| ; SOFT-FLOAT-64-NEXT: dmtc1 $8, $f13 |
| ; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 48 |
| ; SOFT-FLOAT-64-NEXT: jal sincosl |
| ; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 32 |
| ; SOFT-FLOAT-64-NEXT: dmtc1 $17, $f12 |
| ; SOFT-FLOAT-64-NEXT: dmtc1 $16, $f13 |
| ; SOFT-FLOAT-64-NEXT: daddiu $6, $sp, 16 |
| ; SOFT-FLOAT-64-NEXT: jal sincosl |
| ; SOFT-FLOAT-64-NEXT: daddiu $7, $sp, 0 |
| ; SOFT-FLOAT-64-NEXT: ld $1, 56($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $2, 0($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $3, 8($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $4, 32($sp) |
| ; SOFT-FLOAT-64-NEXT: ld $5, 40($sp) |
| ; SOFT-FLOAT-64-NEXT: sd $5, 56($18) |
| ; SOFT-FLOAT-64-NEXT: sd $4, 48($18) |
| ; SOFT-FLOAT-64-NEXT: sd $3, 40($18) |
| ; SOFT-FLOAT-64-NEXT: sd $2, 32($18) |
| ; SOFT-FLOAT-64-NEXT: sd $1, 24($18) |
| ; SOFT-FLOAT-64-NEXT: ld $1, 48($sp) |
| ; SOFT-FLOAT-64-NEXT: sd $1, 16($18) |
| ; SOFT-FLOAT-64-NEXT: ld $1, 24($sp) |
| ; SOFT-FLOAT-64-NEXT: sd $1, 8($18) |
| ; SOFT-FLOAT-64-NEXT: ld $1, 16($sp) |
| ; SOFT-FLOAT-64-NEXT: sd $1, 0($18) |
| ; SOFT-FLOAT-64-NEXT: ld $16, 64($sp) # 8-byte Folded Reload |
| ; SOFT-FLOAT-64-NEXT: ld $17, 72($sp) # 8-byte Folded Reload |
| ; SOFT-FLOAT-64-NEXT: ld $18, 80($sp) # 8-byte Folded Reload |
| ; SOFT-FLOAT-64-NEXT: ld $ra, 88($sp) # 8-byte Folded Reload |
| ; SOFT-FLOAT-64-NEXT: jr $ra |
| ; SOFT-FLOAT-64-NEXT: daddiu $sp, $sp, 96 |
| %result = call { <2 x fp128>, <2 x fp128> } @llvm.sincos.v2f128(<2 x fp128> %a) |
| ret { <2 x fp128>, <2 x fp128> } %result |
| } |
| |
| attributes #0 = { nounwind } |