blob: 5685f744435cac17d65f8896dcefdf657ad3dd45 [file] [log] [blame]
/* This test is executed only if the execution engine supports CMSE instructions. */
/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x00400000" } */
typedef struct
{
unsigned short a : 6;
unsigned char b : 3;
unsigned char c;
unsigned short d : 8;
} test_st;
test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
{
test_st t;
t.a = 63u;
t.b = 7u;
t.c = 255u;
t.d = 255u;
return t;
}
int
main (void)
{
test_st t;
t = foo ();
if (t.a != 63u
|| t.b != 7u
|| t.c != 255u
|| t.d != 255u)
__builtin_abort ();
return 0;
}
/* { dg-final { scan-assembler "vstr\tFPCXTNS, \\\[sp, #-4\\\]!" { target arm_cmse_clear_ok } } } */
/* { dg-final { scan-assembler "movw\tr1, #1855" } } */
/* { dg-final { scan-assembler "movt\tr1, 65535" } } */
/* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
/* { dg-final { scan-assembler "vscclrm\t\{s0-s15, VPR\}" { target arm_cmse_clear_ok } } } */
/* { dg-final { scan-assembler "clrm\t\{r1, r2, r3, ip, APSR\}" { target arm_cmse_clear_ok } } } */
/* { dg-final { scan-assembler "vldr\tFPCXTNS, \\\[sp\\\], #4" { target arm_cmse_clear_ok } } } */
/* { dg-final { scan-assembler "bxns" } } */