1  /* Verify that TST #imm, R0 instruction is generated when QImode or HImode
       2     values are tested against a negative constant.  */
       3  /* { dg-do compile }  */
       4  /* { dg-options "-O2" }  */
       5  /* { dg-final { scan-assembler-not "and" } }  */
       6  /* { dg-final { scan-assembler-not "exts" } }  */
       7  /* { dg-final { scan-assembler-times "tst\t#127,r0" 2 } }  */
       8  /* { dg-final { scan-assembler-times "tst\t#255,r0" 1 } }  */
       9  /* { dg-final { scan-assembler-times "65407" 1 } }  */
      10  /* { dg-final { scan-assembler-times "-129" 2 } }  */
      11  /* { dg-final { scan-assembler-times "extu" 1 } }  */
      12  
      13  int
      14  test_00 (unsigned char x)
      15  {
      16    /* 1x tst #127  */
      17    return x & -129 ? -20 : -40;
      18  }
      19  
      20  int
      21  test_01 (signed char x)
      22  {
      23    /* 1x tst #255  */
      24    return x & -129 ? -20 : -40;
      25  }
      26  
      27  int
      28  test_02 (unsigned short x)
      29  {
      30    /* 1x tst 65407  */
      31    return x & -129 ? -20 : -40;
      32  }
      33  
      34  int
      35  test_03 (unsigned short* x)
      36  {
      37    /* 1x tst -129  */
      38    return x[0] & -129 ? -20 : -40;
      39  }
      40  
      41  int
      42  test_04 (unsigned short x)
      43  {
      44    /* 1x extu.w, 1x tst -129  */
      45    return x & -129 ? x : -1;
      46  }
      47  
      48  int
      49  test_05 (unsigned char* x)
      50  {
      51    /* 1x tst #127  */
      52    return x[0] & -129 ? -20 : -40;
      53  }