Changeset 142146 in webkit


Ignore:
Timestamp:
Feb 7, 2013 10:04:04 AM (11 years ago)
Author:
zherczeg@webkit.org
Message:

Invalid code is generated for storing constants with baseindex addressing modes on ARM traditional.
https://bugs.webkit.org/show_bug.cgi?id=109050

Reviewed by Oliver Hunt.

The S! scratch register is reused, but it should contain the constant value.

  • assembler/ARMAssembler.cpp:

(JSC::ARMAssembler::baseIndexTransfer32):
(JSC::ARMAssembler::baseIndexTransfer16):

Location:
trunk/Source/JavaScriptCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r142088 r142146  
     12013-02-07  Zoltan Herczeg  <zherczeg@webkit.org>
     2
     3        Invalid code is generated for storing constants with baseindex addressing modes on ARM traditional.
     4        https://bugs.webkit.org/show_bug.cgi?id=109050
     5
     6        Reviewed by Oliver Hunt.
     7
     8        The S! scratch register is reused, but it should contain the constant value.
     9
     10        * assembler/ARMAssembler.cpp:
     11        (JSC::ARMAssembler::baseIndexTransfer32):
     12        (JSC::ARMAssembler::baseIndexTransfer16):
     13
    1142013-02-07  Andras Becsi  <andras.becsi@digia.com>
    215
  • trunk/Source/JavaScriptCore/assembler/ARMAssembler.cpp

    r125541 r142146  
    298298    }
    299299
    300     add(ARMRegisters::S1, base, op2);
    301     dataTransfer32(transferType, srcDst, ARMRegisters::S1, offset);
     300    if (offset <= 0xfffff && offset >= -0xfffff) {
     301        add(ARMRegisters::S0, base, op2);
     302        dataTransfer32(transferType, srcDst, ARMRegisters::S0, offset);
     303        return;
     304    }
     305
     306    moveImm(offset, ARMRegisters::S0);
     307    add(ARMRegisters::S0, ARMRegisters::S0, op2);
     308    dtrUpRegister(transferType, srcDst, base, ARMRegisters::S0);
    302309}
    303310
     
    334341    }
    335342
    336     add(ARMRegisters::S1, base, lsl(index, scale));
    337     dataTransfer16(transferType, srcDst, ARMRegisters::S1, offset);
     343    ARMWord op2 = lsl(index, scale);
     344
     345    if (offset <= 0xffff && offset >= -0xffff) {
     346        add(ARMRegisters::S0, base, op2);
     347        dataTransfer16(transferType, srcDst, ARMRegisters::S0, offset);
     348        return;
     349    }
     350
     351    moveImm(offset, ARMRegisters::S0);
     352    add(ARMRegisters::S0, ARMRegisters::S0, op2);
     353    halfDtrUpRegister(transferType, srcDst, base, ARMRegisters::S0);
    338354}
    339355
Note: See TracChangeset for help on using the changeset viewer.