flycast/core/rec-x86/rec_lin86_asm.S

166 lines
2.7 KiB
ArmAsm
Raw Normal View History

.section .text
.intel_syntax noprefix
.extern rdv_LinkBlock
.globl p_sh4rcb
.globl gas_offs
.globl rdv_FailedToFindBlock
.globl cycle_counter
.globl loop_no_update
.globl intc_sched
.globl bm_GetCodeByVAddr
.globl cycle_counter
.globl UpdateSystem
.globl rdv_DoInterrupts
.globl rdv_BlockCheckFail
###########################################
.globl ngen_LinkBlock_Shared_stub
.type ngen_LinkBlock_Shared_stub, @function
ngen_LinkBlock_Shared_stub:
pop ecx
sub ecx,5
call rdv_LinkBlock
jmp eax
###########################################
.globl ngen_LinkBlock_cond_Next_stub
.type ngen_LinkBlock_cond_Next_stub, @function
ngen_LinkBlock_cond_Next_stub:
mov edx,0
jmp ngen_LinkBlock_Shared_stub
###########################################
.globl ngen_LinkBlock_cond_Branch_stub
.type ngen_LinkBlock_cond_Branch_stub, @function
ngen_LinkBlock_cond_Branch_stub:
mov edx,1
jmp ngen_LinkBlock_Shared_stub
###########################################
.globl ngen_LinkBlock_Generic_stub
.type ngen_LinkBlock_Generic_stub, @function
# u32 gas_offs=offsetof(Sh4RCB,cntx.jdyn);
ngen_LinkBlock_Generic_stub:
mov edx,p_sh4rcb
add edx,gas_offs
mov edx,[edx]
jmp ngen_LinkBlock_Shared_stub
###########################################
.globl ngen_FailedToFindBlock_
.type ngen_FailedToFindBlock_, @function
ngen_FailedToFindBlock_:
mov ecx,esi
call rdv_FailedToFindBlock
jmp eax
###########################################
#define SH4_TIMESLICE 448
.globl ngen_mainloop
.type ngen_mainloop, @function
ngen_mainloop:
2015-05-15 21:33:47 +00:00
# quick hack to maintain 16-byte alignment
push esi
push esi
push esi
push esi
push edi
push ebp
push ebx
mov ecx, [p_sh4rcb]
add ecx, [nextpc_offset]
mov ecx, [ecx]
mov dword ptr cycle_counter, 448 #SH4_TIMESLICE
2018-03-18 17:43:51 +00:00
lea eax, no_update
mov dword ptr loop_no_update, eax
lea eax, intc_sched_offs
mov dword ptr intc_sched, eax
mov eax,0
# next_pc _MUST_ be on ecx
no_update:
mov esi,ecx
call bm_GetCodeByVAddr
jmp eax
intc_sched_offs:
add dword ptr cycle_counter, 448 #SH4_TIMESLICE
call UpdateSystem
cmp eax,0
jnz do_iter
ret
do_iter:
pop ecx
call rdv_DoInterrupts
mov ecx,eax
mov edx,[p_sh4rcb];
add edx,[cpurun_offset];
cmp dword ptr [edx],0;
jz cleanup;
jmp no_update
cleanup:
pop ebx
pop ebp
pop edi
pop esi
2015-05-15 21:33:47 +00:00
# quick hack to maintain 16-byte alignment
pop esi
pop esi
pop esi
ret
###########################################
.globl ngen_blockcheckfail
.type ngen_blockcheckfail, @function
ngen_blockcheckfail:
call rdv_BlockCheckFail
jmp eax
###########################################
.globl ngen_blockcheckfail2
.type ngen_blockcheckfail2, @function
ngen_blockcheckfail2:
int 3
call rdv_BlockCheckFail
jmp eax