about summary refs log tree commit diff stats
path: root/src/dynarec/arm64_printer.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-21 17:29:59 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-21 17:29:59 +0100
commit1d85580fbc0885b2d921d4c0468632e4331507ec (patch)
tree99c8ed0942062ff8d3f80828922cb03c0ee71976 /src/dynarec/arm64_printer.c
parentf01e987d31fa90cdadd523cca65b3f78f825dfd2 (diff)
downloadbox64-1d85580fbc0885b2d921d4c0468632e4331507ec.tar.gz
box64-1d85580fbc0885b2d921d4c0468632e4331507ec.zip
[DYNAREC] Added F3 0F 2A opcode
Diffstat (limited to 'src/dynarec/arm64_printer.c')
-rwxr-xr-xsrc/dynarec/arm64_printer.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c
index 90d6ac2c..adf4f6f6 100755
--- a/src/dynarec/arm64_printer.c
+++ b/src/dynarec/arm64_printer.c
@@ -866,6 +866,33 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr)
         return buff;

     }

 

+    // FCVT

+    if(isMask(opcode, "f0011110pp10010U000000nnnnnddddd", &a)) {

+        int type = a.p;

+        char s = (type==0)?'S':((type==1)?'D':'?');

+        snprintf(buff, sizeof(buff), "FCVTA%c %s, %c%d", a.U?'U':'S', sf?Xt[Rd]:Wt[Rd], s, Rn);

+        return buff;

+    }

+    if(isMask(opcode, "01U111100f100001110010nnnnnddddd", &a)) {

+        char s = (sf==0)?'S':((sf==1)?'D':'?');

+        snprintf(buff, sizeof(buff), "FCVTA%c %c%d, %c%d", a.U?'U':'S', s, Rd, s, Rn);

+        return buff;

+    }

+    if(isMask(opcode, "0QU011100f100001110010nnnnnddddd", &a)) {

+        char s = a.Q?'V':'D';

+        char d = sf?'D':'S';

+        int n = (a.Q && !sf)?4:2;

+        snprintf(buff, sizeof(buff), "VFCVTA%c %c%d.%d%c, %c%d.%d%c", a.U?'U':'S', s, Rd, n, d, s, Rn, n, d);

+        return buff;

+    }

+

+    if(isMask(opcode, "f0011110pp100010000000nnnnnddddd", &a)) {

+        int type = a.p;

+        char s = (type==0)?'S':((type==1)?'D':'?');

+        snprintf(buff, sizeof(buff), "SCVTF %c%d, %s", s, Rd, sf?Xt[Rn]:Wt[Rn]);

+        return buff;

+    }

+

 

     snprintf(buff, sizeof(buff), "%08X ???", __builtin_bswap32(opcode));

     return buff;