about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-22 14:00:04 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-22 14:00:04 +0100
commitf428001f422d0b18cdf4f0a482bb15090b6b32f8 (patch)
treea7edd2785741bb4aa065a61833f4a960726d1e89 /src
parent83104b32b8380f9a6dcfe736a123c488cb06528c (diff)
downloadbox64-f428001f422d0b18cdf4f0a482bb15090b6b32f8.tar.gz
box64-f428001f422d0b18cdf4f0a482bb15090b6b32f8.zip
[DYNAREC] Added F3 0F 2C opcode
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64_emitter.h2
-rwxr-xr-xsrc/dynarec/dynarec_arm64_f30f.c8
2 files changed, 10 insertions, 0 deletions
diff --git a/src/dynarec/arm64_emitter.h b/src/dynarec/arm64_emitter.h
index 7f78659b..d61d299c 100755
--- a/src/dynarec/arm64_emitter.h
+++ b/src/dynarec/arm64_emitter.h
@@ -737,8 +737,10 @@
 // Floating-point Convert to Signed integer, rounding toward Zero
 #define FCVTZSwS(Wd, Sn)            EMIT(FCVT_scalar(0, 0b00, 0b11, 0b000, Sn, Wd))
 #define FCVTZSxS(Xd, Sn)            EMIT(FCVT_scalar(1, 0b00, 0b11, 0b000, Sn, Xd))
+#define FCVTZSxwS(Xd, Sn)           EMIT(FCVT_scalar(rex.w, 0b00, 0b11, 0b000, Sn, Xd))
 #define FCVTZSwD(Wd, Dn)            EMIT(FCVT_scalar(0, 0b01, 0b11, 0b000, Dn, Wd))
 #define FCVTZSxD(Xd, Dn)            EMIT(FCVT_scalar(1, 0b01, 0b11, 0b000, Dn, Xd))
+#define FCVTZSxwD(Xd, Dn)           EMIT(FCVT_scalar(rex.w, 0b01, 0b11, 0b000, Dn, Xd))
 // Floating-point Convert to Unsigned integer, rounding toward Zero
 #define FCVTZUwS(Wd, Sn)            EMIT(FCVT_scalar(0, 0b00, 0b11, 0b001, Sn, Wd))
 #define FCVTZUxS(Xd, Sn)            EMIT(FCVT_scalar(1, 0b00, 0b11, 0b001, Sn, Xd))
diff --git a/src/dynarec/dynarec_arm64_f30f.c b/src/dynarec/dynarec_arm64_f30f.c
index 16937842..d94bd822 100755
--- a/src/dynarec/dynarec_arm64_f30f.c
+++ b/src/dynarec/dynarec_arm64_f30f.c
@@ -112,6 +112,14 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
             VMOVeS(v0, 0, d1, 0);

             break;

 

+        case 0x2C:

+            INST_NAME("CVTTSS2SI Gd, Ex");

+            nextop = F8;

+            GETGD;

+            GETEX(d0, 0);

+            FCVTZSxwS(gd, d0);

+            break;

+

         case 0x51:

             INST_NAME("SQRTSS Gx, Ex");

             nextop = F8;