[x86] Move reg_cycles to EBP, for better compatiblity
This commit is contained in:
parent
15cc02e03c
commit
4d0d8dc42d
|
@ -393,13 +393,13 @@ typedef enum
|
||||||
#define x86_emit_jmp_reg(source) \
|
#define x86_emit_jmp_reg(source) \
|
||||||
x86_emit_opcode_1b_ext_reg(jmp_reg, source) \
|
x86_emit_opcode_1b_ext_reg(jmp_reg, source) \
|
||||||
|
|
||||||
#define reg_base ebx
|
#define reg_base ebx // Saved register
|
||||||
#define reg_cycles edi
|
#define reg_cycles ebp // Saved register
|
||||||
#define reg_a0 eax
|
#define reg_a0 eax
|
||||||
#define reg_a1 edx
|
#define reg_a1 edx
|
||||||
#define reg_a2 ecx
|
#define reg_a2 ecx
|
||||||
#define reg_rv eax
|
#define reg_rv eax
|
||||||
#define reg_s0 esi
|
#define reg_s0 esi // Any saved register
|
||||||
|
|
||||||
/* Offsets from reg_base, see stub.S */
|
/* Offsets from reg_base, see stub.S */
|
||||||
#define SPSR_BASE_OFF 0xA9100
|
#define SPSR_BASE_OFF 0xA9100
|
||||||
|
|
|
@ -76,6 +76,8 @@ _##symbol:
|
||||||
.equ IORAM_OFF, 0xA8D00
|
.equ IORAM_OFF, 0xA8D00
|
||||||
.equ SPSR_OFF, 0xA9100
|
.equ SPSR_OFF, 0xA9100
|
||||||
|
|
||||||
|
#define REG_CYCLES %ebp
|
||||||
|
|
||||||
# destroys ecx and edx
|
# destroys ecx and edx
|
||||||
|
|
||||||
.macro collapse_flag offset, shift
|
.macro collapse_flag offset, shift
|
||||||
|
@ -129,7 +131,7 @@ defsymbl(x86_update_gba)
|
||||||
|
|
||||||
call _update_gba # process the next event
|
call _update_gba # process the next event
|
||||||
|
|
||||||
mov %eax, %edi # edi = new cycle count
|
mov %eax, REG_CYCLES # new cycle count
|
||||||
|
|
||||||
# did we just complete a frame? go back to main then
|
# did we just complete a frame? go back to main then
|
||||||
cmpl $0, COMPLETED_FRAME(%ebx)
|
cmpl $0, COMPLETED_FRAME(%ebx)
|
||||||
|
@ -145,7 +147,6 @@ defsymbl(x86_update_gba)
|
||||||
# for BX and data processing to PC with the S bit set.
|
# for BX and data processing to PC with the S bit set.
|
||||||
|
|
||||||
# eax: GBA address to branch to
|
# eax: GBA address to branch to
|
||||||
# edi: Cycle counter
|
|
||||||
|
|
||||||
defsymbl(x86_indirect_branch_arm)
|
defsymbl(x86_indirect_branch_arm)
|
||||||
call _block_lookup_address_arm
|
call _block_lookup_address_arm
|
||||||
|
@ -193,7 +194,7 @@ alert_loop:
|
||||||
cmp $0, %edx # 0 means it has
|
cmp $0, %edx # 0 means it has
|
||||||
jnz alert_loop # if not go again
|
jnz alert_loop # if not go again
|
||||||
|
|
||||||
mov %eax, %edi # edi = new cycle count
|
mov %eax, REG_CYCLES # load new cycle count
|
||||||
jmp lookup_pc # pc has definitely changed
|
jmp lookup_pc # pc has definitely changed
|
||||||
|
|
||||||
no_alert:
|
no_alert:
|
||||||
|
@ -445,7 +446,7 @@ defsymbl(execute_arm_translate_internal)
|
||||||
|
|
||||||
movl %edx, %ebx # load base register (arg1)
|
movl %edx, %ebx # load base register (arg1)
|
||||||
extract_flags # load flag variables
|
extract_flags # load flag variables
|
||||||
movl %eax, %edi # load edi cycle counter (arg0)
|
movl %eax, REG_CYCLES # load cycle counter (arg0)
|
||||||
|
|
||||||
movl REG_PC(%ebx), %eax # load PC
|
movl REG_PC(%ebx), %eax # load PC
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue