Guest User

Untitled

a guest
May 21st, 2018
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 7.98 KB | None | 0 0
  1. diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c
  2. --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.c    Tue Jan 10 12:46:33 2012
  3. +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.c  Wed Jan 11 15:11:08 2012
  4. @@ -48,6 +48,85 @@
  5.  void jump_vaddr_r10();
  6.  void jump_vaddr_r12();
  7.  
  8. +void invalidate_addr_r0();
  9. +void invalidate_addr_r1();
  10. +void invalidate_addr_r2();
  11. +void invalidate_addr_r3();
  12. +void invalidate_addr_r4();
  13. +void invalidate_addr_r5();
  14. +void invalidate_addr_r6();
  15. +void invalidate_addr_r7();
  16. +void invalidate_addr_r8();
  17. +void invalidate_addr_r9();
  18. +void invalidate_addr_r10();
  19. +void invalidate_addr_r12();
  20. +
  21. +void gteRTPS_neon(void *cp2_regs, int opcode);
  22. +void gteRTPT_neon(void *cp2_regs, int opcode);
  23. +void gteMVMVA_neon(void *cp2_regs, int opcode);
  24. +void gteNCLIP_neon(void *cp2_regs, int opcode);
  25. +void gen_interupt();
  26. +void memdebug(int i);
  27. +
  28. +const u_int jump_table_symbols[] = {
  29. +  (int)invalidate_addr_r0,
  30. +  (int)invalidate_addr_r1,
  31. +  (int)invalidate_addr_r2,
  32. +  (int)invalidate_addr_r3,
  33. +  (int)invalidate_addr_r4,
  34. +  (int)invalidate_addr_r5,
  35. +  (int)invalidate_addr_r6,
  36. +  (int)invalidate_addr_r7,
  37. +  (int)invalidate_addr_r8,
  38. +  (int)invalidate_addr_r9,
  39. +  (int)invalidate_addr_r10,
  40. +  (int)invalidate_addr_r12,
  41. +  (int)invalidate_addr_r0,
  42. +  (int)indirect_jump_indexed,
  43. +  (int)indirect_jump,
  44. +  (int)invalidate_addr,
  45. +  (int)verify_code,
  46. +  (int)verify_code_vm,
  47. +  (int)verify_code_ds,
  48. +  (int)pcsx_mtc0_ds,
  49. +  (int)pcsx_mtc0,
  50. +#if !defined(ARMv5_ONLY)
  51. +  (int)gteRTPS_neon,
  52. +  (int)gteRTPT_neon,
  53. +  (int)gteMVMVA_neon,
  54. +  (int)gteNCLIP_neon,
  55. +#endif
  56. +  (int)jump_vaddr_r0,
  57. +  (int)jump_vaddr_r1,
  58. +  (int)jump_vaddr_r2,
  59. +  (int)jump_vaddr_r3,
  60. +  (int)jump_vaddr_r4,
  61. +  (int)jump_vaddr_r5,
  62. +  (int)jump_vaddr_r6,
  63. +  (int)jump_vaddr_r7,
  64. +  (int)jump_vaddr_r8,
  65. +  (int)jump_vaddr_r9, // 30
  66. +  (int)jump_vaddr_r10,
  67. +  (int)jump_vaddr_r12,
  68. +  (int)gen_interupt,
  69. +  (int)get_addr_ht,
  70. +  (int)get_addr,
  71. +  (int)mult64,
  72. +  (int)multu64,
  73. +  (int)div64,
  74. +  (int)divu64,
  75. +  (int)memdebug,
  76. +  (int)cc_interrupt,
  77. +  (int)fp_exception_ds,
  78. +  (int)fp_exception,
  79. +  (int)jump_syscall_hle,
  80. +  (int)jump_hlecall,
  81. +  (int)jump_intcall,
  82. +  (int)new_dyna_leave,
  83. +};
  84. +  
  85. +#define JUMP_TABLE_SIZE (sizeof(jump_table_symbols)*2)
  86. +
  87.  const u_int jump_vaddr_reg[16] = {
  88.    (int)jump_vaddr_r0,
  89.    (int)jump_vaddr_r1,
  90. @@ -66,19 +145,6 @@
  91.    0,
  92.    0};
  93.  
  94. -void invalidate_addr_r0();
  95. -void invalidate_addr_r1();
  96. -void invalidate_addr_r2();
  97. -void invalidate_addr_r3();
  98. -void invalidate_addr_r4();
  99. -void invalidate_addr_r5();
  100. -void invalidate_addr_r6();
  101. -void invalidate_addr_r7();
  102. -void invalidate_addr_r8();
  103. -void invalidate_addr_r9();
  104. -void invalidate_addr_r10();
  105. -void invalidate_addr_r12();
  106. -
  107.  const u_int invalidate_addr_reg[16] = {
  108.    (int)invalidate_addr_r0,
  109.    (int)invalidate_addr_r1,
  110. @@ -467,7 +533,7 @@
  111.        }
  112.      }
  113.    }
  114. -  printf("This shouldn't happen (alloc_reg)");exit(1);
  115. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen (alloc_reg)");exit(1);
  116.  }
  117.  
  118.  void alloc_reg64(struct regstat *cur,int i,signed char reg)
  119. @@ -633,7 +699,7 @@
  120.        }
  121.      }
  122.    }
  123. -  printf("This shouldn't happen");exit(1);
  124. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
  125.  }
  126.  
  127.  // Allocate a temporary register.  This is done without regard to
  128. @@ -756,7 +822,7 @@
  129.        }
  130.      }
  131.    }
  132. -  printf("This shouldn't happen");exit(1);
  133. +  __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "This shouldn't happen");exit(1);
  134.  }
  135.  // Allocate a specific ARM register.
  136.  void alloc_arm_reg(struct regstat *cur,int i,signed char reg,char hr)
  137. @@ -864,6 +930,23 @@
  138.  }
  139.  u_int genjmp(u_int addr)
  140.  {
  141. +  if(addr<4) return 0;
  142. +  int offset=addr-(int)out-8;
  143. +  if(offset<-33554432||offset>=33554432)
  144. +  {
  145. +    int n;
  146. +    for (n=0;n<sizeof(jump_table_symbols)/4;n++)
  147. +    {
  148. +      if(addr==jump_table_symbols[n])
  149. +      {
  150. +        offset=BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE+n*8-(int)out-8;
  151. +        break;
  152. +      }
  153. +    }
  154. +  }
  155. +  assert(offset>=-33554432&&offset<33554432);
  156. +  return ((u_int)offset>>2)&0xffffff;
  157. +/*    
  158.    int offset=addr-(int)out-8;
  159.    if(offset<-33554432||offset>=33554432) {
  160.      if (addr>2) {
  161. @@ -873,6 +956,7 @@
  162.      return 0;
  163.    }
  164.    return ((u_int)offset>>2)&0xffffff;
  165. +*/
  166.  }
  167.  
  168.  void emit_mov(int rs,int rt)
  169. @@ -4902,6 +4986,27 @@
  170.    rounding_modes[2]=0x1<<22; // ceil
  171.    rounding_modes[3]=0x2<<22; // floor
  172.  #endif
  173. +
  174. +  // Trampolines for jumps >32M
  175. +  int *ptr,*ptr2;
  176. +  ptr=(int *)jump_table_symbols;
  177. +  ptr2=(int *)((void *)BASE_ADDR+(1<<TARGET_SIZE_2)-JUMP_TABLE_SIZE);
  178. +  while((void *)ptr<(void *)jump_table_symbols+sizeof(jump_table_symbols))
  179. +  {
  180. +    int offset=*ptr-(int)ptr2-8;
  181. +    if(offset>=-33554432&&offset<33554432)
  182. +    {
  183. +      *ptr2=0xea000000|((offset>>2)&0xffffff); // direct branch
  184. +    }
  185. +    else
  186. +    {
  187. +      *ptr2=0xe51ff004; // ldr pc,[pc,#-4]
  188. +    }
  189. +    ptr2++;
  190. +    *ptr2=*ptr;
  191. +    ptr++;
  192. +    ptr2++;
  193. +  }
  194.  }
  195.  
  196.  // vim:shiftwidth=2:expandtab
  197. diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h
  198. --- pcsx_rearmed/libpcsxcore/new_dynarec/assem_arm.h    Tue Jan 10 12:30:41 2012
  199. +++ libpsx/project/jni/libpcsxcore/new_dynarec/assem_arm.h  Wed Jan 11 15:00:27 2012
  200. @@ -48,7 +48,7 @@
  201.  
  202.  extern char *invc_ptr;
  203.  
  204. -#define BASE_ADDR 0x1000000 // Code generator target address
  205. +#define BASE_ADDR ((unsigned long)dynarec_ptr) // Code generator target address
  206.  #define TARGET_SIZE_2 24 // 2^24 = 16 megabytes
  207.  
  208.  // This is defined in linkage_arm.s, but gcc -O3 likes this better
  209. diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/linkage_arm.s libpsx/project/jni/libpcsxcore/new_dynarec/linkage_arm.s
  210. --- pcsx_rearmed/libpcsxcore/new_dynarec/linkage_arm.s  Tue Jan 10 12:46:33 2012
  211. +++ libpsx/project/jni/libpcsxcore/new_dynarec/linkage_arm.s    Wed Jan 11 17:14:01 2012
  212. @@ -204,12 +204,7 @@
  213.  dynarec_local_end = memory_map + 4194304
  214.  
  215.  .macro load_var_adr reg var
  216. -.if HAVE_ARMV7
  217. -   movw    \reg, #:lower16:\var
  218. -   movt    \reg, #:upper16:\var
  219. -.else
  220.     ldr \reg, =\var
  221. -.endif
  222.  .endm
  223.  
  224.     .text
  225. diff -r -u pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c
  226. --- pcsx_rearmed/libpcsxcore/new_dynarec/new_dynarec.c  Tue Jan 10 12:46:33 2012
  227. +++ libpsx/project/jni/libpcsxcore/new_dynarec/new_dynarec.c    Wed Jan 11 15:14:05 2012
  228. @@ -22,6 +22,9 @@
  229.  #include <stdint.h> //include for uint64_t
  230.  #include <assert.h>
  231.  
  232. +#define LOG_TAG "libpsx Emulator"
  233. +#include <android/log.h>
  234. +
  235.  #include "emu_if.h" //emulator interface
  236.  
  237.  #include <sys/mman.h>
  238. @@ -259,6 +262,9 @@
  239.  
  240.  int tracedebug=0;
  241.  
  242. +unsigned char dynarec_addr[(1<<TARGET_SIZE_2) + 4096];
  243. +unsigned char* dynarec_ptr;
  244. +
  245.  //#define DEBUG_CYCLE_COUNT 1
  246.  
  247.  void nullf() {}
  248. @@ -7803,6 +7809,7 @@
  249.  void new_dynarec_init()
  250.  {
  251.    printf("Init new dynarec\n");
  252. +  dynarec_ptr = (unsigned char *)(((unsigned long) dynarec_addr + 4096) & ~(4095));
  253.    out=(u_char *)BASE_ADDR;
  254.    if (mmap (out, 1<<TARGET_SIZE_2,
  255.              PROT_READ | PROT_WRITE | PROT_EXEC,
  256. @@ -7885,7 +7892,8 @@
  257.    }
  258.  */
  259.    //if(Count==365117028) tracedebug=1;
  260. -  assem_debug("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  261. +  //__android_log_print(ANDROID_LOG_WARN, LOG_TAG, "NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  262. +  
  263.    //printf("NOTCOMPILED: addr = %x -> %x\n", (int)addr, (int)out);
  264.    //printf("TRACE: count=%d next=%d (compile %x)\n",Count,next_interupt,addr);
  265.    //if(debug)
  266. @@ -11086,7 +11094,7 @@
  267.    
  268.    // If we're within 256K of the end of the buffer,
  269.    // start over from the beginning. (Is 256K enough?)
  270. -  if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE) out=(u_char *)BASE_ADDR;
  271. +  if((int)out>BASE_ADDR+(1<<TARGET_SIZE_2)-MAX_OUTPUT_BLOCK_SIZE-JUMP_TABLE_SIZE) out=(u_char *)BASE_ADDR;
  272.    
  273.    // Trap writes to any of the pages we compiled
  274.    for(i=start>>12;i<=(start+slen*4)>>12;i++) {
Add Comment
Please, Sign In to add comment