Le 05/05/2021 à 18:03, Philippe Mathieu-Daudé a écrit : > The ABCD / SBCD memory opcodes (introduced in commit fb5543d8200) > don't use their "addr" variable. > > Remove the unused variable and pass a NULL argument instead to > gen_ea_mode(). This fixes warnings generated when building with > CFLAGS=-O3 (using GCC 10.2.1 20201125): > > target/m68k/translate.c: In function ‘disas_sbcd_mem’: > target/m68k/translate.c:897:13: warning: ‘addr’ may be used uninitialized > in this function [-Wmaybe-uninitialized] > 897 | delay_set_areg(s, reg0, tmp, false); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > target/m68k/translate.c:1866:21: note: ‘addr’ was declared here > 1866 | TCGv src, dest, addr; > | ^~~~ > > target/m68k/translate.c: In function ‘disas_abcd_mem’: > target/m68k/translate.c:897:13: warning: ‘addr’ may be used uninitialized > in this function [-Wmaybe-uninitialized] > 897 | delay_set_areg(s, reg0, tmp, false); > | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ > target/m68k/translate.c:1829:21: note: ‘addr’ was declared here > 1829 | TCGv src, dest, addr; > | ^~~~ >
It's really strange because ABCD and SBCD support indirect predecrement (mode 4, "-(Ay),-(Ax)"), and if you look into gen_ea_mode() &addr (addrp) is used with mode 4, it is initialized on EA_LOADU to be reused on EA_STORE. The bug is somewhere else... Thanks, Laurent