[coreboot] Patch set updated for coreboot: ade868c x86emu: Respect the LEA 67h address size prefix

Ronald G. Minnich (rminnich@gmail.com) gerrit at coreboot.org
Fri Jul 27 17:50:29 CEST 2012


Ronald G. Minnich (rminnich at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1364

-gerrit

commit ade868c0ad60486a911b98037e59bc5726bdc0df
Author: Stefan Reinauer <reinauer at chromium.org>
Date:   Thu Jul 26 15:40:06 2012 -0700

    x86emu: Respect the LEA 67h address size prefix
    
    From
    http://cgit.freedesktop.org/xorg/xserver/commit/hw/xfree86/x86emu?id=f57bc0ede8e018c7e264b917927c42a018cd1d5a
    
    Change-Id: Ibdcaa27e936464cec512edb46447aa6284a34975
    Signed-off-by: Stefan Reinauer <reinauer at google.com>
    Signed-off-by: Christian Zander <chzander at nvidia.com>
    Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
    Tested-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
---
 src/devices/oprom/x86emu/ops.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/devices/oprom/x86emu/ops.c b/src/devices/oprom/x86emu/ops.c
index 70e048d..6bfc71c 100644
--- a/src/devices/oprom/x86emu/ops.c
+++ b/src/devices/oprom/x86emu/ops.c
@@ -2058,27 +2058,29 @@ Handles opcode 0x8d
 static void x86emuOp_lea_word_R_M(u8 X86EMU_UNUSED(op1))
 {
     int mod, rl, rh;
-    u16 *srcreg;
     uint destoffset;
 
-/*
- * TODO: Need to handle address size prefix!
- *
- * lea  eax,[eax+ebx*2] ??
- */
-
     START_OF_INSTR();
     DECODE_PRINTF("LEA\t");
     FETCH_DECODE_MODRM(mod, rh, rl);
     if (mod < 3) {
-        srcreg = DECODE_RM_WORD_REGISTER(rh);
-        DECODE_PRINTF(",");
-        destoffset = decode_rmXX_address(mod, rl);
-        DECODE_PRINTF("\n");
-        TRACE_AND_STEP();
-        *srcreg = (u16)destoffset;
+        if (M.x86.mode & SYSMODE_PREFIX_ADDR) {
+            u32 *srcreg = DECODE_RM_LONG_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rmXX_address(mod, rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u32)destoffset;
+	} else {
+            u16 *srcreg = DECODE_RM_WORD_REGISTER(rh);
+            DECODE_PRINTF(",");
+            destoffset = decode_rmXX_address(mod, rl);
+            DECODE_PRINTF("\n");
+            TRACE_AND_STEP();
+            *srcreg = (u16)destoffset;
         }
-    /* } else { undefined.  Do nothing. } */
+    }
+    /* else { undefined.  Do nothing. } */
     DECODE_CLEAR_SEGOVR();
     END_OF_INSTR();
 }




More information about the coreboot mailing list