cmse-clear-float-hard2.ll
6.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc %s -o - -mtriple=thumbv8m.main -mattr=+fp-armv8d16sp,+dsp -float-abi=hard | \
; RUN: FileCheck %s --check-prefix=CHECK-V8-LE
; RUN: llc %s -o - -mtriple=thumbebv8m.main -mattr=+fp-armv8d16sp,+dsp -float-abi=hard | \
; RUN: FileCheck %s --check-prefix=CHECK-V8-BE
; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mattr=+fp-armv8d16sp,+dsp -float-abi=hard | \
; RUN: FileCheck %s --check-prefix=CHECK-V81-LE
; RUN: llc %s -o - -mtriple=thumbebv8.1m.main -mattr=+fp-armv8d16sp,+dsp -float-abi=hard | \
; RUN: FileCheck %s --check-prefix=CHECK-V81-BE
attributes #0 = { nounwind }
attributes #1 = { "cmse_nonsecure_call" nounwind }
define void @fidififiddddff(void (float, i32, double, i32, float, i32, float, i32, double, double, double, double, float, float)* %fu, float %a, i32 %b, double %c, i32 %d, float %e, i32 %f, float %g, i32 %h, double %i, double %j, double %k, double %l, float %m, float %n) #0 {
; CHECK-V8-LE-LABEL: fidififiddddff:
; CHECK-V8-LE: @ %bb.0: @ %entry
; CHECK-V8-LE-NEXT: push {r7, lr}
; CHECK-V8-LE-NEXT: mov lr, r3
; CHECK-V8-LE-NEXT: mov r12, r0
; CHECK-V8-LE-NEXT: mov r0, r1
; CHECK-V8-LE-NEXT: mov r1, r2
; CHECK-V8-LE-NEXT: ldr r3, [sp, #8]
; CHECK-V8-LE-NEXT: mov r2, lr
; CHECK-V8-LE-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V8-LE-NEXT: bic r12, r12, #1
; CHECK-V8-LE-NEXT: sub sp, #136
; CHECK-V8-LE-NEXT: vmov r4, s5
; CHECK-V8-LE-NEXT: vmov r11, s0
; CHECK-V8-LE-NEXT: vmov r9, r10, d1
; CHECK-V8-LE-NEXT: vmov r8, s1
; CHECK-V8-LE-NEXT: vmov r7, s4
; CHECK-V8-LE-NEXT: vmov r5, r6, d3
; CHECK-V8-LE-NEXT: vlstm sp
; CHECK-V8-LE-NEXT: vmov s0, r11
; CHECK-V8-LE-NEXT: vmov d1, r9, r10
; CHECK-V8-LE-NEXT: vmov s1, r8
; CHECK-V8-LE-NEXT: vmov s4, r7
; CHECK-V8-LE-NEXT: vmov d3, r5, r6
; CHECK-V8-LE-NEXT: vmov s5, r4
; CHECK-V8-LE-NEXT: vldr d4, [sp, #32]
; CHECK-V8-LE-NEXT: vldr d5, [sp, #40]
; CHECK-V8-LE-NEXT: vldr d6, [sp, #48]
; CHECK-V8-LE-NEXT: vldr s14, [sp, #56]
; CHECK-V8-LE-NEXT: ldr r4, [sp, #64]
; CHECK-V8-LE-NEXT: bic r4, r4, #159
; CHECK-V8-LE-NEXT: bic r4, r4, #4026531840
; CHECK-V8-LE-NEXT: vmsr fpscr, r4
; CHECK-V8-LE-NEXT: msr apsr_nzcvqg, r12
; CHECK-V8-LE-NEXT: blxns r12
; CHECK-V8-LE-NEXT: vlldm sp
; CHECK-V8-LE-NEXT: add sp, #136
; CHECK-V8-LE-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V8-LE-NEXT: pop {r7, pc}
;
; CHECK-V8-BE-LABEL: fidififiddddff:
; CHECK-V8-BE: @ %bb.0: @ %entry
; CHECK-V8-BE-NEXT: push {r7, lr}
; CHECK-V8-BE-NEXT: mov lr, r3
; CHECK-V8-BE-NEXT: mov r12, r0
; CHECK-V8-BE-NEXT: mov r0, r1
; CHECK-V8-BE-NEXT: mov r1, r2
; CHECK-V8-BE-NEXT: ldr r3, [sp, #8]
; CHECK-V8-BE-NEXT: mov r2, lr
; CHECK-V8-BE-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V8-BE-NEXT: bic r12, r12, #1
; CHECK-V8-BE-NEXT: sub sp, #136
; CHECK-V8-BE-NEXT: vmov r4, s5
; CHECK-V8-BE-NEXT: vmov r11, s0
; CHECK-V8-BE-NEXT: vmov r9, r10, d1
; CHECK-V8-BE-NEXT: vmov r8, s1
; CHECK-V8-BE-NEXT: vmov r7, s4
; CHECK-V8-BE-NEXT: vmov r5, r6, d3
; CHECK-V8-BE-NEXT: vlstm sp
; CHECK-V8-BE-NEXT: vmov s0, r11
; CHECK-V8-BE-NEXT: vmov d1, r9, r10
; CHECK-V8-BE-NEXT: vmov s1, r8
; CHECK-V8-BE-NEXT: vmov s4, r7
; CHECK-V8-BE-NEXT: vmov d3, r5, r6
; CHECK-V8-BE-NEXT: vmov s5, r4
; CHECK-V8-BE-NEXT: vldr s8, [sp, #32]
; CHECK-V8-BE-NEXT: vldr s9, [sp, #36]
; CHECK-V8-BE-NEXT: vldr s10, [sp, #40]
; CHECK-V8-BE-NEXT: vldr s11, [sp, #44]
; CHECK-V8-BE-NEXT: vldr s12, [sp, #48]
; CHECK-V8-BE-NEXT: vldr s13, [sp, #52]
; CHECK-V8-BE-NEXT: vldr s14, [sp, #56]
; CHECK-V8-BE-NEXT: ldr r4, [sp, #64]
; CHECK-V8-BE-NEXT: bic r4, r4, #159
; CHECK-V8-BE-NEXT: bic r4, r4, #4026531840
; CHECK-V8-BE-NEXT: vmsr fpscr, r4
; CHECK-V8-BE-NEXT: msr apsr_nzcvqg, r12
; CHECK-V8-BE-NEXT: blxns r12
; CHECK-V8-BE-NEXT: vlldm sp
; CHECK-V8-BE-NEXT: add sp, #136
; CHECK-V8-BE-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V8-BE-NEXT: pop {r7, pc}
;
; CHECK-V81-LE-LABEL: fidififiddddff:
; CHECK-V81-LE: @ %bb.0: @ %entry
; CHECK-V81-LE-NEXT: push {r7, lr}
; CHECK-V81-LE-NEXT: mov lr, r3
; CHECK-V81-LE-NEXT: mov r12, r0
; CHECK-V81-LE-NEXT: mov r0, r1
; CHECK-V81-LE-NEXT: mov r1, r2
; CHECK-V81-LE-NEXT: ldr r3, [sp, #8]
; CHECK-V81-LE-NEXT: mov r2, lr
; CHECK-V81-LE-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V81-LE-NEXT: bic r12, r12, #1
; CHECK-V81-LE-NEXT: vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
; CHECK-V81-LE-NEXT: vscclrm {s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}
; CHECK-V81-LE-NEXT: vstr fpcxts, [sp, #-8]!
; CHECK-V81-LE-NEXT: clrm {r4, r5, r6, r7, r8, r9, r10, r11, apsr}
; CHECK-V81-LE-NEXT: blxns r12
; CHECK-V81-LE-NEXT: vldr fpcxts, [sp], #8
; CHECK-V81-LE-NEXT: vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
; CHECK-V81-LE-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V81-LE-NEXT: pop {r7, pc}
;
; CHECK-V81-BE-LABEL: fidififiddddff:
; CHECK-V81-BE: @ %bb.0: @ %entry
; CHECK-V81-BE-NEXT: push {r7, lr}
; CHECK-V81-BE-NEXT: mov lr, r3
; CHECK-V81-BE-NEXT: mov r12, r0
; CHECK-V81-BE-NEXT: mov r0, r1
; CHECK-V81-BE-NEXT: mov r1, r2
; CHECK-V81-BE-NEXT: ldr r3, [sp, #8]
; CHECK-V81-BE-NEXT: mov r2, lr
; CHECK-V81-BE-NEXT: push.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V81-BE-NEXT: bic r12, r12, #1
; CHECK-V81-BE-NEXT: vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
; CHECK-V81-BE-NEXT: vscclrm {s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}
; CHECK-V81-BE-NEXT: vstr fpcxts, [sp, #-8]!
; CHECK-V81-BE-NEXT: clrm {r4, r5, r6, r7, r8, r9, r10, r11, apsr}
; CHECK-V81-BE-NEXT: blxns r12
; CHECK-V81-BE-NEXT: vldr fpcxts, [sp], #8
; CHECK-V81-BE-NEXT: vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}
; CHECK-V81-BE-NEXT: pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
; CHECK-V81-BE-NEXT: pop {r7, pc}
entry:
call void %fu(float %a, i32 %b, double %c, i32 %d, float %e, i32 %f, float %g, i32 %h, double %i, double %j, double %k, double %l, float %m, float %n) #1
ret void
}