about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-24 13:36:34 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-24 13:36:34 +0200
commitd34428d249b4a22b94656eb8b59c29f63075f2fc (patch)
tree8c1ef56aa02c965f715d6e33815c9f3a50868e14 /src
parent974df6190ecc0d3d3faafe45d77ae13e1abaad11 (diff)
downloadbox64-d34428d249b4a22b94656eb8b59c29f63075f2fc.tar.gz
box64-d34428d249b4a22b94656eb8b59c29f63075f2fc.zip
[ARM64_DYNAREC] Added 67 0F B6/B7 opcodes
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_67.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 23acc59b..9c7894df 100755
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -247,6 +247,40 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     }

                     break;

 

+                    case 0xB6:

+                        INST_NAME("MOVZX Gd, Eb");

+                        nextop = F8;

+                        GETGD;

+                        if(MODREG) {

+                            if(rex.rex) {

+                                eb1 = xRAX+(nextop&7)+(rex.b<<3);

+                                eb2 = 0;                \

+                            } else {

+                                ed = (nextop&7);

+                                eb1 = xRAX+(ed&3);  // Ax, Cx, Dx or Bx

+                                eb2 = (ed&4)>>2;    // L or H

+                            }

+                            UBFXxw(gd, eb1, eb2*8, 8);

+                        } else {

+                            SMREAD();

+                            addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff, 0, rex, NULL, 0, 0);

+                            LDB(gd, ed, fixedaddress);

+                        }

+                        break;

+                    case 0xB7:

+                        INST_NAME("MOVZX Gd, Ew");

+                        nextop = F8;

+                        GETGD;

+                        if(MODREG) {

+                            ed = xRAX+(nextop&7)+(rex.b<<3);

+                            UBFXxw(gd, ed, 0, 16);

+                        } else {

+                            SMREAD();

+                            addr = geted32(dyn, addr, ninst, nextop, &ed, x2, &fixedaddress, &unscaled, 0xfff<<1, 1, rex, NULL, 0, 0);

+                            LDH(gd, ed, fixedaddress);

+                        }

+                        break;

+

                 default:

                     DEFAULT;

             }