(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr89954.c
       1  /* PR target/89954 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2" } */
       4  
       5  signed char ab;
       6  
       7  short aw;
       8  
       9  int al;
      10  
      11  short sext_andbw (void) { return ab & -2; }
      12  short sext_orbw (void) { return ab | -3; }
      13  short sext_xorbw (void) { return ab ^ -4; }
      14  
      15  int sext_andbl (void) { return ab & -2; }
      16  int sext_orbl (void) { return ab | -3; }
      17  int sext_xorbl (void) { return ab ^ -4; }
      18  
      19  int sext_andwl (void) { return aw & -2; }
      20  int sext_orwl (void) { return aw | -3; }
      21  int sext_xorwl (void) { return aw ^ -4; }
      22  
      23  #ifdef __x86_64__
      24  
      25  long long sext_andbq (void) { return ab & -2; }
      26  long long sext_orbq (void) { return ab | -3; }
      27  long long sext_xorbq (void) { return ab ^ -4; }
      28  
      29  long long sext_andwq (void) { return aw & -2; }
      30  long long sext_orwq (void) { return aw | -3; }
      31  long long sext_xorwq (void) { return aw ^ -4; }
      32  
      33  long long sext_andlq (void) { return al & -2; }
      34  long long sext_orlq (void) { return al | -3; }
      35  long long sext_xorlq (void) { return al ^ -4; }
      36  
      37  #endif
      38  
      39  /* { dg-final { scan-assembler-times "movsbw" 3 } } */
      40  /* { dg-final { scan-assembler-times "movsbl" 3 } } */
      41  /* { dg-final { scan-assembler-times "movswl" 3 } } */
      42  
      43  /* { dg-final { scan-assembler-times "movsbq" 3 { target { ! ia32 } } } } */
      44  /* { dg-final { scan-assembler-times "movswq" 3 { target { ! ia32 } } } } */
      45  /* { dg-final { scan-assembler-times "movslq" 3 { target { ! ia32 } } } } */