diff options
| author | LiZhuoheng <114734429+zohanzephyr@users.noreply.github.com> | 2024-07-04 13:59:54 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-04 07:59:54 +0200 |
| commit | b5946f37526606e05b28fc29af0b5eb1a2497414 (patch) | |
| tree | 486911d50c958700ef1d07bb9989444771009474 /src | |
| parent | 371435afd0de11707c3f32405d0bf168a1250a7d (diff) | |
| download | box64-b5946f37526606e05b28fc29af0b5eb1a2497414.tar.gz box64-b5946f37526606e05b28fc29af0b5eb1a2497414.zip | |
[RV64_DYNAREC] modify DF default /4 opcode (#1633)
* [RV64_DYNAREC] modify DF default /4 opcode * [RV64_DYNAREC] added DF default /4 opcode
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_df.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_df.c b/src/dynarec/rv64/dynarec_rv64_df.c index 239a0c6f..a164fc63 100644 --- a/src/dynarec/rv64/dynarec_rv64_df.c +++ b/src/dynarec/rv64/dynarec_rv64_df.c @@ -151,8 +151,8 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SH(x4, wback, fixedaddress); X87_POP_OR_FAIL(dyn, ninst, x3); break; - case 3: - INST_NAME("FISTP Ew, ST0"); + case 2: + INST_NAME("FIST Ew, ST0"); 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); @@ -177,10 +177,9 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } MARK2; SH(x4, wback, fixedaddress); - X87_POP_OR_FAIL(dyn, ninst, x3); break; - case 4: - INST_NAME("FIST Ew, ST0"); + case 3: + INST_NAME("FISTP Ew, ST0"); 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); @@ -205,6 +204,16 @@ uintptr_t dynarec64_DF(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int ni } MARK2; SH(x4, wback, fixedaddress); + X87_POP_OR_FAIL(dyn, ninst, x3); + break; + case 4: + INST_NAME("FBLD ST0, tbytes"); + X87_PUSH_EMPTY_OR_FAIL(dyn, ninst, x1); + addr = geted(dyn, addr, ninst, nextop, &ed, x1, x2, &fixedaddress, rex, NULL, 0, 0); + if(ed != x1) { MV(x1, ed); } + s0 = x87_stackcount(dyn, ninst, x3); + CALL(fpu_fbld, -1); + x87_unstackcount(dyn, ninst, x3, s0); break; case 5: INST_NAME("FILD ST0, i64"); |