]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/testsuite/gcc.target/arm/cmse/mainline/bitfield-9.c
ARMv8-M Security Extension's cmse_nonsecure_call: use __gnu_cmse_nonsecure_call
[thirdparty/gcc.git] / gcc / testsuite / gcc.target / arm / cmse / mainline / bitfield-9.c
1 /* { dg-do compile } */
2 /* { dg-options "-mcmse" } */
3
4 typedef struct
5 {
6 char a:3;
7 } test_st3;
8
9 typedef struct
10 {
11 char a:3;
12 } test_st2;
13
14 typedef struct
15 {
16 test_st2 st2;
17 test_st3 st3;
18 } test_st;
19
20 typedef union
21 {
22 test_st st;
23 struct
24 {
25 unsigned int v1;
26 unsigned int v2;
27 unsigned int v3;
28 unsigned int v4;
29 }values;
30 } read_st;
31
32 typedef void __attribute__ ((cmse_nonsecure_call)) (*foo_ns) (test_st);
33
34 int
35 main (void)
36 {
37 read_st r;
38 foo_ns f;
39
40 f = (foo_ns) 0x200000;
41 r.values.v1 = 0xFFFFFFFF;
42
43 f (r.st);
44 return 0;
45 }
46
47 /* { dg-final { scan-assembler "movw\tip, #1799" } } */
48 /* { dg-final { scan-assembler "and\tr0, r0, ip" } } */
49 /* { dg-final { scan-assembler "lsrs\tr4, r4, #1" } } */
50 /* { dg-final { scan-assembler "lsls\tr4, r4, #1" } } */
51 /* { dg-final { scan-assembler "mov\tr1, r4" } } */
52 /* { dg-final { scan-assembler "mov\tr2, r4" } } */
53 /* { dg-final { scan-assembler "mov\tr3, r4" } } */
54 /* { dg-final { scan-assembler "bl\t__gnu_cmse_nonsecure_call" } } */