Changeset 47802 in webkit for trunk/JavaScriptCore/assembler


Ignore:
Timestamp:
Aug 26, 2009, 6:16:53 PM (16 years ago)
Author:
[email protected]
Message:

x86-64 GTK broken due to code offsets changing, pointers sometimes packed into immediates.
https://bugs.webkit.org/show_bug.cgi?id=28317

Reviewed by Olliejver Hunt.

We rely on a slightly OS X specific behaviour, that x86-64 applications have a 4Gb zero page,
so pointers are never representable as a 32-bit integer, and always have to be represented by
a separate immediate load instruction, rather than within the immediate field of an arithmetic
or memory operation.

We explicitly check for a couple of cases where a value might be representable in 32-bit, but
these probably never kick in on Mac OS, and only kick in to hose GTK. Deleting these does not
show a performance degradation on SunSpider. Remove.

  • assembler/MacroAssemblerX86_64.h:

(JSC::MacroAssemblerX86_64::storePtr):
(JSC::MacroAssemblerX86_64::branchPtr):

File:
1 edited

Legend:

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

    r47530 r47802  
    297297    void storePtr(ImmPtr imm, ImplicitAddress address)
    298298    {
    299         intptr_t ptr = imm.asIntptr();
    300         if (CAN_SIGN_EXTEND_32_64(ptr))
    301             m_assembler.movq_i32m(static_cast<int>(ptr), address.offset, address.base);
    302         else {
    303             move(imm, scratchRegister);
    304             storePtr(scratchRegister, address);
    305         }
     299        move(imm, scratchRegister);
     300        storePtr(scratchRegister, address);
    306301    }
    307302
     
    340335    Jump branchPtr(Condition cond, RegisterID left, ImmPtr right)
    341336    {
    342         intptr_t imm = right.asIntptr();
    343         if (CAN_SIGN_EXTEND_32_64(imm)) {
    344             if (!imm)
    345                 m_assembler.testq_rr(left, left);
    346             else
    347                 m_assembler.cmpq_ir(imm, left);
    348             return Jump(m_assembler.jCC(x86Condition(cond)));
    349         } else {
    350             move(right, scratchRegister);
    351             return branchPtr(cond, left, scratchRegister);
    352         }
     337        move(right, scratchRegister);
     338        return branchPtr(cond, left, scratchRegister);
    353339    }
    354340
Note: See TracChangeset for help on using the changeset viewer.