break;
case 0320:
- length += (bits != 16);
+ {
+ enum prefixes pfx = ins->prefixes[PPS_OSIZE];
+ if (pfx == P_O16)
+ break;
+ if (pfx != P_none)
+ errfunc(ERR_WARNING | ERR_PASS2, "invalid operand size prefix");
+ else
+ ins->prefixes[PPS_OSIZE] = P_O16;
break;
+ }
case 0321:
- length += (bits == 16);
+ {
+ enum prefixes pfx = ins->prefixes[PPS_OSIZE];
+ if (pfx == P_O32)
+ break;
+ if (pfx != P_none)
+ errfunc(ERR_WARNING | ERR_PASS2, "invalid operand size prefix");
+ else
+ ins->prefixes[PPS_OSIZE] = P_O32;
break;
+ }
case 0322:
break;
break;
case 0320:
- {
- enum prefixes pfx = ins->prefixes[PPS_OSIZE];
- if (pfx != P_O16 && pfx != P_none)
- nasm_error(ERR_WARNING, "Invalid operand size prefix");
- if (pfx != P_O16 && bits != 16) {
- ins->prefixes[PPS_OSIZE] = P_O16;
- *bytes = 0x66;
- out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
- offset += 1;
- }
- break;
- }
-
case 0321:
- {
- enum prefixes pfx = ins->prefixes[PPS_OSIZE];
- if (pfx != P_O32 && pfx != P_none)
- nasm_error(ERR_WARNING, "Invalid operand size prefix");
- if (pfx != P_O32 && bits == 16) {
- ins->prefixes[PPS_OSIZE] = P_O32;
- *bytes = 0x66;
- out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
- offset += 1;
- }
break;
- }
case 0322:
case 0323: