(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr91188-2c.c
       1  /* PR target/91188 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -masm=att" } */
       4  /* { dg-additional-options "-mregparm=3" { target ia32 } } */
       5  /* { dg-final { scan-assembler-not "movzwl" } } */
       6  /* { dg-final { scan-assembler-not "movw" } } */
       7  
       8  struct S
       9  {
      10    unsigned short val;
      11    unsigned short pad;
      12  };
      13  
      14  struct S
      15  test_and (struct S a)
      16  {
      17    a.val &= 0x42;
      18  
      19    return a;
      20  }
      21  
      22  /* { dg-final { scan-assembler "\[ \t\]andw" } } */
      23  
      24  struct S
      25  test_or (struct S a)
      26  {
      27    a.val |= 0x42;
      28  
      29    return a;
      30  }
      31  
      32  /* { dg-final { scan-assembler "\[ \t\]orw" } } */
      33  
      34  struct S
      35  test_xor (struct S a)
      36  {
      37    a.val ^= 0x42;
      38  
      39    return a;
      40  }
      41  
      42  /* { dg-final { scan-assembler "\[ \t\]xorw" } } */
      43  
      44  struct S
      45  test_sal (struct S a)
      46  {
      47    a.val <<= 3;
      48  
      49    return a;
      50  }
      51  
      52  /* { dg-final { scan-assembler "\[ \t\]salw" } } */
      53  
      54  struct S
      55  test_shr (struct S a)
      56  {
      57    a.val >>= 3;
      58  
      59    return a;
      60  }
      61  
      62  /* { dg-final { scan-assembler "\[ \t\]shrw" } } */
      63  
      64  struct S
      65  test_sar (struct S a)
      66  {
      67    a.val = (signed short) a.val >> 3;
      68  
      69    return a;
      70  }
      71  
      72  /* { dg-final { scan-assembler "\[ \t\]sarw" } } */
      73  
      74  struct S
      75  test_rol (struct S a)
      76  {
      77    a.val = (a.val << 3 | a.val >> 13) ;
      78  
      79    return a;
      80  }
      81  
      82  /* { dg-final { scan-assembler "\[ \t\]rolw" } } */
      83  
      84  struct S
      85  test_ror (struct S a)
      86  {
      87    a.val = (a.val >> 3 | a.val << 13) ;
      88  
      89    return a;
      90  }
      91  
      92  /* { dg-final { scan-assembler "\[ \t\]rorw" } } */
      93  
      94  struct S
      95  test_add (struct S a)
      96  {
      97    a.val += 42;
      98  
      99    return a;
     100  }
     101  
     102  /* { dg-final { scan-assembler "\[ \t\]addw" } } */
     103  
     104  struct S
     105  test_sub (struct S a)
     106  {
     107    a.val -= 42;
     108  
     109    return a;
     110  }
     111  
     112  /* { dg-final { scan-assembler "\[ \t\]subw" } } */