diff options
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"); |