about summary refs log tree commit diff stats
path: root/src/dynarec
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-06 09:29:58 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-06 09:29:58 +0200
commitcc269337f2178844da1c8103efb1bb9197019ef7 (patch)
treebfada084c3a7756fa6e12bde6f40104bd8c2ee8d /src/dynarec
parenta2aa5fc650f7e2d4e9400f76832b80689366f4af (diff)
downloadbox64-cc269337f2178844da1c8103efb1bb9197019ef7.tar.gz
box64-cc269337f2178844da1c8103efb1bb9197019ef7.zip
[DYNAREC] Added F3 0F 53 opcode (for CB15)
Diffstat (limited to 'src/dynarec')
-rwxr-xr-xsrc/dynarec/dynarec_arm64_f30f.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/dynarec/dynarec_arm64_f30f.c b/src/dynarec/dynarec_arm64_f30f.c
index f398f23c..2df33bcf 100755
--- a/src/dynarec/dynarec_arm64_f30f.c
+++ b/src/dynarec/dynarec_arm64_f30f.c
@@ -184,17 +184,28 @@ uintptr_t dynarec64_F30F(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int n
         case 0x52:

             INST_NAME("RSQRTSS Gx, Ex");

             nextop = F8;

-            GETGX(v0);

             GETEX(v1, 0);

+            GETGX_empty(v0);

             d0 = fpu_get_scratch(dyn);

+            d1 = fpu_get_scratch(dyn);

             // so here: F32: Imm8 = abcd efgh that gives => aBbbbbbc defgh000 00000000 00000000

             // and want 1.0f = 0x3f800000

             // so 00111111 10000000 00000000 00000000

             // a = 0, b = 1, c = 1, d = 1, efgh=0

             // 0b01110000

             FMOVS_8(d0, 0b01110000);

-            FSQRTS(v0, v1);

-            FDIVS(d0, d0, v0);

+            FSQRTS(d1, v1);

+            FDIVS(d0, d0, d1);

+            VMOVeS(v0, 0, d0, 0);

+            break;

+        case 0x53:

+            INST_NAME("RCPSS Gx, Ex");

+            nextop = F8;

+            GETGX(v0);

+            GETEX(v1, 0);

+            d0 = fpu_get_scratch(dyn);

+            FMOVS_8(d0, 0b01110000);    //1.0f

+            FDIVS(d0, d0, v1);

             VMOVeS(v0, 0, d0, 0);

             break;