diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-09-16 17:44:27 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-09-16 17:44:27 +0200 |
| commit | ea48f2b823b253fd4ed61925d5b3ac9ac2d2955e (patch) | |
| tree | 1e6997434a4d60913f72c3c65e58e92f760fef54 /src/dynarec/arm64 | |
| parent | 85b07f7441e7342e7d4c40166eef3b47c7090745 (diff) | |
| download | box64-ea48f2b823b253fd4ed61925d5b3ac9ac2d2955e.tar.gz box64-ea48f2b823b253fd4ed61925d5b3ac9ac2d2955e.zip | |
[DYNAREC] Improved Memory Barrier handling for LOCK prefixed opcodes
Diffstat (limited to 'src/dynarec/arm64')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66.c | 3 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_66f0.c | 17 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_f0.c | 59 |
4 files changed, 0 insertions, 81 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index a513c8ee..be128194 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -1450,7 +1450,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, ed); CBNZx_MARKLOCK(x3); } - SMDMB(); } BFIx(gb1, x1, gb2, 8); break; @@ -1499,7 +1498,6 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRxw_U12(gd, ed, 0); MARK2; } - SMDMB(); if(!ALIGNED_ATOMICxw || !cpuext.atomics) { MOVxw_REG(gd, x1); } diff --git a/src/dynarec/arm64/dynarec_arm64_66.c b/src/dynarec/arm64/dynarec_arm64_66.c index edbda902..e18b1573 100644 --- a/src/dynarec/arm64/dynarec_arm64_66.c +++ b/src/dynarec/arm64/dynarec_arm64_66.c @@ -598,7 +598,6 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } if(cpuext.atomics) { SWPALH(gd, x1, ed); - SMDMB(); if(!ALIGNED_ATOMICH) { B_MARK2_nocond; } @@ -607,7 +606,6 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDAXRH(x1, ed); STLXRH(x3, gd, ed); CBNZx_MARKLOCK(x3); - SMDMB(); if(!ALIGNED_ATOMICH) { B_MARK2_nocond; } @@ -619,7 +617,6 @@ uintptr_t dynarec64_66(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, gd, ed); CBNZx_MARK(x3); STRH_U12(gd, ed, 0); - SMDMB(); MARK2; } BFIz(gd, x1, 0, 16); diff --git a/src/dynarec/arm64/dynarec_arm64_66f0.c b/src/dynarec/arm64/dynarec_arm64_66f0.c index ed49e2f8..9516216c 100644 --- a/src/dynarec/arm64/dynarec_arm64_66f0.c +++ b/src/dynarec/arm64/dynarec_arm64_66f0.c @@ -74,7 +74,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; @@ -104,7 +103,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; @@ -168,7 +166,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } } MARK; - SMDMB(); // Common part (and fallback for EAX != Ed) UFLAG_IF {emit_cmp16(dyn, ninst, x6, x1, x3, x4, x5);} BFIx(xRAX, x1, 0, 16); @@ -196,7 +193,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); IFX(X_ALL|X_PEND) { MOVxw_REG(x2, x1); emit_add16(dyn, ninst, x2, x5, x3, x4); @@ -228,7 +224,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n emit_adc16(dyn, ninst, x1, x5, x3, x4); STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } break; @@ -259,7 +254,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; @@ -308,7 +302,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICH) { B_MARK2_nocond; MARK; // unaligned! also, not enough @@ -320,7 +313,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRH_U12(x4, wback, 0); // put the whole value - SMDMB(); } MARK2; UFLAG_IF { @@ -361,7 +353,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 2: //ADC @@ -384,7 +375,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n emit_adc16(dyn, ninst, x1, x5, x3, x4); STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } break; case 3: //SBB @@ -407,7 +397,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n emit_sbb16(dyn, ninst, x1, x5, x3, x4); STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } break; case 4: //AND @@ -447,7 +436,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n } STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } } break; @@ -489,7 +477,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICH) { B_MARK2_nocond; MARK; // unaligned! also, not enough @@ -501,7 +488,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRH_U12(x4, wback, 0); // put the whole value - SMDMB(); } MARK2; UFLAG_IF { @@ -539,7 +525,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n emit_xor16(dyn, ninst, x1, x5, x3, x4); STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } } break; @@ -589,7 +574,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 1: //DEC Ew @@ -617,7 +601,6 @@ uintptr_t dynarec64_66F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n STLXRH(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; default: diff --git a/src/dynarec/arm64/dynarec_arm64_f0.c b/src/dynarec/arm64/dynarec_arm64_f0.c index 7b9632cc..224233c8 100644 --- a/src/dynarec/arm64/dynarec_arm64_f0.c +++ b/src/dynarec/arm64/dynarec_arm64_f0.c @@ -86,7 +86,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, x1, wback); CBNZx_MARKLOCK(x4); } - SMDMB(); } break; case 0x01: @@ -115,14 +114,12 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { STADDLxw(gd, wback); } - SMDMB(); } else { MARKLOCK; LDAXRxw(x1, wback); ADDxw_REG(x4, x1, gd); STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } if(!ALIGNED_ATOMICxw) { B_MARK2_nocond; @@ -135,7 +132,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); // put the whole value - SMDMB(); } MARK2; UFLAG_IF { @@ -175,7 +171,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, x1, wback); CBNZx_MARKLOCK(x4); } - SMDMB(); } break; case 0x09: @@ -200,7 +195,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; @@ -266,7 +260,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; case 0xB0: @@ -319,7 +312,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF {emit_cmp8(dyn, ninst, x6, x2, x3, x4, x5);} BFIx(xRAX, x2, 0, 8); } - SMDMB(); } break; default: @@ -362,13 +354,11 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF { MOVxw_REG(x1, xRAX); CASALxw(x1, gd, wback); - SMDMB(); if(!ALIGNED_ATOMICxw) { B_MARK_nocond; } } else { CASALxw(xRAX, gd, wback); - SMDMB(); if(!ALIGNED_ATOMICxw) { B_NEXT_nocond; } @@ -401,7 +391,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRxw_U12(gd, wback, 0); } MARK; - SMDMB(); // Common part (and fallback for EAX != Ed) UFLAG_IF {emit_cmp32(dyn, ninst, rex, xRAX, x1, x3, x4, x5); MOVxw_REG(xRAX, x1);} else { @@ -468,7 +457,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; @@ -550,7 +538,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; case 6: @@ -593,7 +580,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; case 7: @@ -638,7 +624,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; default: @@ -698,7 +683,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x4, ed, wback); CBNZw_MARKLOCK(x4); } - SMDMB(); } break; @@ -722,11 +706,9 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin UFLAG_IF { MOVxw_REG(x3, gd); LDADDALB(x3, gd, wback); - SMDMB(); emit_add8(dyn, ninst, x3, gd, x4, x5); } else { LDADDALB(gd, gd, wback); - SMDMB(); } GBBACK; } else { @@ -735,7 +717,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin ADDw_REG(x4, x1, gd); STLXRB(x3, x4, wback); CBNZx_MARKLOCK(x3); - SMDMB(); IFX(X_ALL|X_PEND) { MOVxw_REG(x2, x1); emit_add8(dyn, ninst, x2, gd, x3, x4); @@ -786,7 +767,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICxw) { UFLAG_IF { B_MARK2_nocond; @@ -803,7 +783,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); - SMDMB(); } MARK2; UFLAG_IF { @@ -913,7 +892,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } } MARK3; - SMDMB(); UFLAG_IF { IFNATIVE(NF_EQ) {} else {BFIw(xFlags, x1, F_ZF, 1);} } @@ -952,7 +930,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_adc8(dyn, ninst, x1, x2, x4, x5); STLXRB(x4, x1, wback); CBNZx_MARKLOCK(x4); - SMDMB(); } break; case 0x11: @@ -971,7 +948,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_adc32(dyn, ninst, rex, x1, gd, x4, x5); STLXRxw(x4, x1, wback); CBNZx_MARKLOCK(x4); - SMDMB(); } break; case 0x20: @@ -1001,7 +977,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_and8(dyn, ninst, x1, gd, x3, x4); STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } } break; @@ -1029,7 +1004,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_and32(dyn, ninst, rex, x1, gd, x3, x4); STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } } break; @@ -1068,7 +1042,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICxw) { UFLAG_IF { B_MARK2_nocond; @@ -1084,7 +1057,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); // put the whole value - SMDMB(); } UFLAG_IF { MARK2; @@ -1126,7 +1098,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICxw) { B_MARK2_nocond; MARK; // unaligned! also, not enough @@ -1138,7 +1109,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); // put the whole value - SMDMB(); } MARK2; UFLAG_IF { @@ -1182,7 +1152,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 1: //OR @@ -1213,7 +1182,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 2: //ADC @@ -1236,7 +1204,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); break; case 3: //SBB INST_NAME("SBB Eb, Ib"); @@ -1258,7 +1225,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); break; case 4: //AND INST_NAME("AND Eb, Ib"); @@ -1288,7 +1254,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 5: //SUB @@ -1319,7 +1284,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 6: //XOR @@ -1350,7 +1314,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 7: //CMP @@ -1410,7 +1373,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { STADDLxw(x5, wback); } - SMDMB(); } else { MARKLOCK; LDAXRxw(x1, wback); @@ -1423,7 +1385,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } if(!ALIGNED_ATOMICxw) { B_MARK2_nocond; @@ -1442,7 +1403,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); // put the whole value - SMDMB(); } MARK2; UFLAG_IF { @@ -1483,7 +1443,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } } break; @@ -1505,7 +1464,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_adc32(dyn, ninst, rex, x1, x5, x3, x4); STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } break; case 3: //SBB @@ -1526,7 +1484,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin emit_sbb32(dyn, ninst, rex, x1, x5, x3, x4); STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } break; case 4: //AND @@ -1556,7 +1513,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 5: //SUB @@ -1595,7 +1551,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } else { STADDLxw(x5, wback); } - SMDMB(); } else { MARKLOCK; LDAXRxw(x1, wback); @@ -1608,7 +1563,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin } STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); - SMDMB(); } if(!ALIGNED_ATOMICxw) { UFLAG_IF { @@ -1631,7 +1585,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZx_MARK(x3); STRxw_U12(x4, wback, 0); // put the whole value - SMDMB(); } UFLAG_IF { MARK2; @@ -1669,7 +1622,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 7: //CMP @@ -1721,7 +1673,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin CBNZx_MARKLOCK(x3); } BFIx(gb1, x1, gb2, 8); - SMDMB(); } break; case 0x87: @@ -1771,7 +1722,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STRxw_U12(gd, ed, 0); MARK2; } - SMDMB(); if(!ALIGNED_ATOMICxw || !cpuext.atomics) { MOVxw_REG(gd, x1); } @@ -1785,7 +1735,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin case 1: INST_NAME("LOCK TEST Eb, Ib"); SETFLAGS(X_ALL, SF_SET_PENDING); - SMDMB(); GETEB(x1, 1); u8 = F8; emit_test8c(dyn, ninst, x1, u8, x3, x4, x5); @@ -1808,7 +1757,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; default: @@ -1836,7 +1784,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; default: @@ -1872,7 +1819,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; case 1: //DEC Eb @@ -1899,7 +1845,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x1, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); } break; default: @@ -1942,7 +1887,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICxw) { UFLAG_IF { B_MARK2_nocond; @@ -1958,7 +1902,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZw_MARK(x3); STRxw_U12(x4, wback, 0); - SMDMB(); } UFLAG_IF { MARK2; @@ -1998,7 +1941,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRxw(x3, x4, wback); CBNZx_MARKLOCK(x3); } - SMDMB(); if(!ALIGNED_ATOMICxw) { UFLAG_IF { B_MARK2_nocond; @@ -2014,7 +1956,6 @@ uintptr_t dynarec64_F0(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin STLXRB(x3, x4, wback); CBNZw_MARK(x3); STRxw_U12(x4, wback, 0); - SMDMB(); } UFLAG_IF { MARK2; |