]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Dispatcher tweak. Saves ALU operation. Suggested by Julian Seward.
authorFlorian Krohm <florian@eich-krohm.de>
Sat, 17 Sep 2011 15:46:59 +0000 (15:46 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Sat, 17 Sep 2011 15:46:59 +0000 (15:46 +0000)
Implemented by Christian Borntraeger (borntraeger@de.ibm.com).
See bugzilla #274378

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12036

NEWS
coregrind/m_dispatch/dispatch-s390x-linux.S

diff --git a/NEWS b/NEWS
index ba68895ce2fc2347f27c62150ee7a60e8daf648e..a13b290f6c5b3cccaceaaaf3c24cdbd722403e20 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -277,6 +277,8 @@ fixed
 
 281883 - s390x: Fix system call wrapper for "clone".
 
+274378 - s390x: Various dispatcher tweaks
+
 
 Release 3.6.1 (16 February 2011)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
index bc3b0fd84b43210923074ecf8f57a87b4dc5d668..b04d4fe6b12f2360ded05d467194793fe1342c79 100644 (file)
@@ -154,11 +154,15 @@ run_innerloop__dispatch_unprofiled:
            and  sizeof(FastCacheEntry) == 16
 
            offset = ((addr >> 1) & VG_TT_FAST_MASK) << 4
+           which is
+           offset = ((addr & (VG_TT_FAST_MASK << 1) ) << 3
         */
-        lghi %r5,VG_TT_FAST_MASK
-        srlg %r7, %r2,1              /* next guest addr >> 1*/
-        ngr  %r7,%r5
-        sllg %r7,%r7,4
+        llill %r5,( VG_TT_FAST_MASK << 1) & 0xffff
+#if ((( VG_TT_FAST_MASK << 1) & 0xffff0000) >> 16 != 0)
+        iilh %r5,(( VG_TT_FAST_MASK << 1) & 0xffff0000) >> 16
+#endif
+        ngr  %r5,%r2
+        sllg %r7,%r5,3
 
         /* Set the return address to the beginning of the loop here to
            have some instruction between setting r7 and using it as an
@@ -207,11 +211,15 @@ run_innerloop__dispatch_profiled:
            and  sizeof(FastCacheEntry) == 16
 
            offset = ((addr >> 1) & VG_TT_FAST_MASK) << 4
+           which is
+           offset = ((addr & (VG_TT_FAST_MASK << 1) ) << 3
         */
-        lghi %r5,VG_TT_FAST_MASK
-        srlg %r7,%r2,1              /* next guest addr >> 1*/
-        ngr  %r7,%r5
-        sllg %r7,%r7,4
+        llill %r5,( VG_TT_FAST_MASK << 1) & 0xffff
+#if ((( VG_TT_FAST_MASK << 1) & 0xffff0000) >> 16 != 0)
+        iilh %r5,(( VG_TT_FAST_MASK << 1) & 0xffff0000) >> 16
+#endif
+        ngr  %r5,%r2
+        sllg %r7,%r5,3
 
         /* Set the return address to the beginning of the loop here to
            have some instruction between setting r7 and using it as an