VEX part Implement --vex-iropt-register-updates=sp-at-mem-access
git-svn-id: svn://svn.valgrind.org/vex/trunk@2468 8f6e269a-dfd6-0310-a8e1-e2731360e62c
diff --git a/priv/guest_arm_helpers.c b/priv/guest_arm_helpers.c
index d31e64a..5fc42c7 100644
--- a/priv/guest_arm_helpers.c
+++ b/priv/guest_arm_helpers.c
@@ -35,6 +35,7 @@
#include "libvex.h"
#include "main_util.h"
+#include "main_globals.h"
#include "guest_generic_bb_to_IR.h"
#include "guest_arm_defs.h"
@@ -1043,9 +1044,12 @@
/* Figure out if any part of the guest state contained in minoff
.. maxoff requires precise memory exceptions. If in doubt return
- True (but this is generates significantly slower code).
+ True (but this generates significantly slower code).
- We enforce precise exns for guest R13(sp), R15T(pc).
+ We enforce precise exns for guest R13(sp), R15T(pc), R7, R11.
+
+
+ Only R13(sp) is needed in mode VexRegUpdSpAtMemAccess.
*/
Bool guest_arm_state_requires_precise_mem_exns ( Int minoff,
Int maxoff)
@@ -1057,6 +1061,8 @@
if (maxoff < sp_min || minoff > sp_max) {
/* no overlap with sp */
+ if (vex_control.iropt_register_updates == VexRegUpdSpAtMemAccess)
+ return False; // We only need to check stack pointer.
} else {
return True;
}