about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-03-14 10:01:00 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-03-14 10:01:00 +0100
commit8115b4705109028650bdf0236b23a4991ddaaed2 (patch)
tree019025eb43bc079317003b5f7c6538a5e5590569 /src/emu
parent6384cc6e8614e7cb4837a9e3c44e84cb206c267a (diff)
downloadbox64-8115b4705109028650bdf0236b23a4991ddaaed2.tar.gz
box64-8115b4705109028650bdf0236b23a4991ddaaed2.zip
Added 64 66 83 opcodes ([ARM64_DYNAREC] too)
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64run6664.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/emu/x64run6664.c b/src/emu/x64run6664.c
index c91b3cbc..a76f2bc7 100644
--- a/src/emu/x64run6664.c
+++ b/src/emu/x64run6664.c
@@ -30,6 +30,8 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
 {

     uint8_t opcode;

     uint8_t nextop;

+    uint16_t tmp16u;

+    int16_t tmp16s;

     reg64_t *oped, *opgd;

     sse_regs_t *opex, *opgx;

     #ifdef TEST_INTERPRETER

@@ -117,6 +119,29 @@ uintptr_t Run6664(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
             else

                 cmp16(emu, EW->word[0], GW->word[0]);

             break;

+

+        case 0x83:                              /* GRP3 Ew,Ib */

+            nextop = F8;

+            GETEW_OFFS((opcode==0x81)?2:1, tlsdata);

+            GETGW;

+            if(opcode==0x81) 

+                tmp16u = F16;

+            else {

+                tmp16s = F8S;

+                tmp16u = (uint16_t)tmp16s;

+            }

+            switch((nextop>>3)&7) {

+                case 0: EW->word[0] = add16(emu, EW->word[0], tmp16u); break;

+                case 1: EW->word[0] =  or16(emu, EW->word[0], tmp16u); break;

+                case 2: EW->word[0] = adc16(emu, EW->word[0], tmp16u); break;

+                case 3: EW->word[0] = sbb16(emu, EW->word[0], tmp16u); break;

+                case 4: EW->word[0] = and16(emu, EW->word[0], tmp16u); break;

+                case 5: EW->word[0] = sub16(emu, EW->word[0], tmp16u); break;

+                case 6: EW->word[0] = xor16(emu, EW->word[0], tmp16u); break;

+                case 7:               cmp16(emu, EW->word[0], tmp16u); break;

+            }

+            break;

+

         case 0x89:                              /* MOV FS:Ew,Gw */

             nextop = F8;

             GETEW_OFFS(0, tlsdata);