PR target/84226
[official-gcc.git] / gcc / testsuite / gcc.target / avr / pr67839.c
blob604ab4b7592faa17b5cc8a1b6f15a9ff1993770c
1 /* { dg-do compile } */
2 /* { dg-options "-Os" } */
3 /* { dg-final { scan-assembler "sbi 0x1f,0" } } */
4 /* { dg-final { scan-assembler "cbi 0x1f,0" } } */
5 /* { dg-final { scan-assembler-not "sbi 0x20,0" } } */
6 /* { dg-final { scan-assembler-not "cbi 0x20,0" } } */
7 /* { dg-final { scan-assembler "in r\\d+,__SREG__" } } */
8 /* { dg-final { scan-assembler "out __SREG__,r\\d+" } } */
9 /* { dg-final { scan-assembler-not "in r\\d+,0x40" } } */
10 /* { dg-final { scan-assembler-not "out 0x40, r\\d+" } } */
12 /* This testcase verifies that SBI/CBI/SBIS/SBIC
13 and IN/OUT instructions are not generated for
14 an IO addresses outside the valid range.
16 #define IO_ADDR(x) (*((volatile char *)x + __AVR_SFR_OFFSET__))
17 int main ()
19 IO_ADDR(0x1f) |= 1;
20 IO_ADDR(0x1f) &= 0xFE;
22 IO_ADDR(0x20) |= 1;
23 IO_ADDR(0x20) &= 0xFE;
25 IO_ADDR(0x3f) = IO_ADDR(0x3f);
27 IO_ADDR(0x40) = IO_ADDR(0x40);
28 return 0;