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