mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-05-31 10:09:16 +08:00
Compute write back value for post increment loads before
performing the load in case the offset register is overwritten.
This commit is contained in:
@ -1,3 +1,9 @@
|
||||
2000-08-14 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* armemu.c (LHPOSTDOWN): Compute write back value before
|
||||
performing load in case the offset register is overwritten.
|
||||
(LHPOSTUP): Ditto.
|
||||
|
||||
2000-07-14 Fernando Nasser <fnasser@cygnus.com>
|
||||
|
||||
* wrapper.c (sim_create_inferior): Fix typo in the previous patch.
|
||||
|
@ -106,60 +106,67 @@ extern int stop_simulator;
|
||||
if (StoreHalfWord(state, instr, temp)) \
|
||||
LSBase = temp ;
|
||||
|
||||
/* load post decrement writeback */
|
||||
/* Load post decrement writeback. */
|
||||
#define LHPOSTDOWN() \
|
||||
{ \
|
||||
int done = 1 ; \
|
||||
lhs = LHS ; \
|
||||
switch (BITS(5,6)) { \
|
||||
int done = 1; \
|
||||
lhs = LHS; \
|
||||
temp = lhs - GetLS7RHS (state, instr); \
|
||||
\
|
||||
switch (BITS (5, 6)) \
|
||||
{ \
|
||||
case 1: /* H */ \
|
||||
if (LoadHalfWord(state,instr,lhs,LUNSIGNED)) \
|
||||
LSBase = lhs - GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
if (LoadHalfWord (state, instr, lhs, LUNSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 2: /* SB */ \
|
||||
if (LoadByte(state,instr,lhs,LSIGNED)) \
|
||||
LSBase = lhs - GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
if (LoadByte (state, instr, lhs, LSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 3: /* SH */ \
|
||||
if (LoadHalfWord(state,instr,lhs,LSIGNED)) \
|
||||
LSBase = lhs - GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
case 0: /* SWP handled elsewhere */ \
|
||||
if (LoadHalfWord (state, instr, lhs, LSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 0: /* SWP handled elsewhere. */ \
|
||||
default: \
|
||||
done = 0 ; \
|
||||
break ; \
|
||||
done = 0; \
|
||||
break; \
|
||||
} \
|
||||
if (done) \
|
||||
break ; \
|
||||
break; \
|
||||
}
|
||||
|
||||
/* load post increment writeback */
|
||||
/* Load post increment writeback. */
|
||||
#define LHPOSTUP() \
|
||||
{ \
|
||||
int done = 1 ; \
|
||||
lhs = LHS ; \
|
||||
switch (BITS(5,6)) { \
|
||||
int done = 1; \
|
||||
lhs = LHS; \
|
||||
temp = lhs + GetLS7RHS (state, instr); \
|
||||
\
|
||||
switch (BITS (5, 6)) \
|
||||
{ \
|
||||
case 1: /* H */ \
|
||||
if (LoadHalfWord(state,instr,lhs,LUNSIGNED)) \
|
||||
LSBase = lhs + GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
if (LoadHalfWord (state, instr, lhs, LUNSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 2: /* SB */ \
|
||||
if (LoadByte(state,instr,lhs,LSIGNED)) \
|
||||
LSBase = lhs + GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
if (LoadByte (state, instr, lhs, LSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 3: /* SH */ \
|
||||
if (LoadHalfWord(state,instr,lhs,LSIGNED)) \
|
||||
LSBase = lhs + GetLS7RHS(state,instr) ; \
|
||||
break ; \
|
||||
case 0: /* SWP handled elsewhere */ \
|
||||
if (LoadHalfWord (state, instr, lhs, LSIGNED)) \
|
||||
LSBase = temp; \
|
||||
break; \
|
||||
case 0: /* SWP handled elsewhere. */ \
|
||||
default: \
|
||||
done = 0 ; \
|
||||
break ; \
|
||||
done = 0; \
|
||||
break; \
|
||||
} \
|
||||
if (done) \
|
||||
break ; \
|
||||
break; \
|
||||
}
|
||||
|
||||
|
||||
/* load pre decrement */
|
||||
#define LHPREDOWN() \
|
||||
{ \
|
||||
|
Reference in New Issue
Block a user