From 2ea1aa8a4ff5b9096388af0ba400500a324b16a7 Mon Sep 17 00:00:00 2001 From: Tim Harris Date: Mon, 7 Feb 2011 15:12:59 -0800 Subject: [PATCH] X86: Fix JMP_FAR_I to unpack a far pointer correctly. JMP_FAR_I was unpacking its far pointer operand using sll instead of srl like it should, and also putting the components in the wrong registers for use by other microcode. --- .../isa/insts/general_purpose/control_transfer/jump.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py b/src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py index 05db62033..420655165 100644 --- a/src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py +++ b/src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py @@ -101,11 +101,11 @@ def macroop JMP_FAR_I # Figure out the width of the offset. limm t3, dsz, dataSize=8 slli t3, t3, 3, dataSize=8 - # Get the selector into t1. - sll t1, t2, t3, dataSize=8 - mov t1, t0, t1, dataSize=2 - # And get the offset into t2 - mov t2, t0, t2 + # Get the offset into t1. + mov t1, t0, t2 + # Get the selector into t2. + srl t2, t2, t3, dataSize=8 + mov t2, t0, t2, dataSize=2 br rom_label("jmpFarWork") };