diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-15 18:16:16 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-15 18:16:16 +0100 |
| commit | 8901d1c37da07f274c9525dcdb00971b323588aa (patch) | |
| tree | 9b35aa332c0f52662da67dc8e66b4420e97b220f /src | |
| parent | ec9dedd75cd072853550d25ae555b68641ee0312 (diff) | |
| download | box64-8901d1c37da07f274c9525dcdb00971b323588aa.tar.gz box64-8901d1c37da07f274c9525dcdb00971b323588aa.zip | |
[ARM64_DYNAREC] Optimized F6 /6 /7 opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_00.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index 04573de4..43d0cd52 100644 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2843,18 +2843,24 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin break; case 6: INST_NAME("DIV Eb"); - MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_ALL, SF_SET); GETEB(x1, 0); - CALL(div8, -1); + UXTHw(x2, xRAX); + UDIVw(x3, x2, ed); + MSUBw(x4, x3, ed, x2); // x4 = x2 mod ed (i.e. x2 - x3*ed) + BFIx(xRAX, x3, 0, 8); + BFIx(xRAX, x4, 8, 8); break; case 7: INST_NAME("IDIV Eb"); SKIPTEST(x1); - MESSAGE(LOG_DUMP, "Need Optimization\n"); SETFLAGS(X_ALL, SF_SET); - GETEB(x1, 0); - CALL(idiv8, -1); + GETSEB(x1, 0); + SXTHw(x2, xRAX); + SDIVw(x3, x2, ed); + MSUBw(x4, x3, ed, x2); // x4 = x2 mod ed (i.e. x2 - x3*ed) + BFIx(xRAX, x3, 0, 8); + BFIx(xRAX, x4, 8, 8); break; } break; |