/* Testcase to check generation of a SH2A specific instruction
  'BSET #imm3,Rn'.  */
/* { dg-do compile { target { sh2a } } }  */
/* { dg-options "-O1" }  */
/* { dg-final { scan-assembler "bset"} }  */

struct a
{
  char a, b;
  short c;
};

/* This function generates the instruction "BSET #imm3,Rn" only
   on using optimization option "-O1" and above.  */

int
a2 ()
{
  volatile int j;
  volatile static struct a x = {1, 66, ~1}, y = {1, 2, ~2};

  if (j > 1)
    return (x.a == y.a && (x.b | 1) == y.b);
  if (j > 2)
    return (x.a == y.a && (x.b | 2) == y.b);
  if (j > 3)
    return (x.a == y.a && (x.b | 4) == y.b);
  if (j > 4)
    return (x.a == y.a && (x.b | 8) == y.b);
  if (j > 5)
    return (x.a == y.a && (x.b | 16) == y.b);
  if (j > 6)
    return (x.a == y.a && (x.b | 32) == y.b);
  if (j > 7)
    return (x.a == y.a && (x.b | 64) == y.b);
  if (j > 8)
    return (x.a == y.a && (x.b | 128) == y.b);
}

int
main ()
{
  volatile unsigned char x;

  x |= 0x1;
  x |= 0x2;
  x |= 0x4;
  x |= 0x8;
  x |= 0x16;
  x |= 0x32;
  x |= 0x64;
  x |= 0x128;

  if (!a2 ())
    return 0;
}
