* mem.c (rx_mem_ptr): When invalidating the decode cache, account
for the fact that the instruction decoder never uses swapped addresses.
This commit is contained in:
parent
6f6526358f
commit
e4dcb66415
|
@ -1,3 +1,9 @@
|
||||||
|
2010-09-29 Kevin Buettner <kevinb@redhat.com>
|
||||||
|
|
||||||
|
* mem.c (rx_mem_ptr): When invalidating the decode cache, account
|
||||||
|
for the fact that the instruction decoder never uses swapped
|
||||||
|
addresses.
|
||||||
|
|
||||||
2010-09-29 Nick Clifton <nickc@redhat.com>
|
2010-09-29 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* rx.c (decode_opcode: RXO_int): Only break out of the emulation
|
* rx.c (decode_opcode: RXO_int): Only break out of the emulation
|
||||||
|
|
12
sim/rx/mem.c
12
sim/rx/mem.c
|
@ -104,13 +104,19 @@ rx_mem_ptr (unsigned long address, enum mem_ptr_action action)
|
||||||
|
|
||||||
if (action == MPA_WRITING)
|
if (action == MPA_WRITING)
|
||||||
{
|
{
|
||||||
|
int pto_dc;
|
||||||
if (ptr[pt1][pt2][pto] == MC_PUSHED_PC)
|
if (ptr[pt1][pt2][pto] == MC_PUSHED_PC)
|
||||||
execution_error (SIM_ERR_CORRUPT_STACK, address);
|
execution_error (SIM_ERR_CORRUPT_STACK, address);
|
||||||
ptr[pt1][pt2][pto] = MC_DATA;
|
ptr[pt1][pt2][pto] = MC_DATA;
|
||||||
if (ptdc[pt1][pt2][pto])
|
|
||||||
|
/* The instruction decoder doesn't store it's decoded instructions
|
||||||
|
at word swapped addresses. Therefore, when clearing the decode
|
||||||
|
cache, we have to account for that here. */
|
||||||
|
pto_dc = pto ^ (rx_big_endian ? 3 : 0);
|
||||||
|
if (ptdc[pt1][pt2][pto_dc])
|
||||||
{
|
{
|
||||||
free (ptdc[pt1][pt2][pto]);
|
free (ptdc[pt1][pt2][pto_dc]);
|
||||||
ptdc[pt1][pt2][pto] = NULL;
|
ptdc[pt1][pt2][pto_dc] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue