Changeset 157796 in webkit


Ignore:
Timestamp:
Oct 22, 2013 8:51:51 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

REGRESSION(r157690, r157699) Fix architectures using AssemblerBufferWithConstantPool.
https://bugs.webkit.org/show_bug.cgi?id=123092

Patch by Julien Brianceau <jbriance@cisco.com> on 2013-10-22
Reviewed by Michael Saboff.

Impacted architectures are SH4 and ARM_TRADITIONAL.

  • assembler/ARMAssembler.h:

(JSC::ARMAssembler::buffer):

  • assembler/AssemblerBufferWithConstantPool.h:

(JSC::AssemblerBufferWithConstantPool::flushConstantPool):

  • assembler/LinkBuffer.cpp:

(JSC::LinkBuffer::linkCode):

  • assembler/SH4Assembler.h:

(JSC::SH4Assembler::buffer):

Location:
trunk/Source/JavaScriptCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r157795 r157796  
     12013-10-22  Julien Brianceau  <jbriance@cisco.com>
     2
     3        REGRESSION(r157690, r157699) Fix architectures using AssemblerBufferWithConstantPool.
     4        https://bugs.webkit.org/show_bug.cgi?id=123092
     5
     6        Reviewed by Michael Saboff.
     7
     8        Impacted architectures are SH4 and ARM_TRADITIONAL.
     9
     10        * assembler/ARMAssembler.h:
     11        (JSC::ARMAssembler::buffer):
     12        * assembler/AssemblerBufferWithConstantPool.h:
     13        (JSC::AssemblerBufferWithConstantPool::flushConstantPool):
     14        * assembler/LinkBuffer.cpp:
     15        (JSC::LinkBuffer::linkCode):
     16        * assembler/SH4Assembler.h:
     17        (JSC::SH4Assembler::buffer):
     18
    1192013-10-22  Julien Brianceau  <jbriance@cisco.com>
    220
  • trunk/Source/JavaScriptCore/assembler/ARMAssembler.h

    r157784 r157796  
    151151        {
    152152        }
     153
     154        ARMBuffer& buffer() { return m_buffer; }
    153155
    154156        // ARM conditional constants
  • trunk/Source/JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h

    r157699 r157796  
    224224    }
    225225
     226    void flushConstantPool(bool useBarrier = true)
     227    {
     228        if (!m_numConsts)
     229            return;
     230        int alignPool = (codeSize() + (useBarrier ? barrierSize : 0)) & (sizeof(uint64_t) - 1);
     231
     232        if (alignPool)
     233            alignPool = sizeof(uint64_t) - alignPool;
     234
     235        // Callback to protect the constant pool from execution
     236        if (useBarrier)
     237            putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));
     238
     239        if (alignPool) {
     240            if (alignPool & 1)
     241                AssemblerBuffer::putByte(AssemblerType::padForAlign8);
     242            if (alignPool & 2)
     243                AssemblerBuffer::putShort(AssemblerType::padForAlign16);
     244            if (alignPool & 4)
     245                AssemblerBuffer::putInt(AssemblerType::padForAlign32);
     246        }
     247
     248        int constPoolOffset = codeSize();
     249        append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t));
     250
     251        // Patch each PC relative load
     252        for (LoadOffsets::Iterator iter = m_loadOffsets.begin(); iter != m_loadOffsets.end(); ++iter) {
     253            void* loadAddr = reinterpret_cast<char*>(data()) + *iter;
     254            AssemblerType::patchConstantPoolLoad(loadAddr, reinterpret_cast<char*>(data()) + constPoolOffset);
     255        }
     256
     257        m_loadOffsets.clear();
     258        m_numConsts = 0;
     259    }
     260
    226261private:
    227262    void correctDeltas(int insnSize)
     
    268303    }
    269304
    270     void flushConstantPool(bool useBarrier = true)
    271     {
    272         if (m_numConsts == 0)
    273             return;
    274         int alignPool = (codeSize() + (useBarrier ? barrierSize : 0)) & (sizeof(uint64_t) - 1);
    275 
    276         if (alignPool)
    277             alignPool = sizeof(uint64_t) - alignPool;
    278 
    279         // Callback to protect the constant pool from execution
    280         if (useBarrier)
    281             putIntegral(AssemblerType::placeConstantPoolBarrier(m_numConsts * sizeof(uint32_t) + alignPool));
    282 
    283         if (alignPool) {
    284             if (alignPool & 1)
    285                 AssemblerBuffer::putByte(AssemblerType::padForAlign8);
    286             if (alignPool & 2)
    287                 AssemblerBuffer::putShort(AssemblerType::padForAlign16);
    288             if (alignPool & 4)
    289                 AssemblerBuffer::putInt(AssemblerType::padForAlign32);
    290         }
    291 
    292         int constPoolOffset = codeSize();
    293         append(reinterpret_cast<char*>(m_pool), m_numConsts * sizeof(uint32_t));
    294 
    295         // Patch each PC relative load
    296         for (LoadOffsets::Iterator iter = m_loadOffsets.begin(); iter != m_loadOffsets.end(); ++iter) {
    297             void* loadAddr = reinterpret_cast<char*>(data()) + *iter;
    298             AssemblerType::patchConstantPoolLoad(loadAddr, reinterpret_cast<char*>(data()) + constPoolOffset);
    299         }
    300 
    301         m_loadOffsets.clear();
    302         m_numConsts = 0;
    303     }
    304 
    305305    void flushIfNoSpaceFor(int nextInsnSize)
    306306    {
  • trunk/Source/JavaScriptCore/assembler/LinkBuffer.cpp

    r157690 r157796  
    137137    ASSERT(!m_code);
    138138#if !ENABLE(BRANCH_COMPACTION)
     139#if defined(ASSEMBLER_HAS_CONSTANT_POOL) && ASSEMBLER_HAS_CONSTANT_POOL
     140    m_assembler->m_assembler.buffer().flushConstantPool(false);
     141#endif
    139142    AssemblerBuffer& buffer = m_assembler->m_assembler.buffer();
    140143    allocate(buffer.codeSize(), ownerUID, effort);
  • trunk/Source/JavaScriptCore/assembler/SH4Assembler.h

    r157789 r157796  
    350350    }
    351351
    352     AssemblerBuffer& buffer() { return m_buffer; }
     352    SH4Buffer& buffer() { return m_buffer; }
    353353
    354354    // SH4 condition codes
Note: See TracChangeset for help on using the changeset viewer.