summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
authorTim Harris <tharris@microsoft.com>2011-02-07 15:12:59 -0800
committerTim Harris <tharris@microsoft.com>2011-02-07 15:12:59 -0800
commit2ea1aa8a4ff5b9096388af0ba400500a324b16a7 (patch)
tree0ae4e354794fe13e601f3e1d055552a9793b36b6 /src/arch
parent5810ab121c39f041aa6728696bc19e2e963eef90 (diff)
downloadgem5-2ea1aa8a4ff5b9096388af0ba400500a324b16a7.tar.xz
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.
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py10
1 files 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")
};