Changeset 77248 in webkit


Ignore:
Timestamp:
Feb 1, 2011 6:40:03 AM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-02-01 Dave Tapuska <dtapuska@rim.com>

Reviewed by Gavin Barraclough.

MacroAssemblerARM would generate code that did 32bit loads
on addresses that were not aligned. More specifically it would
generate a ldr r8,[r1, #7] which isn't valid on ARMv5 and lower.
The intended instruction really is ldrb r8,[r1, #7]; ensure we
call load8 instead of load32.

https://bugs.webkit.org/show_bug.cgi?id=46095

  • assembler/MacroAssemblerARM.h: (JSC::MacroAssemblerARM::set32Test32): (JSC::MacroAssemblerARM::set32Test8):
Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r77242 r77248  
     12011-02-01  Dave Tapuska  <dtapuska@rim.com>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        MacroAssemblerARM would generate code that did 32bit loads
     6        on addresses that were not aligned. More specifically it would
     7        generate a ldr r8,[r1, #7] which isn't valid on ARMv5 and lower.
     8        The intended instruction really is ldrb r8,[r1, #7]; ensure we
     9        call load8 instead of load32.
     10
     11        https://bugs.webkit.org/show_bug.cgi?id=46095
     12
     13        * assembler/MacroAssemblerARM.h:
     14        (JSC::MacroAssemblerARM::set32Test32):
     15        (JSC::MacroAssemblerARM::set32Test8):
     16
    1172011-02-01  Darin Fisher  <darin@chromium.org>
    218
  • trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM.h

    r75210 r77248  
    662662    }
    663663
    664     void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
    665     {
    666         load32(address, ARMRegisters::S1);
     664    void set32Test32(Condition cond, RegisterID reg, Imm32 mask, RegisterID dest)
     665    {
    667666        if (mask.m_value == -1)
    668             m_assembler.cmp_r(0, ARMRegisters::S1);
     667            m_assembler.cmp_r(0, reg);
    669668        else
    670             m_assembler.tst_r(ARMRegisters::S1, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
     669            m_assembler.tst_r(reg, m_assembler.getImm(mask.m_value, ARMRegisters::S0));
    671670        m_assembler.mov_r(dest, ARMAssembler::getOp2(0));
    672671        m_assembler.mov_r(dest, ARMAssembler::getOp2(1), ARMCondition(cond));
    673672    }
    674673
     674    void set32Test32(Condition cond, Address address, Imm32 mask, RegisterID dest)
     675    {
     676        load32(address, ARMRegisters::S1);
     677        set32Test32(cond, ARMRegisters::S1, mask, dest);
     678    }
     679
    675680    void set32Test8(Condition cond, Address address, Imm32 mask, RegisterID dest)
    676681    {
    677         // ARM doesn't have byte registers
    678         set32Test32(cond, address, mask, dest);
     682        load8(address, ARMRegisters::S1);
     683        set32Test32(cond, ARMRegisters::S1, mask, dest);
    679684    }
    680685
Note: See TracChangeset for help on using the changeset viewer.