summaryrefslogtreecommitdiff
path: root/disasm.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-10-08 21:17:32 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-10-08 21:17:32 -0700
commitff6e12da50733794235bf830add135e50b88f999 (patch)
tree7d281442f04cea0e2de6a61f45cf06a0d143fb71 /disasm.c
parenta5c31197f5eca5c5b5675fea0c6596a26976238e (diff)
downloadnasm-ff6e12da50733794235bf830add135e50b88f999.tar.gz
Reshuffle and move the bytecodes for segment register push/pop
Reshuffle the bytecodes for segment register push/pop to make more sense, and move them from \4 to \344, thus freeing up the single-digit bytecodes \4..\7 for future use. It doesn't really make sense to use single-digit bytecodes for this very oddball use. Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'disasm.c')
-rw-r--r--disasm.c122
1 files changed, 61 insertions, 61 deletions
diff --git a/disasm.c b/disasm.c
index 0ff40fc1..e3b02245 100644
--- a/disasm.c
+++ b/disasm.c
@@ -407,67 +407,6 @@ static int matches(const struct itemplate *t, uint8_t *data,
return false;
break;
- case 04:
- 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 05:
- switch (*data++) {
- case 0xA1:
- ins->oprs[0].basereg = 4;
- break;
- case 0xA9:
- ins->oprs[0].basereg = 5;
- break;
- default:
- return false;
- }
- break;
-
- case 06:
- 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 07:
- switch (*data++) {
- case 0xA0:
- ins->oprs[0].basereg = 4;
- break;
- case 0xA8:
- ins->oprs[0].basereg = 5;
- break;
- default:
- return false;
- }
- break;
-
case4(010):
{
int t = *r++, d = *data++;
@@ -891,6 +830,67 @@ 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;
+ }
+ break;
+
case 0360:
if (prefix->osp || prefix->rep)
return false;