Changeset 38429 in webkit for trunk/JavaScriptCore/masm


Ignore:
Timestamp:
Nov 15, 2008, 2:24:48 PM (17 years ago)
Author:
[email protected]
Message:

2008-11-15 Geoffrey Garen <[email protected]>

Reviewed by Sam Weinig.


Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members
to be more like the rest of our buffer classes, with a size and a
capacity.


Added an assert in the unchecked put case to match the test in the checked
put case.


Changed a C-style cast to a C++-style cast.


Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize.

  • VM/CTI.cpp: (JSC::CTI::CTI): (JSC::CTI::compileRegExp):
  • VM/Machine.cpp: (JSC::BytecodeInterpreter::BytecodeInterpreter):
  • VM/Machine.h: (JSC::BytecodeInterpreter::assemblerBuffer):
  • masm/X86Assembler.h: (JSC::AssemblerBuffer::AssemblerBuffer): (JSC::AssemblerBuffer::~AssemblerBuffer): (JSC::AssemblerBuffer::ensureSpace): (JSC::AssemblerBuffer::isAligned): (JSC::AssemblerBuffer::putByteUnchecked): (JSC::AssemblerBuffer::putByte): (JSC::AssemblerBuffer::putShortUnchecked): (JSC::AssemblerBuffer::putShort): (JSC::AssemblerBuffer::putIntUnchecked): (JSC::AssemblerBuffer::putInt): (JSC::AssemblerBuffer::data): (JSC::AssemblerBuffer::size): (JSC::AssemblerBuffer::reset): (JSC::AssemblerBuffer::copy): (JSC::AssemblerBuffer::grow): (JSC::X86Assembler::): (JSC::X86Assembler::X86Assembler): (JSC::X86Assembler::testl_i32r): (JSC::X86Assembler::movl_mr): (JSC::X86Assembler::movl_rm): (JSC::X86Assembler::movl_i32m): (JSC::X86Assembler::emitCall): (JSC::X86Assembler::label): (JSC::X86Assembler::emitUnlinkedJmp): (JSC::X86Assembler::emitUnlinkedJne): (JSC::X86Assembler::emitUnlinkedJe): (JSC::X86Assembler::emitUnlinkedJl): (JSC::X86Assembler::emitUnlinkedJb): (JSC::X86Assembler::emitUnlinkedJle): (JSC::X86Assembler::emitUnlinkedJbe): (JSC::X86Assembler::emitUnlinkedJge): (JSC::X86Assembler::emitUnlinkedJg): (JSC::X86Assembler::emitUnlinkedJa): (JSC::X86Assembler::emitUnlinkedJae): (JSC::X86Assembler::emitUnlinkedJo): (JSC::X86Assembler::emitUnlinkedJp): (JSC::X86Assembler::emitUnlinkedJs): (JSC::X86Assembler::link): (JSC::X86Assembler::emitModRm_rr): (JSC::X86Assembler::emitModRm_rm): (JSC::X86Assembler::emitModRm_opr):
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/masm/X86Assembler.h

    r38428 r38429  
    4141namespace JSC {
    4242
    43 class JITCodeBuffer {
     43class AssemblerBuffer {
    4444public:
    45     JITCodeBuffer(int size)
    46         : m_buffer(static_cast<char*>(fastMalloc(size)))
    47         , m_size(size)
    48         , m_index(0)
    49     {
    50     }
    51 
    52     ~JITCodeBuffer()
     45    AssemblerBuffer(int capacity)
     46        : m_buffer(static_cast<char*>(fastMalloc(capacity)))
     47        , m_capacity(capacity)
     48        , m_size(0)
     49    {
     50    }
     51
     52    ~AssemblerBuffer()
    5353    {
    5454        fastFree(m_buffer);
     
    5757    void ensureSpace(int space)
    5858    {
    59         if (m_index > m_size - space)
    60             growBuffer();
     59        if (m_size > m_capacity - space)
     60            grow();
    6161    }
    6262
    6363    bool isAligned(int alignment)
    6464    {
    65         return !(m_index & (alignment - 1));
     65        return !(m_size & (alignment - 1));
    6666    }
    6767   
    6868    void putByteUnchecked(int value)
    6969    {
    70         m_buffer[m_index] = value;
    71         m_index++;
     70        ASSERT(!(m_size > m_capacity - 4));
     71        m_buffer[m_size] = value;
     72        m_size++;
    7273    }
    7374
    7475    void putByte(int value)
    7576    {
    76         if (m_index > m_size - 4)
    77             growBuffer();
     77        if (m_size > m_capacity - 4)
     78            grow();
    7879        putByteUnchecked(value);
    7980    }
     
    8182    void putShortUnchecked(int value)
    8283    {
    83         *(short*)(&m_buffer[m_index]) = value;
    84         m_index += 2;
     84        ASSERT(!(m_size > m_capacity - 4));
     85        *reinterpret_cast<short*>(&m_buffer[m_size]) = value;
     86        m_size += 2;
    8587    }
    8688
    8789    void putShort(int value)
    8890    {
    89         if (m_index > m_size - 4)
    90             growBuffer();
     91        if (m_size > m_capacity - 4)
     92            grow();
    9193        putShortUnchecked(value);
    9294    }
     
    9496    void putIntUnchecked(int value)
    9597    {
    96         *reinterpret_cast<int*>(&m_buffer[m_index]) = value;
    97         m_index += 4;
     98        *reinterpret_cast<int*>(&m_buffer[m_size]) = value;
     99        m_size += 4;
    98100    }
    99101
    100102    void putInt(int value)
    101103    {
    102         if (m_index > m_size - 4)
    103             growBuffer();
     104        if (m_size > m_capacity - 4)
     105            grow();
    104106        putIntUnchecked(value);
    105107    }
    106108
    107     void* getEIP()
    108     {
    109         return m_buffer + m_index;
    110     }
    111    
    112     void* start()
     109    void* data()
    113110    {
    114111        return m_buffer;
    115112    }
    116113   
    117     int getOffset()
    118     {
    119         return m_index;
    120     }
    121    
    122     JITCodeBuffer* reset()
    123     {
    124         m_index = 0;
     114    int size()
     115    {
     116        return m_size;
     117    }
     118
     119    AssemblerBuffer* reset()
     120    {
     121        m_size = 0;
    125122        return this;
    126123    }
     
    128125    void* copy()
    129126    {
    130         if (!m_index)
     127        if (!m_size)
    131128            return 0;
    132129
    133         void* result = WTF::fastMallocExecutable(m_index);
     130        void* result = WTF::fastMallocExecutable(m_size);
    134131
    135132        if (!result)
    136133            return 0;
    137134
    138         return memcpy(result, m_buffer, m_index);
     135        return memcpy(result, m_buffer, m_size);
    139136    }
    140137
    141138private:
    142     void growBuffer()
    143     {
    144         m_size += m_size / 2;
    145         m_buffer = static_cast<char*>(fastRealloc(m_buffer, m_size));
     139    void grow()
     140    {
     141        m_capacity += m_capacity / 2;
     142        m_buffer = static_cast<char*>(fastRealloc(m_buffer, m_capacity));
    146143    }
    147144
    148145    char* m_buffer;
     146    int m_capacity;
    149147    int m_size;
    150     int m_index;
    151148};
    152149
     
    252249        OP2_JGE_rel32       = 0x8D,
    253250        OP2_JLE_rel32       = 0x8E,
    254         OP2_JG_rel32       = 0x8F,
     251        OP2_JG_rel32        = 0x8F,
    255252        OP2_IMUL_GvEv       = 0xAF,
    256253        OP2_MOVZX_GvEb      = 0xB6,
     
    281278    } OpcodeID;
    282279   
    283     static const int MAX_INSTRUCTION_SIZE = 16;
    284 
    285     X86Assembler(JITCodeBuffer* m_buffer)
     280    static const int maxInstructionSize = 16;
     281
     282    X86Assembler(AssemblerBuffer* m_buffer)
    286283        : m_buffer(m_buffer)
    287284    {
     
    519516    void testl_i32r(int imm, RegisterID dst)
    520517    {
    521         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     518        m_buffer->ensureSpace(maxInstructionSize);
    522519        m_buffer->putByteUnchecked(OP_GROUP3_EvIz);
    523520        emitModRm_opr_Unchecked(GROUP3_OP_TEST, dst);
     
    633630    void movl_mr(int offset, RegisterID base, RegisterID dst)
    634631    {
    635         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     632        m_buffer->ensureSpace(maxInstructionSize);
    636633        m_buffer->putByteUnchecked(OP_MOV_GvEv);
    637634        emitModRm_rm_Unchecked(dst, base, offset);
     
    686683    void movl_rm(RegisterID src, int offset, RegisterID base)
    687684    {
    688         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     685        m_buffer->ensureSpace(maxInstructionSize);
    689686        m_buffer->putByteUnchecked(OP_MOV_EvGv);
    690687        emitModRm_rm_Unchecked(src, base, offset);
     
    706703    void movl_i32m(int imm, int offset, RegisterID base)
    707704    {
    708         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     705        m_buffer->ensureSpace(maxInstructionSize);
    709706        m_buffer->putByteUnchecked(OP_GROUP11_EvIz);
    710707        emitModRm_opm_Unchecked(GROUP11_MOV, base, offset);
     
    902899        m_buffer->putByte(OP_CALL_rel32);
    903900        m_buffer->putInt(0);
    904         return JmpSrc(m_buffer->getOffset());
     901        return JmpSrc(m_buffer->size());
    905902    }
    906903   
     
    909906        m_buffer->putByte(OP_GROUP5_Ev);
    910907        emitModRm_opr(GROUP5_OP_CALLN, dst);
    911         return JmpSrc(m_buffer->getOffset());
     908        return JmpSrc(m_buffer->size());
    912909    }
    913910
    914911    JmpDst label()
    915912    {
    916         return JmpDst(m_buffer->getOffset());
     913        return JmpDst(m_buffer->size());
    917914    }
    918915   
     
    929926        m_buffer->putByte(OP_JMP_rel32);
    930927        m_buffer->putInt(0);
    931         return JmpSrc(m_buffer->getOffset());
     928        return JmpSrc(m_buffer->size());
    932929    }
    933930   
     
    937934        m_buffer->putByte(OP2_JNE_rel32);
    938935        m_buffer->putInt(0);
    939         return JmpSrc(m_buffer->getOffset());
     936        return JmpSrc(m_buffer->size());
    940937    }
    941938   
     
    947944    JmpSrc emitUnlinkedJe()
    948945    {
    949         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     946        m_buffer->ensureSpace(maxInstructionSize);
    950947        m_buffer->putByteUnchecked(OP_2BYTE_ESCAPE);
    951948        m_buffer->putByteUnchecked(OP2_JE_rel32);
    952949        m_buffer->putIntUnchecked(0);
    953         return JmpSrc(m_buffer->getOffset());
     950        return JmpSrc(m_buffer->size());
    954951    }
    955952   
     
    959956        m_buffer->putByte(OP2_JL_rel32);
    960957        m_buffer->putInt(0);
    961         return JmpSrc(m_buffer->getOffset());
     958        return JmpSrc(m_buffer->size());
    962959    }
    963960   
     
    967964        m_buffer->putByte(OP2_JB_rel32);
    968965        m_buffer->putInt(0);
    969         return JmpSrc(m_buffer->getOffset());
     966        return JmpSrc(m_buffer->size());
    970967    }
    971968   
     
    975972        m_buffer->putByte(OP2_JLE_rel32);
    976973        m_buffer->putInt(0);
    977         return JmpSrc(m_buffer->getOffset());
     974        return JmpSrc(m_buffer->size());
    978975    }
    979976   
     
    983980        m_buffer->putByte(OP2_JBE_rel32);
    984981        m_buffer->putInt(0);
    985         return JmpSrc(m_buffer->getOffset());
     982        return JmpSrc(m_buffer->size());
    986983    }
    987984   
     
    991988        m_buffer->putByte(OP2_JGE_rel32);
    992989        m_buffer->putInt(0);
    993         return JmpSrc(m_buffer->getOffset());
     990        return JmpSrc(m_buffer->size());
    994991    }
    995992
     
    999996        m_buffer->putByte(OP2_JG_rel32);
    1000997        m_buffer->putInt(0);
    1001         return JmpSrc(m_buffer->getOffset());
     998        return JmpSrc(m_buffer->size());
    1002999    }
    10031000
     
    10071004        m_buffer->putByte(OP2_JA_rel32);
    10081005        m_buffer->putInt(0);
    1009         return JmpSrc(m_buffer->getOffset());
     1006        return JmpSrc(m_buffer->size());
    10101007    }
    10111008   
     
    10151012        m_buffer->putByte(OP2_JAE_rel32);
    10161013        m_buffer->putInt(0);
    1017         return JmpSrc(m_buffer->getOffset());
     1014        return JmpSrc(m_buffer->size());
    10181015    }
    10191016   
     
    10231020        m_buffer->putByte(OP2_JO_rel32);
    10241021        m_buffer->putInt(0);
    1025         return JmpSrc(m_buffer->getOffset());
     1022        return JmpSrc(m_buffer->size());
    10261023    }
    10271024
     
    10311028        m_buffer->putByte(OP2_JP_rel32);
    10321029        m_buffer->putInt(0);
    1033         return JmpSrc(m_buffer->getOffset());
     1030        return JmpSrc(m_buffer->size());
    10341031    }
    10351032   
     
    10391036        m_buffer->putByte(OP2_JS_rel32);
    10401037        m_buffer->putInt(0);
    1041         return JmpSrc(m_buffer->getOffset());
     1038        return JmpSrc(m_buffer->size());
    10421039    }
    10431040   
     
    10521049        ASSERT(from.m_offset != -1);
    10531050       
    1054         reinterpret_cast<int*>(reinterpret_cast<ptrdiff_t>(m_buffer->start()) + from.m_offset)[-1] = to.m_offset - from.m_offset;
     1051        reinterpret_cast<int*>(reinterpret_cast<ptrdiff_t>(m_buffer->data()) + from.m_offset)[-1] = to.m_offset - from.m_offset;
    10551052    }
    10561053   
     
    11511148    void emitModRm_rr(RegisterID reg, RegisterID rm)
    11521149    {
    1153         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     1150        m_buffer->ensureSpace(maxInstructionSize);
    11541151        emitModRm_rr_Unchecked(reg, rm);
    11551152    }
     
    12001197    void emitModRm_rm(RegisterID reg, RegisterID base, int offset)
    12011198    {
    1202         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     1199        m_buffer->ensureSpace(maxInstructionSize);
    12031200        emitModRm_rm_Unchecked(reg, base, offset);
    12041201    }
     
    12331230    void emitModRm_opr(OpcodeID opcodeID, RegisterID rm)
    12341231    {
    1235         m_buffer->ensureSpace(MAX_INSTRUCTION_SIZE);
     1232        m_buffer->ensureSpace(maxInstructionSize);
    12361233        emitModRm_opr_Unchecked(opcodeID, rm);
    12371234    }
     
    12671264    }
    12681265
    1269     JITCodeBuffer* m_buffer;
     1266    AssemblerBuffer* m_buffer;
    12701267};
    12711268
Note: See TracChangeset for help on using the changeset viewer.