diff options
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 36 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_0f.c | 4 |
2 files changed, 38 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 7cef0ba4..737b52d2 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -110,12 +110,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDRH_U12(x1, xEmu, offsetof(x64emu_t, segs[_ES])); PUSH1_32(x1); } else { + INST_NAME("Illegal 06"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -128,12 +130,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRH_U12(x1, xEmu, offsetof(x64emu_t, segs[_ES])); STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_ES])); } else { + INST_NAME("Illegal 07"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -224,12 +228,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin PUSH1_32(x1); SMWRITE(); } else { + INST_NAME("Illegal 0E"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -310,12 +316,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin PUSH1_32(x1); SMWRITE(); } else { + INST_NAME("Illegal 16"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -329,12 +337,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRH_U12(x1, xEmu, offsetof(x64emu_t, segs[_SS])); STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_SS])); } else { + INST_NAME("Illegal 17"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -403,12 +413,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin PUSH1_32(x1); SMWRITE(); } else { + INST_NAME("Illegal 1E"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -422,12 +434,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRH_U12(x1, xEmu, offsetof(x64emu_t, segs[_DS])); STRw_U12(xZR, xEmu, offsetof(x64emu_t, segs_serial[_DS])); } else { + INST_NAME("Illegal 1F"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -503,12 +517,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_daa8, x1, 0); BFIz(xRAX, x1, 0, 8); } else { + INST_NAME("Illegal 27"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -576,12 +592,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_das8, x1, 0); BFIz(xRAX, x1, 0, 8); } else { + INST_NAME("Illegal 2F"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -678,12 +696,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_aaa16, x1, 0); BFIz(xRAX, x1, 0, 16); } else { + INST_NAME("Illegal 37"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -754,12 +774,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_aas16, x1, 0); BFIx(xRAX, x1, 0, 16); } else { + INST_NAME("Illegal 3F"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -894,12 +916,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin PUSH2_32(xRSI, xRDI); SMWRITE(); } else { + INST_NAME("Illegal 60"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -914,12 +938,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin POP2_32(xRBX, xRDX); POP2_32(xRCX, xRAX); } else { + INST_NAME("Illegal 61"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -1716,13 +1742,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(rex.is32bits) { DEFAULT; } else { - INST_NAME("CALL FAR Seg:Addr"); + INST_NAME("Illegal 9A"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -3352,12 +3379,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_aam16, x1, 0); BFIz(xRAX, x1, 0, 16); } else { + INST_NAME("Illegal D4"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -3373,12 +3402,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CALL_(const_aad16, x1, 0); BFIz(xRAX, x1, 0, 16); } else { + INST_NAME("Illegal D5"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; @@ -3680,13 +3711,14 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin if(rex.is32bits) { DEFAULT; } else { - INST_NAME("JMP FAR Seg:Addr"); + INST_NAME("Illegal EA"); if(BOX64DRENV(dynarec_safeflags)>1) { READFLAGS(X_PEND); } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } GETIP(ip); + BARRIER(BARRIER_FLOAT); UDF(0); *need_epilog = 1; *ok = 0; diff --git a/src/dynarec/arm64/dynarec_arm64_0f.c b/src/dynarec/arm64/dynarec_arm64_0f.c index 205efd1e..f6e3cada 100644 --- a/src/dynarec/arm64/dynarec_arm64_0f.c +++ b/src/dynarec/arm64/dynarec_arm64_0f.c @@ -184,6 +184,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } + BARRIER(BARRIER_FLOAT); GETIP(ip); STORE_XEMU_CALL(xRIP); CALL_S(const_native_ud, -1); @@ -200,6 +201,7 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { SETFLAGS(X_ALL, SF_SET_NODF); // Hack to set flags in "don't care" state } + BARRIER(BARRIER_FLOAT); GETIP(ip); STORE_XEMU_CALL(xRIP); CALL_S(const_native_ud, -1); @@ -2650,6 +2652,8 @@ uintptr_t dynarec64_0F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 4: INST_NAME("Unsupported XSAVEC Ed"); FAKEED; + BARRIER(BARRIER_FLOAT); + GETIP(ip); UDF(0); break; case 6: |