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:
Flyinghead 2021-01-29 11:46:05 +01:00
parent 3bd34e1d9b
commit 594241ffa3
3 changed files with 400 additions and 586 deletions

View File

@ -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()

View File

@ -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