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    short	      a : 7;
       7    signed char b : 3;
       8    short	      c : 11;
       9  } test_st;
      10  
      11  test_st __attribute__ ((cmse_nonsecure_entry)) foo (void)
      12  {
      13    test_st t;
      14    t.a = -64;
      15    t.b = -4 ;
      16    t.c = -1024;
      17    return t;
      18  }
      19  
      20  int
      21  main (void)
      22  {
      23    test_st t;
      24    t = foo ();
      25    if (t.a != -64
      26        || t.b != -4
      27        || t.c != -1024)
      28      __builtin_abort ();
      29    return 0;
      30  }
      31  
      32  /* { dg-final { scan-assembler "vstr\tFPCXTNS, \\\[sp, #-4\\\]!" { target arm_cmse_clear_ok } } } */
      33  /* { dg-final { scan-assembler "movw\tr1, #1919" } } */
      34  /* { dg-final { scan-assembler "movt\tr1, 2047" } } */
      35  /* { dg-final { scan-assembler "ands\tr0(, r0)?, r1" } } */
      36  /* { dg-final { scan-assembler "vscclrm\t\{s0-s15, VPR\}" { target arm_cmse_clear_ok } } } */
      37  /* { dg-final { scan-assembler "clrm\t\{r1, r2, r3, ip, APSR\}" { target arm_cmse_clear_ok } } } */
      38  /* { dg-final { scan-assembler "vldr\tFPCXTNS, \\\[sp\\\], #4" { target arm_cmse_clear_ok } } } */
      39  /* { dg-final { scan-assembler "bxns" } } */
      40