]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Implement FINIT.
authorJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 02:55:06 +0000 (02:55 +0000)
committerJulian Seward <jseward@acm.org>
Sat, 5 Nov 2005 02:55:06 +0000 (02:55 +0000)
git-svn-id: svn://svn.valgrind.org/vex/trunk@1440

VEX/priv/guest-amd64/gdefs.h
VEX/priv/guest-amd64/ghelpers.c
VEX/priv/guest-amd64/toIR.c

index 6c4fabc47f4e42fc0650ebb2d47daa8d780a2a5f..7d2e9f6d9fd712b95efdaa69ccbb6bb28d1ab630 100644 (file)
@@ -145,6 +145,8 @@ extern void  amd64g_dirtyhelper_storeF80le ( ULong/*addr*/, ULong/*data*/ );
 
 extern void  amd64g_dirtyhelper_CPUID ( VexGuestAMD64State* st );
 
+extern void  amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* );
+
 extern ULong amd64g_dirtyhelper_RDTSC ( void );
 
 //extern void  amd64g_dirtyhelper_CPUID_sse0 ( VexGuestAMD64State* );
@@ -153,8 +155,6 @@ extern ULong amd64g_dirtyhelper_RDTSC ( void );
 
 //extern void  amd64g_dirtyhelper_FSAVE ( VexGuestAMD64State*, HWord );
 
-//extern void  amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* );
-
 //extern VexEmWarn
 //            amd64g_dirtyhelper_FRSTOR ( VexGuestAMD64State*, HWord );
 
index d4532be74feabf19a2a67f90a6044f4024bb73eb..a1cfb5a26c0f3cf635468b8a77c073411433b36c 100644 (file)
@@ -1321,10 +1321,8 @@ ULong amd64g_calculate_FXAM ( ULong tag, ULong dbl )
 }
 
 
-// MAYBE NOT TRUE: /* CALLED FROM GENERATED CODE */
-// MAYBE NOT TRUE: /* DIRTY HELPER (writes guest state) */
+/* DIRTY HELPER (writes guest state) */
 /* Initialise the x87 FPU state as per 'finit'. */
-static
 void amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* gst )
 {
    Int i;
index f335a766b4dc8f440847962841ef906556333289..051ecc2c3294d2e695963e3751dd156f658111a9 100644 (file)
@@ -5112,45 +5112,45 @@ ULong dis_FPU ( /*OUT*/Bool* decode_ok,
                DIP("fnclex\n");
                break;
 
-//..             case 0xE3: {
-//..                /* Uses dirty helper: 
-//..                      void x86g_do_FINIT ( VexGuestX86State* ) */
-//..                IRDirty* d  = unsafeIRDirty_0_N ( 
-//..                                 0/*regparms*/, 
-//..                                 "x86g_dirtyhelper_FINIT", 
-//..                                 &x86g_dirtyhelper_FINIT,
-//..                                 mkIRExprVec_0()
-//..                              );
-//..                d->needsBBP = True;
-//.. 
-//..                /* declare we're writing guest state */
-//..                d->nFxState = 5;
-//.. 
-//..                d->fxState[0].fx     = Ifx_Write;
-//..                d->fxState[0].offset = OFFB_FTOP;
-//..                d->fxState[0].size   = sizeof(UInt);
-//.. 
-//..                d->fxState[1].fx     = Ifx_Write;
-//..                d->fxState[1].offset = OFFB_FPREGS;
-//..                d->fxState[1].size   = 8 * sizeof(ULong);
-//.. 
-//..                d->fxState[2].fx     = Ifx_Write;
-//..                d->fxState[2].offset = OFFB_FPTAGS;
-//..                d->fxState[2].size   = 8 * sizeof(UChar);
-//.. 
-//..                d->fxState[3].fx     = Ifx_Write;
-//..                d->fxState[3].offset = OFFB_FPROUND;
-//..                d->fxState[3].size   = sizeof(UInt);
-//.. 
-//..                d->fxState[4].fx     = Ifx_Write;
-//..                d->fxState[4].offset = OFFB_FC3210;
-//..                d->fxState[4].size   = sizeof(UInt);
-//.. 
-//..                stmt( IRStmt_Dirty(d) );
-//.. 
-//..                DIP("fninit\n");
-//..                break;
-//..             }
+            case 0xE3: {
+               /* Uses dirty helper: 
+                     void amd64g_do_FINIT ( VexGuestAMD64State* ) */
+               IRDirty* d  = unsafeIRDirty_0_N ( 
+                                0/*regparms*/, 
+                                "amd64g_dirtyhelper_FINIT", 
+                                &amd64g_dirtyhelper_FINIT,
+                                mkIRExprVec_0()
+                             );
+               d->needsBBP = True;
+
+               /* declare we're writing guest state */
+               d->nFxState = 5;
+
+               d->fxState[0].fx     = Ifx_Write;
+               d->fxState[0].offset = OFFB_FTOP;
+               d->fxState[0].size   = sizeof(UInt);
+
+               d->fxState[1].fx     = Ifx_Write;
+               d->fxState[1].offset = OFFB_FPREGS;
+               d->fxState[1].size   = 8 * sizeof(ULong);
+
+               d->fxState[2].fx     = Ifx_Write;
+               d->fxState[2].offset = OFFB_FPTAGS;
+               d->fxState[2].size   = 8 * sizeof(UChar);
+
+               d->fxState[3].fx     = Ifx_Write;
+               d->fxState[3].offset = OFFB_FPROUND;
+               d->fxState[3].size   = sizeof(ULong);
+
+               d->fxState[4].fx     = Ifx_Write;
+               d->fxState[4].offset = OFFB_FC3210;
+               d->fxState[4].size   = sizeof(ULong);
+
+               stmt( IRStmt_Dirty(d) );
+
+               DIP("fninit\n");
+               break;
+            }
 
             case 0xE8 ... 0xEF: /* FUCOMI %st(0),%st(?) */
                fp_do_ucomi_ST0_STi( (UInt)modrm - 0xE8, False );