|
From: <sv...@va...> - 2005-11-05 02:55:11
|
Author: sewardj
Date: 2005-11-05 02:55:06 +0000 (Sat, 05 Nov 2005)
New Revision: 1440
Log:
Implement FINIT.
Modified:
trunk/priv/guest-amd64/gdefs.h
trunk/priv/guest-amd64/ghelpers.c
trunk/priv/guest-amd64/toIR.c
Modified: trunk/priv/guest-amd64/gdefs.h
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/gdefs.h 2005-11-05 02:33:25 UTC (rev 1439)
+++ trunk/priv/guest-amd64/gdefs.h 2005-11-05 02:55:06 UTC (rev 1440)
@@ -145,6 +145,8 @@
=20
extern void amd64g_dirtyhelper_CPUID ( VexGuestAMD64State* st );
=20
+extern void amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* );
+
extern ULong amd64g_dirtyhelper_RDTSC ( void );
=20
//extern void amd64g_dirtyhelper_CPUID_sse0 ( VexGuestAMD64State* );
@@ -153,8 +155,6 @@
=20
//extern void amd64g_dirtyhelper_FSAVE ( VexGuestAMD64State*, HWord );
=20
-//extern void amd64g_dirtyhelper_FINIT ( VexGuestAMD64State* );
-
//extern VexEmWarn
// amd64g_dirtyhelper_FRSTOR ( VexGuestAMD64State*, HWord );
=20
Modified: trunk/priv/guest-amd64/ghelpers.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/ghelpers.c 2005-11-05 02:33:25 UTC (rev 1439)
+++ trunk/priv/guest-amd64/ghelpers.c 2005-11-05 02:55:06 UTC (rev 1440)
@@ -1321,10 +1321,8 @@
}
=20
=20
-// 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;
Modified: trunk/priv/guest-amd64/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-amd64/toIR.c 2005-11-05 02:33:25 UTC (rev 1439)
+++ trunk/priv/guest-amd64/toIR.c 2005-11-05 02:55:06 UTC (rev 1440)
@@ -5112,46 +5112,46 @@
DIP("fnclex\n");
break;
=20
-//.. case 0xE3: {
-//.. /* Uses dirty helper:=20
-//.. void x86g_do_FINIT ( VexGuestX86State* ) */
-//.. IRDirty* d =3D unsafeIRDirty_0_N (=20
-//.. 0/*regparms*/,=20
-//.. "x86g_dirtyhelper_FINIT",=20
-//.. &x86g_dirtyhelper_FINIT,
-//.. mkIRExprVec_0()
-//.. );
-//.. d->needsBBP =3D True;
-//..=20
-//.. /* declare we're writing guest state */
-//.. d->nFxState =3D 5;
-//..=20
-//.. d->fxState[0].fx =3D Ifx_Write;
-//.. d->fxState[0].offset =3D OFFB_FTOP;
-//.. d->fxState[0].size =3D sizeof(UInt);
-//..=20
-//.. d->fxState[1].fx =3D Ifx_Write;
-//.. d->fxState[1].offset =3D OFFB_FPREGS;
-//.. d->fxState[1].size =3D 8 * sizeof(ULong);
-//..=20
-//.. d->fxState[2].fx =3D Ifx_Write;
-//.. d->fxState[2].offset =3D OFFB_FPTAGS;
-//.. d->fxState[2].size =3D 8 * sizeof(UChar);
-//..=20
-//.. d->fxState[3].fx =3D Ifx_Write;
-//.. d->fxState[3].offset =3D OFFB_FPROUND;
-//.. d->fxState[3].size =3D sizeof(UInt);
-//..=20
-//.. d->fxState[4].fx =3D Ifx_Write;
-//.. d->fxState[4].offset =3D OFFB_FC3210;
-//.. d->fxState[4].size =3D sizeof(UInt);
-//..=20
-//.. stmt( IRStmt_Dirty(d) );
-//..=20
-//.. DIP("fninit\n");
-//.. break;
-//.. }
+ case 0xE3: {
+ /* Uses dirty helper:=20
+ void amd64g_do_FINIT ( VexGuestAMD64State* ) */
+ IRDirty* d =3D unsafeIRDirty_0_N (=20
+ 0/*regparms*/,=20
+ "amd64g_dirtyhelper_FINIT",=20
+ &amd64g_dirtyhelper_FINIT,
+ mkIRExprVec_0()
+ );
+ d->needsBBP =3D True;
=20
+ /* declare we're writing guest state */
+ d->nFxState =3D 5;
+
+ d->fxState[0].fx =3D Ifx_Write;
+ d->fxState[0].offset =3D OFFB_FTOP;
+ d->fxState[0].size =3D sizeof(UInt);
+
+ d->fxState[1].fx =3D Ifx_Write;
+ d->fxState[1].offset =3D OFFB_FPREGS;
+ d->fxState[1].size =3D 8 * sizeof(ULong);
+
+ d->fxState[2].fx =3D Ifx_Write;
+ d->fxState[2].offset =3D OFFB_FPTAGS;
+ d->fxState[2].size =3D 8 * sizeof(UChar);
+
+ d->fxState[3].fx =3D Ifx_Write;
+ d->fxState[3].offset =3D OFFB_FPROUND;
+ d->fxState[3].size =3D sizeof(ULong);
+
+ d->fxState[4].fx =3D Ifx_Write;
+ d->fxState[4].offset =3D OFFB_FC3210;
+ d->fxState[4].size =3D 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 );
break;
|