x86: Fix some bugs in the real mode far jmp instruction.
authorGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 08:20:01 +0000 (00:20 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 08:20:01 +0000 (00:20 -0800)
The far pointer should be shifted right to get the selector value, not left.
Also, when calculating the width of the offset, the wrong register was used in
one spot.

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

index 74cfcfccd4d27406e4ce77c606355cdc63d51b3f..6999b913d8e5f199f30390bfecce672a172b85a4 100644 (file)
@@ -162,11 +162,11 @@ def macroop JMP_FAR_REAL_I
     limm t3, dsz, dataSize=8
     slli t3, t3, 3, dataSize=8
     # Get the selector into t1.
-    sll t1, t2, t3, dataSize=8
+    srl t1, t2, t3, dataSize=8
     mov t1, t0, t1, dataSize=2
     # And get the offset into t2
     mov t2, t0, t2
-    slli t3, t3, 4, dataSize=8
+    slli t3, t1, 4, dataSize=8
     wrsel cs, t1, dataSize=2
     wrbase cs, t3
     wrip t0, t2, dataSize=asz