From 82cd6c01cd5e48833aba2aa7399ebacbd465d87f Mon Sep 17 00:00:00 2001 From: Cerion Armour-Brown Date: Fri, 8 Jul 2005 13:10:35 +0000 Subject: [PATCH] Added LibVEX_GuestPPC32_get_cr() for easy access to entire cond reg Filled in some missing defaults in LibVEX_GuestPPC32_initialise() git-svn-id: svn://svn.valgrind.org/vex/trunk@1268 --- VEX/priv/guest-ppc32/ghelpers.c | 81 +++++++++++++++++++++++++++++++++ VEX/pub/libvex_guest_ppc32.h | 4 +- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/VEX/priv/guest-ppc32/ghelpers.c b/VEX/priv/guest-ppc32/ghelpers.c index e6cf0fef21..6d434e6b9e 100644 --- a/VEX/priv/guest-ppc32/ghelpers.c +++ b/VEX/priv/guest-ppc32/ghelpers.c @@ -210,6 +210,14 @@ UInt LibVEX_GuestPPC32_get_cr7 ( /*IN*/VexGuestPPC32State* vex_state ) return flags; } +/* VISIBLE TO LIBVEX CLIENT */ +UInt LibVEX_GuestPPC32_get_cr ( /*IN*/VexGuestPPC32State* vex_state ) +{ + UInt cr7 = LibVEX_GuestPPC32_get_cr7( vex_state ); + UInt cr0to6 = vex_state->guest_CR0to6; + return (cr7 & 0xF0000000) | (cr0to6 & 0x0FFFFFFF); +} + /* VISIBLE TO LIBVEX CLIENT */ void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state ) { @@ -246,6 +254,75 @@ void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state ) vex_state->guest_GPR30 = 0; vex_state->guest_GPR31 = 0; + vex_state->guest_FPR0 = 0; + vex_state->guest_FPR1 = 0; + vex_state->guest_FPR2 = 0; + vex_state->guest_FPR3 = 0; + vex_state->guest_FPR4 = 0; + vex_state->guest_FPR5 = 0; + vex_state->guest_FPR6 = 0; + vex_state->guest_FPR7 = 0; + vex_state->guest_FPR8 = 0; + vex_state->guest_FPR9 = 0; + vex_state->guest_FPR10 = 0; + vex_state->guest_FPR11 = 0; + vex_state->guest_FPR12 = 0; + vex_state->guest_FPR13 = 0; + vex_state->guest_FPR14 = 0; + vex_state->guest_FPR15 = 0; + vex_state->guest_FPR16 = 0; + vex_state->guest_FPR17 = 0; + vex_state->guest_FPR18 = 0; + vex_state->guest_FPR19 = 0; + vex_state->guest_FPR20 = 0; + vex_state->guest_FPR21 = 0; + vex_state->guest_FPR22 = 0; + vex_state->guest_FPR23 = 0; + vex_state->guest_FPR24 = 0; + vex_state->guest_FPR25 = 0; + vex_state->guest_FPR26 = 0; + vex_state->guest_FPR27 = 0; + vex_state->guest_FPR28 = 0; + vex_state->guest_FPR29 = 0; + vex_state->guest_FPR30 = 0; + vex_state->guest_FPR31 = 0; + + /* Initialise the vector state. */ +# define SSEZERO(_vr) _vr[0]=_vr[1]=_vr[2]=_vr[3] = 0; + + SSEZERO(vex_state->guest_VR0 ); + SSEZERO(vex_state->guest_VR1 ); + SSEZERO(vex_state->guest_VR2 ); + SSEZERO(vex_state->guest_VR3 ); + SSEZERO(vex_state->guest_VR4 ); + SSEZERO(vex_state->guest_VR5 ); + SSEZERO(vex_state->guest_VR6 ); + SSEZERO(vex_state->guest_VR7 ); + SSEZERO(vex_state->guest_VR8 ); + SSEZERO(vex_state->guest_VR9 ); + SSEZERO(vex_state->guest_VR10); + SSEZERO(vex_state->guest_VR11); + SSEZERO(vex_state->guest_VR12); + SSEZERO(vex_state->guest_VR13); + SSEZERO(vex_state->guest_VR14); + SSEZERO(vex_state->guest_VR15); + SSEZERO(vex_state->guest_VR16); + SSEZERO(vex_state->guest_VR17); + SSEZERO(vex_state->guest_VR18); + SSEZERO(vex_state->guest_VR19); + SSEZERO(vex_state->guest_VR20); + SSEZERO(vex_state->guest_VR21); + SSEZERO(vex_state->guest_VR22); + SSEZERO(vex_state->guest_VR23); + SSEZERO(vex_state->guest_VR24); + SSEZERO(vex_state->guest_VR25); + SSEZERO(vex_state->guest_VR26); + SSEZERO(vex_state->guest_VR27); + SSEZERO(vex_state->guest_VR28); + SSEZERO(vex_state->guest_VR29); + SSEZERO(vex_state->guest_VR30); + SSEZERO(vex_state->guest_VR31); + vex_state->guest_CIA = 0; vex_state->guest_LR = 0; vex_state->guest_CTR = 0; @@ -260,6 +337,10 @@ void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state ) vex_state->guest_XER = 0; + vex_state->guest_VRSAVE = 0; + + vex_state->guest_VSCR = 0; + vex_state->guest_EMWARN = EmWarn_NONE; vex_state->guest_TISTART = 0; diff --git a/VEX/pub/libvex_guest_ppc32.h b/VEX/pub/libvex_guest_ppc32.h index f02f18dbbe..b1e6890a1c 100644 --- a/VEX/pub/libvex_guest_ppc32.h +++ b/VEX/pub/libvex_guest_ppc32.h @@ -197,10 +197,12 @@ void LibVEX_GuestPPC32_initialise ( /*OUT*/VexGuestPPC32State* vex_state ); /* Extract from the supplied VexGuestPPC32State structure the corresponding native %cr7 value. */ - extern UInt LibVEX_GuestPPC32_get_cr7 ( /*IN*/VexGuestPPC32State* vex_state ); +/* Ditto, but for entire %cr */ +extern +UInt LibVEX_GuestPPC32_get_cr ( /*IN*/VexGuestPPC32State* vex_state ); #endif /* ndef __LIBVEX_PUB_GUEST_PPC32_H */ -- 2.47.3