diff options
Diffstat (limited to 'clang/test/CodeGen/arm-cmse-nonsecure.c')
-rw-r--r-- | clang/test/CodeGen/arm-cmse-nonsecure.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/clang/test/CodeGen/arm-cmse-nonsecure.c b/clang/test/CodeGen/arm-cmse-nonsecure.c new file mode 100644 index 00000000000..2a483a71f59 --- /dev/null +++ b/clang/test/CodeGen/arm-cmse-nonsecure.c @@ -0,0 +1,52 @@ +// RUN: %clang -mlittle-endian -target thumbv8m.base-eabi -emit-llvm -S -o - %s | FileCheck %s +// RUN: %clang -mbig-endian -target thumbv8m.base-eabi -emit-llvm -S -o - %s | FileCheck %s + +#include <arm_cmse.h> + +unsigned test_cmse_primitives(void *p) { +// CHECK: define {{.*}} i32 @test_cmse_primitives + cmse_address_info_t tt_val, ttt_val; + unsigned sum; + + tt_val = cmse_TT(p); + ttt_val = cmse_TTT(p); +// CHECK: call i32 @llvm.arm.cmse.tt +// CHECK: call i32 @llvm.arm.cmse.ttt +// CHECK-NOT: llvm.arm.cmse.tta +// CHECK-NOT: llvm.arm.cmse.ttat + + sum = tt_val.value; + sum += ttt_val.value; + + sum += tt_val.flags.mpu_region; + sum += tt_val.flags.mpu_region_valid; + sum += tt_val.flags.read_ok; + sum += tt_val.flags.readwrite_ok; + + return sum; +} + +void *test_address_range(void *p) { +// CHECK: define {{.*}} i8* @test_address_range + return cmse_check_address_range(p, 128, CMSE_MPU_UNPRIV + | CMSE_MPU_READWRITE + | CMSE_MPU_READ); +// CHECK: call i32 @llvm.arm.cmse.tt +// CHECK: call i32 @llvm.arm.cmse.ttt +// CHECK-NOT: llvm.arm.cmse.tta +// CHECK-NOT: llvm.arm.cmse.ttat +} + +typedef struct { + int x, y, z; +} Point; + +void *test_pointed_object(void *p) { +// CHECK: define {{.*}} i8* @test_pointed_object + Point *pt = (Point *)p; + cmse_check_pointed_object(pt, CMSE_MPU_READ); +// CHECK: call i32 @llvm.arm.cmse.tt +// CHECK: call i32 @llvm.arm.cmse.ttt +// CHECK-NOT: call i32 @llvm.arm.cmse.tta +// CHECK-NOT: call i32 @llvm.arm.cmse.ttat +} |