Changeset 71722 in webkit


Ignore:
Timestamp:
Nov 9, 2010 11:36:33 PM (13 years ago)
Author:
loki@webkit.org
Message:

2010-11-09 Gabor Loki <loki@webkit.org>

Reviewed by Gavin Barraclough.

ARM JIT asserts when loading http://reader.google.com in debug mode
https://bugs.webkit.org/show_bug.cgi?id=48912

There are several cases when the uninterrupted sequence is larger than
maximum required offset for pathing the same sequence. Eg.: if in a
uninterrupted sequence the last macroassembler's instruction is a stub
call, it emits store instruction(s) which should not be included in the
calculation of length of uninterrupted sequence. So, the insnSpace and
constSpace should be upper limit instead of hard limit.

  • jit/JIT.h:
  • jit/JITInlineMethods.h: (JSC::JIT::endUninterruptedSequence):
Location:
trunk/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r71691 r71722  
     12010-11-09  Gabor Loki  <loki@webkit.org>
     2
     3        Reviewed by Gavin Barraclough.
     4
     5        ARM JIT asserts when loading http://reader.google.com in debug mode
     6        https://bugs.webkit.org/show_bug.cgi?id=48912
     7
     8        There are several cases when the uninterrupted sequence is larger than
     9        maximum required offset for pathing the same sequence. Eg.: if in a
     10        uninterrupted sequence the last macroassembler's instruction is a stub
     11        call, it emits store instruction(s) which should not be included in the
     12        calculation of length of uninterrupted sequence. So, the insnSpace and
     13        constSpace should be upper limit instead of hard limit.
     14
     15        * jit/JIT.h:
     16        * jit/JITInlineMethods.h:
     17        (JSC::JIT::endUninterruptedSequence):
     18
    1192010-11-09  David Kilzer  <ddkilzer@apple.com>
    220
  • trunk/JavaScriptCore/jit/JIT.h

    r70111 r71722  
    403403        static const int sequenceGetByIdHotPathConstantSpace = 4;
    404404        // sequenceGetByIdSlowCase
    405         static const int sequenceGetByIdSlowCaseInstructionSpace = 40;
     405        static const int sequenceGetByIdSlowCaseInstructionSpace = 56;
    406406        static const int sequenceGetByIdSlowCaseConstantSpace = 2;
    407407        // sequencePutById
  • trunk/JavaScriptCore/jit/JITInlineMethods.h

    r70703 r71722  
    123123{
    124124#if defined(ASSEMBLER_HAS_CONSTANT_POOL) && ASSEMBLER_HAS_CONSTANT_POOL
    125     ASSERT(differenceBetween(m_uninterruptedInstructionSequenceBegin, label()) == insnSpace);
    126     ASSERT(sizeOfConstantPool() - m_uninterruptedConstantSequenceBegin == constSpace);
     125    /* There are several cases when the uninterrupted sequence is larger than
     126     * maximum required offset for pathing the same sequence. Eg.: if in a
     127     * uninterrupted sequence the last macroassembler's instruction is a stub
     128     * call, it emits store instruction(s) which should not be included in the
     129     * calculation of length of uninterrupted sequence. So, the insnSpace and
     130     * constSpace should be upper limit instead of hard limit.
     131     */
     132    ASSERT(differenceBetween(m_uninterruptedInstructionSequenceBegin, label()) <= insnSpace);
     133    ASSERT(sizeOfConstantPool() - m_uninterruptedConstantSequenceBegin <= constSpace);
    127134#endif
    128135    JSInterfaceJIT::endUninterruptedSequence();
Note: See TracChangeset for help on using the changeset viewer.