Changeset 91678 in webkit


Ignore:
Timestamp:
Jul 25, 2011, 10:59:08 AM (14 years ago)
Author:
commit-queue@webkit.org
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 <fpizlo@apple.com> 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):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r91660 r91678  
     12011-07-25  Filip Pizlo  <fpizlo@apple.com>
     2
     3        X86-64 assembler emits three instructions instead of two for certain
     4        loads and stores.
     5        https://bugs.webkit.org/show_bug.cgi?id=65095
     6
     7        Reviewed by Gavin Barraclough.
     8       
     9        Simply made these four methods in the assembler use the scratch register,
     10        which they were previously avoiding.  It still optimizes for the case where
     11        an absolute address memory accesses is using EAX.  This results in a slight
     12        performance improvement.
     13
     14        * assembler/MacroAssemblerX86_64.h:
     15        (JSC::MacroAssemblerX86_64::load32):
     16        (JSC::MacroAssemblerX86_64::store32):
     17        (JSC::MacroAssemblerX86_64::loadPtr):
     18        (JSC::MacroAssemblerX86_64::storePtr):
     19
    1202011-07-25  Ryuan Choi  <ryuan.choi@samsung.com>
    221
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h

    r90237 r91678  
    8282            m_assembler.movl_mEAX(address);
    8383        else {
    84             move(X86Registers::eax, dest);
    85             m_assembler.movl_mEAX(address);
    86             swap(X86Registers::eax, dest);
     84            move(TrustedImmPtr(address), dest);
     85            load32(dest, dest);
    8786        }
    8887    }
     
    108107    void store32(TrustedImm32 imm, void* address)
    109108    {
    110         move(X86Registers::eax, scratchRegister);
    111         move(imm, X86Registers::eax);
    112         m_assembler.movl_EAXm(address);
    113         move(scratchRegister, X86Registers::eax);
     109        move(TrustedImmPtr(address), scratchRegister);
     110        store32(imm, scratchRegister);
    114111    }
    115112
     
    258255            m_assembler.movq_mEAX(address);
    259256        else {
    260             move(X86Registers::eax, dest);
    261             m_assembler.movq_mEAX(address);
    262             swap(X86Registers::eax, dest);
     257            move(TrustedImmPtr(address), dest);
     258            loadPtr(dest, dest);
    263259        }
    264260    }
     
    291287            m_assembler.movq_EAXm(address);
    292288        else {
    293             swap(X86Registers::eax, src);
    294             m_assembler.movq_EAXm(address);
    295             swap(X86Registers::eax, src);
     289            move(TrustedImmPtr(address), scratchRegister);
     290            storePtr(src, scratchRegister);
    296291        }
    297292    }
Note: See TracChangeset for help on using the changeset viewer.