Skip to content

Commit 32fbdd2

Browse files
authored
[LA64_DYNAREC] Added some missing SM=2 store hints (#3314)
1 parent 050e0f9 commit 32fbdd2

File tree

4 files changed

+9
-0
lines changed

4 files changed

+9
-0
lines changed

src/dynarec/la64/dynarec_la64_00.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2589,13 +2589,15 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
25892589
tmp = 0; // TODO: removed when FP is in place
25902590
if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && tmp) {
25912591
call_n(dyn, ninst, (void*)(addr + 8), tmp);
2592+
SMWRITE2();
25922593
addr += 8 + 8;
25932594
} else {
25942595
GETIP(ip + 1, x7); // read the 0xCC
25952596
STORE_XEMU_CALL();
25962597
ADDI_D(x3, xRIP, 8 + 8 + 2); // expected return address
25972598
ADDI_D(x1, xEmu, (uint32_t)offsetof(x64emu_t, ip)); // setup addr as &emu->ip
25982599
CALL_(const_int3, -1, x3, x1, 0);
2600+
SMWRITE2();
25992601
LOAD_XEMU_CALL();
26002602
addr += 8 + 8;
26012603
BNE_MARK(xRIP, x3);
@@ -3245,13 +3247,15 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
32453247
x87_purgecache(dyn, ninst, 0, x3, x1, x4);
32463248
if ((BOX64ENV(log) < 2 && !BOX64ENV(rolling_log)) && dyn->insts[ninst].natcall && tmp) {
32473249
call_n(dyn, ninst, (void*)(dyn->insts[ninst].natcall + 2 + 8), tmp);
3250+
SMWRITE2();
32483251
POP1(xRIP); // pop the return address
32493252
dyn->last_ip = addr;
32503253
} else {
32513254
GETIP_(dyn->insts[ninst].natcall, x7); // read the 0xCC already
32523255
STORE_XEMU_CALL();
32533256
ADDI_D(x1, xEmu, (uint32_t)offsetof(x64emu_t, ip)); // setup addr as &emu->ip
32543257
CALL_S(const_int3, -1, x1);
3258+
SMWRITE2();
32553259
LOAD_XEMU_CALL();
32563260
MOV64x(x3, dyn->insts[ninst].natcall);
32573261
ADDI_D(x3, x3, 2 + 8 + 8);

src/dynarec/la64/dynarec_la64_0f.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,7 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
709709
else
710710
REVB_2W(x1, gd);
711711
SDxw(x1, wback, fixedaddress);
712+
SMWRITE2();
712713
break;
713714
default:
714715
DEFAULT;

src/dynarec/la64/dynarec_la64_660f.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,6 +1120,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
11201120
u8 = (F8) & 15;
11211121
VPICKVE2GR_BU(x1, q0, u8);
11221122
ST_B(x1, wback, fixedaddress);
1123+
SMWRITE2();
11231124
}
11241125
break;
11251126
case 0x15:
@@ -1136,6 +1137,7 @@ uintptr_t dynarec64_660F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int
11361137
u8 = (F8) & 7;
11371138
VPICKVE2GR_HU(x1, q0, u8);
11381139
ST_H(x1, wback, fixedaddress);
1140+
SMWRITE2();
11391141
}
11401142
break;
11411143
case 0x16:

src/dynarec/la64/dynarec_la64_avx_66_0f3a.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t i
387387
addr = geted(dyn, addr, ninst, nextop, &wback, x2, x4, &fixedaddress, rex, NULL, 0, 1);
388388
u8 = (F8) & 15;
389389
VSTELM_B(q0, wback, 0, u8);
390+
SMWRITE2();
390391
}
391392
break;
392393
case 0x15:
@@ -402,6 +403,7 @@ uintptr_t dynarec64_AVX_66_0F3A(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t i
402403
addr = geted(dyn, addr, ninst, nextop, &wback, x2, x4, &fixedaddress, rex, NULL, 0, 1);
403404
u8 = (F8) & 7;
404405
VSTELM_H(q0, wback, 0, u8);
406+
SMWRITE2();
405407
}
406408
break;
407409
case 0x16:

0 commit comments

Comments
 (0)