diff options
Diffstat (limited to 'src/dynarec')
67 files changed, 787 insertions, 783 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 5ab33ffe..25b70278 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -725,7 +725,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin u32 = PK(i32); i32++; } - if(!box64_dynarec_test && u32>=0x50 && u32<=0x57 && (dyn->size>(ninst+1) && dyn->insts[ninst+1].pred_sz==1) && gd != xRSP) { + if(!BOX64ENV(dynarec_test) && u32>=0x50 && u32<=0x57 && (dyn->size>(ninst+1) && dyn->insts[ninst+1].pred_sz==1) && gd != xRSP) { u32 = TO_NAT((u32 & 0x07) + (rex.b << 3)); if(u32==xRSP) { PUSH1z(gd); @@ -770,7 +770,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin u32 = PK(i32); i32++; } - if(!box64_dynarec_test && (gd!=xRSP) && u32>=0x58 && u32<=0x5f && (dyn->size>(ninst+1) && dyn->insts[ninst+1].pred_sz==1)) { + if (!BOX64ENV(dynarec_test) && (gd != xRSP) && u32 >= 0x58 && u32 <= 0x5f && (dyn->size > (ninst + 1) && dyn->insts[ninst + 1].pred_sz == 1)) { // double pop! u32 = TO_NAT((u32 & 0x07) + (rex.b << 3)); MESSAGE(LOG_DUMP, "DOUBLE POP\n"); @@ -1010,7 +1010,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x6C: case 0x6D: INST_NAME(opcode == 0x6C ? "INSB" : "INSD"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -1026,7 +1026,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x6E: case 0x6F: INST_NAME(opcode == 0x6C ? "OUTSB" : "OUTSD"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -1553,7 +1553,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(gd==xRAX) { if (rep == 2) { INST_NAME("PAUSE"); - switch (box64_dynarec_pause) { + switch (BOX64ENV(dynarec_pause)) { case 1: YIELD; break; case 2: WFI; break; case 3: @@ -1730,7 +1730,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ CMPSB");} else {INST_NAME("REPZ CMPSB");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SMREAD(); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -1772,7 +1772,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ CMPSD");} else {INST_NAME("REPZ CMPSD");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_ALL, SF_SET_PENDING); SMREAD(); @@ -1914,7 +1914,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ SCASB");} else {INST_NAME("REPZ SCASB");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SMREAD(); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -1953,7 +1953,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ SCASD");} else {INST_NAME("REPZ SCASD");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SMREAD(); SETFLAGS(X_ALL, SF_SET_PENDING); @@ -2283,7 +2283,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xC2: INST_NAME("RETN"); //SETFLAGS(X_ALL, SF_SET_NODF); // Hack, set all flags (to an unknown state...) - if(box64_dynarec_safeflags) { + if(BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // lets play safe here too } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -2295,7 +2295,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xC3: INST_NAME("RET"); // SETFLAGS(X_ALL, SF_SET_NODF); // Hack, set all flags (to an unknown state...) - if(box64_dynarec_safeflags) { + if(BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // so instead, force the deferred flags, so it's not too slow, and flags are not lost } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -2500,7 +2500,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(isRetX87Wrapper(*(wrapper_t*)(addr))) // return value will be on the stack, so the stack depth needs to be updated x87_purgecache(dyn, ninst, 0, x3, x1, x4); - if((box64_log<2 && !cycle_log && !box64_dynarec_test) && tmp) { + if ((BOX64ENV(log)<2 && !BOX64ENV(rolling_log) && !BOX64ENV(dynarec_test)) && tmp) { //GETIP(ip+3+8+8); // read the 0xCC call_n(dyn, ninst, *(void**)(addr+8), tmp); addr+=8+8; @@ -2524,7 +2524,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } else { INST_NAME("INT 3"); - if(!box64_ignoreint3) { + if(!BOX64ENV(ignoreint3)) { // check if TRAP signal is handled TABLE64(x1, (uintptr_t)my_context); MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP])); @@ -2573,7 +2573,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin jump_to_epilog(dyn, 0, xRIP, ninst); } else if(u8==0x03) { INST_NAME("INT 3"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -2587,7 +2587,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin *ok = 0; } else { INST_NAME("INT n"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -2748,7 +2748,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0: INST_NAME("ROL Eb, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); UFLAG_IF { UFLAG_DF(x2, d_none); @@ -2778,7 +2778,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("ROR Eb, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); UFLAG_IF { UFLAG_DF(x2, d_none); @@ -2808,7 +2808,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("RCL Eb, CL"); MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); ANDw_mask(x2, xRCX, 0, 0b00100); @@ -2820,7 +2820,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("RCR Eb, CL"); MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); ANDw_mask(x2, xRCX, 0, 0b00100); @@ -2832,7 +2832,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 6: INST_NAME("SHL Eb, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -2845,7 +2845,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 5: INST_NAME("SHR Eb, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -2858,7 +2858,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 7: INST_NAME("SAR Eb, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -2876,7 +2876,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0: INST_NAME("ROL Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -2911,7 +2911,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("ROR Ed, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -2947,7 +2947,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -2965,7 +2965,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); SETFLAGS(X_OF|X_CF, SF_SET_DF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x2, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -2982,7 +2982,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 6: INST_NAME("SHL Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -3000,7 +3000,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 5: INST_NAME("SHR Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -3018,7 +3018,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 7: INST_NAME("SAR Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -3149,10 +3149,10 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xE6: /* OUT Ib, AL */ case 0xE7: /* OUT Ib, EAX */ INST_NAME(opcode==0xE4?"IN AL, Ib":(opcode==0xE5?"IN EAX, Ib":(opcode==0xE6?"OUT Ib, AL":"OUT Ib, EAX"))); - if (rex.is32bits && box64_ignoreint3) { + if (rex.is32bits && BOX64ENV(ignoreint3)) { F8; } else { - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3197,14 +3197,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin // calling a native function SMEND(); sse_purge07cache(dyn, ninst, x3); - if((box64_log<2 && !cycle_log && !box64_dynarec_test) && dyn->insts[ninst].natcall) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log) && !BOX64ENV(dynarec_test)) && dyn->insts[ninst].natcall) { tmp=isSimpleWrapper(*(wrapper_t*)(dyn->insts[ninst].natcall+2)); } else tmp=0; if(dyn->insts[ninst].natcall && isRetX87Wrapper(*(wrapper_t*)(dyn->insts[ninst].natcall+2))) // return value will be on the stack, so the stack depth needs to be updated x87_purgecache(dyn, ninst, 0, x3, x1, x4); - if((box64_log<2 && !cycle_log) && dyn->insts[ninst].natcall && tmp) { + if ((BOX64ENV(log)<2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall && tmp) { //GETIP(ip+3+8+8); // read the 0xCC call_n(dyn, ninst, *(void**)(dyn->insts[ninst].natcall+2+8), tmp); SMWRITE2(); @@ -3239,7 +3239,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin PUSH1z(x2); break; default: - if((box64_dynarec_safeflags>1) || (ninst && dyn->insts[ninst-1].x64.set_flags)) { + if((BOX64ENV(dynarec_safeflags)>1) || (ninst && dyn->insts[ninst-1].x64.set_flags)) { READFLAGS(X_PEND); // that's suspicious } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags to "dont'care" state @@ -3248,7 +3248,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOV64x(x2, addr); fpu_purgecache(dyn, ninst, 1, x1, x3, x4); PUSH1z(x2); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if(addr < (dyn->start+dyn->isize)) { @@ -3271,7 +3271,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin else j64 = addr+i32; jump_to_next(dyn, j64, 0, ninst, rex.is32bits); - if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if(BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); @@ -3329,9 +3329,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xEE: /* OUT DX, AL */ case 0xEF: /* OUT DX, EAX */ INST_NAME(opcode==0xEC?"IN AL, DX":(opcode==0xED?"IN EAX, DX":(opcode==0xEE?"OUT DX, AL":"OUT DX, EAX"))); - if(rex.is32bits && box64_ignoreint3) + if(rex.is32bits && BOX64ENV(ignoreint3)) {} else { - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3351,7 +3351,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0xF1: INST_NAME("INT1"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3367,7 +3367,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xF4: INST_NAME("HLT"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3437,7 +3437,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -3465,7 +3465,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -3477,7 +3477,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET); GETEB(x1, 0); UXTHw(x2, xRAX); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZw_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3493,7 +3493,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFIx(xRAX, x4, 8, 8); SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -3503,7 +3503,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SKIPTEST(x1); SETFLAGS(X_ALL, SF_SET); GETSEB(x1, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZw_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3520,7 +3520,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFIx(xRAX, x4, 8, 8); SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -3578,7 +3578,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -3612,7 +3612,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -3635,7 +3635,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL(native_div0, -1); LOAD_XEMU_CALL(xRIP); } else { - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3662,7 +3662,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin && *(uint8_t*)(dyn->insts[ninst-1].x64.addr)==0x31 && *(uint8_t*)(dyn->insts[ninst-1].x64.addr+1)==0xD2) { GETED(0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3677,7 +3677,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVx_REG(xRAX, x2); } else { GETEDH(x1, 0); // get edd changed addr, so cannot be called 2 times for same op... - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3699,7 +3699,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -3710,7 +3710,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET); if(!rex.w) { GETSEDw(0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(wb); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3732,7 +3732,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin && *(uint8_t*)(dyn->insts[ninst-1].x64.addr)==0x48 && *(uint8_t*)(dyn->insts[ninst-1].x64.addr+1)==0x99) { GETED(0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3747,7 +3747,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVx_REG(xRAX, x2); } else { GETEDH(x1, 0); // get edd changed addr, so cannot be called 2 times for same op... - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -3777,7 +3777,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -3799,9 +3799,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xFA: /* STI */ case 0xFB: /* CLI */ INST_NAME(opcode==0xFA?"CLI":"STI"); - if(rex.is32bits && box64_ignoreint3) + if(rex.is32bits && BOX64ENV(ignoreint3)) {} else { - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -3864,7 +3864,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 2: // CALL Ed INST_NAME("CALL Ed"); - PASS2IF((box64_dynarec_safeflags>1) || + PASS2IF((BOX64ENV(dynarec_safeflags)>1) || ((ninst && dyn->insts[ninst-1].x64.set_flags) || ((ninst>1) && dyn->insts[ninst-2].x64.set_flags)), 1) { @@ -3873,7 +3873,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_NODF); //Hack to put flag in "don't care" state } GETEDz(0); - if(box64_dynarec_callret && box64_dynarec_bigblock>1) { + if(BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock)>1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -3881,7 +3881,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin *ok = 0; } GETIP_(addr); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if(addr < (dyn->start+dyn->isize)) { @@ -3898,7 +3898,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); - if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if(BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); @@ -3922,7 +3922,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDH(x4, xEmu, offsetof(x64emu_t, segs[_CS])); GETIP_(addr); /* - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if(addr < (dyn->start+dyn->isize)) { diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index fbb5d399..98f84863 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -165,7 +165,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x09: INST_NAME("WBINVD"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -181,7 +181,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x0B: INST_NAME("UD2"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -220,7 +220,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0x0E: INST_NAME("femms"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -446,7 +446,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; GETGM(q0); GETEX(v1, 0, 0); - if (box64_dynarec_fastround) { + if (BOX64ENV(dynarec_fastround)) { VFCVTZSS(q0, v1); } else { if(arm64_frintts) { @@ -480,7 +480,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; GETGM(q0); GETEX(v1, 0, 0); - if (box64_dynarec_fastround) { + if (BOX64ENV(dynarec_fastround)) { u8 = sse_setround(dyn, ninst, x1, x2, x3); VFRINTIS(q0, v1); x87_restoreround(dyn, ninst, u8); @@ -527,7 +527,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 0x30: INST_NAME("WRMSR"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -1175,7 +1175,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin // FMIN/FMAX wll not copy the value if v0[x] is NaN // but x86 will copy if either v0[x] or v1[x] is NaN, so lets force a copy if source is NaN VFMINQS(v0, v0, v1); - if(!box64_dynarec_fastnan && (v0!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v0!=v1)) { q0 = fpu_get_scratch(dyn, ninst); VFCMEQQS(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN @@ -1196,7 +1196,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin // FMIN/FMAX wll not copy the value if v0[x] is NaN // but x86 will copy if either v0[x] or v1[x] is NaN, so lets force a copy if source is NaN VFMAXQS(v0, v0, v1); - if(!box64_dynarec_fastnan && (v0!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v0!=v1)) { q0 = fpu_get_scratch(dyn, ninst); VFCMEQQS(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN @@ -1693,7 +1693,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LSRxw_REG(x4, ed, x2); BFIw(xFlags, x4, F_CF, 1); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -1719,7 +1719,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; INST_NAME("SHLD Ed, Gd, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); GETGD; GETED(0); @@ -1781,7 +1781,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -1807,7 +1807,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin nextop = F8; INST_NAME("SHRD Ed, Gd, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); GETGD; GETED(0); @@ -1863,7 +1863,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("LDMXCSR Md"); GETED(0); STRw_U12(ed, xEmu, offsetof(x64emu_t, mxcsr)); - if(box64_sse_flushto0) { + if(BOX64ENV(sse_flushto0)) { MRS_fpcr(x1); // get fpscr LSRw_IMM(x3, ed, 15); // get FZ bit BFIw(x1, x3, 24, 1); // inject FZ bit @@ -1956,7 +1956,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x1, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x1); @@ -2025,7 +2025,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2088,7 +2088,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILxw(xFlags, ed, u8, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2119,7 +2119,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2149,7 +2149,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2180,7 +2180,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2226,7 +2226,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STxw(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c index 060da592..a0c706cd 100644 --- a/src/dynarec/arm64/dynarec_arm64_64.c +++ b/src/dynarec/arm64/dynarec_arm64_64.c @@ -320,7 +320,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x1, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x1); @@ -607,7 +607,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x6C: case 0x6D: INST_NAME(opcode == 0x6C ? "INSB" : "INSD"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -623,7 +623,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0x6E: case 0x6F: INST_NAME(opcode == 0x6C ? "OUTSB" : "OUTSD"); - if(box64_dynarec_safeflags>1) { + if(BOX64ENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state @@ -1263,7 +1263,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 6: INST_NAME("SHL Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -1279,7 +1279,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 5: INST_NAME("SHR Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -1295,7 +1295,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 7: INST_NAME("SAR Ed, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); if(rex.w) { ANDx_mask(x3, xRCX, 1, 0, 0b00101); //mask=0x000000000000003f @@ -1367,7 +1367,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1402,7 +1402,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1414,7 +1414,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET); if(!rex.w) { GETEDO(x6, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1440,7 +1440,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin && *(uint8_t*)(dyn->insts[ninst-1].x64.addr)==0x31 && *(uint8_t*)(dyn->insts[ninst-1].x64.addr+1)==0xD2) { GETEDO(x6, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1460,7 +1460,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL(div64, -1); B_NEXT_nocond; MARK; - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1477,7 +1477,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -1490,7 +1490,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETSEDOw(x6, 0); MOVw_REG(x3, xRAX); ORRx_REG_LSL(x3, x3, xRDX, 32); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(wb); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1510,7 +1510,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin && *(uint8_t*)(dyn->insts[ninst-1].x64.addr)==0x48 && *(uint8_t*)(dyn->insts[ninst-1].x64.addr+1)==0x99) { GETEDO(x6, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1525,7 +1525,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MOVx_REG(xRAX, x2); } else { GETEDO(x6, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZx_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1549,7 +1549,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -1577,7 +1577,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 2: // CALL Ed INST_NAME("CALL Ed"); - PASS2IF((box64_dynarec_safeflags>1) || + PASS2IF((BOX64ENV(dynarec_safeflags)>1) || ((ninst && dyn->insts[ninst-1].x64.set_flags) || ((ninst>1) && dyn->insts[ninst-2].x64.set_flags)), 1) { @@ -1586,7 +1586,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_NODF); //Hack to put flag in "don't care" state } GETEDOz(x6, 0); - if(box64_dynarec_callret && box64_dynarec_bigblock>1) { + if(BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock)>1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -1594,7 +1594,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin *ok = 0; } GETIP_(addr); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if(addr < (dyn->start+dyn->isize)) { @@ -1611,7 +1611,7 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); - if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if(BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index c2a92dc0..b42e14d2 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -458,7 +458,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -836,7 +836,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ CMPSW");} else {INST_NAME("REPZ CMPSW");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_ALL, SF_SET_PENDING); CBZx_NEXT(xRCX); @@ -936,7 +936,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: case 2: if(rep==1) {INST_NAME("REPNZ SCASW");} else {INST_NAME("REPZ SCASW");} - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_ALL, SF_SET_PENDING); CBZx_NEXT(xRCX); @@ -1167,7 +1167,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0: INST_NAME("ROL Ew, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); UFLAG_IF { ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f @@ -1193,7 +1193,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("ROR Ew, CL"); SETFLAGS(X_OF|X_CF, SF_SUBSET); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); UFLAG_IF { ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f @@ -1219,7 +1219,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("RCL Ew, CL"); MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); ANDw_mask(x2, xRCX, 0, 0b00100); @@ -1231,7 +1231,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("RCR Ew, CL"); MESSAGE(LOG_DUMP, "Need Optimization\n"); READFLAGS(X_CF); - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); SETFLAGS(X_OF|X_CF, SF_SET_DF); ANDw_mask(x2, xRCX, 0, 0b00100); @@ -1243,7 +1243,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 6: INST_NAME("SHL Ew, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -1256,7 +1256,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 5: INST_NAME("SHR Ew, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -1269,7 +1269,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 7: INST_NAME("SAR Ew, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); ANDw_mask(x2, xRCX, 0, 0b00100); //mask=0x00000001f UFLAG_IF { @@ -1385,7 +1385,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1414,7 +1414,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1427,7 +1427,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin GETEW(x1, 0); UXTHw(x2, xRAX); BFIw(x2, xRDX, 16, 16); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZw_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1443,7 +1443,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFIz(xRDX, x4, 0, 16); SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -1453,7 +1453,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SKIPTEST(x1); SETFLAGS(X_ALL, SF_SET); GETSEW(x1, 0); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { CBNZw_MARK3(ed); GETIP_(ip); STORE_XEMU_CALL(xRIP); @@ -1471,7 +1471,7 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFIz(xRDX, x4, 0, 16); SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } diff --git a/src/dynarec/arm64/dynarec_arm64_660f.c b/src/dynarec/arm64/dynarec_arm64_660f.c index 8867b0a6..54f98516 100644 --- a/src/dynarec/arm64/dynarec_arm64_660f.c +++ b/src/dynarec/arm64/dynarec_arm64_660f.c @@ -231,7 +231,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGM(q0); GETEX(v1, 0, 0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFCVTZSQD(q0, v1); SQXTN_32(q0, q0); } else { @@ -267,7 +267,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGM(q0); GETEX(v1, 0, 0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { u8 = sse_setround(dyn, ninst, x1, x2, x3); VFRINTIDQ(q0, v1); FCVTXN(q0, q0); @@ -1640,7 +1640,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(q0, 0, 0); GETGX_empty(q1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -1695,7 +1695,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -1703,7 +1703,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCMEQQD(v0, v0, v0); // 0 if NAN, 1 if not NAN } VFADDQD(q1, q1, q0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(v1, q1, q1); // 0 => out is NAN VBICQ(v1, v0, v1); // forget it in any input was a NAN already VSHLQ_64(v1, v1, 63); // only keep the sign bit @@ -1715,7 +1715,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -1723,7 +1723,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCMEQQD(v0, v0, v0); // 0 if NAN, 1 if not NAN } VFMULQD(q1, q1, q0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(v1, q1, q1); // 0 => out is NAN VBICQ(v1, v0, v1); // forget it in any input was a NAN already VSHLQ_64(v1, v1, 63); // only keep the sign bit @@ -1735,7 +1735,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround==2) { + if(BOX64ENV(dynarec_fastround)==2) { FCVTXN(v0, v1); } else { u8 = sse_setround(dyn, ninst, x1, x2, x3); @@ -1748,7 +1748,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { u8 = sse_setround(dyn, ninst, x1, x2, x3); VFRINTISQ(v0, v1); x87_restoreround(dyn, ninst, u8); @@ -1783,7 +1783,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -1791,7 +1791,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCMEQQD(v0, v0, v0); // 0 if NAN, 1 if not NAN } VFSUBQD(q1, q1, q0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(v1, q1, q1); // 0 => out is NAN VBICQ(v1, v0, v1); // forget it in any input was a NAN already VSHLQ_64(v1, v1, 63); // only keep the sign bit @@ -1805,7 +1805,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETEX(v1, 0, 0); // FMIN/FMAX wll not copy the value if v0[x] is NaN // but x86 will copy if either v0[x] or v1[x] is NaN, so lets force a copy if source is NaN - if(!box64_dynarec_fastnan && v0!=v1) { + if(!BOX64ENV(dynarec_fastnan) && v0!=v1) { q0 = fpu_get_scratch(dyn, ninst); VFCMEQQD(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VANDQ(v0, v0, q0); @@ -1819,7 +1819,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -1827,7 +1827,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCMEQQD(v0, v0, v0); // 0 if NAN, 1 if not NAN } VFDIVQD(q1, q1, q0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(v1, q1, q1); // 0 => out is NAN VBICQ(v1, v0, v1); // forget it in any input was a NAN already VSHLQ_64(v1, v1, 63); // only keep the sign bit @@ -1841,7 +1841,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETEX(v1, 0, 0); // FMIN/FMAX wll not copy the value if v0[x] is NaN // but x86 will copy if either v0[x] or v1[x] is NaN, so lets force a copy if source is NaN - if(!box64_dynarec_fastnan && v0!=v1) { + if(!BOX64ENV(dynarec_fastnan) && v0!=v1) { q0 = fpu_get_scratch(dyn, ninst); VFCMEQQD(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VANDQ(v0, v0, q0); @@ -2261,7 +2261,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGX(q1, 1); GETEX(q0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); v1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -2272,7 +2272,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n VFCMEQQD(v0, v0, v0); // 0 if NAN, 1 if not NAN } VFADDPQD(q1, q1, q0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(v1, q1, q1); // 0 => out is NAN VBICQ(v1, v0, v1); // forget it in any input was a NAN already VSHLQ_64(v1, v1, 63); // only keep the sign bit @@ -2348,7 +2348,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n LSRw_REG(x1, ed, x2); BFIw(xFlags, x1, F_CF, 1); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2375,7 +2375,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; INST_NAME("SHLD Ew, Gw, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); GETGW(x2); GETEW(x1, 0); @@ -2416,7 +2416,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STH(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2443,7 +2443,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; INST_NAME("SHRD Ew, Gw, CL"); SETFLAGS(X_ALL, SF_SET_PENDING); // some flags are left undefined - if(box64_dynarec_safeflags>1) + if(BOX64ENV(dynarec_safeflags)>1) MAYSETFLAGS(); GETGW(x2); GETEW(x1, 0); @@ -2508,7 +2508,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -2544,7 +2544,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STH(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2603,7 +2603,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n IFX(X_CF) { BFXILxw(xFlags, ed, u8, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2623,7 +2623,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n mask = convert_bitmask_xw(1<<u8); ORRxw_mask(ed, ed, (mask>>12)&1, mask&0x3F, (mask>>6)&0x3F); EWBACK; - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2642,7 +2642,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } BFCxw(ed, u8, 1); EWBACK; - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2662,7 +2662,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n mask = convert_bitmask_xw(1<<u8); EORxw_mask(ed, ed, (mask>>12)&1, mask&0x3F, (mask>>6)&0x3F); EWBACK; - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -2703,7 +2703,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STH(ed, wback, fixedaddress); SMWRITE(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -3134,7 +3134,7 @@ uintptr_t dynarec64_660F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFCVTZSQD(v0, v1); // convert double -> int64 SQXTN_32(v0, v0); // convert int64 -> int32 with saturation in lower part, RaZ high part } else { diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c index f7e41c3e..fbe4b4c7 100644 --- a/src/dynarec/arm64/dynarec_arm64_67.c +++ b/src/dynarec/arm64/dynarec_arm64_67.c @@ -1488,7 +1488,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1522,7 +1522,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } IFX(X_AF | X_PF | X_ZF | X_SF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // to avoid noise during test MOV32w(x3, (1<<F_ZF)|(1<<F_AF)|(1<<F_PF)|(1<<F_SF)); BICw(xFlags, xFlags, x3); @@ -1567,7 +1567,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -1609,7 +1609,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } SET_DFNONE(); IFX(X_AF | X_SF | X_CF | X_PF | X_ZF | X_OF) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { MOV32w(x1, (1<<F_AF) | (1<<F_SF) | (1<<F_CF) | (1<<F_PF) | (1<<F_ZF) | (1<<F_OF)); BICw(xFlags, xFlags, x1); } @@ -1635,7 +1635,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 2: // CALL Ed INST_NAME("CALL Ed"); - PASS2IF((box64_dynarec_safeflags>1) || + PASS2IF((BOX64ENV(dynarec_safeflags)>1) || ((ninst && dyn->insts[ninst-1].x64.set_flags) || ((ninst>1) && dyn->insts[ninst-2].x64.set_flags)), 1) { @@ -1644,7 +1644,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin SETFLAGS(X_ALL, SF_SET_NODF); //Hack to put flag in "don't care" state } GETED32(0); - if(box64_dynarec_callret && box64_dynarec_bigblock>1) { + if(BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock)>1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -1652,7 +1652,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin *ok = 0; } GETIP_(addr); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if(addr < (dyn->start+dyn->isize)) { @@ -1669,7 +1669,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); - if(box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if(BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); diff --git a/src/dynarec/arm64/dynarec_arm64_67_avx.c b/src/dynarec/arm64/dynarec_arm64_67_avx.c index 6dcf16bf..dbb32abd 100644 --- a/src/dynarec/arm64/dynarec_arm64_67_avx.c +++ b/src/dynarec/arm64/dynarec_arm64_67_avx.c @@ -132,7 +132,7 @@ uintptr_t dynarec64_67_AVX(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int } else {DEFAULT;} - if((*ok==-1) && (box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1)) { + if((*ok==-1) && (BOX64ENV(dynarec_log)>=LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing)==1)) { dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128<<vex.l, avx_prefix_string(vex.p), avx_map_string(vex.m), opcode); } return addr; diff --git a/src/dynarec/arm64/dynarec_arm64_avx.c b/src/dynarec/arm64/dynarec_arm64_avx.c index 0fa47ec0..ad90c319 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx.c +++ b/src/dynarec/arm64/dynarec_arm64_avx.c @@ -71,7 +71,7 @@ uintptr_t dynarec64_AVX(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int ni addr = dynarec64_AVX_F3_0F38(dyn, addr, ip, ninst, vex, ok, need_epilog); else {DEFAULT;} - if((*ok==-1) && (box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1)) { + if((*ok==-1) && (BOX64ENV(dynarec_log)>=LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing)==1)) { dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128<<vex.l, avx_prefix_string(vex.p), avx_map_string(vex.m), opcode); } return addr; diff --git a/src/dynarec/arm64/dynarec_arm64_avx_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_0f.c index 2cdc6e51..8c333f7d 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_0f.c @@ -490,7 +490,7 @@ uintptr_t dynarec64_AVX_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x5D: INST_NAME("VMINPS Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { @@ -498,7 +498,7 @@ uintptr_t dynarec64_AVX_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int // FMIN/FMAX wll not copy a NaN if either is NaN // but x86 will copy src2 if either value is NaN, so lets force a copy of Src2 (Ex) if result is NaN VFMINQS(v0, v2, v1); - if(!box64_dynarec_fastnan && (v2!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v2!=v1)) { VFCMEQQS(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN } @@ -518,7 +518,7 @@ uintptr_t dynarec64_AVX_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int case 0x5F: INST_NAME("VMAXPS Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { @@ -526,7 +526,7 @@ uintptr_t dynarec64_AVX_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int // FMIN/FMAX wll not copy a NaN if either is NaN // but x86 will copy src2 if either value is NaN, so lets force a copy of Src2 (Ex) if result is NaN VFMAXQS(v0, v2, v1); - if(!box64_dynarec_fastnan && (v2!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v2!=v1)) { VFCMEQQS(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN } @@ -568,7 +568,7 @@ uintptr_t dynarec64_AVX_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int INST_NAME("VLDMXCSR Md"); GETED(0); STRw_U12(ed, xEmu, offsetof(x64emu_t, mxcsr)); - if(box64_sse_flushto0) { + if(BOX64ENV(sse_flushto0)) { MRS_fpcr(x1); // get fpscr LSRw_IMM(x3, ed, 15); // get FZ bit BFIw(x1, x3, 24, 1); // inject FZ bit diff --git a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c index d07f6d6f..da34d5f7 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_0f38.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_0f38.c @@ -112,7 +112,7 @@ uintptr_t dynarec64_AVX_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, i BFIw(xFlags, x3, F_SF, 1); } IFX(X_OF) BFCw(xFlags, F_OF, 1); - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) BFCw(xFlags, F_AF, 1); IFX(X_PF) BFCw(xFlags, F_PF, 1); } diff --git a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c index b9ae6152..570098e4 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_66_0f.c @@ -295,13 +295,13 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x51: INST_NAME("VSQRTPD Gx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { d0 = fpu_get_scratch(dyn, ninst); d1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_EX(v0, v1, 0); } else { GETGY_empty_EY(v0, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN VFCMEQQD(d0, v1, v1); // 0 if NAN, 1 if not NAN VFSQRTQD(v0, v1); @@ -359,19 +359,19 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x58: INST_NAME("VADDPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN VFMAXQD(q0, v2, v1); // propagate NAN VFCMEQQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } VFADDQD(v0, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(q1, v0, v0); // 0 => out is NAN VBICQ(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -383,19 +383,19 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x59: INST_NAME("VMULPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN VFMAXQD(q0, v2, v1); // propagate NAN VFCMEQQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } VFMULQD(v0, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(q1, v0, v0); // 0 => out is NAN VBICQ(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -409,7 +409,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround==2) { + if(BOX64ENV(dynarec_fastround)==2) { FCVTXN(v0, v1); } else { u8 = sse_setround(dyn, ninst, x1, x2, x4); @@ -418,7 +418,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, } if(vex.l) { GETEY(v1); - if(box64_dynarec_fastround==2) { + if(BOX64ENV(dynarec_fastround)==2) { FCVTXN2(v0, v1); } else { FCVTN2(v0, v1); @@ -431,14 +431,14 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VCVTPS2DQ Gx, Ex"); nextop = F8; u8 = sse_setround(dyn, ninst, x1, x2, x6); - if(!box64_dynarec_fastround && !arm64_frintts) { + if(!BOX64ENV(dynarec_fastround) && !arm64_frintts) { d0 = fpu_get_scratch(dyn, ninst); d1 = fpu_get_scratch(dyn, ninst); MOVI_32_lsl(d1, 0x80, 3); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETEX(v1, 0, 0); GETGX_empty(v0); } else { GETGY_empty_EY(v0, v1); } - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFRINTISQ(v0, v1); VFCVTZSQS(v0, v0); } else { @@ -467,19 +467,19 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x5C: INST_NAME("VSUBPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN VFMAXQD(q0, v1, v2); // propagate NAN VFCMEQQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } VFSUBQD(v0, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(q1, v0, v0); // 0 => out is NAN VBICQ(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -491,14 +491,14 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x5D: INST_NAME("VMINPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) + if(!BOX64ENV(dynarec_fastnan)) q0 = fpu_get_scratch(dyn, ninst); for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } // FMIN/FMAX wll not copy a NaN if either is NaN // but x86 will copy src2 if either value is NaN, so lets force a copy of Src2 (Ex) if result is NaN VFMINQD(v0, v2, v1); - if(!box64_dynarec_fastnan && (v2!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v2!=v1)) { VFCMEQQD(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN } @@ -508,19 +508,19 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x5E: INST_NAME("DIVPD Gx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN VFMAXQD(q0, v2, v1); // propagate NAN VFCMEQQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } VFDIVQD(v0, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(q1, v0, v0); // 0 => out is NAN VBICQ(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -532,7 +532,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x5F: INST_NAME("VMAXPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { @@ -540,7 +540,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, // FMIN/FMAX wll not copy a NaN if either is NaN // but x86 will copy src2 if either value is NaN, so lets force a copy of Src2 (Ex) if result is NaN VFMAXQD(v0, v2, v1); - if(!box64_dynarec_fastnan && (v2!=v1)) { + if(!BOX64ENV(dynarec_fastnan) && (v2!=v1)) { VFCMEQQD(q0, v0, v0); // 0 is NaN, 1 is not NaN, so MASK for NaN VBIFQ(v0, v1, q0); // copy dest where source is NaN } @@ -1125,13 +1125,13 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, case 0x7C: INST_NAME("VHADDPD Gx, Vx, Ex"); nextop = F8; - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_VXEX(v0, v2, v1, 0); } else { GETGY_empty_VYEY(v0, v2, v1); } - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { // check if any input value was NAN // but need to mix low/high part VTRNQ1_64(q0, v2, v1); @@ -1140,7 +1140,7 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, VFCMEQQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } VFADDPQD(v0, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { VFCMEQQD(q1, v0, v0); // 0 => out is NAN VBICQ(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -1616,11 +1616,11 @@ uintptr_t dynarec64_AVX_66_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, GETEX_Y(v1, 0, 0); GETGX_empty(v0); } else { - if(box64_dynarec_fastround) + if(BOX64ENV(dynarec_fastround)) d0 = fpu_get_scratch(dyn, ninst); GETEY(v1); } - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFCVTZSQD(l?d0:v0, v1); // convert double -> int64 if(!l) SQXTN_32(v0, v0); // convert int64 -> int32 with saturation in lower part, RaZ high part diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c index e8858014..8ee698ab 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f2_0f.c @@ -140,13 +140,13 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); } FCVTZSxwD(gd, q0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -161,7 +161,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); @@ -171,7 +171,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, FRINTID(d1, q0); x87_restoreround(dyn, ninst, u8); FCVTZSxwD(gd, d1); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -188,14 +188,14 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, d1 = fpu_get_scratch(dyn, ninst); GETEXSD(v1, 0, 0); GETGX_empty_VX(v0, v2); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN FCMEQD(q0, v1, v1); // 0 if NAN, 1 if not NAN } FSQRTD(d1, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { FCMEQD(q1, d1, d1); // 0 => out is NAN VBIC(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -240,7 +240,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, d1 = fpu_get_scratch(dyn, ninst); GETEXSD(v1, 0, 0); GETGX_empty_VX(v0, v2); - if(box64_dynarec_fastround==2) { + if(BOX64ENV(dynarec_fastround)==2) { FCVT_S_D(d1, v1); } else { u8 = sse_setround(dyn, ninst, x1, x2, x3); @@ -288,7 +288,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, d1 = fpu_get_scratch(dyn, ninst); GETEXSD(v1, 0, 0); GETGX_empty_VX(v0, v2); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { q0 = fpu_get_scratch(dyn, ninst); q1 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -296,7 +296,7 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, FCMEQD(q0, q0, q0); // 0 if NAN, 1 if not NAN } FDIVD(d1, v2, v1); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { FCMEQD(q1, d1, d1); // 0 => out is NAN VBIC(q1, q0, q1); // forget it in any input was a NAN already VSHLQ_64(q1, q1, 63); // only keep the sign bit @@ -418,12 +418,12 @@ uintptr_t dynarec64_AVX_F2_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, if(!l) { GETEX_Y(v1, 0, 0); GETGX_empty(v0); - if(!box64_dynarec_fastround || vex.l) + if(!BOX64ENV(dynarec_fastround) || vex.l) d0 = fpu_get_scratch(dyn, ninst); } else { GETEY(v1); } - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFRINTIDQ(l?d0:v0, v1); VFCVTNSQD(l?d0:v0, l?d0:v0); // convert double -> int64 if(!l) diff --git a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c index cb7d7cdb..eed9fb59 100644 --- a/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_avx_f3_0f.c @@ -140,13 +140,13 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETGD; GETEXSS(d0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); } FCVTZSxwS(gd, d0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -161,7 +161,7 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, nextop = F8; GETGD; GETEXSS(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); @@ -171,7 +171,7 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, FRINTIS(d1, q0); x87_restoreround(dyn, ninst, u8); FCVTZSxwS(gd, d1); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -286,13 +286,13 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, INST_NAME("VCVTTPS2DQ Gx, Ex"); nextop = F8; d0 = fpu_get_scratch(dyn, ninst); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); ORRw_mask(x4, xZR, 1, 0); //0x80000000 } for(int l=0; l<1+vex.l; ++l) { if(!l) { GETGX_empty_EX(v0, v1, 0); } else { GETGY_empty_EY(v0, v1); } - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFCVTZSQS(v0, v1); } else { BFCw(x5, FPSR_IOC, 1); // reset IOC bit diff --git a/src/dynarec/arm64/dynarec_arm64_d8.c b/src/dynarec/arm64/dynarec_arm64_d8.c index 826cad7d..129fe86e 100644 --- a/src/dynarec/arm64/dynarec_arm64_d8.c +++ b/src/dynarec/arm64/dynarec_arm64_d8.c @@ -52,14 +52,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FADD ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FADDS(v1, v1, v2); } else { FADDD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xC8: @@ -73,14 +73,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FMUL ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FMULS(v1, v1, v2); } else { FMULD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xD0: @@ -131,14 +131,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUB ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v1, v2); } else { FSUBD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xE8: @@ -152,14 +152,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUBR ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v2, v1); } else { FSUBD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xF0: @@ -173,14 +173,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIV ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v1, v2); } else { FDIVD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xF8: @@ -194,14 +194,14 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIVR ST0, STx"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v2 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v2, v1); } else { FDIVD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; default: @@ -215,7 +215,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FADDS(v1, v1, s0); @@ -223,7 +223,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FADDD(v1, v1, s0); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 1: @@ -232,7 +232,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FMULS(v1, v1, s0); @@ -240,7 +240,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FMULD(v1, v1, s0); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 2: @@ -278,7 +278,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FSUBS(v1, v1, s0); @@ -286,7 +286,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FSUBD(v1, v1, s0); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 5: @@ -295,7 +295,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FSUBS(v1, s0, v1); @@ -303,7 +303,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FSUBD(v1, s0, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 6: @@ -312,7 +312,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FDIVS(v1, v1, s0); @@ -320,7 +320,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FDIVD(v1, v1, s0); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 7: @@ -329,7 +329,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(s0, ed, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); if(ST_IS_F(0)) { FDIVS(v1, s0, v1); @@ -337,7 +337,7 @@ uintptr_t dynarec64_D8(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin FCVT_D_S(s0, s0); FDIVD(v1, s0, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; default: diff --git a/src/dynarec/arm64/dynarec_arm64_d9.c b/src/dynarec/arm64/dynarec_arm64_d9.c index c1961a01..0fc54e18 100644 --- a/src/dynarec/arm64/dynarec_arm64_d9.c +++ b/src/dynarec/arm64/dynarec_arm64_d9.c @@ -291,11 +291,11 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization\n"); i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 0); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_ftan, -1, box64_dynarec_fastround ? 0 : u8); + CALL_(native_ftan, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); x87_unstackcount(dyn, ninst, x1, i1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); if(PK(0)==0xdd && PK(1)==0xd8) { MESSAGE(LOG_DUMP, "Optimized next DD D8 fstp st0, st0, not emitting 1\n"); @@ -316,10 +316,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 0); x87_forget(dyn, ninst, x1, x2, 1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_fpatan, -1, box64_dynarec_fastround ? 0 : u8); - if(!box64_dynarec_fastround) + CALL_(native_fpatan, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); x87_unstackcount(dyn, ninst, x1, i1); X87_POP_OR_FAIL(dyn, ninst, x3); @@ -426,14 +426,14 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 0xFA: INST_NAME("FSQRT"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, X87_ST0); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSQRTS(v1, v1); } else { FSQRTD(v1, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xFB: @@ -442,10 +442,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin X87_PUSH_EMPTY_OR_FAIL(dyn, ninst, 0); i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_fsincos, -1, box64_dynarec_fastround ? 0 : u8); - if(!box64_dynarec_fastround) + CALL_(native_fsincos, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); x87_unstackcount(dyn, ninst, x1, i1); break; @@ -473,10 +473,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 0); x87_forget(dyn, ninst, x1, x2, 1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_fscale, -1, box64_dynarec_fastround ? 0 : u8); - if(!box64_dynarec_fastround) + CALL_(native_fscale, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); x87_unstackcount(dyn, ninst, x1, i1); break; @@ -485,10 +485,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization\n"); i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 0); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_fsin, -1, box64_dynarec_fastround ? 0 : u8); - if(!box64_dynarec_fastround) + CALL_(native_fsin, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); x87_unstackcount(dyn, ninst, x1, i1); break; @@ -497,10 +497,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MESSAGE(LOG_DUMP, "Need Optimization\n"); i1 = x87_stackcount(dyn, ninst, x1); x87_forget(dyn, ninst, x1, x2, 0); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); - CALL_(native_fcos, -1, box64_dynarec_fastround ? 0 : u8); - if(!box64_dynarec_fastround) + CALL_(native_fcos, -1, BOX64ENV(dynarec_fastround) ? 0 : u8); + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); x87_unstackcount(dyn, ninst, x1, i1); break; @@ -511,7 +511,7 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin switch((nextop>>3)&7) { case 0: INST_NAME("FLD ST0, float[ED]"); - X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, box64_dynarec_x87double?NEON_CACHE_ST_D:NEON_CACHE_ST_F); + X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, BOX64ENV(dynarec_x87double)?NEON_CACHE_ST_D:NEON_CACHE_ST_F); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); VLD32(v1, ed, fixedaddress); if(!ST_IS_F(0)) { @@ -525,10 +525,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin s0 = v1; else { s0 = fpu_get_scratch(dyn, ninst); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FCVT_S_D(s0, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); } addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); @@ -539,10 +539,10 @@ uintptr_t dynarec64_D9(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_F); addr = geted(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<2, 3, rex, NULL, 0, 0); if(!ST_IS_F(0)) { - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FCVT_S_D(v1, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); } VST32(v1, ed, fixedaddress); diff --git a/src/dynarec/arm64/dynarec_arm64_da.c b/src/dynarec/arm64/dynarec_arm64_da.c index 6e4bb528..f6668985 100644 --- a/src/dynarec/arm64/dynarec_arm64_da.c +++ b/src/dynarec/arm64/dynarec_arm64_da.c @@ -149,10 +149,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FADDD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 1: @@ -163,10 +163,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FMULD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 2: @@ -200,10 +200,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FSUBD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 5: @@ -214,10 +214,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FSUBD(v1, v2, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 6: @@ -228,10 +228,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FDIVD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 7: @@ -242,10 +242,10 @@ uintptr_t dynarec64_DA(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin VLD32(v2, ed, fixedaddress); SXTL_32(v2, v2); // i32 -> i64 SCVTFDD(v2, v2); // i64 -> double - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x5, x4); FDIVD(v1, v2, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; } diff --git a/src/dynarec/arm64/dynarec_arm64_db.c b/src/dynarec/arm64/dynarec_arm64_db.c index 8e5d55b9..1a655889 100644 --- a/src/dynarec/arm64/dynarec_arm64_db.c +++ b/src/dynarec/arm64/dynarec_arm64_db.c @@ -300,7 +300,7 @@ uintptr_t dynarec64_DB(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRx_U12(x5, ed, 0); STRH_U12(x6, ed, 8); } else { - if(box64_x87_no80bits) { + if(BOX64ENV(x87_no80bits)) { X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, NEON_CACHE_ST_D); VLDR64_U12(v1, ed, fixedaddress); } else { @@ -318,12 +318,12 @@ uintptr_t dynarec64_DB(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 7: INST_NAME("FSTP tbyte"); - if(box64_x87_no80bits) { + if(BOX64ENV(x87_no80bits)) { v1 = x87_get_st(dyn, ninst, x1, x2, 0, NEON_CACHE_ST_D); addr = geted(dyn, addr, ninst, nextop, &wback, x2, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VST64(v1, wback, fixedaddress); } else { - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { x87_forget(dyn, ninst, x1, x3, 0); addr = geted(dyn, addr, ninst, nextop, &ed, x1, &fixedaddress, NULL, 0, 0, rex, NULL, 0, 0); if(ed!=x1) {MOVx_REG(x1, ed);} diff --git a/src/dynarec/arm64/dynarec_arm64_dc.c b/src/dynarec/arm64/dynarec_arm64_dc.c index 2fbac9d8..1e068277 100644 --- a/src/dynarec/arm64/dynarec_arm64_dc.c +++ b/src/dynarec/arm64/dynarec_arm64_dc.c @@ -50,14 +50,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FADD STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FADDS(v1, v1, v2); } else { FADDD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xC8: @@ -71,14 +71,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FMUL STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FMULS(v1, v1, v2); } else { FMULD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xD0: @@ -129,14 +129,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUBR STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v2, v1); } else { FSUBD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xE8: @@ -150,14 +150,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUB STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v1, v2); } else { FSUBD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xF0: @@ -171,14 +171,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIVR STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v2, v1); } else { FDIVD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 0xF8: @@ -192,14 +192,14 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIV STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v1, v2); } else { FDIVD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; default: @@ -213,10 +213,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FADDD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 1: @@ -225,10 +225,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FMULD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 2: @@ -256,10 +256,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FSUBD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 5: @@ -268,10 +268,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FSUBD(v1, v2, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 6: @@ -280,10 +280,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FDIVD(v1, v1, v2); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; case 7: @@ -292,10 +292,10 @@ uintptr_t dynarec64_DC(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin v2 = fpu_get_scratch(dyn, ninst); addr = geted(dyn, addr, ninst, nextop, &wback, x3, &fixedaddress, &unscaled, 0xfff<<3, 7, rex, NULL, 0, 0); VLD64(v2, wback, fixedaddress); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); FDIVD(v1, v2, v1); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); break; } diff --git a/src/dynarec/arm64/dynarec_arm64_de.c b/src/dynarec/arm64/dynarec_arm64_de.c index 8dcc16c2..9c4dcc81 100644 --- a/src/dynarec/arm64/dynarec_arm64_de.c +++ b/src/dynarec/arm64/dynarec_arm64_de.c @@ -50,14 +50,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FADDP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FADDS(v1, v1, v2); } else { FADDD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; @@ -72,14 +72,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FMULP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FMULS(v1, v1, v2); } else { FMULD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; @@ -126,14 +126,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUBRP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v2, v1); } else { FSUBD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; @@ -148,14 +148,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FSUBP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FSUBS(v1, v1, v2); } else { FSUBD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; @@ -170,14 +170,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIVRP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v2, v1); } else { FDIVD(v1, v2, v1); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; @@ -192,14 +192,14 @@ uintptr_t dynarec64_DE(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin INST_NAME("FDIVP STx, ST0"); v2 = x87_get_st(dyn, ninst, x1, x2, 0, X87_COMBINE(0, nextop&7)); v1 = x87_get_st(dyn, ninst, x1, x2, nextop&7, X87_COMBINE(0, nextop&7)); - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) u8 = x87_setround(dyn, ninst, x1, x2, x4); if(ST_IS_F(0)) { FDIVS(v1, v1, v2); } else { FDIVD(v1, v1, v2); } - if(!box64_dynarec_fastround) + if(!BOX64ENV(dynarec_fastround)) x87_restoreround(dyn, ninst, u8); X87_POP_OR_FAIL(dyn, ninst, x3); break; diff --git a/src/dynarec/arm64/dynarec_arm64_emit_math.c b/src/dynarec/arm64/dynarec_arm64_emit_math.c index 34687f8d..a20af739 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_math.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_math.c @@ -83,7 +83,7 @@ void emit_add32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 void emit_add32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5) { MAYUSE(s5); - if((s1==xRSP) && (box64_dynarec_safeflags<2) && (!dyn->insts || (dyn->insts[ninst].x64.gen_flags==X_PEND) || (!box64_dynarec_df && (dyn->insts[ninst].x64.gen_flags==X_ALL)))) + if((s1==xRSP) && (BOX64ENV(dynarec_safeflags)<2) && (!dyn->insts || (dyn->insts[ninst].x64.gen_flags==X_PEND) || (!BOX64ENV(dynarec_df) && (dyn->insts[ninst].x64.gen_flags==X_ALL)))) { // special case when doing math on ESP and only PEND is needed: ignoring it! if(c>=0 && c<0x1000) { @@ -224,7 +224,7 @@ void emit_sub32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 void emit_sub32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5) { MAYUSE(s5); - if(s1==xRSP && (box64_dynarec_safeflags<2) && (!dyn->insts || (dyn->insts[ninst].x64.gen_flags==X_PEND) || (!box64_dynarec_df && (dyn->insts[ninst].x64.gen_flags==X_ALL)))) + if(s1==xRSP && (BOX64ENV(dynarec_safeflags)<2) && (!dyn->insts || (dyn->insts[ninst].x64.gen_flags==X_PEND) || (!BOX64ENV(dynarec_df) && (dyn->insts[ninst].x64.gen_flags==X_ALL)))) { // special case when doing math on RSP and only PEND is needed: ignoring it! if(c>=0 && c<0x1000) { diff --git a/src/dynarec/arm64/dynarec_arm64_emit_shift.c b/src/dynarec/arm64/dynarec_arm64_emit_shift.c index fa779a29..058d4440 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_shift.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_shift.c @@ -68,7 +68,7 @@ void emit_shl32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 BFIw(xFlags, s4, F_ZF, 1); } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -124,7 +124,7 @@ void emit_shl32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i BFCw(xFlags, F_OF, 1); } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -183,7 +183,7 @@ void emit_shr32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -237,7 +237,7 @@ void emit_shr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i BFCw(xFlags, F_SF, 1); } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -291,7 +291,7 @@ void emit_sar32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -338,10 +338,10 @@ void emit_sar32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i } } IFX(X_OF) - if(c==1 || box64_dynarec_test) { + if (c == 1 || BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); - } - if(box64_dynarec_test) + } + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -382,7 +382,7 @@ void emit_shl8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) BFIw(xFlags, s4, F_OF, 1); } COMP_ZFSF(s1, 8) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -423,9 +423,10 @@ void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s BFCw(xFlags, F_OF, 1); } } - if(box64_dynarec_test) IFX(X_AF) { - BFCw(xFlags, F_AF, 1); - } + if (BOX64ENV(dynarec_test)) + IFX (X_AF) { + BFCw(xFlags, F_AF, 1); + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s4); } @@ -448,9 +449,10 @@ void emit_shl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s IFX(X_SF) { IFNATIVE(NF_SF) {} else BFCw(xFlags, F_SF, 1); } - if(box64_dynarec_test) IFX(X_AF) { - BFCw(xFlags, F_AF, 1); - } + if (BOX64ENV(dynarec_test)) + IFX (X_AF) { + BFCw(xFlags, F_AF, 1); + } IFX(X_ZF) { IFNATIVE(NF_EQ) {} else { ORRw_mask(xFlags, xFlags, 26, 0); //1<<F_ZF @@ -492,7 +494,7 @@ void emit_shr8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); } COMP_ZFSF(s1, 8) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -525,7 +527,7 @@ void emit_shr8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if(c==1) { LSRw(s4, s1, 7); BFIw(xFlags, s4, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -534,7 +536,7 @@ void emit_shr8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s STRB_U12(s1, xEmu, offsetof(x64emu_t, res)); } COMP_ZFSF(s1, 8) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -568,7 +570,7 @@ void emit_sar8(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) //CBNZw(s4, 4+4); BFCw(xFlags, F_OF, 1); } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -599,9 +601,9 @@ void emit_sar8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if(c<8) { COMP_ZFSF(s1, 8) IFX(X_OF) - if((c==1) || box64_dynarec_test) { + if ((c == 1) || BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); - } + } IFX(X_PF) { emit_pf(dyn, ninst, s1, s4); } @@ -619,7 +621,7 @@ void emit_sar8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s } } } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -653,7 +655,7 @@ void emit_shl16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) BFIw(xFlags, s4, F_OF, 1); } COMP_ZFSF(s1, 16) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -690,13 +692,14 @@ void emit_shl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int IFX2(X_SF, && !arm64_flagm) {} else {LSRw(s3, s1, 15);} // use COMP_ZFSF operation EORw_REG(s4, s3, xFlags); // CF is set if OF is asked BFIw(xFlags, s4, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } - if(box64_dynarec_test) IFX(X_AF) { - BFCw(xFlags, F_AF, 1); - } + if (BOX64ENV(dynarec_test)) + IFX (X_AF) { + BFCw(xFlags, F_AF, 1); + } IFX(X_PF) { if(c>7) { // the 0xff area will be 0, so PF is known @@ -723,9 +726,10 @@ void emit_shl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int IFX(X_SF) { IFNATIVE(NF_SF) {} else BFCw(xFlags, F_SF, 1); } - if(box64_dynarec_test) IFX(X_AF) { - BFCw(xFlags, F_AF, 1); - } + if (BOX64ENV(dynarec_test)) + IFX (X_AF) { + BFCw(xFlags, F_AF, 1); + } IFX(X_ZF) { IFNATIVE(NF_EQ) {} else { ORRw_mask(xFlags, xFlags, 26, 0); //1<<F_ZF @@ -763,7 +767,7 @@ void emit_shr16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); } COMP_ZFSF(s1, 16) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -797,7 +801,7 @@ void emit_shr16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if(c==1) { LSRw(s4, s1, 15); BFIw(xFlags, s4, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -806,7 +810,7 @@ void emit_shr16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); } COMP_ZFSF(s1, 16) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -840,7 +844,7 @@ void emit_sar16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s3, int s4) BFCw(xFlags, F_OF, 1); } COMP_ZFSF(s1, 16) - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -871,10 +875,10 @@ void emit_sar16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int } COMP_ZFSF(s1, 16) IFX(X_OF) - if((c==1) || box64_dynarec_test) { + if ((c == 1) || BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); - } - if(box64_dynarec_test) + } + if (BOX64ENV(dynarec_test)) IFX(X_AF) { BFCw(xFlags, F_AF, 1); } @@ -899,7 +903,7 @@ void emit_rol32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i if(c==1) { EORxw_REG_LSR(s3, s1, s1, rex.w?63:31); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -923,7 +927,7 @@ void emit_ror32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i LSRxw(s3, s1, rex.w?62:30); EORxw_REG_LSR(s3, s3, s3, 1); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -950,7 +954,7 @@ void emit_rol8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if(c==1) { EORw_REG_LSR(s3, s1, s1, 7); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -977,7 +981,7 @@ void emit_ror8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s LSRw(s3, s1, 6); EORw_REG_LSR(s3, s3, s3, 1); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1004,7 +1008,7 @@ void emit_rol16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if(c==1) { EORw_REG_LSR(s3, s1, s1, 15); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1031,7 +1035,7 @@ void emit_ror16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int LSRw(s3, s1, 14); EORw_REG_LSR(s3, s3, s3, 1); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1065,7 +1069,7 @@ void emit_rcl8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if(c==1) { EORw_REG_LSR(s3, s3, s1, 7); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1086,7 +1090,7 @@ void emit_rcr8c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int s if(c==1) { EORw_REG_LSR(s3, xFlags, s1, 7); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1127,7 +1131,7 @@ void emit_rcl16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if(c==1) { EORw_REG_LSR(s3, s3, s1, 15); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1148,7 +1152,7 @@ void emit_rcr16c(dynarec_arm_t* dyn, int ninst, int s1, uint32_t c, int s3, int if(c==1) { EORw_REG_LSR(s3, xFlags, s1, 15); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } MOVw_REG(s3, wFlags); @@ -1189,7 +1193,7 @@ void emit_rcl32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i if(c==1) { EORxw_REG_LSR(s3, s3, s1, rex.w?63:31); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1207,7 +1211,7 @@ void emit_rcr32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, uint32_t c, i if(c==1) { EORxw_REG_LSR(s3, xFlags, s1, rex.w?63:31); BFIw(xFlags, s3, F_OF, 1); - } else if(box64_dynarec_test) { + } else if (BOX64ENV(dynarec_test)) { BFCw(xFlags, F_OF, 1); } } @@ -1278,7 +1282,7 @@ void emit_shrd32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, uint BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} IFX2(X_OF, && (c>1)) {BFCw(xFlags, F_OF, 1);} } @@ -1332,7 +1336,7 @@ void emit_shld32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, uint BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} IFX2(X_OF, && (c>1)) {BFCw(xFlags, F_OF, 1);} } @@ -1373,13 +1377,13 @@ void emit_shrd32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_OF) { - if(box64_dynarec_test) { - CMPSw_U12(s5, 1); + if (BOX64ENV(dynarec_test)) { + CMPSw_U12(s5, 1); EORxw_REG_LSR(s3, s4, s1, rex.w?63:31); // OF is set if sign changed CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); } else { - //CMPSw_U12(s5, 1); + // CMPSw_U12(s5, 1); EORxw_REG_LSR(s3, s4, s1, rex.w?63:31); // OF is set if sign changed // CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); @@ -1401,7 +1405,7 @@ void emit_shrd32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} } IFX(X_PF) { @@ -1439,13 +1443,13 @@ void emit_shld32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s STRxw_U12(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_OF) { - if(box64_dynarec_test) { - CMPSw_U12(s5, 1); + if (BOX64ENV(dynarec_test)) { + CMPSw_U12(s5, 1); EORx_REG_LSR(s3, s4, s1, rex.w?63:31); // OF is set if sign changed CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); } else { - //CMPSw_U12(s5, 1); + // CMPSw_U12(s5, 1); EORx_REG_LSR(s3, s4, s1, rex.w?63:31); // OF is set if sign changed // CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); @@ -1467,7 +1471,7 @@ void emit_shld32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s BFIx(xFlags, s4, F_SF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} } IFX(X_PF) { @@ -1513,7 +1517,7 @@ void emit_shrd16c(dynarec_arm_t* dyn, int ninst, int s1, int s2, uint32_t c, int BFIw(xFlags, s3, F_OF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} IFX2(X_OF, && (c>1)) {BFCw(xFlags, F_OF, 1);} } @@ -1547,13 +1551,13 @@ void emit_shrd16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s5, int s3, STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_OF) { - if(box64_dynarec_test) { - CMPSw_U12(s5, 1); + if (BOX64ENV(dynarec_test)) { + CMPSw_U12(s5, 1); EORw_REG_LSR(s3, s4, s1, 15); // OF is set if sign changed CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); } else { - //CMPSw_U12(s5, 1); + // CMPSw_U12(s5, 1); EORw_REG_LSR(s3, s4, s1, 15); // OF is set if sign changed // CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); @@ -1608,7 +1612,7 @@ void emit_shld16c(dynarec_arm_t* dyn, int ninst, int s1, int s2, uint32_t c, int BFIw(xFlags, s3, F_OF, 1); } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} IFX2(X_OF, && (c>1)) {BFCw(xFlags, F_OF, 1);} } @@ -1645,20 +1649,20 @@ void emit_shld16(dynarec_arm_t* dyn, int ninst, int s1, int s2, int s5, int s3, STRH_U12(s1, xEmu, offsetof(x64emu_t, res)); } IFX(X_OF) { - if(box64_dynarec_test) { - CMPSw_U12(s5, 1); + if (BOX64ENV(dynarec_test)) { + CMPSw_U12(s5, 1); EORw_REG_LSR(s3, s4, s1, 15); // OF is set if sign changed CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); } else { - //CMPSw_U12(s5, 1); + // CMPSw_U12(s5, 1); EORw_REG_LSR(s3, s4, s1, 15); // OF is set if sign changed // CSELw(s3, s3, xZR, cEQ); BFIw(xFlags, s3, F_OF, 1); } } COMP_ZFSF(s1, 16) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_AF) {BFCw(xFlags, F_AF, 1);} } IFX(X_PF) { diff --git a/src/dynarec/arm64/dynarec_arm64_f0.c b/src/dynarec/arm64/dynarec_arm64_f0.c index 588e898b..e0e74535 100644 --- a/src/dynarec/arm64/dynarec_arm64_f0.c +++ b/src/dynarec/arm64/dynarec_arm64_f0.c @@ -254,7 +254,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CBNZw_MARKLOCK(x4); SMDMB(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -447,7 +447,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CBNZw_MARKLOCK(x4); SMDMB(); } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -486,7 +486,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin BFXILxw(xFlags, x1, u8&7, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -505,7 +505,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILxw(xFlags, ed, u8, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -527,7 +527,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILw(xFlags, ed, u8&7, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -552,7 +552,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILxw(xFlags, ed, u8, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -570,7 +570,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin MARKLOCK; LDAXRB(ed, wback); BFXILw(xFlags, ed, u8&7, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -594,7 +594,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILxw(xFlags, ed, u8, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} @@ -615,7 +615,7 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin IFX(X_CF) { BFXILw(xFlags, ed, u8&7, 1); // inject 1 bit from u8 to F_CF (i.e. pos 0) } - if(box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { IFX(X_OF) {BFCw(xFlags, F_OF, 1);} IFX(X_SF) {BFCw(xFlags, F_SF, 1);} IFX(X_AF) {BFCw(xFlags, F_AF, 1);} diff --git a/src/dynarec/arm64/dynarec_arm64_f20f.c b/src/dynarec/arm64/dynarec_arm64_f20f.c index 0a2c49f2..984ebc2e 100644 --- a/src/dynarec/arm64/dynarec_arm64_f20f.c +++ b/src/dynarec/arm64/dynarec_arm64_f20f.c @@ -113,13 +113,13 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); } FCVTZSxwD(gd, q0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -134,7 +134,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); @@ -144,7 +144,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n FRINTID(d1, q0); x87_restoreround(dyn, ninst, u8); FCVTZSxwD(gd, d1); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -209,7 +209,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(v0, 1); d1 = fpu_get_scratch(dyn, ninst); GETEXSD(d0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v1 = fpu_get_scratch(dyn, ninst); FCMLTD_0(v1, d0); SHL_64(v1, v1, 63); @@ -227,7 +227,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(d1, 1); v1 = fpu_get_scratch(dyn, ninst); GETEXSD(d0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); q0 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -249,7 +249,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(d1, 1); v1 = fpu_get_scratch(dyn, ninst); GETEXSD(d0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); q0 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -271,7 +271,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(v0, 1); GETEXSD(d0, 0, 0); d1 = fpu_get_scratch(dyn, ninst); - if(box64_dynarec_fastround==2) { + if(BOX64ENV(dynarec_fastround)==2) { FCVT_S_D(d1, d0); } else { u8 = sse_setround(dyn, ninst, x1, x2, x3); @@ -287,7 +287,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(d1, 1); v1 = fpu_get_scratch(dyn, ninst); GETEXSD(d0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); q0 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -325,7 +325,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(v0, 1); d1 = fpu_get_scratch(dyn, ninst); GETEXSD(v1, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { d0 = fpu_get_scratch(dyn, ninst); q0 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -515,7 +515,7 @@ uintptr_t dynarec64_F20F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { u8 = sse_setround(dyn, ninst, x1, x2, x3); VFRINTIDQ(v0, v1); x87_restoreround(dyn, ninst, u8); diff --git a/src/dynarec/arm64/dynarec_arm64_f30f.c b/src/dynarec/arm64/dynarec_arm64_f30f.c index bbe987e4..45a5c454 100644 --- a/src/dynarec/arm64/dynarec_arm64_f30f.c +++ b/src/dynarec/arm64/dynarec_arm64_f30f.c @@ -131,13 +131,13 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEXSS(d0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); } FCVTZSxwS(gd, d0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -152,7 +152,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETGD; GETEXSS(q0, 0, 0); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); BFCw(x5, FPSR_IOC, 1); // reset IOC bit MSR_fpsr(x5); @@ -162,7 +162,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n FRINTIS(d1, q0); x87_restoreround(dyn, ninst, u8); FCVTZSxwS(gd, d1); - if(!box64_dynarec_fastround) { + if(!BOX64ENV(dynarec_fastround)) { MRS_fpsr(x5); // get back FPSR to check the IOC bit TBZ_NEXT(x5, FPSR_IOC); if(rex.w) { @@ -258,7 +258,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n GETGX(d1, 1); v1 = fpu_get_scratch(dyn, ninst); GETEXSS(d0, 0, 0); - if(!box64_dynarec_fastnan) { + if(!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn, ninst); q0 = fpu_get_scratch(dyn, ninst); // check if any input value was NAN @@ -288,7 +288,7 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n nextop = F8; GETEX(v1, 0, 0) ; GETGX_empty(v0); - if(box64_dynarec_fastround) { + if(BOX64ENV(dynarec_fastround)) { VFCVTZSQS(v0, v1); } else { MRS_fpsr(x5); diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index 2a7a2a09..9d211a51 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -287,7 +287,7 @@ static void neoncache_promote_double_combined(dynarec_arm_t* dyn, int ninst, int } else a = dyn->insts[ninst].n.combined1; int i = neoncache_get_st_f_i64_noback(dyn, ninst, a); - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_combined, ninst=%d combined%c %d i=%d (stack:%d/%d)\n", ninst, (a == dyn->insts[ninst].n.combined2)?'2':'1', a ,i, dyn->insts[ninst].n.stack_push, -dyn->insts[ninst].n.stack_pop); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_combined, ninst=%d combined%c %d i=%d (stack:%d/%d)\n", ninst, (a == dyn->insts[ninst].n.combined2)?'2':'1', a ,i, dyn->insts[ninst].n.stack_push, -dyn->insts[ninst].n.stack_pop); if(i>=0) { dyn->insts[ninst].n.neoncache[i].t = NEON_CACHE_ST_D; if(!dyn->insts[ninst].n.barrier) @@ -304,19 +304,19 @@ static void neoncache_promote_double_internal(dynarec_arm_t* dyn, int ninst, int while(ninst>=0) { a+=dyn->insts[ninst].n.stack_pop; // adjust Stack depth: add pop'd ST (going backward) int i = neoncache_get_st_f_i64(dyn, ninst, a); - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d, a=%d st=%d:%d, i=%d\n", ninst, a, dyn->insts[ninst].n.stack, dyn->insts[ninst].n.stack_next, i); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d, a=%d st=%d:%d, i=%d\n", ninst, a, dyn->insts[ninst].n.stack, dyn->insts[ninst].n.stack_next, i); if(i<0) return; dyn->insts[ninst].n.neoncache[i].t = NEON_CACHE_ST_D; // check combined propagation too if(dyn->insts[ninst].n.combined1 || dyn->insts[ninst].n.combined2) { if(dyn->insts[ninst].n.swapped) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); if (a==dyn->insts[ninst].n.combined1) a = dyn->insts[ninst].n.combined2; else if (a==dyn->insts[ninst].n.combined2) a = dyn->insts[ninst].n.combined1; } else { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_internal, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); neoncache_promote_double_combined(dyn, ninst, maxinst, a); } } @@ -332,19 +332,19 @@ static void neoncache_promote_double_forward(dynarec_arm_t* dyn, int ninst, int while((ninst!=-1) && (ninst<maxinst) && (a>=0)) { a+=dyn->insts[ninst].n.stack_push; // // adjust Stack depth: add push'd ST (going forward) if((dyn->insts[ninst].n.combined1 || dyn->insts[ninst].n.combined2) && dyn->insts[ninst].n.swapped) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); if (a==dyn->insts[ninst].n.combined1) a = dyn->insts[ninst].n.combined2; else if (a==dyn->insts[ninst].n.combined2) a = dyn->insts[ninst].n.combined1; } int i = neoncache_get_st_f_i64_noback(dyn, ninst, a); - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d, a=%d st=%d:%d(%d/%d), i=%d\n", ninst, a, dyn->insts[ninst].n.stack, dyn->insts[ninst].n.stack_next, dyn->insts[ninst].n.stack_push, -dyn->insts[ninst].n.stack_pop, i); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d, a=%d st=%d:%d(%d/%d), i=%d\n", ninst, a, dyn->insts[ninst].n.stack, dyn->insts[ninst].n.stack_next, dyn->insts[ninst].n.stack_push, -dyn->insts[ninst].n.stack_pop, i); if(i<0) return; dyn->insts[ninst].n.neoncache[i].t = NEON_CACHE_ST_D; // check combined propagation too if((dyn->insts[ninst].n.combined1 || dyn->insts[ninst].n.combined2) && !dyn->insts[ninst].n.swapped) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double_forward, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].n.combined1 ,dyn->insts[ninst].n.combined2, a, dyn->insts[ninst].n.stack); neoncache_promote_double_combined(dyn, ninst, maxinst, a); } a-=dyn->insts[ninst].n.stack_pop; // adjust Stack depth: remove pop'd ST (going forward) @@ -360,20 +360,20 @@ static void neoncache_promote_double_forward(dynarec_arm_t* dyn, int ninst, int void neoncache_promote_double(dynarec_arm_t* dyn, int ninst, int a) { int i = neoncache_get_current_st_f_i64(dyn, a); - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d a=%d st=%d i=%d\n", ninst, a, dyn->n.stack, i); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d a=%d st=%d i=%d\n", ninst, a, dyn->n.stack, i); if(i<0) return; dyn->n.neoncache[i].t = NEON_CACHE_ST_D; dyn->insts[ninst].n.neoncache[i].t = NEON_CACHE_ST_D; // check combined propagation too if(dyn->n.combined1 || dyn->n.combined2) { if(dyn->n.swapped) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d swapped! %d/%d vs %d\n", ninst, dyn->n.combined1 ,dyn->n.combined2, a); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d swapped! %d/%d vs %d\n", ninst, dyn->n.combined1 ,dyn->n.combined2, a); if(dyn->n.combined1 == a) a = dyn->n.combined2; else if(dyn->n.combined2 == a) a = dyn->n.combined1; } else { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d combined! %d/%d vs %d\n", ninst, dyn->n.combined1 ,dyn->n.combined2, a); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "neoncache_promote_double, ninst=%d combined! %d/%d vs %d\n", ninst, dyn->n.combined1 ,dyn->n.combined2, a); if(dyn->n.combined1 == a) neoncache_promote_double(dyn, ninst, dyn->n.combined2); else if(dyn->n.combined2 == a) @@ -734,7 +734,7 @@ static register_mapping_t register_mappings[] = { void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t rex) { - if (!box64_dynarec_dump && !box64_dynarec_gdbjit && !box64_dynarec_perf_map) return; + if (!BOX64ENV(dynarec_dump) && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; static char buf[512]; int length = sprintf(buf, "barrier=%d state=%d/%d/%d(%d:%d->%d:%d), %s=%X/%X, use=%X, need=%X/%X, sm=%d(%d/%d)", @@ -805,13 +805,13 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r } } if (memcmp(dyn->insts[ninst].n.neoncache, dyn->n.neoncache, sizeof(dyn->n.neoncache))) { - length += sprintf(buf + length, " %s(Change:", (box64_dynarec_dump > 1) ? "\e[1;91m" : ""); + length += sprintf(buf + length, " %s(Change:", (BOX64ENV(dynarec_dump) > 1) ? "\e[1;91m" : ""); for (int ii = 0; ii < 32; ++ii) if (dyn->insts[ninst].n.neoncache[ii].v != dyn->n.neoncache[ii].v) { length += sprintf(buf + length, " V%d:%s", ii, getCacheName(dyn->n.neoncache[ii].t, dyn->n.neoncache[ii].n)); length += sprintf(buf + length, "->%s", getCacheName(dyn->insts[ninst].n.neoncache[ii].t, dyn->insts[ninst].n.neoncache[ii].n)); } - length += sprintf(buf + length, ")%s", (box64_dynarec_dump > 1) ? "\e[0;32m" : ""); + length += sprintf(buf + length, ")%s", (BOX64ENV(dynarec_dump) > 1) ? "\e[0;32m" : ""); } if (dyn->insts[ninst].n.ymm_used) { length += sprintf(buf + length, " ymmUsed=%04x", dyn->insts[ninst].n.ymm_used); @@ -828,15 +828,15 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r if (dyn->insts[ninst].n.combined1 || dyn->insts[ninst].n.combined2) { length += sprintf(buf + length, " %s:%d/%d", dyn->insts[ninst].n.swapped ? "SWP" : "CMB", dyn->insts[ninst].n.combined1, dyn->insts[ninst].n.combined2); } - if (box64_dynarec_dump) { + if (BOX64ENV(dynarec_dump)) { printf_x64_instruction(rex.is32bits ? my_context->dec32 : my_context->dec, &dyn->insts[ninst].x64, name); dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, %s%s\n", - (box64_dynarec_dump > 1) ? "\e[32m" : "", - (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (box64_dynarec_dump > 1) ? "\e[m" : ""); + (BOX64ENV(dynarec_dump) > 1) ? "\e[32m" : "", + (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (BOX64ENV(dynarec_dump) > 1) ? "\e[m" : ""); } - if (box64_dynarec_gdbjit) { + if (BOX64ENV(dynarec_gdbjit)) { static char buf2[512]; - if (box64_dynarec_gdbjit > 1) { + if (BOX64ENV(dynarec_gdbjit) > 1) { sprintf(buf2, "; %d: %d opcodes, %s", ninst, dyn->insts[ninst].size / 4, buf); dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), buf2); } @@ -849,7 +849,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r } dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name); } - if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) { + if (BOX64ENV(dynarec_perf_map) && BOX64ENV(dynarec_perf_map_fd) != -1) { writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name); } } @@ -1096,7 +1096,7 @@ static void propagateNativeFlags(dynarec_arm_t* dyn, int start) void updateNativeFlags(dynarec_native_t* dyn) { - if(!box64_dynarec_nativeflags) + if(!BOX64ENV(dynarec_nativeflags)) return; // forward check if native flags are used for(int ninst=0; ninst<dyn->size; ++ninst) diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index 7f0594f3..411afdca 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -626,7 +626,7 @@ void ret_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex) POP1z(xRIP); MOVz_REG(x1, xRIP); SMEND(); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { // pop the actual return address for ARM stack LDPx_S7_postindex(xLR, x6, xSP, 16); SUBx_REG(x6, x6, xRIP); // is it the right address? @@ -673,7 +673,7 @@ void retn_to_epilog(dynarec_arm_t* dyn, int ninst, rex_t rex, int n) } MOVz_REG(x1, xRIP); SMEND(); - if(box64_dynarec_callret) { + if(BOX64ENV(dynarec_callret)) { // pop the actual return address for ARM stack LDPx_S7_postindex(xLR, x6, xSP, 16); SUBx_REG(x6, x6, xRIP); // is it the right address? @@ -2609,10 +2609,10 @@ void fpu_reset_cache(dynarec_arm_t* dyn, int ninst, int reset_n) dyn->ymm_zero = dyn->insts[reset_n].ymm0_out; #endif #if STEP == 0 - if(box64_dynarec_dump && dyn->n.x87stack) dynarec_log(LOG_NONE, "New x87stack=%d at ResetCache in inst %d with %d\n", dyn->n.x87stack, ninst, reset_n); + if(BOX64ENV(dynarec_dump) && dyn->n.x87stack) dynarec_log(LOG_NONE, "New x87stack=%d at ResetCache in inst %d with %d\n", dyn->n.x87stack, ninst, reset_n); #endif #if defined(HAVE_TRACE) && (STEP>2) - if(box64_dynarec_dump && 0) //disable for now, need more work + if(BOX64ENV(dynarec_dump) && 0) //disable for now, need more work if(memcmp(&dyn->n, &dyn->insts[reset_n].n, sizeof(neoncache_t))) { MESSAGE(LOG_DEBUG, "Warning, difference in neoncache: reset="); for(int i=0; i<32; ++i) diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 7ce075be..3bf240ab 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -728,8 +728,8 @@ TSTw_mask(xFlags, 0b010110, 0); \ CNEGx(r, r, cNE) -#define ALIGNED_ATOMICxw ((fixedaddress && !(fixedaddress&(((1<<(2+rex.w))-1)))) || box64_dynarec_aligned_atomics) -#define ALIGNED_ATOMICH ((fixedaddress && !(fixedaddress&1)) || box64_dynarec_aligned_atomics) +#define ALIGNED_ATOMICxw ((fixedaddress && !(fixedaddress&(((1<<(2+rex.w))-1)))) || BOX64ENV(dynarec_aligned_atomics)) +#define ALIGNED_ATOMICH ((fixedaddress && !(fixedaddress&1)) || BOX64ENV(dynarec_aligned_atomics)) // CALL will use x7 for the call address. Return value can be put in ret (unless ret is -1) // R0 will not be pushed/popd if ret is -2 @@ -1058,7 +1058,7 @@ #else #define X87_PUSH_OR_FAIL(var, dyn, ninst, scratch, t) \ if ((dyn->n.x87stack==8) || (dyn->n.pushed==8)) { \ - if(box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.pushed, ninst); \ + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.pushed, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -1066,7 +1066,7 @@ #define X87_PUSH_EMPTY_OR_FAIL(dyn, ninst, scratch) \ if ((dyn->n.x87stack==8) || (dyn->n.pushed==8)) { \ - if(box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.pushed, ninst); \ + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.pushed, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -1074,7 +1074,7 @@ #define X87_POP_OR_FAIL(dyn, ninst, scratch) \ if ((dyn->n.x87stack==-8) || (dyn->n.poped==8)) { \ - if(box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Pop, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.poped, ninst); \ + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Pop, stack=%d/%d on inst %d\n", dyn->n.x87stack, dyn->n.poped, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -1878,19 +1878,19 @@ uintptr_t dynarec64_AVX_F3_0F38(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip } \ break -#define NOTEST(s1) \ - if(box64_dynarec_test) { \ - STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test)); \ - STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean));\ +#define NOTEST(s1) \ + if (BOX64ENV(dynarec_test)) { \ + STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.test)); \ + STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } -#define SKIPTEST(s1) \ - if(box64_dynarec_test) { \ - STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean));\ +#define SKIPTEST(s1) \ + if (BOX64ENV(dynarec_test)) { \ + STRw_U12(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } -#define GOTEST(s1, s2) \ - if(box64_dynarec_test) { \ - MOV32w(s2, 1); \ - STRw_U12(s2, xEmu, offsetof(x64emu_t, test.test)); \ +#define GOTEST(s1, s2) \ + if (BOX64ENV(dynarec_test)) { \ + MOV32w(s2, 1); \ + STRw_U12(s2, xEmu, offsetof(x64emu_t, test.test)); \ } #define GETREX() \ diff --git a/src/dynarec/arm64/dynarec_arm64_pass0.h b/src/dynarec/arm64/dynarec_arm64_pass0.h index 0f096482..3b049d79 100644 --- a/src/dynarec/arm64/dynarec_arm64_pass0.h +++ b/src/dynarec/arm64/dynarec_arm64_pass0.h @@ -9,14 +9,14 @@ #define MAYSETFLAGS() dyn->insts[ninst].x64.may_set = 1 #define READFLAGS(A) \ dyn->insts[ninst].x64.use_flags = A; dyn->f.dfnone = 1;\ - if(!box64_dynarec_df && (A)&X_PEND) dyn->insts[ninst].x64.use_flags = X_ALL; \ + if(!BOX64ENV(dynarec_df) && (A)&X_PEND) dyn->insts[ninst].x64.use_flags = X_ALL; \ dyn->f.pending=SF_SET #define SETFLAGS(A,B) \ dyn->insts[ninst].x64.set_flags = A; \ dyn->insts[ninst].x64.state_flags = (B)&~SF_DF; \ dyn->f.pending=(B)&SF_SET_PENDING; \ dyn->f.dfnone=((B)&SF_SET)?(((B)==SF_SET_NODF)?0:1):0; \ - if(!box64_dynarec_df) {dyn->f.dfnone=1; dyn->f.pending=0; if((A)==SF_PENDING){printf_log(LOG_INFO, "Warning, some opcode use SF_PENDING, forcing deferedflags ON\n"); box64_dynarec_df=1; }} + if(!BOX64ENV(dynarec_df)) {dyn->f.dfnone=1; dyn->f.pending=0; if((A)==SF_PENDING){printf_log(LOG_INFO, "Warning, some opcode use SF_PENDING, forcing deferedflags ON\n"); SET_BOX64ENV(dynarec_df, 1); }} #define EMIT(A) dyn->native_size+=4 #define JUMP(A, C) add_jump(dyn, ninst); add_next(dyn, (uintptr_t)A); SMEND(); dyn->insts[ninst].x64.jmp = A; dyn->insts[ninst].x64.jmp_cond = C; dyn->insts[ninst].x64.jmp_insts = 0 #define BARRIER(A) if(A!=BARRIER_MAYBE) {fpu_purgecache(dyn, ninst, 0, x1, x2, x3); dyn->insts[ninst].x64.barrier = A;} else dyn->insts[ninst].barrier_maybe = 1 @@ -39,7 +39,7 @@ #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if(box64_dynarec_log>=LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1) {\ + if(BOX64ENV(dynarec_log)>=LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing)==1) {\ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits?"x86 ":"x64 ",\ PKip(0), \ @@ -67,4 +67,4 @@ #define INVERT_CARRY(A) dyn->insts[ninst].invert_carry = 1 #define INVERT_CARRY_BEFORE(A) dyn->insts[ninst].invert_carry_before = 1 // mark opcode as "unaligned" possible only if the current address is not marked as already unaligned -#define IF_UNALIGNED(A) if((dyn->insts[ninst].unaligned=(is_addr_unaligned(A)?0:1))) \ No newline at end of file +#define IF_UNALIGNED(A) if((dyn->insts[ninst].unaligned=(is_addr_unaligned(A)?0:1))) diff --git a/src/dynarec/arm64/dynarec_arm64_pass1.h b/src/dynarec/arm64/dynarec_arm64_pass1.h index f0f7019d..7e81b167 100644 --- a/src/dynarec/arm64/dynarec_arm64_pass1.h +++ b/src/dynarec/arm64/dynarec_arm64_pass1.h @@ -12,7 +12,7 @@ dyn->insts[ninst].x64.state_flags = (B)&~SF_DF; \ dyn->f.pending=(B)&SF_SET_PENDING; \ dyn->f.dfnone=((B)&SF_SET)?(((B)==SF_SET_NODF)?0:1):0; \ - if(!box64_dynarec_df) {dyn->f.dfnone=1; dyn->f.pending=0; } + if(!BOX64ENV(dynarec_df)) {dyn->f.dfnone=1; dyn->f.pending=0; } #define NEW_INST \ dyn->insts[ninst].f_entry = dyn->f; \ dyn->n.combined1 = dyn->n.combined2 = 0;\ diff --git a/src/dynarec/arm64/dynarec_arm64_pass3.h b/src/dynarec/arm64/dynarec_arm64_pass3.h index 260c69c4..6bfad31c 100644 --- a/src/dynarec/arm64/dynarec_arm64_pass3.h +++ b/src/dynarec/arm64/dynarec_arm64_pass3.h @@ -5,14 +5,14 @@ addInst(dyn->instsize, &dyn->insts_size, 0, 0); #define EMIT(A) \ do{ \ - if(box64_dynarec_dump) print_opcode(dyn, ninst, (uint32_t)(A)); \ + if(BOX64ENV(dynarec_dump)) print_opcode(dyn, ninst, (uint32_t)(A)); \ if((uintptr_t)dyn->block<dyn->tablestart) \ *(uint32_t*)(dyn->block) = (uint32_t)(A); \ dyn->block += 4; dyn->native_size += 4; \ dyn->insts[ninst].size2 += 4; \ }while(0) -#define MESSAGE(A, ...) if(box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) +#define MESSAGE(A, ...) if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ if(ninst) { \ if(dyn->insts[ninst].address!=(uintptr_t)dyn->block-(uintptr_t)dyn->native_start) dyn->abort = 1; \ diff --git a/src/dynarec/dynablock.c b/src/dynarec/dynablock.c index 62a63bec..517a702e 100644 --- a/src/dynarec/dynablock.c +++ b/src/dynarec/dynablock.c @@ -208,7 +208,7 @@ static dynablock_t* internalDBGetBlock(x64emu_t* emu, uintptr_t addr, uintptr_t } if(need_lock) { - if(box64_dynarec_wait) { + if(BOX64ENV(dynarec_wait)) { mutex_lock(&my_context->mutex_dyndump); } else { if(mutex_trylock(&my_context->mutex_dyndump)) // FillBlock not available for now diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index f6e61db8..ca0bd4f2 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -52,7 +52,7 @@ void* LinkNext(x64emu_t* emu, uintptr_t addr, void* x2, uintptr_t* x3) dynablock_t* block = NULL; if(hasAlternate((void*)addr)) { printf_log(LOG_DEBUG, "Jmp address has alternate: %p", (void*)addr); - if(box64_log<LOG_DEBUG) dynarec_log(LOG_INFO, "Jmp address has alternate: %p", (void*)addr); + if (BOX64ENV(log)<LOG_DEBUG) dynarec_log(LOG_INFO, "Jmp address has alternate: %p", (void*)addr); uintptr_t old_addr = addr; addr = (uintptr_t)getAlternate((void*)addr); // set new address R_RIP = addr; // but also new RIP! @@ -63,7 +63,7 @@ void* LinkNext(x64emu_t* emu, uintptr_t addr, void* x2, uintptr_t* x3) block = DBGetBlock(emu, addr, 1, is32bits); if(!block) { #ifdef HAVE_TRACE - if(LOG_INFO<=box64_dynarec_log) { + if(LOG_INFO<=BOX64ENV(dynarec_log)) { if(checkInHotPage(addr)) { dynarec_log(LOG_INFO, "Not trying to run a block from a Hotpage at %p\n", (void*)addr); } else { @@ -79,7 +79,7 @@ void* LinkNext(x64emu_t* emu, uintptr_t addr, void* x2, uintptr_t* x3) if(!block->done) { // not finished yet... leave linker #ifdef HAVE_TRACE - if(box64_dynarec_log && !block->isize) { + if(BOX64ENV(dynarec_log) && !block->isize) { dynablock_t* db = FindDynablockFromNativeAddress(x2-4); printf_log(LOG_NONE, "Warning, NULL block at %p from %p (db=%p, x64addr=%p/%s)\n", (void*)addr, x2-4, db, db?(void*)getX64Address(db, (uintptr_t)x2-4):NULL, db?getAddrFunctionName(getX64Address(db, (uintptr_t)x2-4)):"(nil)"); } @@ -172,7 +172,7 @@ void DynaRun(x64emu_t* emu) { printf_log(LOG_DEBUG, "Setjmp DynaRun, fs=0x%x\n", emu->segs[_FS]); #ifdef DYNAREC - if(box64_dynarec_test) { + if(BOX64ENV(dynarec_test)) { if(emu->test.clean) x64test_check(emu, R_RIP); emu->test.clean = 0; @@ -184,7 +184,7 @@ void DynaRun(x64emu_t* emu) emu->flags.need_jmpbuf = 0; #ifdef DYNAREC - if(!box64_dynarec) + if(!BOX64ENV(dynarec)) #endif Run(emu, 0); #ifdef DYNAREC @@ -210,18 +210,18 @@ void DynaRun(x64emu_t* emu) skip = 0; // no block, of block doesn't have DynaRec content (yet, temp is not null) // Use interpreter (should use single instruction step...) - if(box64_dynarec_log) { + if(BOX64ENV(dynarec_log)) { if(ACCESS_FLAG(F_TF)) dynarec_log(LOG_INFO, "%04d|Running Interpreter @%p, emu=%p because TF is on\n", GetTID(), (void*)R_RIP, emu); else dynarec_log(LOG_DEBUG, "%04d|Running Interpreter @%p, emu=%p\n", GetTID(), (void*)R_RIP, emu); } - if(box64_dynarec_test) + if (BOX64ENV(dynarec_test)) emu->test.clean = 0; Run(emu, 1); } else { dynarec_log(LOG_DEBUG, "%04d|Running DynaRec Block @%p (%p) of %d x64 insts (hash=0x%x) emu=%p\n", GetTID(), (void*)R_RIP, block->block, block->isize, block->hash, emu); - if(!box64_dynarec_df) { + if(!BOX64ENV(dynarec_df)) { CHECK_FLAGS(emu); } // block is here, let's run it! diff --git a/src/dynarec/dynarec_helper.h b/src/dynarec/dynarec_helper.h index 9997fce2..4f51c9a9 100644 --- a/src/dynarec/dynarec_helper.h +++ b/src/dynarec/dynarec_helper.h @@ -49,12 +49,12 @@ SMWRITE(); \ } while (0) -#define SMWRITE2() \ - do { \ - if (box64_dynarec_strongmem >= STRONGMEM_SIMD_WRITE) { \ - dyn->smwrite = 1; \ - dyn->insts[ninst].will_write = 2; \ - } \ +#define SMWRITE2() \ + do { \ + if (BOX64ENV(dynarec_strongmem) >= STRONGMEM_SIMD_WRITE) { \ + dyn->smwrite = 1; \ + dyn->insts[ninst].will_write = 2; \ + } \ } while (0) #define SMREAD() @@ -71,7 +71,7 @@ #define SMEND() \ do { \ /* If there is any guest memory write, which is a SEQ, then compute the last_write. */ \ - if (dyn->smwrite && (box64_dynarec_strongmem >= STRONGMEM_LAST_WRITE)) { \ + if (dyn->smwrite && (BOX64ENV(dynarec_strongmem) >= STRONGMEM_LAST_WRITE)) { \ int i = ninst; \ while (i >= 0 && !dyn->insts[i].will_write) \ --i; \ @@ -88,7 +88,7 @@ #define SMWRITE() \ do { \ /* Put a barrier at every third memory write. */ \ - if (box64_dynarec_strongmem >= STRONGMEM_SEQ_WRITE) { \ + if (BOX64ENV(dynarec_strongmem) >= STRONGMEM_SEQ_WRITE) { \ if (++dyn->smwrite >= 3 /* Every third memory write */) { \ DMB_ISH(); \ dyn->smwrite = 1; \ @@ -110,10 +110,10 @@ } while (0) // Similar to SMWRITE, but for SIMD instructions. -#define SMWRITE2() \ - do { \ - if (box64_dynarec_strongmem >= STRONGMEM_SIMD_WRITE) \ - SMWRITE(); \ +#define SMWRITE2() \ + do { \ + if (BOX64ENV(dynarec_strongmem) >= STRONGMEM_SIMD_WRITE) \ + SMWRITE(); \ } while (0) // An opcode reads guest memory, this need to be put before the LOAD instruction manually. @@ -130,22 +130,22 @@ } while (0) // An opcode will write memory, this will be put before the STORE instruction automatically. -#define WILLWRITE() \ - do { \ - if (box64_dynarec_strongmem >= dyn->insts[ninst].will_write && dyn->smwrite == 0) { \ - /* Will write but never written, this is the start of a SEQ, put a barrier. */ \ - if (box64_dynarec_weakbarrier) \ - DMB_ISHLD(); \ - else \ - DMB_ISH(); \ - } else if (box64_dynarec_strongmem >= STRONGMEM_LAST_WRITE && box64_dynarec_weakbarrier != 2 \ - && dyn->insts[ninst].last_write) { \ - /* Last write, put a barrier */ \ - if (box64_dynarec_weakbarrier) \ - DMB_ISHST(); \ - else \ - DMB_ISH(); \ - } \ +#define WILLWRITE() \ + do { \ + if (BOX64ENV(dynarec_strongmem) >= dyn->insts[ninst].will_write && dyn->smwrite == 0) { \ + /* Will write but never written, this is the start of a SEQ, put a barrier. */ \ + if (BOX64ENV(dynarec_weakbarrier)) \ + DMB_ISHLD(); \ + else \ + DMB_ISH(); \ + } else if (BOX64ENV(dynarec_strongmem) >= STRONGMEM_LAST_WRITE && BOX64ENV(dynarec_weakbarrier) != 2 \ + && dyn->insts[ninst].last_write) { \ + /* Last write, put a barrier */ \ + if (BOX64ENV(dynarec_weakbarrier)) \ + DMB_ISHST(); \ + else \ + DMB_ISH(); \ + } \ } while (0) // Similar to WILLWRITE, but checks lock. @@ -167,11 +167,11 @@ // Will be put at the end of the SEQ #define SMEND() \ do { \ - if (box64_dynarec_strongmem) { \ + if (BOX64ENV(dynarec_strongmem)) { \ /* It's a SEQ, put a barrier here. */ \ if (dyn->smwrite) { \ /* Check if the next instruction has a end loop mark */ \ - if (box64_dynarec_weakbarrier) \ + if (BOX64ENV(dynarec_weakbarrier)) \ DMB_ISHST(); \ else \ DMB_ISH(); \ diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index e901e462..b096b79f 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -30,15 +30,15 @@ void printf_x64_instruction(zydis_dec_t* dec, instruction_x64_t* inst, const cha if(ip[0]==0xcc && ip[1]=='S' && ip[2]=='C') { uintptr_t a = *(uintptr_t*)(ip+3); if(a==0) { - dynarec_log(LOG_NONE, "%s%p: Exit x64emu%s\n", (box64_dynarec_dump>1)?"\e[01;33m":"", (void*)ip, (box64_dynarec_dump>1)?"\e[m":""); + dynarec_log(LOG_NONE, "%s%p: Exit x64emu%s\n", (BOX64ENV(dynarec_dump)>1)?"\e[01;33m":"", (void*)ip, (BOX64ENV(dynarec_dump)>1)?"\e[m":""); } else { - dynarec_log(LOG_NONE, "%s%p: Native call to %p%s\n", (box64_dynarec_dump>1)?"\e[01;33m":"", (void*)ip, (void*)a, (box64_dynarec_dump>1)?"\e[m":""); + dynarec_log(LOG_NONE, "%s%p: Native call to %p%s\n", (BOX64ENV(dynarec_dump)>1)?"\e[01;33m":"", (void*)ip, (void*)a, (BOX64ENV(dynarec_dump)>1)?"\e[m":""); } } else { if(dec) { - dynarec_log(LOG_NONE, "%s%p: %s", (box64_dynarec_dump > 1) ? "\e[01;33m" : "", ip, DecodeX64Trace(dec, inst->addr, 1)); + dynarec_log(LOG_NONE, "%s%p: %s", (BOX64ENV(dynarec_dump) > 1) ? "\e[01;33m" : "", ip, DecodeX64Trace(dec, inst->addr, 1)); } else { - dynarec_log(LOG_NONE, "%s%p: ", (box64_dynarec_dump>1)?"\e[01;33m":"", ip); + dynarec_log(LOG_NONE, "%s%p: ", (BOX64ENV(dynarec_dump)>1)?"\e[01;33m":"", ip); for(int i=0; i<inst->size; ++i) { dynarec_log(LOG_NONE, "%02X ", ip[i]); } @@ -55,12 +55,12 @@ void printf_x64_instruction(zydis_dec_t* dec, instruction_x64_t* inst, const cha } } // end of line and colors - dynarec_log(LOG_NONE, "%s\n", (box64_dynarec_dump>1)?"\e[m":""); + dynarec_log(LOG_NONE, "%s\n", (BOX64ENV(dynarec_dump)>1)?"\e[m":""); } } void add_next(dynarec_native_t *dyn, uintptr_t addr) { - if(!box64_dynarec_bigblock) + if(!BOX64ENV(dynarec_bigblock)) return; // exist? for(int i=0; i<dyn->next_sz; ++i) @@ -422,7 +422,7 @@ static void updateYmm0s(dynarec_native_t* dyn, int ninst, int max_ninst_reached) int can_incr = ninst == max_ninst_reached; // Are we the top-level call? int ok = 1; while ((can_incr || ok) && ninst<dyn->size) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "update ninst=%d (%d): can_incr=%d\n", ninst, max_ninst_reached, can_incr); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "update ninst=%d (%d): can_incr=%d\n", ninst, max_ninst_reached, can_incr); uint16_t new_purge_ymm, new_ymm0_in, new_ymm0_out; if (dyn->insts[ninst].pred_sz && dyn->insts[ninst].x64.alive) { @@ -433,18 +433,18 @@ static void updateYmm0s(dynarec_native_t* dyn, int ninst, int max_ninst_reached) uint16_t ymm0_inter = (ninst && !(dyn->insts[ninst].x64.barrier & BARRIER_FLOAT)) ? ((uint16_t)-1) : (uint16_t)0; for (int i = 0; i < dyn->insts[ninst].pred_sz; ++i) { int pred = dyn->insts[ninst].pred[i]; - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "\twith pred[%d] = %d", i, pred); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "\twith pred[%d] = %d", i, pred); if (pred >= max_ninst_reached) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, " (skipped)\n"); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " (skipped)\n"); continue; } int pred_out = dyn->insts[pred].x64.has_callret ? 0 : dyn->insts[pred].ymm0_out; - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, " ~> %04X\n", pred_out); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " ~> %04X\n", pred_out); ymm0_union |= pred_out; ymm0_inter &= pred_out; } - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "\t=> %04X,%04X\n", ymm0_union, ymm0_inter); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "\t=> %04X,%04X\n", ymm0_union, ymm0_inter); // Notice the default values yield something coherent here (if all pred are after ninst) new_purge_ymm = ymm0_union & ~ymm0_inter; new_ymm0_in = ymm0_inter; @@ -466,7 +466,7 @@ static void updateYmm0s(dynarec_native_t* dyn, int ninst, int max_ninst_reached) int jmp = (dyn->insts[ninst].x64.jmp)?dyn->insts[ninst].x64.jmp_insts:-1; if((jmp!=-1) && (jmp < max_ninst_reached)) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "\t! jump to %d\n", jmp); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "\t! jump to %d\n", jmp); // The jump goes before the last instruction reached, update the destination // If this is the top level call, this means the jump goes backward (jmp != ninst) // Otherwise, since we don't update all instructions, we may miss the update (don't use jmp < ninst) @@ -480,7 +480,7 @@ static void updateYmm0s(dynarec_native_t* dyn, int ninst, int max_ninst_reached) // Also update jumps to before (they are skipped otherwise) int jmp = (dyn->insts[ninst].x64.jmp)?dyn->insts[ninst].x64.jmp_insts:-1; if((jmp!=-1) && (jmp < max_ninst_reached)) { - //if(box64_dynarec_dump) dynarec_log(LOG_NONE, "\t! jump to %d\n", jmp); + //if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "\t! jump to %d\n", jmp); updateYmm0s(dyn, jmp, max_ninst_reached); } } else { @@ -597,7 +597,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit C .. C+sz : arch: arch specific info (likes flags info) per inst (can be absent) */ - if(addr>=box64_nodynarec_start && addr<box64_nodynarec_end) { + if(addr>=BOX64ENV(nodynarec_start) && addr<BOX64ENV(nodynarec_end)) { dynarec_log(LOG_INFO, "Create empty block in no-dynarec zone\n"); return CreateEmptyBlock(block, addr, is32bits); } @@ -627,7 +627,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit // pass 0, addresses, x64 jump addresses, overall size of the block uintptr_t end = native_pass0(&helper, addr, alternate, is32bits); if(helper.abort) { - if(box64_dynarec_dump || box64_dynarec_log)dynarec_log(LOG_NONE, "Abort dynablock on pass0\n"); + if(BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_log))dynarec_log(LOG_NONE, "Abort dynablock on pass0\n"); CancelBlock64(0); return NULL; } @@ -742,7 +742,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit // pass 1, float optimizations, first pass for flags native_pass1(&helper, addr, alternate, is32bits); if(helper.abort) { - if(box64_dynarec_dump || box64_dynarec_log)dynarec_log(LOG_NONE, "Abort dynablock on pass1\n"); + if(BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_log))dynarec_log(LOG_NONE, "Abort dynablock on pass1\n"); CancelBlock64(0); return NULL; } @@ -750,7 +750,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit // pass 2, instruction size native_pass2(&helper, addr, alternate, is32bits); if(helper.abort) { - if(box64_dynarec_dump || box64_dynarec_log)dynarec_log(LOG_NONE, "Abort dynablock on pass2\n"); + if(BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_log))dynarec_log(LOG_NONE, "Abort dynablock on pass2\n"); CancelBlock64(0); return NULL; } @@ -783,12 +783,12 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit helper.table64cap = helper.table64size; helper.table64 = (uint64_t*)helper.tablestart; // pass 3, emit (log emit native opcode) - if(box64_dynarec_dump) { - dynarec_log(LOG_NONE, "%s%04d|Emitting %zu bytes for %u %s bytes (native=%zu, table64=%zu, instsize=%zu, arch=%zu)", (box64_dynarec_dump>1)?"\e[01;36m":"", GetTID(), helper.native_size, helper.isize, is32bits?"x86":"x64", native_size, helper.table64size*sizeof(uint64_t), insts_rsize, arch_size); + if(BOX64ENV(dynarec_dump)) { + dynarec_log(LOG_NONE, "%s%04d|Emitting %zu bytes for %u %s bytes (native=%zu, table64=%zu, instsize=%zu, arch=%zu)", (BOX64ENV(dynarec_dump)>1)?"\e[01;36m":"", GetTID(), helper.native_size, helper.isize, is32bits?"x86":"x64", native_size, helper.table64size*sizeof(uint64_t), insts_rsize, arch_size); printFunctionAddr(helper.start, " => "); - dynarec_log(LOG_NONE, "%s\n", (box64_dynarec_dump>1)?"\e[m":""); + dynarec_log(LOG_NONE, "%s\n", (BOX64ENV(dynarec_dump)>1)?"\e[m":""); } - if (box64_dynarec_gdbjit) { + if (BOX64ENV(dynarec_gdbjit)) { GdbJITNewBlock(helper.gdbjit_block, (GDB_CORE_ADDR)block->actual_block, (GDB_CORE_ADDR)block->actual_block + native_size, helper.start); } int oldtable64size = helper.table64size; @@ -800,7 +800,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit helper.insts_size = 0; // reset native_pass3(&helper, addr, alternate, is32bits); if(helper.abort) { - if(box64_dynarec_dump || box64_dynarec_log)dynarec_log(LOG_NONE, "Abort dynablock on pass3\n"); + if(BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_log))dynarec_log(LOG_NONE, "Abort dynablock on pass3\n"); CancelBlock64(0); return NULL; } @@ -833,7 +833,7 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit //block->x64_addr = (void*)start; block->x64_size = end-start; // all done... - if (box64_dynarec_gdbjit) { + if (BOX64ENV(dynarec_gdbjit)) { GdbJITBlockReady(helper.gdbjit_block); } ClearCache(actual_p+sizeof(void*), native_size); // need to clear the cache before execution... @@ -892,5 +892,5 @@ void writePerfMap(uintptr_t func_addr, uintptr_t code_addr, size_t code_size, co uintptr_t start = 0; const char* symbname = FindNearestSymbolName(FindElfAddress(my_context, func_addr), (void*)func_addr, &start, &sz); snprintf(pbuf, sizeof(pbuf), "0x%lx %ld %s:%s\n", code_addr, code_size, symbname, inst_name); - write(box64_dynarec_perf_map_fd, pbuf, strlen(pbuf)); + write(BOX64ENV(dynarec_perf_map_fd), pbuf, strlen(pbuf)); } diff --git a/src/dynarec/dynarec_native_functions.c b/src/dynarec/dynarec_native_functions.c index 18082d82..bcf06e6a 100644 --- a/src/dynarec/dynarec_native_functions.c +++ b/src/dynarec/dynarec_native_functions.c @@ -184,7 +184,7 @@ void native_fld(x64emu_t* emu, uint8_t* ed) void native_ud(x64emu_t* emu) { - if(box64_dynarec_test) + if(BOX64ENV(dynarec_test)) emu->test.test = 0; emit_signal(emu, SIGILL, (void*)R_RIP, 0); } diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index 50d5e231..7ab4f528 100644 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -57,7 +57,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int ARCH_INIT(); int reset_n = -1; // -1 no reset; -2 reset to 0; else reset to the state of reset_n dyn->last_ip = (alternate || (dyn->insts && dyn->insts[0].pred_sz))?0:ip; // RIP is always set at start of block unless there is a predecessor! - int stopblock = 2+(FindElfAddress(my_context, addr)?0:1); // if block is in elf_memory, it can be extended with box64_dynarec_bigblock==2, else it needs 3 + int stopblock = 2+(FindElfAddress(my_context, addr)?0:1); // if block is in elf_memory, it can be extended with BOX64ENV(dynarec_bigblock)==2, else it needs 3 // ok, go now INIT; #if STEP == 0 @@ -126,7 +126,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int if((dyn->insts[ninst].x64.need_before&~X_PEND) && !dyn->insts[ninst].pred_sz) { READFLAGS(dyn->insts[ninst].x64.need_before&~X_PEND); } - if(box64_dynarec_test && (!box64_dynarec_test_end || (ip>=box64_dynarec_test_start && ip<box64_dynarec_test_end) )) { + if(BOX64ENV(dynarec_test) && (!BOX64ENV(dynarec_test_end) || (ip>=BOX64ENV(dynarec_test_start) && ip<BOX64ENV(dynarec_test_end)))) { MESSAGE(LOG_DUMP, "TEST STEP ----\n"); extcache_native_t save; fpu_save_and_unwind(dyn, ninst, &save); @@ -137,7 +137,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int MESSAGE(LOG_DUMP, "----------\n"); } #ifdef HAVE_TRACE - else if(my_context->dec && box64_dynarec_trace) { + else if(my_context->dec && BOX64ENV(dynarec_trace)) { if((trace_end == 0) || ((ip >= trace_start) && (ip < trace_end))) { MESSAGE(LOG_DUMP, "TRACE ----\n"); @@ -232,7 +232,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int #else // check if block need to be stopped, because it's a 00 00 opcode (unreadeable is already checked earlier) if((ok>0) && !dyn->forward && !(*(uint32_t*)addr)) { - if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Stopping block at %p reason: %s\n", (void*)addr, "Next opcode is 00 00 00 00"); + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "Stopping block at %p reason: %s\n", (void*)addr, "Next opcode is 00 00 00 00"); ok = 0; need_epilog = 1; dyn->insts[ninst].x64.need_after |= X_PEND; @@ -241,7 +241,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int if(dyn->forward_to == addr && !need_epilog && ok>=0) { // we made it! reset_n = get_first_jump_addr(dyn, addr); - if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Forward extend block for %d bytes %s%p -> %p (ninst %d - %d)\n", dyn->forward_to-dyn->forward, dyn->insts[dyn->forward_ninst].x64.has_callret?"(opt. call) ":"", (void*)dyn->forward, (void*)dyn->forward_to, reset_n, ninst); + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "Forward extend block for %d bytes %s%p -> %p (ninst %d - %d)\n", dyn->forward_to-dyn->forward, dyn->insts[dyn->forward_ninst].x64.has_callret?"(opt. call) ":"", (void*)dyn->forward, (void*)dyn->forward_to, reset_n, ninst); if(dyn->insts[dyn->forward_ninst].x64.has_callret && !dyn->insts[dyn->forward_ninst].x64.has_next) dyn->insts[dyn->forward_ninst].x64.has_next = 1; // this block actually continue dyn->forward = 0; @@ -251,7 +251,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int ok = 1; // in case it was 0 } else if ((dyn->forward_to < addr) || ok<=0) { // something when wrong! rollback - if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Could not forward extend block for %d bytes %p -> %p\n", dyn->forward_to-dyn->forward, (void*)dyn->forward, (void*)dyn->forward_to); + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "Could not forward extend block for %d bytes %p -> %p\n", dyn->forward_to-dyn->forward, (void*)dyn->forward, (void*)dyn->forward_to); ok = 0; dyn->size = dyn->forward_size; ninst = dyn->forward_ninst; @@ -262,7 +262,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int dyn->forward_ninst = 0; } // else just continue - } else if(!ok && !need_epilog && box64_dynarec_bigblock && (getProtection(addr+3)&~PROT_READ)) + } else if(!ok && !need_epilog && BOX64ENV(dynarec_bigblock) && (getProtection(addr+3)&~PROT_READ)) if(*(uint32_t*)addr!=0) { // check if need to continue (but is next 4 bytes are 0, stop) uintptr_t next = get_closest_next(dyn, addr); if(next && ( @@ -277,9 +277,9 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int // and pred table is not ready yet reset_n = get_first_jump(dyn, next); } - if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Extend block %p, %s%p -> %p (ninst=%d, jump from %d)\n", dyn, dyn->insts[ninst].x64.has_callret?"(opt. call) ":"", (void*)addr, (void*)next, ninst+1, dyn->insts[ninst].x64.has_callret?ninst:reset_n); - } else if(next && (int)(next-addr)<box64_dynarec_forward && (getProtection(next)&PROT_READ)/*box64_dynarec_bigblock>=stopblock*/) { - if(!((box64_dynarec_bigblock<stopblock) && !isJumpTableDefault64((void*)next))) { + if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "Extend block %p, %s%p -> %p (ninst=%d, jump from %d)\n", dyn, dyn->insts[ninst].x64.has_callret?"(opt. call) ":"", (void*)addr, (void*)next, ninst+1, dyn->insts[ninst].x64.has_callret?ninst:reset_n); + } else if(next && (int)(next-addr)<BOX64ENV(dynarec_forward) && (getProtection(next)&PROT_READ)/*BOX64ENV(dynarec_bigblock)>=stopblock*/) { + if(!((BOX64ENV(dynarec_bigblock)<stopblock) && !isJumpTableDefault64((void*)next))) { if(dyn->forward) { if(next<dyn->forward_to) dyn->forward_to = next; @@ -327,8 +327,8 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int ++ninst; #if STEP == 0 memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); - if((ok>0) && (((box64_dynarec_bigblock<stopblock) && !isJumpTableDefault64((void*)addr)) - || (addr>=box64_nodynarec_start && addr<box64_nodynarec_end))) + if((ok>0) && (((BOX64ENV(dynarec_bigblock)<stopblock) && !isJumpTableDefault64((void*)addr)) + || (addr>=BOX64ENV(nodynarec_start) && addr<BOX64ENV(nodynarec_end)))) #else if((ok>0) && (ninst==dyn->size)) #endif @@ -346,7 +346,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int } #endif MESSAGE(LOG_DEBUG, "Stopping block %p (%d / %d)\n",(void*)init_addr, ninst, dyn->size); - if(!box64_dynarec_dump && addr>=box64_nodynarec_start && addr<box64_nodynarec_end) + if(!BOX64ENV(dynarec_dump) && addr>=BOX64ENV(nodynarec_start) && addr<BOX64ENV(nodynarec_end)) dynarec_log(LOG_INFO, "Stopping block in no-dynarec zone\n"); --ninst; if(!dyn->insts[ninst].x64.barrier) { diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index a3a188a7..f9dfbc0a 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -1796,7 +1796,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 0xC2: INST_NAME("RETN"); - if (box64_dynarec_safeflags) { + if (BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // lets play safe here too } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -1807,7 +1807,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 0xC3: INST_NAME("RET"); - if (box64_dynarec_safeflags) { + if (BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // so instead, force the deferred flags, so it's not too slow, and flags are not lost } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -1902,7 +1902,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } } else { INST_NAME("INT 3"); - if (!box64_ignoreint3) { + if (!BOX64ENV(ignoreint3)) { // check if TRAP signal is handled TABLE64(x1, (uintptr_t)my_context); MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP])); @@ -1959,7 +1959,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) MAYSETFLAGS(); + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); emit_shl8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(); break; @@ -1975,7 +1975,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) MAYSETFLAGS(); + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); emit_shr8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(); break; @@ -2185,7 +2185,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MESSAGE(LOG_DUMP, "Native Call to %s (retn=%d)\n", GetNativeName(GetNativeFnc(dyn->insts[ninst].natcall - 1)), dyn->insts[ninst].retn); // calling a native function sse_purge07cache(dyn, ninst, x3); - if ((box64_log < 2 && !cycle_log) && dyn->insts[ninst].natcall) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall) { // FIXME: Add basic support for isSimpleWrapper tmp = 0; // isSimpleWrapper(*(wrapper_t*)(dyn->insts[ninst].natcall + 2)); } else @@ -2195,7 +2195,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // FIXME: if (dyn->insts[ninst].natcall && isRetX87Wrapper(*(wrapper_t*)(dyn->insts[ninst].natcall + 2))) // // return value will be on the stack, so the stack depth needs to be updated // x87_purgecache(dyn, ninst, 0, x3, x1, x4); - if ((box64_log < 2 && !cycle_log) && dyn->insts[ninst].natcall && tmp) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall && tmp) { // GETIP(ip+3+8+8); // read the 0xCC // FIXME: call_n(dyn, ninst, *(void**)(dyn->insts[ninst].natcall + 2 + 8), tmp); POP1(xRIP); // pop the return address @@ -2228,13 +2228,13 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } break; default: - if ((box64_dynarec_safeflags > 1) || (ninst && dyn->insts[ninst - 1].x64.set_flags)) { + if ((BOX64ENV(dynarec_safeflags) > 1) || (ninst && dyn->insts[ninst - 1].x64.set_flags)) { READFLAGS(X_PEND); // that's suspicious } else { SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to set flags to "dont'care" state } // regular call - /*if (box64_dynarec_callret && box64_dynarec_bigblock > 1) { + /*if (BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock) > 1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -2249,7 +2249,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } fpu_purgecache(dyn, ninst, 1, x1, x3, x4); PUSH1z(x2); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if (addr < (dyn->start + dyn->isize)) { @@ -2276,7 +2276,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni else j64 = addr + i32; jump_to_next(dyn, j64, 0, ninst, rex.is32bits); - if (box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if (BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); @@ -2602,13 +2602,13 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 2: INST_NAME("CALL Ed"); - PASS2IF ((box64_dynarec_safeflags > 1) || ((ninst && dyn->insts[ninst - 1].x64.set_flags) || ((ninst > 1) && dyn->insts[ninst - 2].x64.set_flags)), 1) { + PASS2IF ((BOX64ENV(dynarec_safeflags) > 1) || ((ninst && dyn->insts[ninst - 1].x64.set_flags) || ((ninst > 1) && dyn->insts[ninst - 2].x64.set_flags)), 1) { READFLAGS(X_PEND); // that's suspicious } else { SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to put flag in "don't care" state } GETEDz(0); - if (box64_dynarec_callret && box64_dynarec_bigblock > 1) { + if (BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock) > 1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -2616,7 +2616,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni *ok = 0; } GETIP_(addr); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address if (addr < (dyn->start + dyn->isize)) { @@ -2637,7 +2637,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); - if (box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if (BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... MARK; j64 = getJumpTableAddress64(addr); diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c index 313f4f07..70b20bd7 100644 --- a/src/dynarec/la64/dynarec_la64_0f.c +++ b/src/dynarec/la64/dynarec_la64_0f.c @@ -592,7 +592,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; GETGX(v0, 1); GETEX(v1, 0, 0); - if (!box64_dynarec_fastnan && v0 != v1) { + if (!BOX64ENV(dynarec_fastnan) && v0 != v1) { q0 = fpu_get_scratch(dyn); // always copy from v1 if any oprand is NaN VFCMP_S(q0, v0, v1, cUN); @@ -614,7 +614,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; GETGX(v0, 1); GETEX(v1, 0, 0); - if (!box64_dynarec_fastnan && v0 != v1) { + if (!BOX64ENV(dynarec_fastnan) && v0 != v1) { q0 = fpu_get_scratch(dyn); // always copy from v1 if any oprand is NaN VFCMP_S(q0, v0, v1, cUN); @@ -856,7 +856,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("LDMXCSR Md"); GETED(0); ST_W(ed, xEmu, offsetof(x64emu_t, mxcsr)); - if (box64_sse_flushto0) { + if (BOX64ENV(sse_flushto0)) { // TODO } break; @@ -901,7 +901,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; GETGD; GETED(0); - if (box64_dynarec_test) { + if (BOX64ENV(dynarec_test)) { // avoid noise during test CLEAR_FLAGS(x3); } diff --git a/src/dynarec/la64/dynarec_la64_66.c b/src/dynarec/la64/dynarec_la64_66.c index 27999e66..68894bf4 100644 --- a/src/dynarec/la64/dynarec_la64_66.c +++ b/src/dynarec/la64/dynarec_la64_66.c @@ -795,7 +795,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) MAYSETFLAGS(); + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETEW(x1, 0); emit_shr16(dyn, ninst, x1, x2, x5, x4, x6); EWBACK; @@ -811,7 +811,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETEW(x1, 0); emit_shl16(dyn, ninst, x1, x2, x5, x4, x6); @@ -827,7 +827,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETSEW(x1, 0); emit_sar16(dyn, ninst, x1, x2, x5, x4, x6); @@ -872,7 +872,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SLLI_D(x7, xRDX, 48); SRLI_D(x7, x7, 32); OR(x2, x2, x7); - if(box64_dynarec_div0) { + if(BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(); @@ -893,7 +893,7 @@ uintptr_t dynarec64_66(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET, NAT_FLAGS_NOFUSION); SET_DFNONE(); GETSEW(x1, 0); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(); diff --git a/src/dynarec/la64/dynarec_la64_660f.c b/src/dynarec/la64/dynarec_la64_660f.c index 5d74e154..5b6055cc 100644 --- a/src/dynarec/la64/dynarec_la64_660f.c +++ b/src/dynarec/la64/dynarec_la64_660f.c @@ -861,13 +861,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); VFCMP_D(v0, q0, q1, cUN); } VFADD_D(q1, q1, q0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VFCMP_D(v1, q1, q1, cUN); VANDN_V(v0, v0, v1); VLDI(v1, 0b011111111000); // broadcast 0xFFFFFFFFFFFFFFF8 @@ -882,13 +882,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); VFCMP_D(v0, q0, q1, cUN); } VFMUL_D(q1, q1, q0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VFCMP_D(v1, q1, q1, cUN); VANDN_V(v0, v0, v1); VLDI(v1, 0b011111111000); // broadcast 0xFFFFFFFFFFFFFFF8 @@ -903,7 +903,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEX(v1, 0, 0); GETGX_empty(v0); - // TODO: !box64_dynarec_fastround + // TODO: !BOX64ENV(dynarec_fastround) q0 = fpu_get_scratch(dyn); VFCVT_S_D(q0, v1, v1); VXOR_V(v0, v0, v0); @@ -915,12 +915,12 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(v1, 0, 0); GETGX_empty(v0); u8 = sse_setround(dyn, ninst, x6, x4); - if (v0 == v1 && !box64_dynarec_fastround) { + if (v0 == v1 && !BOX64ENV(dynarec_fastround)) { v1 = fpu_get_scratch(dyn); VOR_V(v1, v0, v0); } VFTINT_W_S(v0, v1); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { q0 = fpu_get_scratch(dyn); q1 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); @@ -941,13 +941,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); VFCMP_D(v0, q0, q1, cUN); } VFSUB_D(q1, q1, q0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VFCMP_D(v1, q1, q1, cUN); VANDN_V(v0, v0, v1); VLDI(v1, 0b011111111000); // broadcast 0xFFFFFFFFFFFFFFF8 @@ -962,13 +962,13 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEX(q0, 0, 0); GETGX(q1, 1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); v1 = fpu_get_scratch(dyn); VFCMP_D(v0, q0, q1, cUN); } VFDIV_D(q1, q1, q0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VFCMP_D(v1, q1, q1, cUN); VANDN_V(v0, v0, v1); VLDI(v1, 0b011111111000); // broadcast 0xFFFFFFFFFFFFFFF8 diff --git a/src/dynarec/la64/dynarec_la64_f20f.c b/src/dynarec/la64/dynarec_la64_f20f.c index 774dcbf4..fcb32bdb 100644 --- a/src/dynarec/la64/dynarec_la64_f20f.c +++ b/src/dynarec/la64/dynarec_la64_f20f.c @@ -114,7 +114,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVGR2FCSR(FCSR2, xZR); // reset all bits } d1 = fpu_get_scratch(dyn); @@ -127,7 +127,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ZEROUP(gd); } if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVFCSR2GR(x5, FCSR2); // get back FPSR to check MOV32w(x3, (1 << FR_V) | (1 << FR_O)); AND(x5, x5, x3); @@ -144,7 +144,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSD(q0, 0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVGR2FCSR(FCSR2, xZR); // reset all bits } d1 = fpu_get_scratch(dyn); @@ -158,7 +158,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ZEROUP(gd); } x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVFCSR2GR(x5, FCSR2); // get back FPSR to check MOV32w(x3, (1 << FR_V) | (1 << FR_O)); AND(x5, x5, x3); @@ -177,7 +177,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int d1 = fpu_get_scratch(dyn); GETEXSD(d0, 0, 0); FSQRT_D(d1, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v1 = fpu_get_scratch(dyn); MOVGR2FR_D(v1, xZR); FCMP_D(fcc0, d0, v1, cLT); @@ -193,7 +193,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEXSD(v1, 0, 0); d0 = fpu_get_scratch(dyn); FADD_D(d0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FCMP_D(fcc0, v0, v1, cUN); BCNEZ_MARK(fcc0); FCMP_D(fcc1, d0, d0, cOR); @@ -210,7 +210,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEXSD(v1, 0, 0); d0 = fpu_get_scratch(dyn); FMUL_D(d0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FCMP_D(fcc0, v0, v1, cUN); BCNEZ_MARK(fcc0); FCMP_D(fcc1, d0, d0, cOR); @@ -236,7 +236,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEXSD(v1, 0, 0); d0 = fpu_get_scratch(dyn); FSUB_D(d0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FCMP_D(fcc0, v0, v1, cUN); BCNEZ_MARK(fcc0); FCMP_D(fcc1, d0, d0, cOR); @@ -266,7 +266,7 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEXSD(v1, 0, 0); d0 = fpu_get_scratch(dyn); FDIV_D(d0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FCMP_D(fcc0, v0, v1, cUN); BCNEZ_MARK(fcc0); FCMP_D(fcc1, d0, d0, cOR); diff --git a/src/dynarec/la64/dynarec_la64_f30f.c b/src/dynarec/la64/dynarec_la64_f30f.c index de8b847b..03f316cb 100644 --- a/src/dynarec/la64/dynarec_la64_f30f.c +++ b/src/dynarec/la64/dynarec_la64_f30f.c @@ -111,7 +111,7 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSS(d0, 0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVGR2FCSR(FCSR2, xZR); // reset all bits } d1 = fpu_get_scratch(dyn); @@ -123,7 +123,7 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int MOVFR2GR_S(gd, d1); ZEROUP(gd); } - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVFCSR2GR(x5, FCSR2); // get back FPSR to check MOV32w(x3, (1 << FR_V) | (1 << FR_O)); AND(x5, x5, x3); @@ -142,7 +142,7 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSS(d0, 0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVGR2FCSR(FCSR2, xZR); // reset all bits } u8 = sse_setround(dyn, ninst, x5, x6); @@ -156,7 +156,7 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ZEROUP(gd); } x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { MOVFCSR2GR(x5, FCSR2); // get back FPSR to check MOV32w(x3, (1 << FR_V) | (1 << FR_O)); AND(x5, x5, x3); @@ -210,7 +210,7 @@ uintptr_t dynarec64_F30F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(v1, 0, 0); GETGX_empty(v0); VFTINTRZ_W_S(v0, v1); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { q0 = fpu_get_scratch(dyn); q1 = fpu_get_scratch(dyn); d1 = fpu_get_scratch(dyn); diff --git a/src/dynarec/la64/dynarec_la64_functions.c b/src/dynarec/la64/dynarec_la64_functions.c index 5d8b2c77..391eac80 100644 --- a/src/dynarec/la64/dynarec_la64_functions.c +++ b/src/dynarec/la64/dynarec_la64_functions.c @@ -332,7 +332,7 @@ static register_mapping_t register_mappings[] = { void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t rex) { - if (!box64_dynarec_dump && !box64_dynarec_gdbjit && !box64_dynarec_perf_map) return; + if (!BOX64ENV(dynarec_dump) && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; static char buf[512]; int length = sprintf(buf, "barrier=%d state=%d/%d(%d), %s=%X/%X, use=%X, need=%X/%X, fuse=%d, sm=%d(%d/%d)", @@ -377,15 +377,15 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r if (dyn->insts[ninst].lsx.combined1 || dyn->insts[ninst].lsx.combined2) length += sprintf(buf + length, " %s:%d/%d", dyn->insts[ninst].lsx.swapped ? "SWP" : "CMB", dyn->insts[ninst].lsx.combined1, dyn->insts[ninst].lsx.combined2); - if (box64_dynarec_dump) { + if (BOX64ENV(dynarec_dump)) { printf_x64_instruction(rex.is32bits ? my_context->dec32 : my_context->dec, &dyn->insts[ninst].x64, name); dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, %s%s\n", - (box64_dynarec_dump > 1) ? "\e[32m" : "", - (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (box64_dynarec_dump > 1) ? "\e[m" : ""); + (BOX64ENV(dynarec_dump) > 1) ? "\e[32m" : "", + (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (BOX64ENV(dynarec_dump) > 1) ? "\e[m" : ""); } - if (box64_dynarec_gdbjit) { + if (BOX64ENV(dynarec_gdbjit)) { static char buf2[512]; - if (box64_dynarec_gdbjit > 1) { + if (BOX64ENV(dynarec_gdbjit) > 1) { sprintf(buf2, "; %d: %d opcodes, %s", ninst, dyn->insts[ninst].size / 4, buf); dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), buf2); } @@ -398,7 +398,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r } dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name); } - if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) { + if (BOX64ENV(dynarec_perf_map) && BOX64ENV(dynarec_perf_map_fd) != -1) { writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name); } } @@ -493,7 +493,7 @@ void fpu_unwind_restore(dynarec_la64_t* dyn, int ninst, lsxcache_t* cache) void updateNativeFlags(dynarec_la64_t* dyn) { - if (!box64_dynarec_nativeflags) + if (!BOX64ENV(dynarec_nativeflags)) return; for (int i = 1; i < dyn->size; ++i) if (dyn->insts[i].nat_flags_fusion) { diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c index 3e622517..af3ab1ea 100644 --- a/src/dynarec/la64/dynarec_la64_helper.c +++ b/src/dynarec/la64/dynarec_la64_helper.c @@ -582,7 +582,7 @@ void ret_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex) POP1z(xRIP); MVz(x1, xRIP); SMEND(); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { // pop the actual return address from RV64 stack LD_D(xRA, xSP, 0); // native addr LD_D(x6, xSP, 8); // x86 addr @@ -627,7 +627,7 @@ void retn_to_epilog(dynarec_la64_t* dyn, int ninst, rex_t rex, int n) } MVz(x1, xRIP); SMEND(); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { // pop the actual return address from RV64 stack LD_D(xRA, xSP, 0); // native addr LD_D(x6, xSP, 8); // x86 addr diff --git a/src/dynarec/la64/dynarec_la64_helper.h b/src/dynarec/la64/dynarec_la64_helper.h index 38ae926a..a109812e 100644 --- a/src/dynarec/la64/dynarec_la64_helper.h +++ b/src/dynarec/la64/dynarec_la64_helper.h @@ -1180,18 +1180,18 @@ uintptr_t dynarec64_F20F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int B##COND(dyn->insts[ninst].nat_flags_op1, dyn->insts[ninst].nat_flags_op2, val); #define NOTEST(s1) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ ST_W(xZR, xEmu, offsetof(x64emu_t, test.test)); \ ST_W(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } #define SKIPTEST(s1) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ ST_W(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } #define GOTEST(s1, s2) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ MOV32w(s2, 1); \ ST_W(s2, xEmu, offsetof(x64emu_t, test.test)); \ } diff --git a/src/dynarec/la64/dynarec_la64_pass0.h b/src/dynarec/la64/dynarec_la64_pass0.h index a35c9669..aa7ee34e 100644 --- a/src/dynarec/la64/dynarec_la64_pass0.h +++ b/src/dynarec/la64/dynarec_la64_pass0.h @@ -12,7 +12,7 @@ dyn->f.pending = SF_SET #define READFLAGS_FUSION(A, s1, s2, s3, s4, s5) \ - if (box64_dynarec_nativeflags && ninst > 0 && !dyn->insts[ninst - 1].nat_flags_nofusion) { \ + if (BOX64ENV(dynarec_nativeflags) && ninst > 0 && !dyn->insts[ninst - 1].nat_flags_nofusion) { \ if ((A) == (X_ZF)) \ dyn->insts[ninst].nat_flags_fusion = 1; \ else if (dyn->insts[ninst - 1].nat_flags_carry && ((A) == (X_CF) || (A) == (X_CF | X_ZF))) \ @@ -54,7 +54,7 @@ #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing==1) { \ + if (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing)==1) { \ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits ? "32bits " : "", \ PKip(0), \ diff --git a/src/dynarec/la64/dynarec_la64_pass3.h b/src/dynarec/la64/dynarec_la64_pass3.h index 34654f99..193f33be 100644 --- a/src/dynarec/la64/dynarec_la64_pass3.h +++ b/src/dynarec/la64/dynarec_la64_pass3.h @@ -5,7 +5,7 @@ addInst(dyn->instsize, &dyn->insts_size, 0, 0); #define EMIT(A) \ do { \ - if (box64_dynarec_dump) print_opcode(dyn, ninst, (uint32_t)(A)); \ + if (BOX64ENV(dynarec_dump)) print_opcode(dyn, ninst, (uint32_t)(A)); \ if ((uintptr_t)dyn->block < dyn->tablestart) \ *(uint32_t*)(dyn->block) = (uint32_t)(A); \ dyn->block += 4; \ @@ -14,7 +14,7 @@ } while (0) #define MESSAGE(A, ...) \ - if (box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ if (ninst) { \ addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst - 1].x64.size, dyn->insts[ninst - 1].size / 4); \ diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c index 357eaddf..0e200145 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_3.c +++ b/src/dynarec/rv64/dynarec_rv64_00_3.c @@ -280,7 +280,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0xC2: INST_NAME("RETN"); // SETFLAGS(X_ALL, SF_SET_NODF); // Hack, set all flags (to an unknown state...) - if (box64_dynarec_safeflags) { + if (BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // lets play safe here too } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -292,7 +292,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int case 0xC3: INST_NAME("RET"); // SETFLAGS(X_ALL, SF_SET_NODF); // Hack, set all flags (to an unknown state...) - if (box64_dynarec_safeflags) { + if (BOX64ENV(dynarec_safeflags)) { READFLAGS(X_PEND); // so instead, force the deferred flags, so it's not too slow, and flags are not lost } fpu_purgecache(dyn, ninst, 1, x1, x2, x3); // using next, even if there no next @@ -438,7 +438,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int x87_purgecache(dyn, ninst, 0, x3, x1, x4); if (tmp < 0 || (tmp & 15) > 1) tmp = 0; // TODO: removed when FP is in place - if ((box64_log < 2 && !cycle_log) && tmp) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && tmp) { // GETIP(ip+3+8+8); // read the 0xCC call_n(dyn, ninst, *(void**)(addr + 8), tmp); addr += 8 + 8; @@ -459,7 +459,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } } else { INST_NAME("INT 3"); - if (!box64_ignoreint3) { + if (!BOX64ENV(ignoreint3)) { // check if TRAP signal is handled TABLE64(x1, (uintptr_t)my_context); MOV32w(x2, offsetof(box64context_t, signals[SIGTRAP])); @@ -613,7 +613,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); emit_shl8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); @@ -630,7 +630,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); emit_shr8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); @@ -647,7 +647,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int BEQ_NEXT(x2, xZR); } SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); emit_sar8(dyn, ninst, x1, x2, x5, x4, x6); EBBACK(x5, 0); @@ -927,7 +927,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int MESSAGE(LOG_DUMP, "Native Call to %s (retn=%d)\n", GetNativeName(GetNativeFnc(dyn->insts[ninst].natcall - 1)), dyn->insts[ninst].retn); // calling a native function sse_purge07cache(dyn, ninst, x3); - if ((box64_log < 2 && !cycle_log) && dyn->insts[ninst].natcall) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall) { // Partially support isSimpleWrapper tmp = isSimpleWrapper(*(wrapper_t*)(dyn->insts[ninst].natcall + 2)); } else @@ -937,7 +937,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int if (dyn->insts[ninst].natcall && isRetX87Wrapper(*(wrapper_t*)(dyn->insts[ninst].natcall + 2))) // return value will be on the stack, so the stack depth needs to be updated x87_purgecache(dyn, ninst, 0, x3, x1, x4); - if ((box64_log < 2 && !cycle_log) && dyn->insts[ninst].natcall && tmp) { + if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall && tmp) { // GETIP(ip+3+8+8); // read the 0xCC call_n(dyn, ninst, *(void**)(dyn->insts[ninst].natcall + 2 + 8), tmp); POP1(xRIP); // pop the return address @@ -970,13 +970,13 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } break; default: - if ((box64_dynarec_safeflags > 1) || (ninst && dyn->insts[ninst - 1].x64.set_flags)) { + if ((BOX64ENV(dynarec_safeflags) > 1) || (ninst && dyn->insts[ninst - 1].x64.set_flags)) { READFLAGS(X_PEND); // that's suspicious } else { SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to set flags to "dont'care" state } // regular call - /*if(box64_dynarec_callret && box64_dynarec_bigblock>1) { + /*if(BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock)>1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -991,7 +991,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int } fpu_purgecache(dyn, ninst, 1, x1, x3, x4); PUSH1z(x2); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); // Push actual return address j64 = (dyn->insts) ? (GETMARK - (dyn->native_size)) : 0; @@ -1011,9 +1011,9 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int j64 = addr + i32; jump_to_next(dyn, j64, 0, ninst, rex.is32bits); MARK; - if (box64_dynarec_callret && dyn->vector_sew != VECTOR_SEWNA) + if (BOX64ENV(dynarec_callret) && dyn->vector_sew != VECTOR_SEWNA) vector_vsetvli(dyn, ninst, x3, dyn->vector_sew, VECTOR_LMUL1, 1); - if (box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if (BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... j64 = getJumpTableAddress64(addr); TABLE64(x4, j64); @@ -1265,7 +1265,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int CALL(native_div0, -1, 0, 0); LOAD_XEMU_CALL(); } else { - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1293,7 +1293,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int && *(uint8_t*)(dyn->insts[ninst - 1].x64.addr) == 0x31 && *(uint8_t*)(dyn->insts[ninst - 1].x64.addr + 1) == 0xD2) { GETED(0); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1308,7 +1308,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int MV(xRAX, x2); } else { GETEDH(x1, 0); // get edd changed addr, so cannot be called 2 times for same op... - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1335,7 +1335,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SET_DFNONE() if (!rex.w) { GETSED(0); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1358,7 +1358,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int && *(uint8_t*)(dyn->insts[ninst - 1].x64.addr) == 0x48 && *(uint8_t*)(dyn->insts[ninst - 1].x64.addr + 1) == 0x99) { GETED(0); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1373,7 +1373,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int MV(xRAX, x2); } else { GETEDH(x1, 0); // get edd changed addr, so cannot be called 2 times for same op... - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x3); @@ -1466,13 +1466,13 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int break; case 2: // CALL Ed INST_NAME("CALL Ed"); - PASS2IF ((box64_dynarec_safeflags > 1) || ((ninst && dyn->insts[ninst - 1].x64.set_flags) || ((ninst > 1) && dyn->insts[ninst - 2].x64.set_flags)), 1) { + PASS2IF ((BOX64ENV(dynarec_safeflags) > 1) || ((ninst && dyn->insts[ninst - 1].x64.set_flags) || ((ninst > 1) && dyn->insts[ninst - 2].x64.set_flags)), 1) { READFLAGS(X_PEND); // that's suspicious } else { SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to put flag in "don't care" state } GETEDz(0); - if (box64_dynarec_callret && box64_dynarec_bigblock > 1) { + if (BOX64ENV(dynarec_callret) && BOX64ENV(dynarec_bigblock) > 1) { BARRIER(BARRIER_FULL); } else { BARRIER(BARRIER_FLOAT); @@ -1480,7 +1480,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int *ok = 0; } GETIP_(addr); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { SET_HASCALLRET(); j64 = (dyn->insts) ? (GETMARK - (dyn->native_size)) : 0; AUIPC(x4, ((j64 + 0x800) >> 12) & 0xfffff); @@ -1493,9 +1493,9 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int PUSH1z(xRIP); jump_to_next(dyn, 0, ed, ninst, rex.is32bits); MARK; - if (box64_dynarec_callret && dyn->vector_sew != VECTOR_SEWNA) + if (BOX64ENV(dynarec_callret) && dyn->vector_sew != VECTOR_SEWNA) vector_vsetvli(dyn, ninst, x3, dyn->vector_sew, VECTOR_LMUL1, 1); - if (box64_dynarec_callret && addr >= (dyn->start + dyn->isize)) { + if (BOX64ENV(dynarec_callret) && addr >= (dyn->start + dyn->isize)) { // jumps out of current dynablock... j64 = getJumpTableAddress64(addr); TABLE64(x4, j64); diff --git a/src/dynarec/rv64/dynarec_rv64_0f.c b/src/dynarec/rv64/dynarec_rv64_0f.c index 16b414bf..b6fc356d 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f.c +++ b/src/dynarec/rv64/dynarec_rv64_0f.c @@ -334,12 +334,12 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni GETEX(x2, 0, 4); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FLW(d0, wback, fixedaddress + i * 4); FCVTWS(x1, d0, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARKi(x5, xZR, i); @@ -357,12 +357,12 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x6, x4); for (int i = 0; i < 2; ++i) { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FLW(d0, wback, fixedaddress + i * 4); FCVTWS(x1, d0, RD_DYN); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARKi(x5, xZR, i); @@ -962,12 +962,12 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni // do accurate computation, because riscv doesn't have rsqrt MOV32w(x3, 1); FCVTSW(s1, x3, RD_DYN); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FCVTSW(v0, xZR, RD_DYN); } for (int i = 0; i < 4; ++i) { FLW(s0, wback, fixedaddress + i * 4); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FLES(x3, v0, s0); // s0 >= 0.0f? BNEZ(x3, 6 * 4); FEQS(x3, s0, s0); // isnan(s0)? @@ -1121,7 +1121,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni for (int i = 0; i < 4; ++i) { FLW(s0, wback, fixedaddress + i * 4); FLW(s1, gback, gdoffset + i * 4); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, s0, s0); FEQS(x4, s1, s1); AND(x3, x3, x4); @@ -1160,7 +1160,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni for (int i = 0; i < 4; ++i) { FLW(s0, wback, fixedaddress + i * 4); FLW(s1, gback, gdoffset + i * 4); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, s0, s0); FEQS(x4, s1, s1); AND(x3, x3, x4); @@ -1790,7 +1790,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; INST_NAME("SHLD Ed, Gd, CL"); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETGD; GETED(0); @@ -1852,7 +1852,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni nextop = F8; INST_NAME("SHRD Ed, Gd, CL"); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETGD; GETED(0); @@ -1903,7 +1903,7 @@ uintptr_t dynarec64_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("LDMXCSR Md"); GETED(0); SW(ed, xEmu, offsetof(x64emu_t, mxcsr)); - if (box64_sse_flushto0) { + if (BOX64ENV(sse_flushto0)) { // TODO: applyFlushTo0 also needs to add RISC-V support. } break; diff --git a/src/dynarec/rv64/dynarec_rv64_0f_vector.c b/src/dynarec/rv64/dynarec_rv64_0f_vector.c index 7a966c0d..342ab55f 100644 --- a/src/dynarec/rv64/dynarec_rv64_0f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_0f_vector.c @@ -325,7 +325,7 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, VFSQRT_V(v1, v0, VECTOR_UNMASKED); break; case 0x52: - if (!box64_dynarec_fastround) return 0; + if (!BOX64ENV(dynarec_fastround)) return 0; INST_NAME("RSQRTPS Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -445,13 +445,13 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); GETGX_vector(q0, 1, VECTOR_SEW32); GETEX_vector(q1, 0, 0, VECTOR_SEW32); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFMIN_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); VADD_VX(q0, q1, xZR, VECTOR_MASKED); @@ -472,12 +472,12 @@ uintptr_t dynarec64_0F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, GETGX_vector(q0, 1, VECTOR_SEW32); GETEX_vector(q1, 0, 0, VECTOR_SEW32); v0 = fpu_get_scratch(dyn); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFMAX_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); VADD_VX(q0, q1, xZR, VECTOR_MASKED); diff --git a/src/dynarec/rv64/dynarec_rv64_66.c b/src/dynarec/rv64/dynarec_rv64_66.c index 3aac15f0..5fb476d9 100644 --- a/src/dynarec/rv64/dynarec_rv64_66.c +++ b/src/dynarec/rv64/dynarec_rv64_66.c @@ -1302,7 +1302,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(x2, xRCX, 0x1f); BEQ_NEXT(x2, xZR); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETEW(x1, 0); emit_shr16(dyn, ninst, x1, x2, x5, x4, x6); @@ -1314,7 +1314,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(x2, xRCX, 0x1f); BEQ_NEXT(x2, xZR); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETEW(x1, 0); emit_shl16(dyn, ninst, x1, x2, x5, x4, x6); @@ -1325,7 +1325,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni ANDI(x2, xRCX, 0x1f); BEQ_NEXT(x2, xZR); SETFLAGS(X_ALL, SF_SET_PENDING, NAT_FLAGS_FUSION); // some flags are left undefined - if (box64_dynarec_safeflags > 1) + if (BOX64ENV(dynarec_safeflags) > 1) MAYSETFLAGS(); GETSEW(x1, 0); emit_sar16(dyn, ninst, x1, x2, x5, x4, x6); @@ -1401,7 +1401,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SLLI(x7, xRDX, 48); SRLI(x7, x7, 32); OR(x2, x2, x7); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x6); @@ -1422,7 +1422,7 @@ uintptr_t dynarec64_66(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET, NAT_FLAGS_NOFUSION); SET_DFNONE(); GETSEW(x1, 0); - if (box64_dynarec_div0) { + if (BOX64ENV(dynarec_div0)) { BNE_MARK3(ed, xZR); GETIP_(ip); STORE_XEMU_CALL(x6); diff --git a/src/dynarec/rv64/dynarec_rv64_660f.c b/src/dynarec/rv64/dynarec_rv64_660f.c index ac6f5b24..62043219 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f.c +++ b/src/dynarec/rv64/dynarec_rv64_660f.c @@ -192,12 +192,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); for (int i = 0; i < 2; ++i) { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FLD(d0, wback, fixedaddress + i * 8); FCVTWD(x1, d0, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARKi(x5, xZR, i); @@ -215,12 +215,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int d0 = fpu_get_scratch(dyn); u8 = sse_setround(dyn, ninst, x4, x5); for (int i = 0; i < 2; ++i) { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FLD(d0, wback, fixedaddress + i * 8); FCVTWD(x1, d0, RD_DYN); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARKi(x5, xZR, i); @@ -320,17 +320,17 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETGX(); GETEX(x2, 0, 8); d0 = fpu_get_scratch(dyn); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { d1 = fpu_get_scratch(dyn); FMVDX(d1, xZR); } for (int i = 0; i < 2; ++i) { FLD(d0, wback, fixedaddress + i * 8); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FLTD(x3, d0, d1); } FSQRTD(d0, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { BEQ(x3, xZR, 8); FNEGD(d0, d0); } @@ -371,12 +371,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FADDD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BEQZ(x3, 16); FEQD(x3, v0, v0); @@ -391,12 +391,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FMULD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BEQZ(x3, 16); FEQD(x3, v0, v0); @@ -445,12 +445,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FSUBD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BEQZ(x3, 16); FEQD(x3, v0, v0); @@ -484,12 +484,12 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x1, 0, 8); GETGX(); SSE_LOOP_FQ(x3, x4, { - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FDIVD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BEQZ(x3, 16); FEQD(x3, v0, v0); @@ -1090,13 +1090,13 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int d1 = fpu_get_scratch(dyn); FLD(d0, gback, gdoffset + 0); FLD(d1, gback, gdoffset + 8); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, d0, d0); FEQD(x4, d1, d1); AND(x3, x3, x4); } FADDD(d0, d0, d1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x4, d0, d0); BEQZ(x3, 12); BNEZ(x4, 8); @@ -1109,13 +1109,13 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x2, 0, 8); FLD(d0, wback, fixedaddress + 0); FLD(d1, wback, fixedaddress + 8); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, d0, d0); FEQD(x4, d1, d1); AND(x3, x3, x4); } FADDD(d0, d0, d1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x4, d0, d0); BEQZ(x3, 12); BNEZ(x4, 8); @@ -1921,11 +1921,11 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int v1 = fpu_get_scratch(dyn); FLD(v0, wback, fixedaddress + 0); FLD(v1, wback, fixedaddress + 8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FCVTWD(x3, v0, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARK(x5, xZR); @@ -1934,7 +1934,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int FSFLAGSI(0); // // reset all bits } FCVTWD(x4, v1, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQ_MARK2(x5, xZR); diff --git a/src/dynarec/rv64/dynarec_rv64_660f_vector.c b/src/dynarec/rv64/dynarec_rv64_660f_vector.c index 8eba1e38..41960c73 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_660f_vector.c @@ -920,13 +920,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VXOR_VV(v0, v0, v0, VECTOR_UNMASKED); VMFLT_VV(VMASK, q1, v0, VECTOR_UNMASKED); } VFSQRT_V(q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); } break; @@ -976,13 +976,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFADD_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); @@ -996,13 +996,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFMUL_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); @@ -1031,7 +1031,7 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMV_S_X(v0, x4); break; case 0x5B: - if (!box64_dynarec_fastround) return 0; + if (!BOX64ENV(dynarec_fastround)) return 0; INST_NAME("CVTPS2DQ Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -1047,13 +1047,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFSUB_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); @@ -1068,12 +1068,12 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); v0 = fpu_get_scratch(dyn); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFMIN_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); VADD_VX(q0, q1, xZR, VECTOR_MASKED); @@ -1085,13 +1085,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFDIV_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VMFEQ_VV(v0, q0, q0, VECTOR_UNMASKED); VXOR_VI(v0, v0, 0x1F, VECTOR_UNMASKED); @@ -1106,12 +1106,12 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i GETGX_vector(q0, 1, VECTOR_SEW64); GETEX_vector(q1, 0, 0, VECTOR_SEW64); v0 = fpu_get_scratch(dyn); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMFEQ_VV(VMASK, q0, q0, VECTOR_UNMASKED); VMFEQ_VV(v0, q1, q1, VECTOR_UNMASKED); } VFMAX_VV(q0, q0, q1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMAND_MM(VMASK, v0, VMASK); VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); VADD_VX(q0, q1, xZR, VECTOR_MASKED); @@ -1619,13 +1619,13 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VXOR_VI(VMASK, VMASK, 0x1F, VECTOR_UNMASKED); VCOMPRESS_VM(d1, v0, VMASK); vector_vsetvli(dyn, ninst, x1, VECTOR_SEW64, VECTOR_LMUL1, 1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMFEQ_VV(v0, d0, d0, VECTOR_UNMASKED); VMFEQ_VV(v1, d1, d1, VECTOR_UNMASKED); VMAND_MM(v0, v0, v1); } VFADD_VV(q0, d0, d1, VECTOR_UNMASKED); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { VMFEQ_VV(v1, q0, q0, VECTOR_UNMASKED); VMANDN_MM(VMASK, v0, v1); VFSGNJN_VV(q0, q0, q0, VECTOR_MASKED); @@ -2010,7 +2010,7 @@ uintptr_t dynarec64_660F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMULH_VV(q0, q0, q1, VECTOR_UNMASKED); break; case 0xE6: - if (!box64_dynarec_fastround) return 0; + if (!BOX64ENV(dynarec_fastround)) return 0; INST_NAME("CVTTPD2DQ Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); diff --git a/src/dynarec/rv64/dynarec_rv64_avx.c b/src/dynarec/rv64/dynarec_rv64_avx.c index f8b1ce89..3008fde5 100644 --- a/src/dynarec/rv64/dynarec_rv64_avx.c +++ b/src/dynarec/rv64/dynarec_rv64_avx.c @@ -56,7 +56,7 @@ uintptr_t dynarec64_AVX(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int n DEFAULT; } - if ((*ok == -1) && (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing == 1)) { + if ((*ok == -1) && (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing) == 1)) { dynarec_log(LOG_NONE, "Dynarec unimplemented AVX opcode size %d prefix %s map %s opcode %02X ", 128 << vex.l, avx_prefix_string(vex.p), avx_map_string(vex.m), opcode); } return addr; diff --git a/src/dynarec/rv64/dynarec_rv64_d9.c b/src/dynarec/rv64/dynarec_rv64_d9.c index 4ea79815..02cf39a5 100644 --- a/src/dynarec/rv64/dynarec_rv64_d9.c +++ b/src/dynarec/rv64/dynarec_rv64_d9.c @@ -460,7 +460,7 @@ uintptr_t dynarec64_D9(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni switch ((nextop >> 3) & 7) { case 0: INST_NAME("FLD ST0, float[ED]"); - X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, box64_dynarec_x87double ? EXT_CACHE_ST_D : EXT_CACHE_ST_F); + X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, BOX64ENV(dynarec_x87double) ? EXT_CACHE_ST_D : EXT_CACHE_ST_F); addr = geted(dyn, addr, ninst, nextop, &ed, x2, x1, &fixedaddress, rex, NULL, 1, 0); FLW(v1, ed, fixedaddress); if (!ST_IS_F(0)) { diff --git a/src/dynarec/rv64/dynarec_rv64_db.c b/src/dynarec/rv64/dynarec_rv64_db.c index 6943eac7..9b58410d 100644 --- a/src/dynarec/rv64/dynarec_rv64_db.c +++ b/src/dynarec/rv64/dynarec_rv64_db.c @@ -201,11 +201,11 @@ uintptr_t dynarec64_DB(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("FISTTP Ed, ST0"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, EXT_CACHE_ST_D); addr = geted(dyn, addr, ninst, nextop, &wback, x3, x4, &fixedaddress, rex, NULL, 1, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FCVTWD(x4, v1, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BEQZ_MARK(x5); @@ -225,12 +225,12 @@ uintptr_t dynarec64_DB(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni u8 = x87_setround(dyn, ninst, x1, x2); addr = geted(dyn, addr, ninst, nextop, &wback, x2, x3, &fixedaddress, rex, NULL, 1, 0); v2 = fpu_get_scratch(dyn); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FCVTWD(x4, v1, RD_DYN); x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BEQ_MARK2(x5, xZR); @@ -260,7 +260,7 @@ uintptr_t dynarec64_DB(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SD(x5, ed, fixedaddress + 0); SH(x6, ed, fixedaddress + 8); } else { - if (box64_x87_no80bits) { + if (BOX64ENV(x87_no80bits)) { X87_PUSH_OR_FAIL(v1, dyn, ninst, x1, EXT_CACHE_ST_D); FLD(v1, ed, fixedaddress); } else { @@ -274,7 +274,7 @@ uintptr_t dynarec64_DB(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni break; case 7: INST_NAME("FSTP tbyte"); - if (box64_x87_no80bits) { + if (BOX64ENV(x87_no80bits)) { v1 = x87_get_st(dyn, ninst, x1, x2, 0, EXT_CACHE_ST_D); addr = geted(dyn, addr, ninst, nextop, &wback, x2, x1, &fixedaddress, rex, NULL, 1, 0); FSD(v1, wback, fixedaddress); diff --git a/src/dynarec/rv64/dynarec_rv64_dd.c b/src/dynarec/rv64/dynarec_rv64_dd.c index 2d2c22d4..06e2ea98 100644 --- a/src/dynarec/rv64/dynarec_rv64_dd.c +++ b/src/dynarec/rv64/dynarec_rv64_dd.c @@ -169,11 +169,11 @@ uintptr_t dynarec64_DD(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni if (ST_IS_I64(0)) { FSD(v1, wback, fixedaddress); } else { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FCVTLD(x4, v1, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BEQZ_MARK(x5); diff --git a/src/dynarec/rv64/dynarec_rv64_df.c b/src/dynarec/rv64/dynarec_rv64_df.c index 119a2910..9d277713 100644 --- a/src/dynarec/rv64/dynarec_rv64_df.c +++ b/src/dynarec/rv64/dynarec_rv64_df.c @@ -135,7 +135,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni INST_NAME("FISTTP Ew, ST0"); v1 = x87_get_st(dyn, ninst, x1, x2, 0, EXT_CACHE_ST_F); addr = geted(dyn, addr, ninst, nextop, &wback, x3, x4, &fixedaddress, rex, NULL, 1, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } if (ST_IS_F(0)) { @@ -143,7 +143,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } else { FCVTWD(x4, v1, RD_RTZ); } - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BNEZ_MARK(x5); @@ -162,7 +162,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni v1 = x87_get_st(dyn, ninst, x1, x2, 0, EXT_CACHE_ST_F); u8 = x87_setround(dyn, ninst, x1, x2); addr = geted(dyn, addr, ninst, nextop, &wback, x2, x3, &fixedaddress, rex, NULL, 1, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } if (ST_IS_F(0)) { @@ -171,7 +171,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni FCVTWD(x4, v1, RD_DYN); } x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BNEZ_MARK(x5); @@ -189,7 +189,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni v1 = x87_get_st(dyn, ninst, x1, x2, 0, EXT_CACHE_ST_F); u8 = x87_setround(dyn, ninst, x1, x2); addr = geted(dyn, addr, ninst, nextop, &wback, x2, x3, &fixedaddress, rex, NULL, 1, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } if (ST_IS_F(0)) { @@ -198,7 +198,7 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni FCVTWD(x4, v1, RD_DYN); } x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BNEZ_MARK(x5); @@ -288,11 +288,11 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni MARK; } - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FCVTLD(x4, v1, RD_DYN); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, 1 << FR_NV); BEQ_MARK2(x5, xZR); diff --git a/src/dynarec/rv64/dynarec_rv64_f20f.c b/src/dynarec/rv64/dynarec_rv64_f20f.c index 3fbac305..6692e3ce 100644 --- a/src/dynarec/rv64/dynarec_rv64_f20f.c +++ b/src/dynarec/rv64/dynarec_rv64_f20f.c @@ -105,12 +105,12 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSD(v0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FCVTLDxw(gd, v0, RD_RTZ); if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -126,14 +126,14 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSD(v0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } u8 = sse_setround(dyn, ninst, x2, x3); FCVTLDxw(gd, v0, RD_DYN); if (!rex.w) ZEROUP(gd); x87_restoreround(dyn, ninst, u8); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -189,13 +189,13 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETEXSD(d0, 0); GETGXSD_empty(d1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { v0 = fpu_get_scratch(dyn); // need a scratch in case d0 == d1 FMVDX(v0, xZR); FLTD(x3, d0, v0); } FSQRTD(d1, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { BEQ(x3, xZR, 8); FNEGD(d1, d1); } @@ -205,12 +205,12 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSD(v0); GETEXSD(v1, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FADDD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -227,12 +227,12 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSD(v0); GETEXSD(v1, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FMULD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -262,12 +262,12 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSD(v0); GETEXSD(v1, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FSUBD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -299,12 +299,12 @@ uintptr_t dynarec64_F20F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSD(v0); GETEXSD(v1, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQD(x3, v0, v0); FEQD(x4, v1, v1); } FDIVD(v0, v0, v1); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); diff --git a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c index 34646907..b49cf50a 100644 --- a/src/dynarec/rv64/dynarec_rv64_f20f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_f20f_vector.c @@ -150,7 +150,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i LD(x4, ed, fixedaddress); VMV_S_X(v0, x4); } - if (box64_dynarec_fastround) { + if (BOX64ENV(dynarec_fastround)) { VFMV_F_S(v0, v0); FCVTLDxw(gd, v0, RD_RTZ); if (!rex.w) ZEROUP(gd); @@ -183,7 +183,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i LD(x4, ed, fixedaddress); VMV_S_X(v0, x4); } - if (box64_dynarec_fastround) { + if (BOX64ENV(dynarec_fastround)) { VFMV_F_S(v0, v0); u8 = sse_setround(dyn, ninst, x2, x3); FCVTLDxw(gd, v0, RD_DYN); @@ -223,7 +223,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i LD(x4, ed, fixedaddress); VMV_S_X(v1, x4); } - if (box64_dynarec_fastnan) { + if (BOX64ENV(dynarec_fastnan)) { VECTOR_LOAD_VMASK(0b01, x4, 1); VFSQRT_V(v0, v1, VECTOR_MASKED); } else { @@ -243,7 +243,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x58: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("ADDSD Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); @@ -262,7 +262,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VFADD_VV(v0, v0, v1, VECTOR_MASKED); break; case 0x59: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("MULSD Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); @@ -322,7 +322,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x5C: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("SUBSD Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); @@ -355,7 +355,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMV_S_X(v1, x4); GETGX_vector(v0, 1, VECTOR_SEW64); } - if (box64_dynarec_fastnan) { + if (BOX64ENV(dynarec_fastnan)) { VECTOR_LOAD_VMASK(0b01, x4, 1); VFMIN_VV(v0, v0, v1, VECTOR_MASKED); } else { @@ -382,7 +382,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x5E: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("DIVSD Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); @@ -415,7 +415,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMV_S_X(v1, x4); GETGX_vector(v0, 1, VECTOR_SEW64); } - if (box64_dynarec_fastnan) { + if (BOX64ENV(dynarec_fastnan)) { VECTOR_LOAD_VMASK(0b01, x4, 1); VFMAX_VV(v0, v0, v1, VECTOR_MASKED); } else { @@ -553,7 +553,7 @@ uintptr_t dynarec64_F20F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0xE6: - if (!box64_dynarec_fastround) return 0; + if (!BOX64ENV(dynarec_fastround)) return 0; INST_NAME("CVTPD2DQ Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW64, 1); diff --git a/src/dynarec/rv64/dynarec_rv64_f30f.c b/src/dynarec/rv64/dynarec_rv64_f30f.c index 58daf454..b4645b41 100644 --- a/src/dynarec/rv64/dynarec_rv64_f30f.c +++ b/src/dynarec/rv64/dynarec_rv64_f30f.c @@ -134,13 +134,13 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSS(d0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } FCVTSxw(gd, d0, RD_RTZ); if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -156,7 +156,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGD; GETEXSS(d0, 0); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // // reset all bits } u8 = sse_setround(dyn, ninst, x5, x6); @@ -164,7 +164,7 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int x87_restoreround(dyn, ninst, u8); if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -209,12 +209,12 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSS(v0); GETEXSS(d0, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, v0, v0); FEQS(x4, d0, d0); } FADDS(v0, v0, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -227,12 +227,12 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSS(v0); GETEXSS(d0, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, v0, v0); FEQS(x4, d0, d0); } FMULS(v0, v0, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -264,12 +264,12 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int GETEX(x2, 0, 12); v0 = fpu_get_scratch(dyn); for (int i = 0; i < 4; ++i) { - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FSFLAGSI(0); // reset all bits } FLW(v0, wback, fixedaddress + i * 4); FCVTWS(x3, v0, RD_RTZ); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); // get back FPSR to check the IOC bit ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); BEQZ(x5, 8); @@ -283,12 +283,12 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSS(v0); GETEXSS(d0, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, v0, v0); FEQS(x4, d0, d0); } FSUBS(v0, v0, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); @@ -316,12 +316,12 @@ uintptr_t dynarec64_F30F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int nextop = F8; GETGXSS(v0); GETEXSS(d0, 0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { FEQS(x3, v0, v0); FEQS(x4, d0, d0); } FDIVS(v0, v0, d0); - if (!box64_dynarec_fastnan) { + if (!BOX64ENV(dynarec_fastnan)) { AND(x3, x3, x4); BNEZ_MARK(x3); CBNZ_NEXT(x4); diff --git a/src/dynarec/rv64/dynarec_rv64_f30f_vector.c b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c index 7cd82dfa..a167c16e 100644 --- a/src/dynarec/rv64/dynarec_rv64_f30f_vector.c +++ b/src/dynarec/rv64/dynarec_rv64_f30f_vector.c @@ -173,10 +173,10 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } else { GETEXSS(d0, 0); } - if (!box64_dynarec_fastround) FSFLAGSI(0); + if (!BOX64ENV(dynarec_fastround)) FSFLAGSI(0); FCVTSxw(gd, d0, RD_RTZ); if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -199,12 +199,12 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } else { GETEXSS(d0, 0); } - if (!box64_dynarec_fastround) FSFLAGSI(0); + if (!BOX64ENV(dynarec_fastround)) FSFLAGSI(0); u8 = sse_setround(dyn, ninst, x5, x6); FCVTSxw(gd, d0, RD_DYN); x87_restoreround(dyn, ninst, u8); if (!rex.w) ZEROUP(gd); - if (!box64_dynarec_fastround) { + if (!BOX64ENV(dynarec_fastround)) { FRFLAGS(x5); ANDI(x5, x5, (1 << FR_NV) | (1 << FR_OF)); CBZ_NEXT(x5); @@ -277,7 +277,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VFRDIV_VF(v0, v1, v1, VECTOR_MASKED); break; case 0x58: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("ADDSS Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -296,7 +296,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VFADD_VV(v0, v0, v1, VECTOR_MASKED); break; case 0x59: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("MULSS Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -341,7 +341,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x5B: - if (!box64_dynarec_fastround) return 0; + if (!BOX64ENV(dynarec_fastround)) return 0; INST_NAME("CVTTPS2DQ Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -357,7 +357,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x5C: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("SUBSS Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -390,7 +390,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMV_S_X(v1, x4); GETGX_vector(v0, 1, VECTOR_SEW32); } - if (box64_dynarec_fastnan) { + if (BOX64ENV(dynarec_fastnan)) { VECTOR_LOAD_VMASK(0b0001, x4, 1); VFMIN_VV(v0, v0, v1, VECTOR_MASKED); } else { @@ -417,7 +417,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i } break; case 0x5E: - if (!box64_dynarec_fastnan) return 0; + if (!BOX64ENV(dynarec_fastnan)) return 0; INST_NAME("DIVSS Gx, Ex"); nextop = F8; SET_ELEMENT_WIDTH(x1, VECTOR_SEW32, 1); @@ -450,7 +450,7 @@ uintptr_t dynarec64_F30F_vector(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t i VMV_S_X(v1, x4); GETGX_vector(v0, 1, VECTOR_SEW32); } - if (box64_dynarec_fastnan) { + if (BOX64ENV(dynarec_fastnan)) { VECTOR_LOAD_VMASK(0b0001, x4, 1); VFMAX_VV(v0, v0, v1, VECTOR_MASKED); } else { diff --git a/src/dynarec/rv64/dynarec_rv64_functions.c b/src/dynarec/rv64/dynarec_rv64_functions.c index 34dbeb47..0b1943d6 100644 --- a/src/dynarec/rv64/dynarec_rv64_functions.c +++ b/src/dynarec/rv64/dynarec_rv64_functions.c @@ -217,7 +217,7 @@ static void extcache_promote_double_combined(dynarec_rv64_t* dyn, int ninst, int } else a = dyn->insts[ninst].e.combined1; int i = extcache_get_st_f_i64_noback(dyn, ninst, a); - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_combined, ninst=%d combined%c %d i=%d (stack:%d/%d)\n", ninst, (a == dyn->insts[ninst].e.combined2)?'2':'1', a ,i, dyn->insts[ninst].e.stack_push, -dyn->insts[ninst].e.stack_pop); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_combined, ninst=%d combined%c %d i=%d (stack:%d/%d)\n", ninst, (a == dyn->insts[ninst].e.combined2)?'2':'1', a ,i, dyn->insts[ninst].e.stack_push, -dyn->insts[ninst].e.stack_pop); if (i >= 0) { dyn->insts[ninst].e.extcache[i].t = EXT_CACHE_ST_D; if (!dyn->insts[ninst].e.barrier) @@ -236,19 +236,19 @@ static void extcache_promote_double_internal(dynarec_rv64_t* dyn, int ninst, int while (ninst >= 0) { a += dyn->insts[ninst].e.stack_pop; // adjust Stack depth: add pop'd ST (going backward) int i = extcache_get_st_f_i64(dyn, ninst, a); - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d, a=%d st=%d:%d, i=%d\n", ninst, a, dyn->insts[ninst].e.stack, dyn->insts[ninst].e.stack_next, i); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d, a=%d st=%d:%d, i=%d\n", ninst, a, dyn->insts[ninst].e.stack, dyn->insts[ninst].e.stack_next, i); if (i < 0) return; dyn->insts[ninst].e.extcache[i].t = EXT_CACHE_ST_D; // check combined propagation too if (dyn->insts[ninst].e.combined1 || dyn->insts[ninst].e.combined2) { if (dyn->insts[ninst].e.swapped) { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); if (a == dyn->insts[ninst].e.combined1) a = dyn->insts[ninst].e.combined2; else if (a == dyn->insts[ninst].e.combined2) a = dyn->insts[ninst].e.combined1; } else { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_internal, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); extcache_promote_double_combined(dyn, ninst, maxinst, a); } } @@ -264,19 +264,19 @@ static void extcache_promote_double_forward(dynarec_rv64_t* dyn, int ninst, int while ((ninst != -1) && (ninst < maxinst) && (a >= 0)) { a += dyn->insts[ninst].e.stack_push; // // adjust Stack depth: add push'd ST (going forward) if ((dyn->insts[ninst].e.combined1 || dyn->insts[ninst].e.combined2) && dyn->insts[ninst].e.swapped) { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d swapped %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); if (a == dyn->insts[ninst].e.combined1) a = dyn->insts[ninst].e.combined2; else if (a == dyn->insts[ninst].e.combined2) a = dyn->insts[ninst].e.combined1; } int i = extcache_get_st_f_i64_noback(dyn, ninst, a); - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d, a=%d st=%d:%d(%d/%d), i=%d\n", ninst, a, dyn->insts[ninst].e.stack, dyn->insts[ninst].e.stack_next, dyn->insts[ninst].e.stack_push, -dyn->insts[ninst].e.stack_pop, i); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d, a=%d st=%d:%d(%d/%d), i=%d\n", ninst, a, dyn->insts[ninst].e.stack, dyn->insts[ninst].e.stack_next, dyn->insts[ninst].e.stack_push, -dyn->insts[ninst].e.stack_pop, i); if (i < 0) return; dyn->insts[ninst].e.extcache[i].t = EXT_CACHE_ST_D; // check combined propagation too if ((dyn->insts[ninst].e.combined1 || dyn->insts[ninst].e.combined2) && !dyn->insts[ninst].e.swapped) { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double_forward, ninst=%d combined %d/%d vs %d with st %d\n", ninst, dyn->insts[ninst].e.combined1 ,dyn->insts[ninst].e.combined2, a, dyn->insts[ninst].e.stack); extcache_promote_double_combined(dyn, ninst, maxinst, a); } a -= dyn->insts[ninst].e.stack_pop; // adjust Stack depth: remove pop'd ST (going forward) @@ -292,20 +292,20 @@ static void extcache_promote_double_forward(dynarec_rv64_t* dyn, int ninst, int void extcache_promote_double(dynarec_rv64_t* dyn, int ninst, int a) { int i = extcache_get_current_st_f_i64(dyn, a); - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d a=%d st=%d i=%d\n", ninst, a, dyn->e.stack, i); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d a=%d st=%d i=%d\n", ninst, a, dyn->e.stack, i); if (i < 0) return; dyn->e.extcache[i].t = EXT_CACHE_ST_D; dyn->insts[ninst].e.extcache[i].t = EXT_CACHE_ST_D; // check combined propagation too if (dyn->e.combined1 || dyn->e.combined2) { if (dyn->e.swapped) { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d swapped! %d/%d vs %d\n", ninst, dyn->e.combined1 ,dyn->e.combined2, a); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d swapped! %d/%d vs %d\n", ninst, dyn->e.combined1 ,dyn->e.combined2, a); if (dyn->e.combined1 == a) a = dyn->e.combined2; else if (dyn->e.combined2 == a) a = dyn->e.combined1; } else { - // if(box64_dynarec_dump) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d combined! %d/%d vs %d\n", ninst, dyn->e.combined1 ,dyn->e.combined2, a); + // if(BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "extcache_promote_double, ninst=%d combined! %d/%d vs %d\n", ninst, dyn->e.combined1 ,dyn->e.combined2, a); if (dyn->e.combined1 == a) extcache_promote_double(dyn, ninst, dyn->e.combined2); else if (dyn->e.combined2 == a) @@ -698,7 +698,7 @@ static register_mapping_t register_mappings[] = { void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t rex) { - if (!box64_dynarec_dump && !box64_dynarec_gdbjit && !box64_dynarec_perf_map) return; + if (!BOX64ENV(dynarec_dump) && !BOX64ENV(dynarec_gdbjit) && !BOX64ENV(dynarec_perf_map)) return; static char buf[512]; int length = sprintf(buf, "barrier=%d state=%d/%d(%d), %s=%X/%X, use=%X, need=%X/%X, fuse=%d, sm=%d(%d/%d), sew@entry=%d, sew@exit=%d", @@ -751,15 +751,15 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r if (dyn->insts[ninst].e.combined1 || dyn->insts[ninst].e.combined2) length += sprintf(buf + length, " %s:%d/%d", dyn->insts[ninst].e.swapped ? "SWP" : "CMB", dyn->insts[ninst].e.combined1, dyn->insts[ninst].e.combined2); - if (box64_dynarec_dump) { + if (BOX64ENV(dynarec_dump)) { printf_x64_instruction(rex.is32bits ? my_context->dec32 : my_context->dec, &dyn->insts[ninst].x64, name); dynarec_log(LOG_NONE, "%s%p: %d emitted opcodes, inst=%d, %s%s\n", - (box64_dynarec_dump > 1) ? "\e[32m" : "", - (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (box64_dynarec_dump > 1) ? "\e[m" : ""); + (BOX64ENV(dynarec_dump) > 1) ? "\e[32m" : "", + (void*)(dyn->native_start + dyn->insts[ninst].address), dyn->insts[ninst].size / 4, ninst, buf, (BOX64ENV(dynarec_dump) > 1) ? "\e[m" : ""); } - if (box64_dynarec_gdbjit) { + if (BOX64ENV(dynarec_gdbjit)) { static char buf2[512]; - if (box64_dynarec_gdbjit > 1) { + if (BOX64ENV(dynarec_gdbjit) > 1) { sprintf(buf2, "; %d: %d opcodes, %s", ninst, dyn->insts[ninst].size / 4, buf); dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), buf2); } @@ -772,7 +772,7 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r } dyn->gdbjit_block = GdbJITBlockAddLine(dyn->gdbjit_block, (dyn->native_start + dyn->insts[ninst].address), inst_name); } - if (box64_dynarec_perf_map && box64_dynarec_perf_map_fd != -1) { + if (BOX64ENV(dynarec_perf_map) && BOX64ENV(dynarec_perf_map_fd) != -1) { writePerfMap(dyn->insts[ninst].x64.addr, dyn->native_start + dyn->insts[ninst].address, dyn->insts[ninst].size / 4, name); } } @@ -785,9 +785,9 @@ void print_opcode(dynarec_native_t* dyn, int ninst, uint32_t opcode) void print_newinst(dynarec_native_t* dyn, int ninst) { dynarec_log(LOG_NONE, "%sNew instruction %d, native=%p (0x%x)%s\n", - (box64_dynarec_dump > 1) ? "\e[4;32m" : "", + (BOX64ENV(dynarec_dump) > 1) ? "\e[4;32m" : "", ninst, dyn->block, dyn->native_size, - (box64_dynarec_dump > 1) ? "\e[m" : ""); + (BOX64ENV(dynarec_dump) > 1) ? "\e[m" : ""); } // x87 stuffs @@ -850,7 +850,7 @@ int fpu_is_st_freed(dynarec_rv64_t* dyn, int ninst, int st) void updateNativeFlags(dynarec_rv64_t* dyn) { - if (!box64_dynarec_nativeflags) + if (!BOX64ENV(dynarec_nativeflags)) return; for (int i = 1; i < dyn->size; ++i) if (dyn->insts[i].nat_flags_fusion) { diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c index af44f12b..fd88271f 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.c +++ b/src/dynarec/rv64/dynarec_rv64_helper.c @@ -611,7 +611,7 @@ void ret_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex) POP1z(xRIP); MVz(x1, xRIP); SMEND(); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { // pop the actual return address from RV64 stack LD(xRA, xSP, 0); // native addr LD(x6, xSP, 8); // x86 addr @@ -680,7 +680,7 @@ void retn_to_epilog(dynarec_rv64_t* dyn, int ninst, rex_t rex, int n) } MVz(x1, xRIP); SMEND(); - if (box64_dynarec_callret) { + if (BOX64ENV(dynarec_callret)) { // pop the actual return address from RV64 stack LD(xRA, xSP, 0); // native addr LD(x6, xSP, 8); // x86 addr @@ -2891,10 +2891,10 @@ void fpu_reset_cache(dynarec_rv64_t* dyn, int ninst, int reset_n) #endif extcacheUnwind(&dyn->e); #if STEP == 0 - if (box64_dynarec_dump) dynarec_log(LOG_NONE, "New x87stack=%d\n", dyn->e.x87stack); + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, "New x87stack=%d\n", dyn->e.x87stack); #endif #if defined(HAVE_TRACE) && (STEP > 2) - if (box64_dynarec_dump) + if (BOX64ENV(dynarec_dump)) if (memcmp(&dyn->e, &dyn->insts[reset_n].e, sizeof(ext_cache_t))) { MESSAGE(LOG_DEBUG, "Warning, difference in extcache: reset="); for (int i = 0; i < 24; ++i) diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 40ef0717..332009d0 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -963,7 +963,7 @@ #else #define X87_PUSH_OR_FAIL(var, dyn, ninst, scratch, t) \ if ((dyn->e.x87stack == 8) || (dyn->e.pushed == 8)) { \ - if (box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.pushed, ninst); \ + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.pushed, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -971,7 +971,7 @@ #define X87_PUSH_EMPTY_OR_FAIL(dyn, ninst, scratch) \ if ((dyn->e.x87stack == 8) || (dyn->e.pushed == 8)) { \ - if (box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.pushed, ninst); \ + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Push, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.pushed, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -979,7 +979,7 @@ #define X87_POP_OR_FAIL(dyn, ninst, scratch) \ if ((dyn->e.x87stack == -8) || (dyn->e.poped == 8)) { \ - if (box64_dynarec_dump) dynarec_log(LOG_NONE, " Warning, suspicious x87 Pop, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.poped, ninst); \ + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, " Warning, suspicious x87 Pop, stack=%d/%d on inst %d\n", dyn->e.x87stack, dyn->e.poped, ninst); \ dyn->abort = 1; \ return addr; \ } \ @@ -1773,16 +1773,16 @@ uintptr_t dynarec64_AVX_F3_0F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, B##COND(dyn->insts[ninst].nat_flags_op1, dyn->insts[ninst].nat_flags_op2, val); #define NOTEST(s1) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ SW(xZR, xEmu, offsetof(x64emu_t, test.test)); \ SW(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } #define SKIPTEST(s1) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ SW(xZR, xEmu, offsetof(x64emu_t, test.clean)); \ } #define GOTEST(s1, s2) \ - if (box64_dynarec_test) { \ + if (BOX64ENV(dynarec_test)) { \ MOV32w(s2, 1); \ SW(s2, xEmu, offsetof(x64emu_t, test.test)); \ } diff --git a/src/dynarec/rv64/dynarec_rv64_pass0.h b/src/dynarec/rv64/dynarec_rv64_pass0.h index 10dfeb0e..53630a89 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass0.h +++ b/src/dynarec/rv64/dynarec_rv64_pass0.h @@ -15,7 +15,7 @@ dyn->f.pending = SF_SET #define READFLAGS_FUSION(A, s1, s2, s3, s4, s5) \ - if (box64_dynarec_nativeflags && ninst > 0 && !dyn->insts[ninst - 1].nat_flags_nofusion) { \ + if (BOX64ENV(dynarec_nativeflags) && ninst > 0 && !dyn->insts[ninst - 1].nat_flags_nofusion) { \ if ((A) == (X_ZF)) \ dyn->insts[ninst].nat_flags_fusion = 1; \ else if (dyn->insts[ninst - 1].nat_flags_carry && ((A) == (X_CF) || (A) == (X_CF | X_ZF))) \ @@ -73,7 +73,7 @@ #define DEFAULT \ --dyn->size; \ *ok = -1; \ - if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing == 1) { \ + if (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing) == 1) { \ dynarec_log(LOG_NONE, "%p: Dynarec stopped because of %sOpcode %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits ? "32bits " : "", \ PKip(0), \ diff --git a/src/dynarec/rv64/dynarec_rv64_pass3.h b/src/dynarec/rv64/dynarec_rv64_pass3.h index d8a270f6..781c69e9 100644 --- a/src/dynarec/rv64/dynarec_rv64_pass3.h +++ b/src/dynarec/rv64/dynarec_rv64_pass3.h @@ -5,7 +5,7 @@ addInst(dyn->instsize, &dyn->insts_size, 0, 0); #define EMIT(A) \ do { \ - if (box64_dynarec_dump) print_opcode(dyn, ninst, (uint32_t)A); \ + if (BOX64ENV(dynarec_dump)) print_opcode(dyn, ninst, (uint32_t)A); \ *(uint32_t*)(dyn->block) = (uint32_t)(A); \ dyn->block += 4; \ dyn->native_size += 4; \ @@ -13,13 +13,13 @@ } while (0) #define MESSAGE(A, ...) \ - if (box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) + if (BOX64ENV(dynarec_dump)) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ dyn->vector_sew = dyn->insts[ninst].vector_sew_entry; \ dyn->inst_sew = dyn->vector_sew; \ dyn->inst_vlmul = VECTOR_LMUL1; \ dyn->inst_vl = 0; \ - if (box64_dynarec_dump) print_newinst(dyn, ninst); \ + if (BOX64ENV(dynarec_dump)) print_newinst(dyn, ninst); \ if (ninst) { \ addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst - 1].x64.size, dyn->insts[ninst - 1].size / 4); \ dyn->insts[ninst].ymm0_pass3 = dyn->ymm_zero; \ @@ -44,7 +44,7 @@ } #define DEFAULT_VECTOR \ - if (box64_dynarec_log >= LOG_INFO || box64_dynarec_dump || box64_dynarec_missing == 2) { \ + if (BOX64ENV(dynarec_log) >= LOG_INFO || BOX64ENV(dynarec_dump) || BOX64ENV(dynarec_missing) == 2) { \ dynarec_log(LOG_NONE, "%p: Dynarec fallback to scalar version because of %sOpcode" \ " %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X", \ (void*)ip, rex.is32bits ? "x86 " : "x64 ", \ |