brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 3df150e Raw
173 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-eabi   -mattr=+8msecext,+mve.fp                  %s -o - | FileCheck %s --check-prefix=CHECK-SOFTFP3; RUN: llc -mtriple=thumbebv8.1m.main-eabi -mattr=+8msecext,+mve.fp                  %s -o - | FileCheck %s --check-prefix=CHECK-SOFTFP4; RUN: llc -mtriple=thumbv8.1m.main-eabi   -mattr=+8msecext,+mve.fp --float-abi=hard %s -o - | FileCheck %s --check-prefix=CHECK-HARD5; RUN: llc -mtriple=thumbebv8.1m.main-eabi -mattr=+8msecext,+mve.fp --float-abi=hard %s -o - | FileCheck %s --check-prefix=CHECK-HARD6 7declare <8 x i16> @g0(...) #08declare <4 x float> @g1(...) #09 10;;11;; Test clearing before return to nonsecure state12;;13 14define <8 x i16> @f0() #1 {15; CHECK-SOFTFP-LABEL: f0:16; CHECK-SOFTFP:       @ %bb.0: @ %entry17; CHECK-SOFTFP-NEXT:    vstr fpcxtns, [sp, #-4]!18; CHECK-SOFTFP-NEXT:    .save {r7, lr}19; CHECK-SOFTFP-NEXT:    push {r7, lr}20; CHECK-SOFTFP-NEXT:    .pad #421; CHECK-SOFTFP-NEXT:    sub sp, #422; CHECK-SOFTFP-NEXT:    bl g023; CHECK-SOFTFP-NEXT:    add sp, #424; CHECK-SOFTFP-NEXT:    pop.w {r7, lr}25; CHECK-SOFTFP-NEXT:    vscclrm {s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}26; CHECK-SOFTFP-NEXT:    vldr fpcxtns, [sp], #427; CHECK-SOFTFP-NEXT:    clrm {r12, apsr}28; CHECK-SOFTFP-NEXT:    bxns lr29;30; CHECK-HARD-LABEL: f0:31; CHECK-HARD:       @ %bb.0: @ %entry32; CHECK-HARD-NEXT:    vstr fpcxtns, [sp, #-4]!33; CHECK-HARD-NEXT:    .save {r7, lr}34; CHECK-HARD-NEXT:    push {r7, lr}35; CHECK-HARD-NEXT:    .pad #436; CHECK-HARD-NEXT:    sub sp, #437; CHECK-HARD-NEXT:    bl g038; CHECK-HARD-NEXT:    add sp, #439; CHECK-HARD-NEXT:    pop.w {r7, lr}40; CHECK-HARD-NEXT:    vscclrm {s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}41; CHECK-HARD-NEXT:    vldr fpcxtns, [sp], #442; CHECK-HARD-NEXT:    clrm {r0, r1, r2, r3, r12, apsr}43; CHECK-HARD-NEXT:    bxns lr44entry:45  %call = call <8 x i16> @g0() #046  ret <8 x i16> %call47}48 49define <4 x float> @f1() #1 {50; CHECK-SOFTFP-LABEL: f1:51; CHECK-SOFTFP:       @ %bb.0: @ %entry52; CHECK-SOFTFP-NEXT:    vstr fpcxtns, [sp, #-4]!53; CHECK-SOFTFP-NEXT:    .save {r7, lr}54; CHECK-SOFTFP-NEXT:    push {r7, lr}55; CHECK-SOFTFP-NEXT:    .pad #456; CHECK-SOFTFP-NEXT:    sub sp, #457; CHECK-SOFTFP-NEXT:    bl g158; CHECK-SOFTFP-NEXT:    add sp, #459; CHECK-SOFTFP-NEXT:    pop.w {r7, lr}60; CHECK-SOFTFP-NEXT:    vscclrm {s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}61; CHECK-SOFTFP-NEXT:    vldr fpcxtns, [sp], #462; CHECK-SOFTFP-NEXT:    clrm {r12, apsr}63; CHECK-SOFTFP-NEXT:    bxns lr64;65; CHECK-HARD-LABEL: f1:66; CHECK-HARD:       @ %bb.0: @ %entry67; CHECK-HARD-NEXT:    vstr fpcxtns, [sp, #-4]!68; CHECK-HARD-NEXT:    .save {r7, lr}69; CHECK-HARD-NEXT:    push {r7, lr}70; CHECK-HARD-NEXT:    .pad #471; CHECK-HARD-NEXT:    sub sp, #472; CHECK-HARD-NEXT:    bl g173; CHECK-HARD-NEXT:    add sp, #474; CHECK-HARD-NEXT:    pop.w {r7, lr}75; CHECK-HARD-NEXT:    vscclrm {s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, vpr}76; CHECK-HARD-NEXT:    vldr fpcxtns, [sp], #477; CHECK-HARD-NEXT:    clrm {r0, r1, r2, r3, r12, apsr}78; CHECK-HARD-NEXT:    bxns lr79entry:80  %call = call nnan ninf nsz <4 x float> @g1() #081  ret <4 x float> %call82}83 84;;85;; Test clearing around nonsecure calls86;;87 88define void @f2(ptr nocapture %cb) #0 {89; CHECK-SOFTFP-LABEL: f2:90; CHECK-SOFTFP:       @ %bb.0: @ %entry91; CHECK-SOFTFP-NEXT:    .save {r4, lr}92; CHECK-SOFTFP-NEXT:    push {r4, lr}93; CHECK-SOFTFP-NEXT:    mov r4, r094; CHECK-SOFTFP-NEXT:    bl g095; CHECK-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}96; CHECK-SOFTFP-NEXT:    bic r4, r4, #197; CHECK-SOFTFP-NEXT:    sub sp, #13698; CHECK-SOFTFP-NEXT:    vlstm sp99; CHECK-SOFTFP-NEXT:    clrm {r5, r6, r7, r8, r9, r10, r11, r12, apsr}100; CHECK-SOFTFP-NEXT:    blxns r4101; CHECK-SOFTFP-NEXT:    vlldm sp102; CHECK-SOFTFP-NEXT:    add sp, #136103; CHECK-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}104; CHECK-SOFTFP-NEXT:    pop {r4, pc}105;106; CHECK-HARD-LABEL: f2:107; CHECK-HARD:       @ %bb.0: @ %entry108; CHECK-HARD-NEXT:    .save {r4, lr}109; CHECK-HARD-NEXT:    push {r4, lr}110; CHECK-HARD-NEXT:    mov r4, r0111; CHECK-HARD-NEXT:    bl g0112; CHECK-HARD-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}113; CHECK-HARD-NEXT:    bic r4, r4, #1114; CHECK-HARD-NEXT:    vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}115; CHECK-HARD-NEXT:    vscclrm {s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}116; CHECK-HARD-NEXT:    vstr fpcxts, [sp, #-8]!117; CHECK-HARD-NEXT:    clrm {r0, r1, r2, r3, r5, r6, r7, r8, r9, r10, r11, r12, apsr}118; CHECK-HARD-NEXT:    blxns r4119; CHECK-HARD-NEXT:    vldr fpcxts, [sp], #8120; CHECK-HARD-NEXT:    vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}121; CHECK-HARD-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}122; CHECK-HARD-NEXT:    pop {r4, pc}123entry:124  %call = tail call <8 x i16> @g0() #0125  tail call void %cb(<8 x i16> %call) #2126  ret void127}128 129define void @f3(ptr nocapture %cb) #0 {130; CHECK-SOFTFP-LABEL: f3:131; CHECK-SOFTFP:       @ %bb.0: @ %entry132; CHECK-SOFTFP-NEXT:    .save {r4, lr}133; CHECK-SOFTFP-NEXT:    push {r4, lr}134; CHECK-SOFTFP-NEXT:    mov r4, r0135; CHECK-SOFTFP-NEXT:    bl g1136; CHECK-SOFTFP-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}137; CHECK-SOFTFP-NEXT:    bic r4, r4, #1138; CHECK-SOFTFP-NEXT:    sub sp, #136139; CHECK-SOFTFP-NEXT:    vlstm sp140; CHECK-SOFTFP-NEXT:    clrm {r5, r6, r7, r8, r9, r10, r11, r12, apsr}141; CHECK-SOFTFP-NEXT:    blxns r4142; CHECK-SOFTFP-NEXT:    vlldm sp143; CHECK-SOFTFP-NEXT:    add sp, #136144; CHECK-SOFTFP-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}145; CHECK-SOFTFP-NEXT:    pop {r4, pc}146;147; CHECK-HARD-LABEL: f3:148; CHECK-HARD:       @ %bb.0: @ %entry149; CHECK-HARD-NEXT:    .save {r4, lr}150; CHECK-HARD-NEXT:    push {r4, lr}151; CHECK-HARD-NEXT:    mov r4, r0152; CHECK-HARD-NEXT:    bl g1153; CHECK-HARD-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}154; CHECK-HARD-NEXT:    bic r4, r4, #1155; CHECK-HARD-NEXT:    vpush {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}156; CHECK-HARD-NEXT:    vscclrm {s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15, s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31, vpr}157; CHECK-HARD-NEXT:    vstr fpcxts, [sp, #-8]!158; CHECK-HARD-NEXT:    clrm {r0, r1, r2, r3, r5, r6, r7, r8, r9, r10, r11, r12, apsr}159; CHECK-HARD-NEXT:    blxns r4160; CHECK-HARD-NEXT:    vldr fpcxts, [sp], #8161; CHECK-HARD-NEXT:    vpop {s16, s17, s18, s19, s20, s21, s22, s23, s24, s25, s26, s27, s28, s29, s30, s31}162; CHECK-HARD-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}163; CHECK-HARD-NEXT:    pop {r4, pc}164entry:165  %call = tail call nnan ninf nsz <4 x float> @g1() #0166  tail call void %cb(<4 x float> %call) #2167  ret void168}169 170attributes #0 = { nounwind }171attributes #1 = { nounwind "cmse_nonsecure_entry" }172attributes #2 = { nounwind "cmse_nonsecure_call" }173