brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.5 KiB · 42221ac Raw
53 lines · c
1// RUN: %clang_cc1 -triple thumbv8m.base-unknown-unknown-eabi   -emit-llvm -mrelocation-model static -o - %s | FileCheck %s2// RUN: %clang_cc1 -triple thumbebv8m.base-unknown-unknown-eabi -emit-llvm -mrelocation-model static -o - %s | FileCheck %s3 4#include <arm_cmse.h>5 6unsigned test_cmse_primitives(void *p) {7// CHECK: define {{.*}} i32 @test_cmse_primitives8  cmse_address_info_t tt_val, ttt_val;9  unsigned sum;10 11  tt_val = cmse_TT(p);12  ttt_val = cmse_TTT(p);13// CHECK: call i32 @llvm.arm.cmse.tt14// CHECK: call i32 @llvm.arm.cmse.ttt15// CHECK-NOT: llvm.arm.cmse.tta16// CHECK-NOT: llvm.arm.cmse.ttat17 18  sum = tt_val.value;19  sum += ttt_val.value;20 21  sum += tt_val.flags.mpu_region;22  sum += tt_val.flags.mpu_region_valid;23  sum += tt_val.flags.read_ok;24  sum += tt_val.flags.readwrite_ok;25 26  return sum;27}28 29void *test_address_range(void *p) {30// CHECK: define {{.*}} ptr @test_address_range31  return cmse_check_address_range(p, 128, CMSE_MPU_UNPRIV32                                        | CMSE_MPU_READWRITE33                                        | CMSE_MPU_READ);34// CHECK: call i32 @llvm.arm.cmse.tt35// CHECK: call i32 @llvm.arm.cmse.ttt36// CHECK-NOT: llvm.arm.cmse.tta37// CHECK-NOT: llvm.arm.cmse.ttat38}39 40typedef struct {41    int x, y, z;42} Point;43 44void test_pointed_object(void *p) {45// CHECK: define {{.*}} void @test_pointed_object46  Point *pt = (Point *)p;47  cmse_check_pointed_object(pt, CMSE_MPU_READ);48// CHECK: call i32 @llvm.arm.cmse.tt49// CHECK: call i32 @llvm.arm.cmse.ttt50// CHECK-NOT: call i32 @llvm.arm.cmse.tta51// CHECK-NOT: call i32 @llvm.arm.cmse.ttat52}53