X86: Fix JMP_FAR_I to unpack a far pointer correctly.
authorTim Harris <tharris@microsoft.com>
Mon, 7 Feb 2011 23:12:59 +0000 (15:12 -0800)
committerTim Harris <tharris@microsoft.com>
Mon, 7 Feb 2011 23:12:59 +0000 (15:12 -0800)
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.

src/arch/x86/isa/insts/general_purpose/control_transfer/jump.py

index 05db6203331bc705a061c99ed1c2407a443d3a92..420655165fde58822cb92861a19c7d79a1b3a374 100644 (file)
@@ -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")
 };