From: Tim Harris Date: Mon, 7 Feb 2011 23:12:59 +0000 (-0800) Subject: X86: Fix JMP_FAR_I to unpack a far pointer correctly. X-Git-Tag: stable_2012_02_02~565 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2ea1aa8a4ff5b9096388af0ba400500a324b16a7;p=gem5.git 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. --- 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") };