diff --git a/gcc/config/m68k/m68k.cc b/gcc/config/m68k/m68k.cc index e9325686b92..6cd45b53406 100644 --- a/gcc/config/m68k/m68k.cc +++ b/gcc/config/m68k/m68k.cc @@ -5471,7 +5471,7 @@ output_andsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bclr %1,%0"; @@ -5510,7 +5510,7 @@ output_iorsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bset %1,%0"; @@ -5548,7 +5548,7 @@ output_xorsi3 (rtx *operands) operands[1] = GEN_INT (logval); else { - operands[0] = adjust_address (operands[0], SImode, 3 - (logval / 8)); + operands[0] = adjust_address (operands[0], QImode, 3 - (logval / 8)); operands[1] = GEN_INT (logval % 8); } return "bchg %1,%0"; diff --git a/gcc/testsuite/gcc.target/m68k/pr108640.c b/gcc/testsuite/gcc.target/m68k/pr108640.c new file mode 100644 index 00000000000..5f3e8b49d42 --- /dev/null +++ b/gcc/testsuite/gcc.target/m68k/pr108640.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* { do-options "-O1" } */ + +int x; +void andsi3(void) { x &= ~(1 << 16); } +void iorsi3(void) { x |= (1 << 16); } +void xorsi3(void) { x ^= (1 << 16); }