On Wed, Aug 3, 2011 at 7:00 PM, Stefan Weil <w...@mail.berlios.de> wrote: > Am 07.07.2011 14:37, schrieb Kirill Batuzov: >> >> Make tcg_constant_folding do copy and constant propagation. It is a >> preparational work before actual constant folding. >> >> Signed-off-by: Kirill Batuzov<batuz...@ispras.ru> >> --- >> tcg/optimize.c | 182 >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++- >> 1 files changed, 180 insertions(+), 2 deletions(-) >> >> diff --git a/tcg/optimize.c b/tcg/optimize.c >> index c7c7da9..f8afe71 100644 >> --- a/tcg/optimize.c >> +++ b/tcg/optimize.c >> > > ... > > This patch breaks QEMU on 32 bit hosts (tested on 386 Linux > and w32 hosts). Simply running qemu (BIOS only) terminates > with abort(). As the error is easy to reproduce, I don't provide > a stack frame here.
I can't reproduce, i386/Linux and win32 versions of i386, Sparc32 and Sparc64 emulators work fine. Maybe you have a stale build (bug in Makefile dependencies)? >> +static void tcg_opt_gen_mov(TCGArg *gen_args, TCGArg dst, TCGArg src, >> + int nb_temps, int nb_globals) >> +{ >> + reset_temp(dst, nb_temps, nb_globals); >> + assert(temps[src].state != TCG_TEMP_COPY); >> + if (src>= nb_globals) { >> + assert(temps[src].state != TCG_TEMP_CONST); >> + if (temps[src].state != TCG_TEMP_HAS_COPY) { >> + temps[src].state = TCG_TEMP_HAS_COPY; >> + temps[src].next_copy = src; >> + temps[src].prev_copy = src; >> + } >> + temps[dst].state = TCG_TEMP_COPY; >> + temps[dst].val = src; >> + temps[dst].next_copy = temps[src].next_copy; >> + temps[dst].prev_copy = src; >> + temps[temps[dst].next_copy].prev_copy = dst; >> + temps[src].next_copy = dst; >> + } >> + gen_args[0] = dst; >> + gen_args[1] = src; >> +} >> > > QEMU with a modified tcg_opt_gen_mov() (without the if block) works. > > Kind regards, > Stefan Weil > >