xref: /llvm-project/llvm/test/CodeGen/ARM/cmse-harden-call-returned-values.ll (revision 78ff617d3f573fb3a9b2fef180fa0fd43d5584ea)
1*78ff617dSLucas Duarte Prates; RUN: llc %s -mtriple=thumbv8m.main     -o - | FileCheck %s --check-prefixes V8M-COMMON,V8M-LE
2*78ff617dSLucas Duarte Prates; RUN: llc %s -mtriple=thumbebv8m.main   -o - | FileCheck %s --check-prefixes V8M-COMMON,V8M-BE
3*78ff617dSLucas Duarte Prates; RUN: llc %s -mtriple=thumbv8.1m.main   -o - | FileCheck %s --check-prefixes V81M-COMMON,V81M-LE
4*78ff617dSLucas Duarte Prates; RUN: llc %s -mtriple=thumbebv8.1m.main -o - | FileCheck %s --check-prefixes V81M-COMMON,V81M-BE
5*78ff617dSLucas Duarte Prates
6*78ff617dSLucas Duarte Prates@get_idx = hidden local_unnamed_addr global ptr null, align 4
7*78ff617dSLucas Duarte Prates@arr = hidden local_unnamed_addr global [256 x i32] zeroinitializer, align 4
8*78ff617dSLucas Duarte Prates
9*78ff617dSLucas Duarte Pratesdefine i32 @access_i16() {
10*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_i16:
11*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
12*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
13*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
14*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
15*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
16*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
17*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
18*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
19*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
20*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
21*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
22*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
23*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
24*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
25*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
26*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
27*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
28*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
29*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
30*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
31*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
32*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
33*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
34*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
35*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
36*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
37*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
38*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sxth r0, r0
39*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
40*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
41*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
42*78ff617dSLucas Duarte Prates;
43*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_i16:
44*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
45*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
46*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
47*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
48*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
49*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
50*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
51*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
52*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
53*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
54*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
55*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
56*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
57*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
58*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
59*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sxth r0, r0
60*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
61*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
62*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
63*78ff617dSLucas Duarte Pratesentry:
64*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
65*78ff617dSLucas Duarte Prates  %call = tail call signext i16 %0() "cmse_nonsecure_call"
66*78ff617dSLucas Duarte Prates  %idxprom = sext i16 %call to i32
67*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
68*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
69*78ff617dSLucas Duarte Prates  ret i32 %1
70*78ff617dSLucas Duarte Prates}
71*78ff617dSLucas Duarte Prates
72*78ff617dSLucas Duarte Pratesdefine i32 @access_u16() {
73*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_u16:
74*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
75*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
76*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
77*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
78*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
79*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
80*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
81*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
82*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
83*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
84*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
85*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
86*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
87*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
88*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
89*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
90*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
91*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
92*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
93*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
94*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
95*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
96*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
97*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
98*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
99*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
100*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
101*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    uxth r0, r0
102*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
103*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
104*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
105*78ff617dSLucas Duarte Prates;
106*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_u16:
107*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
108*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
109*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
110*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
111*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
112*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
113*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
114*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
115*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
116*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
117*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
118*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
119*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
120*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
121*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
122*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    uxth r0, r0
123*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
124*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
125*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
126*78ff617dSLucas Duarte Pratesentry:
127*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
128*78ff617dSLucas Duarte Prates  %call = tail call zeroext i16 %0() "cmse_nonsecure_call"
129*78ff617dSLucas Duarte Prates  %idxprom = zext i16 %call to i32
130*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
131*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
132*78ff617dSLucas Duarte Prates  ret i32 %1
133*78ff617dSLucas Duarte Prates}
134*78ff617dSLucas Duarte Prates
135*78ff617dSLucas Duarte Pratesdefine i32 @access_i8() {
136*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_i8:
137*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
138*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
139*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
140*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
141*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
142*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
143*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
144*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
145*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
146*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
147*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
148*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
149*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
150*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
151*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
152*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
153*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
154*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
155*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
156*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
157*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
158*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
159*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
160*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
161*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
162*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
163*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
164*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sxtb r0, r0
165*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
166*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
167*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
168*78ff617dSLucas Duarte Prates;
169*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_i8:
170*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
171*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
172*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
173*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
174*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
175*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
176*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
177*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
178*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
179*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
180*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
181*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
182*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
183*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
184*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
185*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sxtb r0, r0
186*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
187*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
188*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
189*78ff617dSLucas Duarte Pratesentry:
190*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
191*78ff617dSLucas Duarte Prates  %call = tail call signext i8 %0() "cmse_nonsecure_call"
192*78ff617dSLucas Duarte Prates  %idxprom = sext i8 %call to i32
193*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
194*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
195*78ff617dSLucas Duarte Prates  ret i32 %1
196*78ff617dSLucas Duarte Prates}
197*78ff617dSLucas Duarte Prates
198*78ff617dSLucas Duarte Pratesdefine i32 @access_u8() {
199*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_u8:
200*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
201*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
202*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
203*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
204*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
205*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
206*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
207*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
208*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
209*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
210*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
211*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
212*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
213*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
214*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
215*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
216*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
217*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
218*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
219*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
220*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
221*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
222*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
223*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
224*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
225*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
226*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
227*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    uxtb r0, r0
228*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
229*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
230*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
231*78ff617dSLucas Duarte Prates;
232*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_u8:
233*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
234*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
235*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
236*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
237*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
238*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
239*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
240*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
241*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
242*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
243*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
244*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
245*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
246*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
247*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
248*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    uxtb r0, r0
249*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
250*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
251*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
252*78ff617dSLucas Duarte Pratesentry:
253*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
254*78ff617dSLucas Duarte Prates  %call = tail call zeroext i8 %0() "cmse_nonsecure_call"
255*78ff617dSLucas Duarte Prates  %idxprom = zext i8 %call to i32
256*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
257*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
258*78ff617dSLucas Duarte Prates  ret i32 %1
259*78ff617dSLucas Duarte Prates}
260*78ff617dSLucas Duarte Prates
261*78ff617dSLucas Duarte Pratesdefine i32 @access_i1() {
262*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_i1:
263*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
264*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
265*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
266*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
267*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
268*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
269*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
270*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
271*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
272*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
273*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
274*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
275*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
276*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
277*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
278*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
279*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
280*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
281*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
282*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
283*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
284*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
285*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
286*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
287*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
288*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
289*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
290*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    and r0, r0, #1
291*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
292*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
293*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
294*78ff617dSLucas Duarte Prates;
295*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_i1:
296*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
297*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
298*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
299*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
300*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
301*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
302*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
303*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
304*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
305*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
306*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
307*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
308*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
309*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
310*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
311*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    and r0, r0, #1
312*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
313*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
314*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
315*78ff617dSLucas Duarte Pratesentry:
316*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
317*78ff617dSLucas Duarte Prates  %call = tail call zeroext i1 %0() "cmse_nonsecure_call"
318*78ff617dSLucas Duarte Prates  %idxprom = zext i1 %call to i32
319*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
320*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
321*78ff617dSLucas Duarte Prates  ret i32 %1
322*78ff617dSLucas Duarte Prates}
323*78ff617dSLucas Duarte Prates
324*78ff617dSLucas Duarte Pratesdefine i32 @access_i5() {
325*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_i5:
326*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
327*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
328*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
329*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
330*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
331*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
332*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
333*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
334*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
335*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
336*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
337*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
338*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
339*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
340*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
341*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
342*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
343*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
344*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
345*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
346*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
347*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
348*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
349*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
350*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
351*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
352*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
353*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sbfx r0, r0, #0, #5
354*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
355*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
356*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
357*78ff617dSLucas Duarte Prates;
358*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_i5:
359*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
360*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
361*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
362*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
363*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
364*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
365*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
366*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
367*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
368*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
369*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
370*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
371*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
372*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
373*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
374*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sbfx r0, r0, #0, #5
375*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
376*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
377*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
378*78ff617dSLucas Duarte Pratesentry:
379*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
380*78ff617dSLucas Duarte Prates  %call = tail call signext i5 %0() "cmse_nonsecure_call"
381*78ff617dSLucas Duarte Prates  %idxprom = sext i5 %call to i32
382*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
383*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
384*78ff617dSLucas Duarte Prates  ret i32 %1
385*78ff617dSLucas Duarte Prates}
386*78ff617dSLucas Duarte Prates
387*78ff617dSLucas Duarte Pratesdefine i32 @access_u5() {
388*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_u5:
389*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
390*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
391*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r0, :lower16:get_idx
392*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r0, :upper16:get_idx
393*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr r0, [r0]
394*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
395*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
396*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
397*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
398*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
399*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
400*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
401*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
402*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
403*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
404*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
405*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
406*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
407*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
408*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
409*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
410*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
411*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
412*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
413*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
414*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
415*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movw r1, :lower16:arr
416*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    and r0, r0, #31
417*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    movt r1, :upper16:arr
418*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
419*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
420*78ff617dSLucas Duarte Prates;
421*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_u5:
422*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
423*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
424*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r0, :lower16:get_idx
425*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r0, :upper16:get_idx
426*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr r0, [r0]
427*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
428*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
429*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
430*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
431*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
432*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
433*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
434*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
435*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
436*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movw r1, :lower16:arr
437*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    and r0, r0, #31
438*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    movt r1, :upper16:arr
439*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    ldr.w r0, [r1, r0, lsl #2]
440*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
441*78ff617dSLucas Duarte Pratesentry:
442*78ff617dSLucas Duarte Prates  %0 = load ptr, ptr @get_idx, align 4
443*78ff617dSLucas Duarte Prates  %call = tail call zeroext i5 %0() "cmse_nonsecure_call"
444*78ff617dSLucas Duarte Prates  %idxprom = zext i5 %call to i32
445*78ff617dSLucas Duarte Prates  %arrayidx = getelementptr inbounds [256 x i32], ptr @arr, i32 0, i32 %idxprom
446*78ff617dSLucas Duarte Prates  %1 = load i32, ptr %arrayidx, align 4
447*78ff617dSLucas Duarte Prates  ret i32 %1
448*78ff617dSLucas Duarte Prates}
449*78ff617dSLucas Duarte Prates
450*78ff617dSLucas Duarte Pratesdefine i32 @access_i33(ptr %f) {
451*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_i33:
452*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
453*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
454*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
455*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
456*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
457*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
458*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
459*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
460*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
461*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
462*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
463*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
464*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
465*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
466*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
467*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
468*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
469*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
470*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
471*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
472*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
473*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
474*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
475*78ff617dSLucas Duarte Prates; V8M-LE-NEXT:        and r0, r1, #1
476*78ff617dSLucas Duarte Prates; V8M-BE-NEXT:        and r0, r0, #1
477*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    rsb.w r0, r0, #0
478*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
479*78ff617dSLucas Duarte Prates;
480*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_i33:
481*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
482*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
483*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
484*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
485*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
486*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
487*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
488*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
489*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
490*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
491*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
492*78ff617dSLucas Duarte Prates; V81M-LE-NEXT:        and r0, r1, #1
493*78ff617dSLucas Duarte Prates; V81M-BE-NEXT:        and r0, r0, #1
494*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    rsb.w r0, r0, #0
495*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
496*78ff617dSLucas Duarte Pratesentry:
497*78ff617dSLucas Duarte Prates  %call = tail call i33 %f() "cmse_nonsecure_call"
498*78ff617dSLucas Duarte Prates  %shr = ashr i33 %call, 32
499*78ff617dSLucas Duarte Prates  %conv = trunc nsw i33 %shr to i32
500*78ff617dSLucas Duarte Prates  ret i32 %conv
501*78ff617dSLucas Duarte Prates}
502*78ff617dSLucas Duarte Prates
503*78ff617dSLucas Duarte Pratesdefine i32 @access_u33(ptr %f) {
504*78ff617dSLucas Duarte Prates; V8M-COMMON-LABEL: access_u33:
505*78ff617dSLucas Duarte Prates; V8M-COMMON:       @ %bb.0: @ %entry
506*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push {r7, lr}
507*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
508*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    bic r0, r0, #1
509*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    sub sp, #136
510*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlstm sp, {d0 - d15}
511*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r1, r0
512*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r2, r0
513*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r3, r0
514*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r4, r0
515*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r5, r0
516*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r6, r0
517*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r7, r0
518*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r8, r0
519*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r9, r0
520*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r10, r0
521*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r11, r0
522*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    mov r12, r0
523*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    msr apsr_nzcvq, r0
524*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    blxns r0
525*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    vlldm sp, {d0 - d15}
526*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    add sp, #136
527*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
528*78ff617dSLucas Duarte Prates; V8M-LE-NEXT:        and r0, r1, #1
529*78ff617dSLucas Duarte Prates; V8M-BE-NEXT:        and r0, r0, #1
530*78ff617dSLucas Duarte Prates; V8M-COMMON-NEXT:    pop {r7, pc}
531*78ff617dSLucas Duarte Prates;
532*78ff617dSLucas Duarte Prates; V81M-COMMON-LABEL: access_u33:
533*78ff617dSLucas Duarte Prates; V81M-COMMON:       @ %bb.0: @ %entry
534*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push {r7, lr}
535*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
536*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    bic r0, r0, #1
537*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    sub sp, #136
538*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlstm sp, {d0 - d15}
539*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
540*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    blxns r0
541*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    vlldm sp, {d0 - d15}
542*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    add sp, #136
543*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
544*78ff617dSLucas Duarte Prates; V81M-LE-NEXT:        and r0, r1, #1
545*78ff617dSLucas Duarte Prates; V81M-BE-NEXT:        and r0, r0, #1
546*78ff617dSLucas Duarte Prates; V81M-COMMON-NEXT:    pop {r7, pc}
547*78ff617dSLucas Duarte Pratesentry:
548*78ff617dSLucas Duarte Prates  %call = tail call i33 %f() "cmse_nonsecure_call"
549*78ff617dSLucas Duarte Prates  %shr = lshr i33 %call, 32
550*78ff617dSLucas Duarte Prates  %conv = trunc nuw nsw i33 %shr to i32
551*78ff617dSLucas Duarte Prates  ret i32 %conv
552*78ff617dSLucas Duarte Prates}
553