| /* Testcase to check generation of a SH2A specific instruction |
| 'BCLR #imm3,Rn'. */ |
| /* { dg-do compile { target { sh2a } } } */ |
| /* { dg-options "-O1" } */ |
| /* { dg-final { scan-assembler "bclr"} } */ |
| |
| struct a |
| { |
| char a, b; |
| short c; |
| }; |
| |
| /* This function generates the instruction "BCLR #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 &= 0xFE; |
| x &= 0xFD; |
| x &= 0xFB; |
| x &= 0xF7; |
| x &= 0xEF; |
| x &= 0xDF; |
| x &= 0xBF; |
| x &= 0x7F; |
| |
| if (!a2 ()) |
| return 0; |
| } |