about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
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;

             }