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