1  /* This test is executed only if the execution engine supports CMSE instructions.  */
       2  /* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=[cmse_sgstubs]" } */
       3  
       4  typedef struct
       5  {
       6    unsigned char	  a;
       7    unsigned short  b;
       8  } test_st;
       9  
      10  test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
      11  {
      12    test_st t;
      13    t.a = 255u;
      14    t.b = 32767u;
      15    return t;
      16  }
      17  
      18  int
      19  main (void)
      20  {
      21    test_st t;
      22    t = foo ();
      23    if (t.a != 255u || t.b != 32767u)
      24      __builtin_abort ();
      25    return 0;
      26  }
      27  
      28  /* { dg-final { scan-assembler "vstr\tFPCXTNS, \\\[sp, #-4\\\]!" { target arm_cmse_clear_ok } } } */
      29  /* { dg-final { scan-assembler "movs\tr1, #255" } } */
      30  /* { dg-final { scan-assembler "movt\tr1, 65535" } } */
      31  /* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
      32  /* { dg-final { scan-assembler "vscclrm\t\{s0-s15, VPR\}" { target arm_cmse_clear_ok } } } */
      33  /* { dg-final { scan-assembler "clrm\t\{r1, r2, r3, ip, APSR\}" { target arm_cmse_clear_ok } } } */
      34  /* { dg-final { scan-assembler "vldr\tFPCXTNS, \\\[sp\\\], #4" { target arm_cmse_clear_ok } } } */
      35  /* { dg-final { scan-assembler "bxns" } } */