diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-31 11:05:02 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-31 11:05:02 +0200 |
| commit | 424a08607cdb4bb03e1ba2c443adae55db72243c (patch) | |
| tree | 6c07389f8c77baa4506048c9e844e2d3376043af /src/dynarec/arm64_printer.c | |
| parent | 0d2a060e663b092b7c966a2a720b380f21e0a38f (diff) | |
| download | box64-424a08607cdb4bb03e1ba2c443adae55db72243c.tar.gz box64-424a08607cdb4bb03e1ba2c443adae55db72243c.zip | |
[DYNAREC] Added 66 0F F6 opcode
Diffstat (limited to 'src/dynarec/arm64_printer.c')
| -rwxr-xr-x | src/dynarec/arm64_printer.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/dynarec/arm64_printer.c b/src/dynarec/arm64_printer.c index d7c52e97..606271af 100755 --- a/src/dynarec/arm64_printer.c +++ b/src/dynarec/arm64_printer.c @@ -1137,6 +1137,36 @@ const char* arm64_print(uint32_t opcode, uintptr_t addr) return buff; } + // Absolute Difference + // SABA / SABD / UABA / UABD + if(isMask(opcode, "0QU01110ff1mmmmm0111c1nnnnnddddd", &a)) { + const char* Y[] = {"8B", "16B", "4H", "8H", "2S", "4S", "??", "???"}; + const char* Vd = Y[(sf<<1) | a.Q]; + snprintf(buff, sizeof(buff), "%cAB%c V%d.%s, V%d.%s, V%d.%s", a.U?'U':'S', a.c?'A':'D', Rd, Vd, Rn, Vd, Rm, Vd); + return buff; + } + if(isMask(opcode, "0QU01110ff1mmmmm01c100nnnnnddddd", &a)) { + const char* Y[] = {"8B", "16B", "4H", "8H", "2S", "4S", "??", "???"}; + const char* Vd = Y[(sf<<1) | a.Q]; + const char* Z[] = {"8H", "4S", "2D", "?"}; + const char* Va = Y[(sf<<1)]; + snprintf(buff, sizeof(buff), "%cAB%cL%s V%d.%s, V%d.%s, V%d.%s", a.U?'U':'S', a.c?'A':'D', a.Q?"2":"", Rd, Va, Rn, Vd, Rm, Vd); + return buff; + } + // Add pair / accros vector + if(isMask(opcode, "0QU01110ff1000000c1010nnnnnddddd", &a)) { + const char* Y[] = {"8B", "16B", "4H", "8H", "2S", "4S", "??", "???"}; + const char* Vd = Y[(sf<<1) | a.Q]; + snprintf(buff, sizeof(buff), "%cAD%cLP V%d.%s, V%d.%s", a.U?'U':'S', a.c?'A':'D', Rd, Vd, Rn, Vd); + return buff; + } + if(isMask(opcode, "0QU01110ff110000001110nnnnnddddd", &a)) { + const char* Y[] = {"8B", "16B", "4H", "8H", "2S", "4S", "??", "???"}; + const char* Vd = Y[(sf<<1) | a.Q]; + const char* Z[] = {"H", "S", "D", "?"}; + snprintf(buff, sizeof(buff), "%cADDLV V%d.%s, V%d.%s", a.U?'U':'S', Rd, Z[sf], Rn, Vd); + return buff; + } snprintf(buff, sizeof(buff), "%08X ???", __builtin_bswap32(opcode)); |