xref: /llvm-project/llvm/test/CodeGen/ARM/cmse-cve-2021-35465.ll (revision aa2c0f35a102b5afc128e19ccb2b9402026c531f)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2;
3; RUN: llc %s -o - -mtriple=thumbv8m.main -verify-machineinstrs \
4; RUN:   -mattr=+fp-armv8d16sp,+fix-cmse-cve-2021-35465 | \
5; RUN:   FileCheck %s --check-prefix=CHECK-8M-FP-CVE-2021-35465
6;
7; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=cortex-m33 -verify-machineinstrs | \
8; RUN:   FileCheck %s --check-prefix=CHECK-8M-FP-CVE-2021-35465
9;
10; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=star-mc1 -verify-machineinstrs | \
11; RUN:   FileCheck %s --check-prefix=CHECK-8M-FP-CVE-2021-35465
12;
13; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=cortex-m35p -verify-machineinstrs | \
14; RUN:   FileCheck %s --check-prefix=CHECK-8M-FP-CVE-2021-35465
15;
16; RUN: llc %s -o - -mtriple=thumbv8m.main -verify-machineinstrs \
17; RUN:   -mattr=-fpregs,+fix-cmse-cve-2021-35465 | \
18; RUN:   FileCheck %s --check-prefix=CHECK-8M-NOFP-CVE-2021-35465
19;
20; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=cortex-m33 -mattr=-fpregs -verify-machineinstrs | \
21; RUN:   FileCheck %s --check-prefix=CHECK-8M-NOFP-CVE-2021-35465
22;
23; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=star-mc1 -mattr=-fpregs -verify-machineinstrs | \
24; RUN:   FileCheck %s --check-prefix=CHECK-8M-NOFP-CVE-2021-35465
25;
26; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=cortex-m35p -mattr=-fpregs -verify-machineinstrs | \
27; RUN:   FileCheck %s --check-prefix=CHECK-8M-NOFP-CVE-2021-35465
28;
29; RUN: llc %s -o - -mtriple=thumbv8.1m.main -verify-machineinstrs \
30; RUN:   -mattr=+fp-armv8d16sp,+fix-cmse-cve-2021-35465 | \
31; RUN:   FileCheck %s --check-prefix=CHECK-81M-CVE-2021-35465
32;
33; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mcpu=cortex-m55 -verify-machineinstrs | \
34; RUN:   FileCheck %s --check-prefix=CHECK-81M-CVE-2021-35465
35;
36; RUN: llc %s -o - -mtriple=thumbv8.1m.main -verify-machineinstrs \
37; RUN:   -mattr=-fpregs,+fix-cmse-cve-2021-35465 | \
38; RUN:   FileCheck %s --check-prefix=CHECK-81M-CVE-2021-35465
39;
40; RUN: llc %s -o - -mtriple=thumbv8.1m.main -mcpu=cortex-m55 -mattr=-fpregs -verify-machineinstrs | \
41; RUN:   FileCheck %s --check-prefix=CHECK-81M-CVE-2021-35465
42;
43
44define void @non_secure_call(ptr %fptr) {
45; CHECK-8M-FP-CVE-2021-35465-LABEL: non_secure_call:
46; CHECK-8M-FP-CVE-2021-35465:       @ %bb.0:
47; CHECK-8M-FP-CVE-2021-35465-NEXT:    push {r7, lr}
48; CHECK-8M-FP-CVE-2021-35465-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
49; CHECK-8M-FP-CVE-2021-35465-NEXT:    bic r0, r0, #1
50; CHECK-8M-FP-CVE-2021-35465-NEXT:    sub sp, #136
51; CHECK-8M-FP-CVE-2021-35465-NEXT:    vlstm sp
52; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r1, r0
53; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r2, r0
54; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r3, r0
55; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r4, r0
56; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r5, r0
57; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r6, r0
58; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r7, r0
59; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r8, r0
60; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r9, r0
61; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r10, r0
62; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r11, r0
63; CHECK-8M-FP-CVE-2021-35465-NEXT:    mov r12, r0
64; CHECK-8M-FP-CVE-2021-35465-NEXT:    msr apsr_nzcvq{{g?}}, r0
65; CHECK-8M-FP-CVE-2021-35465-NEXT:    blxns r0
66; CHECK-8M-FP-CVE-2021-35465-NEXT:    mrs r12, control
67; CHECK-8M-FP-CVE-2021-35465-NEXT:    tst.w r12, #8
68; CHECK-8M-FP-CVE-2021-35465-NEXT:    it ne
69; CHECK-8M-FP-CVE-2021-35465-NEXT:    vmovne.f32 s0, s0
70; CHECK-8M-FP-CVE-2021-35465-NEXT:    vlldm sp
71; CHECK-8M-FP-CVE-2021-35465-NEXT:    add sp, #136
72; CHECK-8M-FP-CVE-2021-35465-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
73; CHECK-8M-FP-CVE-2021-35465-NEXT:    pop {r7, pc}
74;
75; CHECK-8M-NOFP-CVE-2021-35465-LABEL: non_secure_call:
76; CHECK-8M-NOFP-CVE-2021-35465:       @ %bb.0:
77; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    push {r7, lr}
78; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
79; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    bic r0, r0, #1
80; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    sub sp, #136
81; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    vlstm sp
82; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r1, r0
83; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r2, r0
84; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r3, r0
85; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r4, r0
86; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r5, r0
87; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r6, r0
88; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r7, r0
89; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r8, r0
90; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r9, r0
91; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r10, r0
92; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r11, r0
93; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mov r12, r0
94; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    msr apsr_nzcvq{{g?}}, r0
95; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    blxns r0
96; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    mrs r12, control
97; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    tst.w r12, #8
98; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    it ne
99; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    @APP
100; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    .inst.w 0xeeb00a40
101; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    @NO_APP
102; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    vlldm sp
103; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    add sp, #136
104; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
105; CHECK-8M-NOFP-CVE-2021-35465-NEXT:    pop {r7, pc}
106;
107; CHECK-81M-CVE-2021-35465-LABEL: non_secure_call:
108; CHECK-81M-CVE-2021-35465:       @ %bb.0:
109; CHECK-81M-CVE-2021-35465-NEXT:    push {r7, lr}
110; CHECK-81M-CVE-2021-35465-NEXT:    push.w {r4, r5, r6, r7, r8, r9, r10, r11}
111; CHECK-81M-CVE-2021-35465-NEXT:    bic r0, r0, #1
112; CHECK-81M-CVE-2021-35465-NEXT:    sub sp, #136
113; CHECK-81M-CVE-2021-35465-NEXT:    vlstm sp
114; CHECK-81M-CVE-2021-35465-NEXT:    clrm {r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, apsr}
115; CHECK-81M-CVE-2021-35465-NEXT:    blxns r0
116; CHECK-81M-CVE-2021-35465-NEXT:    vscclrm {vpr}
117; CHECK-81M-CVE-2021-35465-NEXT:    vlldm sp
118; CHECK-81M-CVE-2021-35465-NEXT:    add sp, #136
119; CHECK-81M-CVE-2021-35465-NEXT:    pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
120; CHECK-81M-CVE-2021-35465-NEXT:    pop {r7, pc}
121  call void %fptr() #0
122  ret void
123}
124
125attributes #0 = { "cmse_nonsecure_call" }
126