Changeset 41474 in webkit for trunk/JavaScriptCore/assembler


Ignore:
Timestamp:
Mar 5, 2009, 11:02:10 PM (16 years ago)
Author:
[email protected]
Message:

2009-03-05 Gavin Barraclough <[email protected]>

Reviewed by Oliver Hunt.

Writes of constant values to SF registers should be made with direct memory
writes where possible, rather than moving the value via a hardware register.

~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64.

  • assembler/MacroAssemblerX86_64.h: (JSC::MacroAssemblerX86_64::storePtr):
  • assembler/X86Assembler.h: (JSC::X86Assembler::movq_i32m):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
Location:
trunk/JavaScriptCore/assembler
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/assembler/MacroAssemblerX86_64.h

    r41103 r41474  
    245245    void storePtr(ImmPtr imm, ImplicitAddress address)
    246246    {
    247         move(imm, scratchRegister);
    248         storePtr(scratchRegister, address);
     247        intptr_t ptr = imm.asIntptr();
     248        if (CAN_SIGN_EXTEND_32_64(ptr))
     249            m_assembler.movq_i32m(static_cast<int>(ptr), address.offset, address.base);
     250        else {
     251            move(imm, scratchRegister);
     252            storePtr(scratchRegister, address);
     253        }
    249254    }
    250255
  • trunk/JavaScriptCore/assembler/X86Assembler.h

    r41089 r41474  
    928928    }
    929929
     930    void movq_i32m(int imm, int offset, RegisterID base)
     931    {
     932        m_formatter.oneByteOp64(OP_GROUP11_EvIz, GROUP11_MOV, base, offset);
     933        m_formatter.immediate32(imm);
     934    }
     935
    930936    void movq_i64r(int64_t imm, RegisterID dst)
    931937    {
Note: See TracChangeset for help on using the changeset viewer.