Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c
- --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c Wed Jan 11 15:11:08 2012
- @@ -48,6 +48,85 @@
- void jump_vaddr_r10();
- void jump_vaddr_r12();
- +void invalidate_addr_r0();
- +void invalidate_addr_r1();
- +void invalidate_addr_r2();
- +void invalidate_addr_r3();
- +void invalidate_addr_r4();
- +void invalidate_addr_r5();
- +void invalidate_addr_r6();
- +void invalidate_addr_r7();
- +void invalidate_addr_r8();
- +void invalidate_addr_r9();
- +void invalidate_addr_r10();
- +void invalidate_addr_r12();
- +
- +void gteRTPS_neon(void *cp2_regs, int opcode);
- +void gteRTPT_neon(void *cp2_regs, int opcode);
- +void gteMVMVA_neon(void *cp2_regs, int opcode);
- +void gteNCLIP_neon(void *cp2_regs, int opcode);
- +void gen_interupt();
- +void memdebug(int i);
- +
- +const u_int jump_table_symbols[] = {
- + (int)invalidate_addr_r0,
- + (int)invalidate_addr_r1,
- + (int)invalidate_addr_r2,
- + (int)invalidate_addr_r3,
- + (int)invalidate_addr_r4,
- + (int)invalidate_addr_r5,
- + (int)invalidate_addr_r6,
- + (int)invalidate_addr_r7,
- + (int)invalidate_addr_r8,
- + (int)invalidate_addr_r9,
- + (int)invalidate_addr_r10,
- + (int)invalidate_addr_r12,
- + (int)invalidate_addr_r0,
- + (int)indirect_jump_indexed,
- + (int)indirect_jump,
- + (int)invalidate_addr,
- + (int)verify_code,
- + (int)verify_code_vm,
- + (int)verify_code_ds,
- + (int)pcsx_mtc0_ds,
- + (int)pcsx_mtc0,
- +#if !defined(ARMv5_ONLY)
- + (int)gteRTPS_neon,
- + (int)gteRTPT_neon,
- + (int)gteMVMVA_neon,
- + (int)gteNCLIP_neon,
- +#endif
- + (int)jump_vaddr_r0,
- + (int)jump_vaddr_r1,
- + (int)jump_vaddr_r2,
- + (int)jump_vaddr_r3,
- + (int)jump_vaddr_r4,
- + (int)jump_vaddr_r5,
- + (int)jump_vaddr_r6,
- + (int)jump_vaddr_r7,
- + (int)jump_vaddr_r8,
- + (int)jump_vaddr_r9, // 30
- + (int)jump_vaddr_r10,
- + (int)jump_vaddr_r12,
- + (int)gen_interupt,
- + (int)get_addr_ht,
- + (int)get_addr,
- + (int)mult64,
- + (int)multu64,
- + (int)div64,
- + (int)divu64,
- + (int)memdebug,
- + (int)cc_interrupt,
- + (int)fp_exception_ds,
- + (int)fp_exception,
- + (int)jump_syscall_hle,
- + (int)jump_hlecall,
- + (int)jump_intcall,
- + (int)new_dyna_leave,
- +};
- +
- +#define JUMP_TABLE_SIZE (sizeof(jump_table_symbols)*2)
- +
- const u_int jump_vaddr_reg[16] = {
- (int)jump_vaddr_r0,
- (int)jump_vaddr_r1,
- @@ -66,19 +145,6 @@
- 0,
- 0};
- -void invalidate_addr_r0();
- -void invalidate_addr_r1();
- -void invalidate_addr_r2();
- -void invalidate_addr_r3();
- -void invalidate_addr_r4();
- -void invalidate_addr_r5();
- -void invalidate_addr_r6();
- -void invalidate_addr_r7();
- -void invalidate_addr_r8();
- -void invalidate_addr_r9();
- -void invalidate_addr_r10();
- -void invalidate_addr_r12();
- -
- const u_int invalidate_addr_reg[16] = {
- (int)invalidate_addr_r0,
- (int)invalidate_addr_r1,
- @@ -467,7 +533,7 @@
- }
- }
- }
- - printf("This shouldn't happen (alloc_reg)");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen (alloc_reg)");exit(1);
- }
- void alloc_reg64(struct regstat *cur,int i,signed char reg)
- @@ -633,7 +699,7 @@
- }
- }
- }
- - printf("This shouldn't happen");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
- }
- // Allocate a temporary register. This is done without regard to
- @@ -756,7 +822,7 @@
- }
- }
- }
- - printf("This shouldn't happen");exit(1);
- + __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
- }
- // Allocate a specific ARM register.
- void alloc_arm_reg(struct regstat *cur,int i,signed char reg,char hr)
- @@ -864,6 +930,23 @@
- }
- u_int genjmp(u_int addr)
- {
- + if(addr<4) return 0;
- + int offset=addr-(int)out-8;
- + if(offset<-33554432||offset>=33554432)
- + {
- + int n;
- + for (n=0;n<sizeof(jump_table_symbols)/4;n++)
- + {
- + if(addr==jump_table_symbols[n])
- + {
- + offset=BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE+n*8-(int)out-8;
- + break;
- + }
- + }
- + }
- + assert(offset>=-33554432&&offset<33554432);
- + return ((u_int)offset>>2)&0xffffff;
- +/*
- int offset=addr-(int)out-8;
- if(offset<-33554432||offset>=33554432) {
- if (addr>2) {
- @@ -873,6 +956,7 @@
- return 0;
- }
- return ((u_int)offset>>2)&0xffffff;
- +*/
- }
- void emit_mov(int rs,int rt)
- @@ -4902,6 +4986,27 @@
- rounding_modes[2]=0x1<<22; // ceil
- rounding_modes[3]=0x2<<22; // floor
- #endif
- +
- + // Trampolines for jumps >32M
- + int *ptr,*ptr2;
- + ptr=(int *)jump_table_symbols;
- + ptr2=(int *)((void *)BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE);
- + while((void *)ptr<(void *)jump_table_symbols+sizeof(jump_table_symbols))
- + {
- + int offset=*ptr-(int)ptr2-8;
- + if(offset>=-33554432&&offset<33554432)
- + {
- + *ptr2=0xea000000|((offset>>2)&0xffffff); // direct branch
- + }
- + else
- + {
- + *ptr2=0xe51ff004; // ldr pc,[pc,#-4]
- + }
- + ptr2++;
- + *ptr2=*ptr;
- + ptr++;
- + ptr2++;
- + }
- }
- // vim:shiftwidth=2:expandtab
- diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h
- --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h Tue Jan 10 12:30:41 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h Wed Jan 11 15:00:27 2012
- @@ -48,7 +48,7 @@
- extern char *invc_ptr;
- -#define BASE_ADDR 0x1000000 // Code generator target address
- +#define BASE_ADDR ((unsigned long)dynarec_ptr) // Code generator target address
- #define TARGET_SIZE_2 24 // 2^24 = 16 megabytes
- // This is defined in linkage_arm.s, but gcc -O3 likes this better
- diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/linkage_arm.s libpsx/project/jni/libpcsxcore/new_dynarec/linkage_arm.s
- --- pcsx_rearmed/libpcsxcore/new_dynarec/linkage_arm.s Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/linkage_arm.s Wed Jan 11 17:14:01 2012
- @@ -204,12 +204,7 @@
- dynarec_local_end = memory_map + 4194304
- .macro load_var_adr reg var
- -.if HAVE_ARMV7
- - movw \reg, #:lower16:\var
- - movt \reg, #:upper16:\var
- -.else
- ldr \reg, =\var
- -.endif
- .endm
- .text
- diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c
- --- pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c Tue Jan 10 12:46:33 2012
- +++ libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c Wed Jan 11 15:14:05 2012
- @@ -22,6 +22,9 @@
- #include <stdint.h> //include for uint64_t
- #include <assert.h>
- +#define LOG_TAG "libpsx Emulator"
- +#include <android/log.h>
- +
- #include "emu_if.h" //emulator interface
- #include <sys/mman.h>
- @@ -259,6 +262,9 @@
- int tracedebug=0;
- +unsigned char dynarec_addr[(1<<TARGET_SIZE_2) + 4096];
- +unsigned char* dynarec_ptr;
- +
- //#define DEBUG_CYCLE_COUNT 1
- void nullf() {}
- @@ -7803,6 +7809,7 @@
- void new_dynarec_init()
- {
- printf("Init new dynarec\n");
- + dynarec_ptr = (unsigned char *)(((unsigned long) dynarec_addr + 4096) & ~(4095));
- out=(u_char *)BASE_ADDR;
- if (mmap (out, 1<<TARGET_SIZE_2,
- PROT_READ | PROT_WRITE | PROT_EXEC,
- @@ -7885,7 +7892,8 @@
- }
- */
- //if(Count==365117028) tracedebug=1;
- - assem_debug("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- + //__android_log_print(ANDROID_LOG_WARN, LOG_TAG, "NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- +
- //printf("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
- //printf("TRACE: count=%d next=%d (compile %x)\n",Count,next_interupt,addr);
- //if(debug)
- @@ -11086,7 +11094,7 @@
- // If we're within 256K of the end of the buffer,
- // start over from the beginning. (Is 256K enough?)
- - if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE) out=(u_char *)BASE_ADDR;
- + if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE-JUMP_TABLE_SIZE) out=(u_char *)BASE_ADDR;
- // Trap writes to any of the pages we compiled
- for(i=start>>12;i<=(start+slen*4)>>12;i++) {
Add Comment
Please, Sign In to add comment