347 lines
5.9 KiB
NASM
Executable File
347 lines
5.9 KiB
NASM
Executable File
struc PPC_CPU_State
|
|
dummy:
|
|
gpr:
|
|
fpr:
|
|
cr:
|
|
fpscr:
|
|
xer:
|
|
xer_ca:
|
|
lr:
|
|
ctr:
|
|
|
|
msr:
|
|
pvr:
|
|
|
|
ibatu:
|
|
ibatl:
|
|
ibat_bl17:
|
|
|
|
dbatu:
|
|
dbatl:
|
|
dbat_bl17:
|
|
|
|
sdr1:
|
|
|
|
sr:
|
|
|
|
dar:
|
|
dsisr:
|
|
sprg:
|
|
srr0:
|
|
srr1:
|
|
|
|
decr:
|
|
ear:
|
|
pir:
|
|
tb:
|
|
|
|
hid:
|
|
|
|
pc:
|
|
npc:
|
|
current_opc:
|
|
|
|
exception_pending:
|
|
dec_exception:
|
|
ext_exception:
|
|
stop_exception:
|
|
singlestep_ignore:
|
|
align1:
|
|
align2:
|
|
align3:
|
|
|
|
pagetable_base:
|
|
pagetable_hashmask:
|
|
reserve:
|
|
have_reservation:
|
|
|
|
tlb_last:
|
|
tlb_pa:
|
|
tlb_va:
|
|
|
|
effective_code_page:
|
|
physical_code_page:
|
|
pdec:
|
|
ptb:
|
|
|
|
temp:
|
|
temp2:
|
|
x87cw:
|
|
pc_ofs:
|
|
current_code_base:
|
|
endstruc
|
|
|
|
struc JITC
|
|
clientPages
|
|
|
|
tlb_code_0_eff
|
|
tlb_data_0_eff
|
|
tlb_data_8_eff
|
|
tlb_code_0_phys
|
|
tlb_data_0_phys
|
|
tlb_data_8_phys
|
|
tlb_code_0_hits
|
|
tlb_data_0_hits
|
|
tlb_data_8_hits
|
|
tlb_code_0_misses
|
|
tlb_data_0_misses
|
|
tlb_data_8_misses
|
|
|
|
nativeReg
|
|
|
|
nativeRegState
|
|
|
|
nativeFlags
|
|
|
|
nativeFlagsState
|
|
nativeCarryState
|
|
|
|
clientReg
|
|
|
|
nativeRegsList
|
|
|
|
LRUreg
|
|
MRUreg
|
|
|
|
LRUpage
|
|
MRUpage
|
|
|
|
freeFragmentsList
|
|
|
|
freeClientPages
|
|
|
|
translationCache
|
|
endstruc
|
|
|
|
extern gCPU, gJITC, gMemory, gMemorySize,
|
|
extern jitc_error, ppc_isi_exception_asm, ppc_dsi_exception_asm
|
|
extern jitcDestroyAndFreeClientPage
|
|
extern io_mem_read_glue
|
|
extern io_mem_write_glue
|
|
extern io_mem_read64_glue
|
|
extern io_mem_write64_glue
|
|
extern io_mem_read128_glue
|
|
extern io_mem_write128_glue
|
|
extern io_mem_read128_native_glue
|
|
extern io_mem_write128_native_glue
|
|
global ppc_effective_to_physical_code, ppc_effective_to_physical_data
|
|
global ppc_write_effective_byte_asm
|
|
global ppc_write_effective_half_asm
|
|
global ppc_write_effective_word_asm
|
|
global ppc_write_effective_dword_asm
|
|
global ppc_write_effective_qword_asm
|
|
global ppc_write_effective_qword_sse_asm
|
|
global ppc_read_effective_byte_asm
|
|
global ppc_read_effective_half_z_asm
|
|
global ppc_read_effective_half_s_asm
|
|
global ppc_read_effective_word_asm
|
|
global ppc_read_effective_dword_asm
|
|
global ppc_read_effective_qword_asm
|
|
global ppc_read_effective_qword_sse_asm
|
|
global ppc_mmu_tlb_invalidate_all_asm
|
|
global ppc_mmu_tlb_invalidate_entry_asm
|
|
global ppc_opc_lswi_asm
|
|
global ppc_opc_stswi_asm
|
|
global ppc_opc_icbi_asm
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
;;
|
|
ppc_mmu_tlb_invalidate_all_asm:
|
|
mov edi, gJITC+tlb_code_0_eff
|
|
|
|
ppc_mmu_tlb_invalidate_entry_asm:
|
|
|
|
ppc_pte_protection:
|
|
|
|
%macro bat_lookup 4
|
|
%%npr:
|
|
%%ok:
|
|
%%bat_lookup_failed:
|
|
%endmacro
|
|
|
|
%macro pg_table_lookup 3
|
|
%%invalid:
|
|
%endmacro
|
|
|
|
protection_fault_0_code:
|
|
protection_fault_0_data:
|
|
protection_fault_8_data:
|
|
|
|
%macro tlb_lookup 2
|
|
%%tlb_lookup_failed:
|
|
%endmacro
|
|
|
|
ppc_effective_to_physical_code_ret:
|
|
ppc_effective_to_physical_code:
|
|
tlb_lookup 0, code
|
|
|
|
bat_lookup i, 0, 0, code
|
|
bat_lookup i, 1, 0, code
|
|
bat_lookup i, 2, 0, code
|
|
bat_lookup i, 3, 0, code
|
|
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
pg_table_lookup 0, 0, code
|
|
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
pg_table_lookup (1<<6), 0, code
|
|
|
|
.noexec:
|
|
ppc_effective_to_physical_data_read_ret:
|
|
ppc_effective_to_physical_data_read:
|
|
tlb_lookup 0, data
|
|
|
|
bat_lookup d, 0, 0, data
|
|
bat_lookup d, 1, 0, data
|
|
bat_lookup d, 2, 0, data
|
|
bat_lookup d, 3, 0, data
|
|
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
pg_table_lookup 0, 0, data
|
|
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
pg_table_lookup (1<<6), 0, data
|
|
|
|
ppc_effective_to_physical_data_write_ret:
|
|
ppc_effective_to_physical_data_write:
|
|
tlb_lookup 8, data
|
|
|
|
bat_lookup d, 0, 8, data
|
|
bat_lookup d, 1, 8, data
|
|
bat_lookup d, 2, 8, data
|
|
bat_lookup d, 3, 8, data
|
|
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
pg_table_lookup 0, 8, data
|
|
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
pg_table_lookup (1<<6), 8, data
|
|
|
|
ppc_write_effective_byte_asm:
|
|
.mmio:
|
|
ppc_write_effective_half_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.overlapped_mmio_1_back:
|
|
.overlapped_mmio_1:
|
|
.overlapped_mmio_2:
|
|
ppc_write_effective_word_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.loop1:
|
|
.overlapped_mmio_1_back:
|
|
.loop2:
|
|
.overlapped_mmio_1:
|
|
.overlapped_mmio_1_loop:
|
|
.overlapped_mmio_2:
|
|
.overlapped_mmio_2_loop:
|
|
ppc_write_effective_dword_asm:
|
|
.mmio:
|
|
|
|
.overlap:
|
|
.loop1:
|
|
.overlapped_mmio_1_back:
|
|
.loop2:
|
|
.overlapped_mmio_1:
|
|
.overlapped_mmio_1_loop:
|
|
.overlapped_mmio_2:
|
|
.overlapped_mmio_2_loop:
|
|
ppc_write_effective_qword_asm:
|
|
.mmio:
|
|
|
|
ppc_write_effective_qword_sse_asm:
|
|
.mmio:
|
|
ppc_read_effective_byte_asm:
|
|
.mmio:
|
|
ppc_read_effective_half_z_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.loop1:
|
|
.mmio1:
|
|
.mmio2:
|
|
ppc_read_effective_half_s_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.loop1:
|
|
|
|
.mmio1:
|
|
.mmio2:
|
|
ppc_read_effective_word_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.loop1:
|
|
.overlapped_mmio_1_back:
|
|
.loop2:
|
|
|
|
.overlapped_mmio_1:
|
|
.overlapped_mmio_1_loop:
|
|
.overlapped_mmio_2:
|
|
.overlapped_mmio_2_loop:
|
|
ppc_read_effective_dword_asm:
|
|
.mmio:
|
|
.overlap:
|
|
.loop1:
|
|
.overlapped_mmio_1_back:
|
|
.loop2:
|
|
|
|
.overlapped_mmio_1:
|
|
.overlapped_mmio_1_loop:
|
|
.overlapped_mmio_2:
|
|
.overlapped_mmio_2_loop:
|
|
ppc_read_effective_qword_asm:
|
|
.mmio:
|
|
|
|
ppc_read_effective_qword_sse_asm:
|
|
.mmio:
|
|
ppc_opc_stswi_asm:
|
|
.loop:
|
|
.ok1:
|
|
.back:
|
|
.mmio:
|
|
ppc_opc_lswi_asm:
|
|
.loop:
|
|
.ok1:
|
|
.back:
|
|
.loop2:
|
|
.ret:
|
|
.mmio:
|
|
ppc_opc_icbi_asm:
|
|
.destroy:
|
|
.ok:
|