From: Julian Seward Date: Sat, 28 May 2011 15:58:13 +0000 (+0000) Subject: Test for guest-state-pointer changes by checking its lowest bit. X-Git-Tag: svn/VALGRIND_3_7_0~454 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=55daaf18366edf38a382114c59fd175c572c9450;p=thirdparty%2Fvalgrind.git Test for guest-state-pointer changes by checking its lowest bit. Removes one memory reference from the dispatcher loop. As per r11781 for arm-linux. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11783 --- diff --git a/coregrind/m_dispatch/dispatch-ppc32-linux.S b/coregrind/m_dispatch/dispatch-ppc32-linux.S index c8ba4e8e8e..b2926b4aa1 100644 --- a/coregrind/m_dispatch/dispatch-ppc32-linux.S +++ b/coregrind/m_dispatch/dispatch-ppc32-linux.S @@ -179,7 +179,7 @@ LafterVMX1: /* r3 holds guest_state */ /* r4 holds do_profiling */ mr 31,3 /* r31 (generated code gsp) = r3 */ - stw 3,28(1) /* spill orig guest_state ptr */ + stw 3,28(1) /* spill orig guest_state ptr (UNUSED) */ /* 24(sp) used later to stop ctr reg being clobbered */ /* 20(sp) used later to load fpscr with zero */ @@ -254,16 +254,13 @@ VG_(run_innerloop__dispatch_unprofiled): r3 (=CIA = next guest address) r29 (=dispatch_ctr) r31 (=guest_state) - Stack state: - 44(r1) (=orig guest_state) */ /* Has the guest state pointer been messed with? If yes, exit. Also set up & VG_(tt_fast) early in an attempt at better scheduling. */ - lwz 9,44(1) /* original guest_state ptr */ lis 5,VG_(tt_fast)@ha addi 5,5,VG_(tt_fast)@l /* & VG_(tt_fast) */ - cmpw 9,31 + andi. 0,31,1 bne gsp_changed /* save the jump address in the guest state */ @@ -308,16 +305,13 @@ VG_(run_innerloop__dispatch_profiled): r3 (=CIA = next guest address) r29 (=dispatch_ctr) r31 (=guest_state) - Stack state: - 44(r1) (=orig guest_state) */ /* Has the guest state pointer been messed with? If yes, exit. Also set up & VG_(tt_fast) early in an attempt at better scheduling. */ - lwz 9,44(1) /* original guest_state ptr */ lis 5,VG_(tt_fast)@ha addi 5,5,VG_(tt_fast)@l /* & VG_(tt_fast) */ - cmpw 9,31 + andi. 0,31,1 bne gsp_changed /* save the jump address in the guest state */ diff --git a/coregrind/m_dispatch/dispatch-ppc64-linux.S b/coregrind/m_dispatch/dispatch-ppc64-linux.S index a8f4633487..6eb4fc919d 100644 --- a/coregrind/m_dispatch/dispatch-ppc64-linux.S +++ b/coregrind/m_dispatch/dispatch-ppc64-linux.S @@ -186,7 +186,7 @@ VG_(run_innerloop): /* r3 holds guest_state */ /* r4 holds do_profiling */ mr 31,3 - std 3,104(1) /* spill orig guest_state ptr */ + std 3,104(1) /* spill orig guest_state ptr (UNUSED) */ /* 96(sp) used later to check FPSCR[RM] */ /* 88(sp) used later to load fpscr with zero */ @@ -268,15 +268,13 @@ VG_(run_innerloop__dispatch_unprofiled): r29 (=dispatch_ctr) r31 (=guest_state) Stack state: - 152(r1) (=orig guest_state) 144(r1) (=var space for FPSCR[RM]) */ /* Has the guest state pointer been messed with? If yes, exit. Also set up & VG_(tt_fast) early in an attempt at better scheduling. */ - ld 9,152(1) /* original guest_state ptr */ ld 5, .tocent__vgPlain_tt_fast@toc(2) /* &VG_(tt_fast) */ - cmpd 9,31 + rldicl. 0,31,0,63 bne .gsp_changed /* save the jump address in the guest state */ @@ -335,15 +333,13 @@ VG_(run_innerloop__dispatch_profiled): r29 (=dispatch_ctr) r31 (=guest_state) Stack state: - 152(r1) (=orig guest_state) 144(r1) (=var space for FPSCR[RM]) */ /* Has the guest state pointer been messed with? If yes, exit. Also set up & VG_(tt_fast) early in an attempt at better scheduling. */ - ld 9,152(1) /* original guest_state ptr */ ld 5, .tocent__vgPlain_tt_fast@toc(2) /* &VG_(tt_fast) */ - cmpd 9,31 + rldicl. 0,31,0,63 bne .gsp_changed /* save the jump address in the guest state */