# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 2049467adee349ad576e8afee5de77e23d8928d8
# Parent 7d37df6c324721647d5d6c930af09101f1165e23
[HVM][MMIO] Support decode of 0x83 opcode (or imm8,m32/64').
This instruction is used by both WinXP during an SMP installation and by
Sun Solaris. With this patch Sun Solaris UP is able to boot. Windows
SMP gets a bit further but still has issues.
Signed-off-by: Tom Woller <thomas.woller@xxxxxxx>
Signed-off-by: Travis Betak <tbetak.woller@xxxxxxx>
---
xen/arch/x86/hvm/platform.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff -r 7d37df6c3247 -r 2049467adee3 xen/arch/x86/hvm/platform.c
--- a/xen/arch/x86/hvm/platform.c Wed Jun 07 14:20:29 2006 +0100
+++ b/xen/arch/x86/hvm/platform.c Wed Jun 07 14:21:49 2006 +0100
@@ -426,19 +426,30 @@ static int hvm_decode(int realmode, unsi
case 0x80:
case 0x81:
+ case 0x83:
{
unsigned char ins_subtype = (opcode[1] >> 3) & 7;
if (opcode[0] == 0x80) {
GET_OP_SIZE_FOR_BYTE(size_reg);
instr->op_size = BYTE;
- } else {
+ } else if (opcode[0] == 0x81) {
GET_OP_SIZE_FOR_NONEBYTE(instr->op_size);
size_reg = instr->op_size;
+ } else if (opcode[0] == 0x83) {
+ GET_OP_SIZE_FOR_NONEBYTE(size_reg);
+ instr->op_size = size_reg;
}
+
+ /* opcode 0x83 always has a single byte operand */
+ if (opcode[0] == 0x83)
+ instr->immediate =
+ (signed char)get_immediate(realmode, opcode+1, BYTE);
+ else
+ instr->immediate =
+ get_immediate(realmode, opcode+1, instr->op_size);
instr->operand[0] = mk_operand(size_reg, 0, 0, IMMEDIATE);
- instr->immediate = get_immediate(realmode, opcode+1,
instr->op_size);
instr->operand[1] = mk_operand(size_reg, 0, 0, MEMORY);
switch (ins_subtype) {
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|