diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 17:55:13 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-04 17:55:13 +0100 |
| commit | 004c360720c0acd50fb6b6a3211df53d0a193e93 (patch) | |
| tree | 04584d5ce27b4fdaff3a4030d189b0521a4dd51b | |
| parent | 905f5e97bb074bc67028e8be89255bb66b9dbcd9 (diff) | |
| download | box64-004c360720c0acd50fb6b6a3211df53d0a193e93.tar.gz box64-004c360720c0acd50fb6b6a3211df53d0a193e93.zip | |
Added 70..7F Jcc opcoces
| -rwxr-xr-x | src/emu/x64run.c | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/emu/x64run.c b/src/emu/x64run.c index d29d6d65..9421c249 100755 --- a/src/emu/x64run.c +++ b/src/emu/x64run.c @@ -194,6 +194,93 @@ x64emurun: emu->regs[tmp8u].q[0] = Pop(emu); break; + #define GOCOND(B, PREFIX, CONDITIONAL) \ + case B+0x0: \ + PREFIX \ + if(ACCESS_FLAG(F_OF)) \ + CONDITIONAL \ + break; \ + case B+0x1: \ + PREFIX \ + if(!ACCESS_FLAG(F_OF)) \ + CONDITIONAL \ + break; \ + case B+0x2: \ + PREFIX \ + if(ACCESS_FLAG(F_CF)) \ + CONDITIONAL \ + break; \ + case B+0x3: \ + PREFIX \ + if(!ACCESS_FLAG(F_CF)) \ + CONDITIONAL \ + break; \ + case B+0x4: \ + PREFIX \ + if(ACCESS_FLAG(F_ZF)) \ + CONDITIONAL \ + break; \ + case B+0x5: \ + PREFIX \ + if(!ACCESS_FLAG(F_ZF)) \ + CONDITIONAL \ + break; \ + case B+0x6: \ + PREFIX \ + if((ACCESS_FLAG(F_ZF) || ACCESS_FLAG(F_CF))) \ + CONDITIONAL \ + break; \ + case B+0x7: \ + PREFIX \ + if(!(ACCESS_FLAG(F_ZF) || ACCESS_FLAG(F_CF))) \ + CONDITIONAL \ + break; \ + case B+0x8: \ + PREFIX \ + if(ACCESS_FLAG(F_SF)) \ + CONDITIONAL \ + break; \ + case B+0x9: \ + PREFIX \ + if(!ACCESS_FLAG(F_SF)) \ + CONDITIONAL \ + break; \ + case B+0xA: \ + PREFIX \ + if(ACCESS_FLAG(F_PF)) \ + CONDITIONAL \ + break; \ + case B+0xB: \ + PREFIX \ + if(!ACCESS_FLAG(F_PF)) \ + CONDITIONAL \ + break; \ + case B+0xC: \ + PREFIX \ + if(ACCESS_FLAG(F_SF) != ACCESS_FLAG(F_OF)) \ + CONDITIONAL \ + break; \ + case B+0xD: \ + PREFIX \ + if(ACCESS_FLAG(F_SF) == ACCESS_FLAG(F_OF)) \ + CONDITIONAL \ + break; \ + case B+0xE: \ + PREFIX \ + if(ACCESS_FLAG(F_ZF) || (ACCESS_FLAG(F_SF) != ACCESS_FLAG(F_OF))) \ + CONDITIONAL \ + break; \ + case B+0xF: \ + PREFIX \ + if(!ACCESS_FLAG(F_ZF) && (ACCESS_FLAG(F_SF) == ACCESS_FLAG(F_OF))) \ + CONDITIONAL \ + break; + GOCOND(0x70 + , tmp8s = F8S; CHECK_FLAGS(emu); + , R_RIP += tmp8s; + ) /* Jxx Ib */ + #undef GOCOND + case 0x81: /* GRP Ed,Id */ case 0x83: /* GRP Ed,Ib */ nextop = F8; |