* \335 - disassemble a rep (0xF3 byte) prefix as repe not rep.
* \340 - reserve <operand 0> bytes of uninitialized storage.
* Operand 0 had better be a segmentless constant.
+ * \360 - no SSE prefix (== \364\331)
+ * \361 - 66 SSE prefix (== \366\331)
+ * \362 - F2 SSE prefix (== \364\332)
+ * \363 - F3 SSE prefix (== \364\333)
* \364 - operand-size prefix (0x66) not permitted
* \365 - address-size prefix (0x67) not permitted
* \366 - operand-size prefix (0x66) used as opcode extension
else
length += ins->oprs[0].offset;
break;
+ case 0360:
+ break;
+ case 0361:
+ case 0362:
+ case 0363:
+ length++;
+ break;
case 0364:
case 0365:
break;
}
break;
+ case 0360:
+ break;
+
+ case 0361:
+ bytes[0] = 0x66;
+ out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
+ offset += 1;
+ break;
+
+ case 0362:
+ case 0363:
+ bytes[0] = c - 0362 + 0xf2;
+ out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
+ offset += 1;
+ break;
+
case 0364:
case 0365:
break;
case 0340:
return false;
+ case 0360:
+ if (prefix->osp || prefix->rep)
+ return false;
+ break;
+
+ case 0361:
+ if (!prefix->osp || prefix->rep)
+ return false;
+ break;
+
+ case 0362:
+ if (prefix->osp || prefix->rep != 0xf2)
+ return false;
+ break;
+
+ case 0363:
+ if (prefix->osp || prefix->rep != 0xf3)
+ return false;
+ break;
+
case 0364:
if (prefix->osp)
return false;
} elsif ($prefix_ok && $op =~ /^(66|f2|f3|np)$/) {
# 66/F2/F3 prefix used as an opcode extension, or np = no prefix
if ($op eq '66') {
- push(@codes, 0366, 0331);
+ push(@codes, 0361);
} elsif ($op eq 'f2') {
- push(@codes, 0332, 0364);
+ push(@codes, 0362);
} elsif ($op eq 'f3') {
- push(@codes, 0333, 0364);
+ push(@codes, 0363);
} else {
- push(@codes, 0331, 0364);
+ push(@codes, 0360);
}
} elsif ($op =~ /^[0-9a-f]{2}$/) {
if (defined($litix) && $litix+$codes[$litix]+1 == scalar @codes) {
die "$0: $line: $op without 'i' and 's' operands\n";
}
push(@codes, 0172, ($oppos{'s'} << 3)+$oppos{'i'});
+ $prefix_ok = 0;
} elsif ($op =~ /^(is4|imz2)\=([0-9]+)$/) {
my $imm = $2;
if (!defined($oppos{'s'})) {
die "$0: $line: invalid imm4 value for $op: $imm\n";
}
push(@codes, 0173, ($oppos{'s'} << 4) + $imm);
+ $prefix_ok = 0;
} elsif ($op =~ /^([0-9a-f]{2})\+s$/) {
if (!defined($oppos{'i'})) {
die "$0: $op without 'i' operand\n";