diff options
Diffstat (limited to 'sim')
-rw-r--r-- | sim/h8300/ChangeLog | 5 | ||||
-rw-r--r-- | sim/h8300/compile.c | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/sim/h8300/ChangeLog b/sim/h8300/ChangeLog index 62fd073..2753416 100644 --- a/sim/h8300/ChangeLog +++ b/sim/h8300/ChangeLog @@ -1,3 +1,8 @@ +2003-02-05 Kazu Hirata <kazu@cs.umass.edu> + + * compile.c (init_pointers): Abort if wreg never gets initialized. + (sim_resume): Fix the handling of exts.w and extu.w. + 2003-01-31 Kazu Hirata <kazu@cs.umass.edu> * compile.c (sim_resume): Fix the handling of bxor. diff --git a/sim/h8300/compile.c b/sim/h8300/compile.c index e845899..2a066a3 100644 --- a/sim/h8300/compile.c +++ b/sim/h8300/compile.c @@ -753,6 +753,7 @@ init_pointers (void) } p++; } + wreg[i] = wreg[i + 8] = 0; while (q < u) { if (*q == 0x2233) @@ -765,6 +766,8 @@ init_pointers (void) } q++; } + if (wreg[i] == 0 || wreg[i + 8] == 0) + abort (); cpu.regs[i] = 0; lreg[i] = &cpu.regs[i]; } @@ -1606,7 +1609,7 @@ sim_resume (SIM_DESC sd, int step, int siggnal) goto next; } case O (O_EXTS, SW): - rd = GET_B_REG (code->src.reg + 8) & 0xff; /* Yes, src, not dst. */ + rd = GET_W_REG (code->src.reg) & 0xff; /* Yes, src, not dst. */ ea = rd & 0x80 ? -256 : 0; res = rd + ea; goto log16; @@ -1616,7 +1619,7 @@ sim_resume (SIM_DESC sd, int step, int siggnal) res = rd + ea; goto log32; case O (O_EXTU, SW): - rd = GET_B_REG (code->src.reg + 8) & 0xff; + rd = GET_W_REG (code->src.reg) & 0xff; ea = 0; res = rd + ea; goto log16; |