Eric Pouech : winedbg: Fix printing of fp registers for x86_64 CPU.

Alexandre Julliard julliard at winehq.org
Wed May 9 13:46:17 CDT 2012


Module: wine
Branch: master
Commit: 721a3c910a74ba310e51a0325d738aa276624057
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=721a3c910a74ba310e51a0325d738aa276624057

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Tue May  8 19:52:34 2012 +0200

winedbg: Fix printing of fp registers for x86_64 CPU.

---

 programs/winedbg/be_x86_64.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/programs/winedbg/be_x86_64.c b/programs/winedbg/be_x86_64.c
index 0dd11c2..dde30f3 100644
--- a/programs/winedbg/be_x86_64.c
+++ b/programs/winedbg/be_x86_64.c
@@ -70,6 +70,14 @@ static void be_x86_64_single_step(CONTEXT* ctx, unsigned enable)
     else ctx->EFlags &= ~STEP_FLAG;
 }
 
+static inline long double m128a_to_longdouble(const M128A m)
+{
+    /* gcc uses the same IEEE-754 representation as M128A for long double
+     * but 16 byte aligned (hence only the first 10 bytes out of the 16 are used)
+     */
+    return *(long double*)&m;
+}
+
 static void be_x86_64_print_context(HANDLE hThread, const CONTEXT* ctx,
                                     int all_regs)
 {
@@ -144,16 +152,12 @@ static void be_x86_64_print_context(HANDLE hThread, const CONTEXT* ctx,
 
     for (i = 0; i < 4; i++)
     {
-        long double st;
-        memcpy(&st, &ctx->u.FltSave.FloatRegisters[i * 10], 10);
-        dbg_printf(" st%u:%-16Lg ", i, st);
+        dbg_printf(" st%u:%-16Lg ", i, m128a_to_longdouble(ctx->u.FltSave.FloatRegisters[i]));
     }
     dbg_printf("\n");
     for (i = 4; i < 8; i++)
     {
-        long double st;
-        memcpy(&st, &ctx->u.FltSave.FloatRegisters[i * 10], 10);
-        dbg_printf(" st%u:%-16Lg ", i, st);
+        dbg_printf(" st%u:%-16Lg ", i, m128a_to_longdouble(ctx->u.FltSave.FloatRegisters[i]));
     }
     dbg_printf("\n");
 




More information about the wine-cvs mailing list