x64 rec: generate main loop. use mem stubs. fast mem access for !mmu
enable fast mem path for both !mmu and mmu simplify rewrite get rid of .asm file and inline assembler code
This commit is contained in:
parent
3bd34e1d9b
commit
594241ffa3
|
@ -900,7 +900,7 @@ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "i686.*|i386.*|x86.*|amd64.*|x86_64.*|AMD6
|
|||
core/rec-x64/rec_x64.cpp
|
||||
core/rec-x64/x64_regalloc.h)
|
||||
if(MSVC)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/rec-x64/msvc.asm core/hw/arm7/arm7_x64_msvc.asm)
|
||||
target_sources(${PROJECT_NAME} PRIVATE core/hw/arm7/arm7_x64_msvc.asm)
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
_TEXT SEGMENT
|
||||
|
||||
SH4_TIMESLICE = 448
|
||||
CPU_RUNNING = 135266148
|
||||
PC = 135266120
|
||||
|
||||
EXTERN bm_GetCodeByVAddr: PROC
|
||||
EXTERN UpdateSystem_INTC: PROC
|
||||
EXTERN setjmp: PROC
|
||||
EXTERN cycle_counter: dword
|
||||
EXTERN p_sh4rcb: qword
|
||||
EXTERN jmp_env: qword
|
||||
|
||||
PUBLIC ngen_mainloop
|
||||
ngen_mainloop PROC FRAME
|
||||
|
||||
push rbx
|
||||
.pushreg rbx
|
||||
push rbp
|
||||
.pushreg rbp
|
||||
push rdi
|
||||
.pushreg rdi
|
||||
push rsi
|
||||
.pushreg rsi
|
||||
push r12
|
||||
.pushreg r12
|
||||
push r13
|
||||
.pushreg r13
|
||||
push r14
|
||||
.pushreg r14
|
||||
push r15
|
||||
.pushreg r15
|
||||
sub rsp, 40 ; 32-byte shadow space + 8 for stack 16-byte alignment
|
||||
.allocstack 40
|
||||
.endprolog
|
||||
|
||||
mov dword ptr [cycle_counter], SH4_TIMESLICE
|
||||
|
||||
lea rcx, qword ptr[jmp_env]
|
||||
xor rdx, rdx
|
||||
call setjmp
|
||||
|
||||
run_loop:
|
||||
mov rax, qword ptr [p_sh4rcb]
|
||||
mov edx, dword ptr[CPU_RUNNING + rax]
|
||||
test edx, edx
|
||||
je end_run_loop
|
||||
|
||||
slice_loop:
|
||||
mov rax, qword ptr [p_sh4rcb]
|
||||
mov ecx, dword ptr[PC + rax]
|
||||
call bm_GetCodeByVAddr
|
||||
call rax
|
||||
mov ecx, dword ptr [cycle_counter]
|
||||
test ecx, ecx
|
||||
jg slice_loop
|
||||
|
||||
add ecx, SH4_TIMESLICE
|
||||
mov dword ptr [cycle_counter], ecx
|
||||
call UpdateSystem_INTC
|
||||
jmp run_loop
|
||||
|
||||
end_run_loop:
|
||||
|
||||
add rsp, 40
|
||||
pop r15
|
||||
pop r14
|
||||
pop r13
|
||||
pop r12
|
||||
pop rsi
|
||||
pop rdi
|
||||
pop rbp
|
||||
pop rbx
|
||||
ret
|
||||
ngen_mainloop ENDP
|
||||
_TEXT ENDS
|
||||
END
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue