From 2c83b07b3170cf3e0b9e3ba585d2c6aa7478767b Mon Sep 17 00:00:00 2001 From: Folkert Date: Thu, 18 Jul 2024 17:13:47 +0200 Subject: [PATCH] Add assembly test for the cmse unstable features verifies that the correct return instructions are emitted. Co-authored-by: Tamme Dittrich --- tests/assembly/cmse.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 tests/assembly/cmse.rs diff --git a/tests/assembly/cmse.rs b/tests/assembly/cmse.rs new file mode 100644 index 0000000000000..acad77b251357 --- /dev/null +++ b/tests/assembly/cmse.rs @@ -0,0 +1,26 @@ +//@ assembly-output: emit-asm +//@ compile-flags: --target thumbv8m.main-none-eabi --crate-type lib -Copt-level=1 +//@ needs-llvm-components: arm +#![crate_type = "lib"] +#![feature(abi_c_cmse_nonsecure_call, cmse_nonsecure_entry, no_core, lang_items)] +#![no_core] +#[lang = "sized"] +pub trait Sized {} +#[lang = "copy"] +pub trait Copy {} + +// CHECK-LABEL: __acle_se_entry_point +// CHECK: bxns +#[no_mangle] +pub extern "C-cmse-nonsecure-entry" fn entry_point() -> i64 { + 0 +} + +// CHECK-LABEL: call_nonsecure +// CHECK: blxns +#[no_mangle] +pub fn call_nonsecure( + f: unsafe extern "C-cmse-nonsecure-call" fn(u32, u32, u32, u32) -> u64, +) -> u64 { + unsafe { f(0, 1, 2, 3) } +}