some drc integration work
[pcsx_rearmed.git] / libpcsxcore / new_dynarec / new_dynarec.c
index ebdab12..b141b6b 100644 (file)
 #include <stdint.h> //include for uint64_t
 #include <assert.h>
 
-#include "../recomp.h"
-#include "../recomph.h" //include for function prototypes
-#include "../macros.h"
-#include "../r4300.h"
-#include "../ops.h"
-#include "../interupt.h"
-
-#include "../../memory/memory.h"
+#include "emu_if.h" //emulator interface
 
 #include <sys/mman.h>
 
@@ -1935,10 +1928,12 @@ void wb_register(signed char r,signed char regmap[],uint64_t dirty,uint64_t is32
         if((dirty>>hr)&1) {
           if(regmap[hr]<64) {
             emit_storereg(r,hr);
+#ifndef FORCE32
             if((is32>>regmap[hr])&1) {
               emit_sarimm(hr,31,hr);
               emit_storereg(r|64,hr);
             }
+#endif
           }else{
             emit_storereg(r|64,hr);
           }
@@ -1969,14 +1964,6 @@ int rchecksum()
     sum^=((u_int *)reg)[i];
   return sum;
 }
-int fchecksum()
-{
-  int i;
-  int sum=0;
-  for(i=0;i<64;i++)
-    sum^=((u_int *)reg_cop1_fgr_64)[i];
-  return sum;
-}
 void rlist()
 {
   int i;
@@ -1984,10 +1971,12 @@ void rlist()
   for(i=0;i<32;i++)
     printf("r%d:%8x%8x ",i,((int *)(reg+i))[1],((int *)(reg+i))[0]);
   printf("\n");
+#ifndef DISABLE_COP1
   printf("TRACE: ");
   for(i=0;i<32;i++)
     printf("f%d:%8x%8x ",i,((int*)reg_cop1_simple[i])[1],*((int*)reg_cop1_simple[i]));
   printf("\n");
+#endif
 }
 
 void enabletrace()
@@ -3323,6 +3312,7 @@ void storelr_assemble(int i,struct regstat *i_regs)
 
 void c1ls_assemble(int i,struct regstat *i_regs)
 {
+#ifndef DISABLE_COP1
   int s,th,tl;
   int temp,ar;
   int map=-1;
@@ -3497,6 +3487,9 @@ void c1ls_assemble(int i,struct regstat *i_regs)
     emit_call((int)memdebug);
     emit_popa();
   }/**/
+#else
+  cop1_unusable(i, i_regs);
+#endif
 }
 
 #ifndef multdiv_assemble
@@ -4057,6 +4050,7 @@ void wb_dirtys(signed char i_regmap[],uint64_t i_is32,uint64_t i_dirty)
           if((i_dirty>>hr)&1) {
             if(i_regmap[hr]<64) {
               emit_storereg(i_regmap[hr],hr);
+#ifndef FORCE32
               if( ((i_is32>>i_regmap[hr])&1) ) {
                 #ifdef DESTRUCTIVE_WRITEBACK
                 emit_sarimm(hr,31,hr);
@@ -4066,6 +4060,7 @@ void wb_dirtys(signed char i_regmap[],uint64_t i_is32,uint64_t i_dirty)
                 emit_storereg(i_regmap[hr]|64,HOST_TEMPREG);
                 #endif
               }
+#endif
             }else{
               if( !((i_is32>>(i_regmap[hr]&63))&1) ) {
                 emit_storereg(i_regmap[hr],hr);
@@ -4091,6 +4086,7 @@ void wb_needed_dirtys(signed char i_regmap[],uint64_t i_is32,uint64_t i_dirty,in
             if((i_dirty>>hr)&1) {
               if(i_regmap[hr]<64) {
                 emit_storereg(i_regmap[hr],hr);
+#ifndef FORCE32
                 if( ((i_is32>>i_regmap[hr])&1) ) {
                   #ifdef DESTRUCTIVE_WRITEBACK
                   emit_sarimm(hr,31,hr);
@@ -4100,6 +4096,7 @@ void wb_needed_dirtys(signed char i_regmap[],uint64_t i_is32,uint64_t i_dirty,in
                   emit_storereg(i_regmap[hr]|64,HOST_TEMPREG);
                   #endif
                 }
+#endif
               }else{
                 if( !((i_is32>>(i_regmap[hr]&63))&1) ) {
                   emit_storereg(i_regmap[hr],hr);
@@ -6513,6 +6510,9 @@ void unneeded_registers(int istart,int iend,int r)
     // Save it
     unneeded_reg[i]=u;
     unneeded_reg_upper[i]=uu;
+#ifdef FORCE32
+    unneeded_reg_upper[i]=-1LL;
+#endif
     /*
     printf("ur (%d,%d) %x: ",istart,iend,start+i*4);
     printf("U:");
@@ -7393,10 +7393,12 @@ void new_dynarec_init()
             PROT_READ | PROT_WRITE | PROT_EXEC,
             MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS,
             -1, 0) <= 0) {printf("mmap() failed\n");}
+#ifdef MUPEN64
   rdword=&readmem_dword;
   fake_pc.f.r.rs=&readmem_dword;
   fake_pc.f.r.rt=&readmem_dword;
   fake_pc.f.r.rd=&readmem_dword;
+#endif
   int n;
   for(n=0x80000;n<0x80800;n++)
     invalid_code[n]=1;
@@ -7421,32 +7423,44 @@ void new_dynarec_init()
     memory_map[n]=((u_int)rdram-0x80000000)>>2;
   for(n=526336;n<1048576;n++) // 0x80800000 .. 0xFFFFFFFF
     memory_map[n]=-1;
+#ifdef MUPEN64
   for(n=0;n<0x8000;n++) { // 0 .. 0x7FFFFFFF
     writemem[n] = write_nomem_new;
     writememb[n] = write_nomemb_new;
     writememh[n] = write_nomemh_new;
+#ifndef FORCE32
     writememd[n] = write_nomemd_new;
+#endif
     readmem[n] = read_nomem_new;
     readmemb[n] = read_nomemb_new;
     readmemh[n] = read_nomemh_new;
+#ifndef FORCE32
     readmemd[n] = read_nomemd_new;
+#endif
   }
   for(n=0x8000;n<0x8080;n++) { // 0x80000000 .. 0x807FFFFF
     writemem[n] = write_rdram_new;
     writememb[n] = write_rdramb_new;
     writememh[n] = write_rdramh_new;
+#ifndef FORCE32
     writememd[n] = write_rdramd_new;
+#endif
   }
   for(n=0xC000;n<0x10000;n++) { // 0xC0000000 .. 0xFFFFFFFF
     writemem[n] = write_nomem_new;
     writememb[n] = write_nomemb_new;
     writememh[n] = write_nomemh_new;
+#ifndef FORCE32
     writememd[n] = write_nomemd_new;
+#endif
     readmem[n] = read_nomem_new;
     readmemb[n] = read_nomemb_new;
     readmemh[n] = read_nomemh_new;
+#ifndef FORCE32
     readmemd[n] = read_nomemd_new;
+#endif
   }
+#endif
   tlb_hacks();
   arch_init();
 }
@@ -7486,11 +7500,14 @@ int new_recompile_block(int addr)
   //rlist();
   start = (u_int)addr&~3;
   //assert(((u_int)addr&1)==0);
+#ifdef MUPEN64
   if ((int)addr >= 0xa4000000 && (int)addr < 0xa4001000) {
     source = (u_int *)((u_int)SP_DMEM+start-0xa4000000);
     pagelimit = 0xa4001000;
   }
-  else if ((int)addr >= 0x80000000 && (int)addr < 0x80800000) {
+  else
+#endif
+  if ((int)addr >= 0x80000000 && (int)addr < 0x80800000) {
     source = (u_int *)((u_int)rdram+start-0x80000000);
     pagelimit = 0x80800000;
   }
@@ -8165,6 +8182,11 @@ int new_recompile_block(int addr)
         current.is32=temp_is32;
       }
     }
+#ifdef FORCE32
+    memset(p32, 0xff, sizeof(p32));
+    current.is32=-1LL;
+#endif
+
     memcpy(regmap_pre[i],current.regmap,sizeof(current.regmap));
     regs[i].wasconst=current.isconst;
     regs[i].was32=current.is32;