summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-10-09 14:15:36 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-10-09 14:15:36 -0700
commitfa3833db81524e8283ae6c56fa9aedfa89afdb62 (patch)
tree4f6a8b53661cc3569eefe07d3da2f6da5fd4d011
parentaac7c0c174d4624a075b89e0547f846f985e5553 (diff)
downloadnasm-fa3833db81524e8283ae6c56fa9aedfa89afdb62.tar.gz
disasm: collapse all the segment register push/pop bytecodes
As far as the disassembler is concerned, the segment register push/pop bytecodes can be collapsed to a simple expression; the remaining differences are handled by the filter expressions in insns.pl. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
-rw-r--r--disasm.c61
1 files changed, 2 insertions, 59 deletions
diff --git a/disasm.c b/disasm.c
index e3b02245..4efcdc80 100644
--- a/disasm.c
+++ b/disasm.c
@@ -830,65 +830,8 @@ static int matches(const struct itemplate *t, uint8_t *data,
case 0340:
return false;
- case 0344:
- switch (*data++) {
- case 0x06:
- ins->oprs[0].basereg = 0;
- break;
- case 0x0E:
- ins->oprs[0].basereg = 1;
- break;
- case 0x16:
- ins->oprs[0].basereg = 2;
- break;
- case 0x1E:
- ins->oprs[0].basereg = 3;
- break;
- default:
- return false;
- }
- break;
-
- case 0345:
- switch (*data++) {
- case 0x07:
- ins->oprs[0].basereg = 0;
- break;
- case 0x17:
- ins->oprs[0].basereg = 2;
- break;
- case 0x1F:
- ins->oprs[0].basereg = 3;
- break;
- default:
- return false;
- }
- break;
-
- case 0346:
- switch (*data++) {
- case 0xA0:
- ins->oprs[0].basereg = 4;
- break;
- case 0xA8:
- ins->oprs[0].basereg = 5;
- break;
- default:
- return false;
- }
- break;
-
- case 0347:
- switch (*data++) {
- case 0xA1:
- ins->oprs[0].basereg = 4;
- break;
- case 0xA9:
- ins->oprs[0].basereg = 5;
- break;
- default:
- return false;
- }
+ case4(0344):
+ ins->oprs[0].basereg = (*data++ >> 3) & 7;
break;
case 0360: