fix the pass-by-value of translation_ptr in emit_mem_access_loadop
This commit is contained in:
parent
a275018d09
commit
69c145be62
1 changed files with 11 additions and 7 deletions
|
@ -633,8 +633,8 @@ u32 generate_load_rm_sh_##flags_op(u32 rm) \
|
|||
u32 execute_spsr_restore_body(u32 address)
|
||||
{
|
||||
set_cpu_mode(cpu_modes[reg[REG_CPSR] & 0xF]);
|
||||
if((io_registers[REG_IE] & io_registers[REG_IF]) &&
|
||||
io_registers[REG_IME] && ((reg[REG_CPSR] & 0x80) == 0))
|
||||
if((read_ioreg(REG_IE) & read_ioreg(REG_IF)) &&
|
||||
read_ioreg(REG_IME) && ((reg[REG_CPSR] & 0x80) == 0))
|
||||
{
|
||||
REG_MODE(MODE_IRQ)[6] = address + 4;
|
||||
REG_SPSR(MODE_IRQ) = reg[REG_CPSR];
|
||||
|
@ -1178,8 +1178,8 @@ u32 execute_spsr_restore_body(u32 address)
|
|||
u32 execute_store_cpsr_body(u32 _cpsr, u32 address)
|
||||
{
|
||||
set_cpu_mode(cpu_modes[_cpsr & 0xF]);
|
||||
if((io_registers[REG_IE] & io_registers[REG_IF]) &&
|
||||
io_registers[REG_IME] && ((_cpsr & 0x80) == 0))
|
||||
if((read_ioreg(REG_IE) & read_ioreg(REG_IF)) &&
|
||||
read_ioreg(REG_IME) && ((_cpsr & 0x80) == 0))
|
||||
{
|
||||
REG_MODE(MODE_IRQ)[6] = address + 4;
|
||||
REG_SPSR(MODE_IRQ) = _cpsr;
|
||||
|
@ -1856,6 +1856,7 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 address)
|
|||
#ifdef TRACE_INSTRUCTIONS
|
||||
void trace_instruction(u32 pc, u32 mode)
|
||||
{
|
||||
#ifndef NO_PRINT_ONLY_TRACE
|
||||
if (mode)
|
||||
printf("Executed arm %x\n", pc);
|
||||
else
|
||||
|
@ -1863,6 +1864,7 @@ u32 execute_store_cpsr_body(u32 _cpsr, u32 address)
|
|||
#ifdef TRACE_REGISTERS
|
||||
print_regs();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
#define emit_trace_instruction(pc, mode) \
|
||||
|
@ -2115,9 +2117,10 @@ const u8 ldhldrtbl[11] = {0, 1, 2, 2, 3, 3, 4, 4, 4, 4, 5};
|
|||
(((u32*)ptr) - ((u32*)translation_ptr + 1))
|
||||
|
||||
static void emit_mem_access_loadop(
|
||||
u8 *translation_ptr,
|
||||
u8 **ptranslation_ptr,
|
||||
u32 base_addr, unsigned size, unsigned alignment, bool signext)
|
||||
{
|
||||
#define translation_ptr (*ptranslation_ptr)
|
||||
switch (size) {
|
||||
case 2:
|
||||
mips_emit_lw(reg_rv, reg_rv, (base_addr & 0xffff));
|
||||
|
@ -2146,6 +2149,7 @@ static void emit_mem_access_loadop(
|
|||
}
|
||||
break;
|
||||
};
|
||||
#undef translation_ptr
|
||||
}
|
||||
|
||||
#ifdef PIC
|
||||
|
@ -2316,8 +2320,8 @@ static void emit_pmemld_stub(
|
|||
}
|
||||
|
||||
// Emit load operation
|
||||
emit_mem_access_loadop(translation_ptr, base_addr, size, alignment, signext);
|
||||
translation_ptr += 4;
|
||||
emit_mem_access_loadop(&translation_ptr, base_addr, size, alignment, signext);
|
||||
//translation_ptr += 4;
|
||||
|
||||
if (!(alignment == 0 || (size == 1 && signext))) {
|
||||
// Unaligned accesses require rotation, except for size=1 & signext
|
||||
|
|
Loading…
Add table
Reference in a new issue