2009-04-30 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Apr 2009 21:18:31 +0000 (21:18 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 30 Apr 2009 21:18:31 +0000 (21:18 +0000)
        Reviewed by Geoff Garen.

        - make BaseStrings have themselves as a base, instead of nothing, to remove common branches

        ~0.7% SunSpider speedup

        * runtime/UString.h:
        (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null.
        (JSC::UString::Rep::baseString): Just read m_baseString - no more branching.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@43090 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/runtime/UString.h

index 1afd6dd1db40f7791a2a99a5866046dc64535bf2..56e1738611997c142097e6ed4fac6083d6776a25 100644 (file)
@@ -1,3 +1,15 @@
+2009-04-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        - make BaseStrings have themselves as a base, instead of nothing, to remove common branches
+
+        ~0.7% SunSpider speedup
+
+        * runtime/UString.h:
+        (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null.
+        (JSC::UString::Rep::baseString): Just read m_baseString - no more branching.
+
 2009-04-30  Gavin Barraclough  <barraclough@apple.com>
 
         Reviewed by Oliver Hunt.
index 89ca40d77516a827662230edc9f6362d093f776b..420e0b4a8fa5c1a5cb0153af6fd826eb78b8b979 100644 (file)
@@ -133,12 +133,13 @@ namespace JSC {
             static BaseString& empty() { return *emptyBaseString; }
 
         protected:
+            // constructor for use by BaseString subclass; they are their own bases
             Rep(int length)
                 : offset(0)
                 , len(length)
                 , rc(1)
                 , _hash(0)
-                , m_nothing(0)
+                , m_baseString(static_cast<BaseString*>(this))
             {
             }
 
@@ -152,12 +153,8 @@ namespace JSC {
                 checkConsistency();
             }
 
-            union {
-                // If !baseIsSelf()
-                BaseString* m_baseString;
-                // If baseIsSelf()
-                void* m_nothing;
-            };
+
+            BaseString* m_baseString;
 
         private:
             // For SmallStringStorage which allocates an array and does initialization manually.
@@ -410,12 +407,12 @@ namespace JSC {
 
     inline UString::BaseString* UString::Rep::baseString()
     {
-        return baseIsSelf() ? reinterpret_cast<BaseString*>(this) : m_baseString;
+        return m_baseString;
     }
 
     inline const UString::BaseString* UString::Rep::baseString() const
     {
-        return const_cast<Rep*>(this)->baseString();
+        return m_baseString;
     }
 
 #ifdef NDEBUG