Title: [91678] trunk/Source/_javascript_Core
Revision
91678
Author
[email protected]
Date
2011-07-25 10:59:08 -0700 (Mon, 25 Jul 2011)

Log Message

X86-64 assembler emits three instructions instead of two for certain
loads and stores.
https://bugs.webkit.org/show_bug.cgi?id=65095

Patch by Filip Pizlo <[email protected]> on 2011-07-25
Reviewed by Gavin Barraclough.

Simply made these four methods in the assembler use the scratch register,
which they were previously avoiding.  It still optimizes for the case where
an absolute address memory accesses is using EAX.  This results in a slight
performance improvement.

* assembler/MacroAssemblerX86_64.h:
(JSC::MacroAssemblerX86_64::load32):
(JSC::MacroAssemblerX86_64::store32):
(JSC::MacroAssemblerX86_64::loadPtr):
(JSC::MacroAssemblerX86_64::storePtr):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (91677 => 91678)


--- trunk/Source/_javascript_Core/ChangeLog	2011-07-25 17:51:07 UTC (rev 91677)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-07-25 17:59:08 UTC (rev 91678)
@@ -1,3 +1,22 @@
+2011-07-25  Filip Pizlo  <[email protected]>
+
+        X86-64 assembler emits three instructions instead of two for certain
+        loads and stores.
+        https://bugs.webkit.org/show_bug.cgi?id=65095
+
+        Reviewed by Gavin Barraclough.
+        
+        Simply made these four methods in the assembler use the scratch register,
+        which they were previously avoiding.  It still optimizes for the case where
+        an absolute address memory accesses is using EAX.  This results in a slight
+        performance improvement.
+
+        * assembler/MacroAssemblerX86_64.h:
+        (JSC::MacroAssemblerX86_64::load32):
+        (JSC::MacroAssemblerX86_64::store32):
+        (JSC::MacroAssemblerX86_64::loadPtr):
+        (JSC::MacroAssemblerX86_64::storePtr):
+
 2011-07-25  Ryuan Choi  <[email protected]>
 
         [EFL] Implement EFL-specific current time and monotonicallyIncreasingTime.

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h (91677 => 91678)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h	2011-07-25 17:51:07 UTC (rev 91677)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerX86_64.h	2011-07-25 17:59:08 UTC (rev 91678)
@@ -81,9 +81,8 @@
         if (dest == X86Registers::eax)
             m_assembler.movl_mEAX(address);
         else {
-            move(X86Registers::eax, dest);
-            m_assembler.movl_mEAX(address);
-            swap(X86Registers::eax, dest);
+            move(TrustedImmPtr(address), dest);
+            load32(dest, dest);
         }
     }
 
@@ -107,10 +106,8 @@
 
     void store32(TrustedImm32 imm, void* address)
     {
-        move(X86Registers::eax, scratchRegister);
-        move(imm, X86Registers::eax);
-        m_assembler.movl_EAXm(address);
-        move(scratchRegister, X86Registers::eax);
+        move(TrustedImmPtr(address), scratchRegister);
+        store32(imm, scratchRegister);
     }
 
     Call call()
@@ -257,9 +254,8 @@
         if (dest == X86Registers::eax)
             m_assembler.movq_mEAX(address);
         else {
-            move(X86Registers::eax, dest);
-            m_assembler.movq_mEAX(address);
-            swap(X86Registers::eax, dest);
+            move(TrustedImmPtr(address), dest);
+            loadPtr(dest, dest);
         }
     }
 
@@ -290,9 +286,8 @@
         if (src == X86Registers::eax)
             m_assembler.movq_EAXm(address);
         else {
-            swap(X86Registers::eax, src);
-            m_assembler.movq_EAXm(address);
-            swap(X86Registers::eax, src);
+            move(TrustedImmPtr(address), scratchRegister);
+            storePtr(src, scratchRegister);
         }
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to