xref: /aosp_15_r20/external/llvm/test/CodeGen/Thumb2/aapcs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv7-none-eabi   -mcpu=cortex-m4 -mattr=-vfp2             | FileCheck %s -check-prefix=CHECK -check-prefix=SOFT
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mcpu=cortex-m4 -mattr=+vfp4,+fp-only-sp | FileCheck %s -check-prefix=CHECK -check-prefix=HARD -check-prefix=SP
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mcpu=cortex-a8 -mattr=+vfp3             | FileCheck %s -check-prefix=CHECK -check-prefix=HARD -check-prefix=DP
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Workerdefine float @float_in_reg(float %a, float %b) {
6*9880d681SAndroid Build Coastguard Workerentry:
7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: float_in_reg:
8*9880d681SAndroid Build Coastguard Worker; SOFT: mov r0, r1
9*9880d681SAndroid Build Coastguard Worker; HARD: vmov.f32  s0, s1
10*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr
11*9880d681SAndroid Build Coastguard Worker  ret float %b
12*9880d681SAndroid Build Coastguard Worker}
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerdefine double @double_in_reg(double %a, double %b) {
15*9880d681SAndroid Build Coastguard Workerentry:
16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: double_in_reg:
17*9880d681SAndroid Build Coastguard Worker; SOFT: mov r0, r2
18*9880d681SAndroid Build Coastguard Worker; SOFT: mov r1, r3
19*9880d681SAndroid Build Coastguard Worker; SP: vmov.f32  s0, s2
20*9880d681SAndroid Build Coastguard Worker; SP: vmov.f32  s1, s3
21*9880d681SAndroid Build Coastguard Worker; DP: vmov.f64  d0, d1
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr
23*9880d681SAndroid Build Coastguard Worker  ret double %b
24*9880d681SAndroid Build Coastguard Worker}
25*9880d681SAndroid Build Coastguard Worker
26*9880d681SAndroid Build Coastguard Workerdefine float @float_on_stack(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, float %i) {
27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: float_on_stack:
28*9880d681SAndroid Build Coastguard Worker; SOFT: ldr r0, [sp, #48]
29*9880d681SAndroid Build Coastguard Worker; HARD: vldr s0, [sp]
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr
31*9880d681SAndroid Build Coastguard Worker  ret float %i
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine double @double_on_stack(double %a, double %b, double %c, double %d, double %e, double %f, double %g, double %h, double %i) {
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: double_on_stack:
36*9880d681SAndroid Build Coastguard Worker; SOFT: ldrd r0, r1, [sp, #48]
37*9880d681SAndroid Build Coastguard Worker; HARD: vldr d0, [sp]
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr
39*9880d681SAndroid Build Coastguard Worker  ret double %i
40*9880d681SAndroid Build Coastguard Worker}
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerdefine double @double_not_split(double %a, double %b, double %c, double %d, double %e, double %f, double %g, float %h, double %i) {
43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: double_not_split:
44*9880d681SAndroid Build Coastguard Worker; SOFT: ldrd r0, r1, [sp, #48]
45*9880d681SAndroid Build Coastguard Worker; HARD: vldr d0, [sp]
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx lr
47*9880d681SAndroid Build Coastguard Worker  ret double %i
48*9880d681SAndroid Build Coastguard Worker}
49