2011-06-03 Oliver Hunt <oliver@apple.com>
authoroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 4 Jun 2011 00:43:42 +0000 (00:43 +0000)
committeroliver@apple.com <oliver@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 4 Jun 2011 00:43:42 +0000 (00:43 +0000)
        Reviewed by Gavin Barraclough.

        GCC not inlining some functions that it really should be
        https://bugs.webkit.org/show_bug.cgi?id=62075

        Add ALWAYS_INLINE to a number of parsing and lexing functions
        that should always be inlined.  This gets us ~1.4% on my ad hoc
        parser test.

        * KeywordLookupGenerator.py:
        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::nextTokenIsColon):
        (JSC::JSParser::consume):
        (JSC::JSParser::match):
        (JSC::JSParser::tokenStart):
        (JSC::JSParser::tokenLine):
        (JSC::JSParser::tokenEnd):
        * parser/Lexer.cpp:
        (JSC::isIdentPart):

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

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/KeywordLookupGenerator.py
Source/JavaScriptCore/parser/JSParser.cpp
Source/JavaScriptCore/parser/Lexer.cpp

index 5a595ba..70619ff 100755 (executable)
@@ -1,5 +1,28 @@
 2011-06-03  Oliver Hunt  <oliver@apple.com>
 
+        Reviewed by Gavin Barraclough.
+
+        GCC not inlining some functions that it really should be
+        https://bugs.webkit.org/show_bug.cgi?id=62075
+
+        Add ALWAYS_INLINE to a number of parsing and lexing functions
+        that should always be inlined.  This gets us ~1.4% on my ad hoc
+        parser test.
+
+        * KeywordLookupGenerator.py:
+        * parser/JSParser.cpp:
+        (JSC::JSParser::next):
+        (JSC::JSParser::nextTokenIsColon):
+        (JSC::JSParser::consume):
+        (JSC::JSParser::match):
+        (JSC::JSParser::tokenStart):
+        (JSC::JSParser::tokenLine):
+        (JSC::JSParser::tokenEnd):
+        * parser/Lexer.cpp:
+        (JSC::isIdentPart):
+
+2011-06-03  Oliver Hunt  <oliver@apple.com>
+
         Whoops, fix last minute bug.
 
         * parser/Lexer.cpp:
index b93d5d3..2558732 100644 (file)
@@ -163,7 +163,7 @@ class Trie:
 
     def printAsC(self):
         print("namespace JSC {")
-        print("static inline bool isIdentPart(int c);")
+        print("static ALWAYS_INLINE bool isIdentPart(int c);")
         # max length + 1 so we don't need to do any bounds checking at all
         print("static const int maxTokenLength = %d;" % (self.maxLength() + 1))
         print("ALWAYS_INLINE JSTokenType Lexer::parseKeyword() {")
index d5cce94..a3ea44d 100644 (file)
@@ -99,7 +99,7 @@ private:
         bool m_isLoop;
     };
     
-    void next(unsigned lexType = 0)
+    ALWAYS_INLINE void next(unsigned lexType = 0)
     {
         m_lastLine = m_token.m_info.line;
         m_lastTokenEnd = m_token.m_info.endOffset;
@@ -107,12 +107,12 @@ private:
         m_token.m_type = m_lexer->lex(&m_token.m_data, &m_token.m_info, lexType, strictMode());
     }
     
-    bool nextTokenIsColon()
+    ALWAYS_INLINE bool nextTokenIsColon()
     {
         return m_lexer->nextTokenIsColon();
     }
 
-    bool consume(JSTokenType expected, unsigned flags = 0)
+    ALWAYS_INLINE bool consume(JSTokenType expected, unsigned flags = 0)
     {
         bool result = m_token.m_type == expected;
         failIfFalse(result);
@@ -120,22 +120,22 @@ private:
         return result;
     }
 
-    bool match(JSTokenType expected)
+    ALWAYS_INLINE bool match(JSTokenType expected)
     {
         return m_token.m_type == expected;
     }
 
-    int tokenStart()
+    ALWAYS_INLINE int tokenStart()
     {
         return m_token.m_info.startOffset;
     }
 
-    int tokenLine()
+    ALWAYS_INLINE int tokenLine()
     {
         return m_token.m_info.line;
     }
 
-    int tokenEnd()
+    ALWAYS_INLINE int tokenEnd()
     {
         return m_token.m_info.endOffset;
     }
index a9ce770..188ca08 100644 (file)
@@ -357,7 +357,7 @@ static NEVER_INLINE bool isNonASCIIIdentPart(int c)
         | Mark_NonSpacing | Mark_SpacingCombining | Number_DecimalDigit | Punctuation_Connector);
 }
 
-static inline bool isIdentPart(int c)
+static ALWAYS_INLINE bool isIdentPart(int c)
 {
     // Character types are divided into two groups depending on whether they can be part of an
     // identifier or not. Those whose type value is less or equal than CharacterNumber can be