x86: Fix setting segment bases in real mode.
authorGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 09:00:53 +0000 (01:00 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 09:00:53 +0000 (01:00 -0800)
The data size used for actually writing the base value for the segment was the
default size, but really it should set the entire value without any possible
truncation.

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

index 6999b913d8e5f199f30390bfecce672a172b85a4..3bb2d3e879e0073e52caad14710bd84d8a11dd2e 100644 (file)
@@ -145,7 +145,7 @@ def macroop JMP_FAR_REAL_M
     zexti t3, t1, 15, dataSize=8
     slli t3, t3, 4, dataSize=8
     wrsel cs, t1, dataSize=2
-    wrbase cs, t3
+    wrbase cs, t3, dataSize=8
     wrip t0, t2, dataSize=asz
 };
 
@@ -168,7 +168,7 @@ def macroop JMP_FAR_REAL_I
     mov t2, t0, t2
     slli t3, t1, 4, dataSize=8
     wrsel cs, t1, dataSize=2
-    wrbase cs, t3
+    wrbase cs, t3, dataSize=8
     wrip t0, t2, dataSize=asz
 };
 '''
index 3f5c2d303267ba1047abd7ead076df0351269559..75a20ffbd3fe11a81d3406e8c0fcecf2fcaec910 100644 (file)
@@ -215,7 +215,7 @@ def macroop MOV_REAL_S_R {
     zexti t2, regm, 15, dataSize=8
     slli t3, t2, 4, dataSize=8
     wrsel reg, regm
-    wrbase reg, t3
+    wrbase reg, t3, dataSize=8
 };
 
 def macroop MOV_REAL_S_M {
@@ -223,7 +223,7 @@ def macroop MOV_REAL_S_M {
     zexti t2, t1, 15, dataSize=8
     slli t3, t2, 4, dataSize=8
     wrsel reg, t1
-    wrbase reg, t3
+    wrbase reg, t3, dataSize=8
 };
 
 def macroop MOV_REAL_S_P {