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 "movzbl" } } */
       6  /* { dg-final { scan-assembler-not "movb" } } */
       7  
       8  struct S
       9  {
      10    unsigned char val;
      11    unsigned char pad1;
      12    unsigned short pad2;
      13  };
      14  
      15  unsigned char b;
      16  
      17  struct S
      18  test_and (struct S a)
      19  {
      20    a.val &= b;
      21  
      22    return a;
      23  }
      24  
      25  /* { dg-final { scan-assembler "\[ \t\]andb" } } */
      26  
      27  struct S
      28  test_or (struct S a)
      29  {
      30    a.val |= b;
      31  
      32    return a;
      33  }
      34  
      35  /* { dg-final { scan-assembler "\[ \t\]orb" } } */
      36  
      37  struct S
      38  test_xor (struct S a)
      39  {
      40    a.val ^= b;
      41  
      42    return a;
      43  }
      44  
      45  /* { dg-final { scan-assembler "\[ \t\]xorb" } } */
      46  
      47  struct S
      48  test_add (struct S a)
      49  {
      50    a.val += b;
      51  
      52    return a;
      53  }
      54  
      55  /* { dg-final { scan-assembler "\[ \t\]addb" } } */
      56  
      57  struct S
      58  test_sub (struct S a)
      59  {
      60    a.val -= b;
      61  
      62    return a;
      63  }
      64  
      65  /* { dg-final { scan-assembler "\[ \t\]subb" } } */