diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-04-05 19:04:16 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-04-05 19:04:16 +0200 |
| commit | 23e7d5c370f672773f04f70da2feb80a3b99b764 (patch) | |
| tree | 2fed466b2eba3d58d4fca31bc78783e28d70e6b3 /src | |
| parent | 676b7523b36eabaa48073c9da84512ffc0261581 (diff) | |
| download | box64-23e7d5c370f672773f04f70da2feb80a3b99b764.tar.gz box64-23e7d5c370f672773f04f70da2feb80a3b99b764.zip | |
Added 67 80/8B opcodes
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run67.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/emu/x64run67.c b/src/emu/x64run67.c index 10af9a5b..e074be4b 100644 --- a/src/emu/x64run67.c +++ b/src/emu/x64run67.c @@ -96,6 +96,22 @@ int Run67(x64emu_t *emu, rex_t rex) GO(0x30, xor) /* XOR 0x30 -> 0x35 */ #undef GO + case 0x80: /* GRP Eb,Ib */ + nextop = F8; + GETEB32(1); + tmp8u = F8; + switch((nextop>>3)&7) { + case 0: EB->byte[0] = add8(emu, EB->byte[0], tmp8u); break; + case 1: EB->byte[0] = or8(emu, EB->byte[0], tmp8u); break; + case 2: EB->byte[0] = adc8(emu, EB->byte[0], tmp8u); break; + case 3: EB->byte[0] = sbb8(emu, EB->byte[0], tmp8u); break; + case 4: EB->byte[0] = and8(emu, EB->byte[0], tmp8u); break; + case 5: EB->byte[0] = sub8(emu, EB->byte[0], tmp8u); break; + case 6: EB->byte[0] = xor8(emu, EB->byte[0], tmp8u); break; + case 7: cmp8(emu, EB->byte[0], tmp8u); break; + } + break; + case 0x88: /* MOV Eb,Gb */ nextop = F8; GETEB32(0); @@ -122,6 +138,15 @@ int Run67(x64emu_t *emu, rex_t rex) GETGB; GB = EB->byte[0]; break; + case 0x8B: /* MOV Gd,Ed */ + nextop = F8; + GETED32(0); + GETGD; + if(rex.w) + GD->q[0] = ED->q[0]; + else + GD->q[0] = ED->dword[0]; + break; case 0x8D: /* LEA Gd,M */ nextop = F8; |