0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-10-10 00:25:06 -04:00

ndisasm: REX2 *can* take REP or OSZ prefixes

Only VEX and EVEX may not take REP or OSZ prefixes.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
H. Peter Anvin
2025-09-05 02:56:27 -07:00
parent 52c5ee24cf
commit 29bc7c4811

View File

@@ -459,19 +459,26 @@ parse_prefixes(struct prefix_info *pf, const uint8_t *data, int bits)
return NULL; /* Invalid instruction */
}
if (pf->rex.type > REX_REX) {
switch (pf->rex.type) {
case REX_VEX:
case REX_EVEX:
if (pf->osp || pf->rep)
return NULL; /* Invalid instruction (illegal prefix) */
} else {
/* Redundant REX prefixes are ignored */
if (bits == 64) {
while ((*p & 0xf0) == 0x40) {
p++;
if (p > maxp)
return NULL;
}
}
break;
case REX_REX2:
break;
case REX_REX:
/* Redundant REX prefixes are ignored */
while ((*p & 0xf0) == 0x40) {
p++;
if (p > maxp)
return NULL;
}
/* fall through */
case REX_NONE:
/*
* Look for legacy map prefixes. These must come after all
* possible REX prefixes.
@@ -492,6 +499,8 @@ parse_prefixes(struct prefix_info *pf, const uint8_t *data, int bits)
break;
}
}
pf->rex.xmap = pf->rex.map + MAP_BASE_NOVEX;
break;
}
if (p > maxp)