X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=mupen64plus-pandora.git;a=blobdiff_plain;f=source%2Fmupen64plus-core%2Fsrc%2Fr4300%2Fnew_dynarec%2Fnew_dynarec.c;h=53e569f61d97e60b7b5fb5956050ae35d84324c1;hp=9a5226ea96efbc540ef986e4263b664ebbbd4e80;hb=2d26287291331f2b1793a8e76ede08c75654fb7c;hpb=97d8cdb756d3b3e280f4b420873adaffd228e0af diff --git a/source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.c b/source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.c index 9a5226e..53e569f 100755 --- a/source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.c +++ b/source/mupen64plus-core/src/r4300/new_dynarec/new_dynarec.c @@ -49,7 +49,7 @@ #define MAXBLOCK 4096 #define MAX_OUTPUT_BLOCK_SIZE 262144 -#define CLOCK_DIVIDER 2 +#define CLOCK_DIVIDER count_per_op void *base_addr; @@ -845,24 +845,58 @@ static void alloc_all(struct regstat *cur,int i) static void div64(int64_t dividend,int64_t divisor) { + if ((dividend) && (divisor)) { lo=dividend/divisor; hi=dividend%divisor; + } else { + lo=0; + hi=0; + } //DebugMessage(M64MSG_VERBOSE, "TRACE: ddiv %8x%8x %8x%8x" ,(int)reg[HIREG],(int)(reg[HIREG]>>32) // ,(int)reg[LOREG],(int)(reg[LOREG]>>32)); } static void divu64(uint64_t dividend,uint64_t divisor) { + if ((dividend) && (divisor)) { + lo=dividend/divisor; + hi=dividend%divisor; + } else { + lo=0; + hi=0; + } + //DebugMessage(M64MSG_VERBOSE, "TRACE: ddivu %8x%8x %8x%8x",(int)reg[HIREG],(int)(reg[HIREG]>>32) + // ,(int)reg[LOREG],(int)(reg[LOREG]>>32)); +} +static void div32(int32_t dividend,int32_t divisor) +{ + if ((dividend) && (divisor)) { lo=dividend/divisor; hi=dividend%divisor; + } else { + lo=0; + hi=0; + } + //DebugMessage(M64MSG_VERBOSE, "TRACE: ddiv %8x%8x %8x%8x" ,(int)reg[HIREG],(int)(reg[HIREG]>>32) + // ,(int)reg[LOREG],(int)(reg[LOREG]>>32)); +} +static void divu32(uint32_t dividend,uint32_t divisor) +{ + if ((dividend) && (divisor)) { + lo=dividend/divisor; + hi=dividend%divisor; + } else { + lo=0; + hi=0; + } //DebugMessage(M64MSG_VERBOSE, "TRACE: ddivu %8x%8x %8x%8x",(int)reg[HIREG],(int)(reg[HIREG]>>32) // ,(int)reg[LOREG],(int)(reg[LOREG]>>32)); } static void mult64(int64_t m1,int64_t m2) { - unsigned long long int op1, op2, op3, op4; - unsigned long long int result1, result2, result3, result4; - unsigned long long int temp1, temp2, temp3, temp4; + uint64_t op1, op2, op3, op4; + uint64_t result1, result2, result3, result4; + uint64_t temp1, temp2, temp3, temp4; int sign = 0; if (m1 < 0) @@ -906,9 +940,9 @@ static void mult64(int64_t m1,int64_t m2) #if NEW_DYNAREC == NEW_DYNAREC_ARM static void multu64(uint64_t m1,uint64_t m2) { - unsigned long long int op1, op2, op3, op4; - unsigned long long int result1, result2, result3, result4; - unsigned long long int temp1, temp2, temp3, temp4; + uint64_t op1, op2, op3, op4; + uint64_t result1, result2, result3, result4; + uint64_t temp1, temp2, temp3, temp4; op1 = m1 & 0xFFFFFFFF; op2 = (m1 >> 32) & 0xFFFFFFFF;