Changeset 38975 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Dec 3, 2008, 4:10:53 PM (16 years ago)
Author:
[email protected]
Message:

2008-12-03 Sam Weinig <[email protected]>

Reviewed by Geoffrey Garen.

Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer
an 256 byte inline capacity.

1% progression on Sunspider.

  • assembler/AssemblerBuffer.h: (JSC::AssemblerBuffer::AssemblerBuffer): (JSC::AssemblerBuffer::~AssemblerBuffer): (JSC::AssemblerBuffer::grow):
  • assembler/MacroAssembler.h: (JSC::MacroAssembler::MacroAssembler):
  • assembler/X86Assembler.h: (JSC::X86Assembler::X86Assembler):
  • interpreter/Interpreter.cpp: (JSC::Interpreter::Interpreter):
  • interpreter/Interpreter.h:
  • jit/JIT.cpp: (JSC::JIT::JIT):
  • parser/Nodes.cpp: (JSC::RegExpNode::emitBytecode):
  • runtime/RegExp.cpp: (JSC::RegExp::RegExp): (JSC::RegExp::create):
  • runtime/RegExp.h:
  • runtime/RegExpConstructor.cpp: (JSC::constructRegExp):
  • runtime/RegExpPrototype.cpp: (JSC::regExpProtoFuncCompile):
  • runtime/StringPrototype.cpp: (JSC::stringProtoFuncMatch): (JSC::stringProtoFuncSearch):
  • wrec/WREC.cpp: (JSC::WREC::Generator::compileRegExp):
  • wrec/WRECGenerator.h: (JSC::WREC::Generator::Generator):
  • wrec/WRECParser.h: (JSC::WREC::Parser::Parser):
Location:
trunk/JavaScriptCore
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r38971 r38975  
     12008-12-03  Sam Weinig  <[email protected]>
     2
     3        Reviewed by Geoffrey Garen.
     4
     5        Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer
     6        an 256 byte inline capacity.
     7
     8        1% progression on Sunspider.
     9
     10        * assembler/AssemblerBuffer.h:
     11        (JSC::AssemblerBuffer::AssemblerBuffer):
     12        (JSC::AssemblerBuffer::~AssemblerBuffer):
     13        (JSC::AssemblerBuffer::grow):
     14        * assembler/MacroAssembler.h:
     15        (JSC::MacroAssembler::MacroAssembler):
     16        * assembler/X86Assembler.h:
     17        (JSC::X86Assembler::X86Assembler):
     18        * interpreter/Interpreter.cpp:
     19        (JSC::Interpreter::Interpreter):
     20        * interpreter/Interpreter.h:
     21        * jit/JIT.cpp:
     22        (JSC::JIT::JIT):
     23        * parser/Nodes.cpp:
     24        (JSC::RegExpNode::emitBytecode):
     25        * runtime/RegExp.cpp:
     26        (JSC::RegExp::RegExp):
     27        (JSC::RegExp::create):
     28        * runtime/RegExp.h:
     29        * runtime/RegExpConstructor.cpp:
     30        (JSC::constructRegExp):
     31        * runtime/RegExpPrototype.cpp:
     32        (JSC::regExpProtoFuncCompile):
     33        * runtime/StringPrototype.cpp:
     34        (JSC::stringProtoFuncMatch):
     35        (JSC::stringProtoFuncSearch):
     36        * wrec/WREC.cpp:
     37        (JSC::WREC::Generator::compileRegExp):
     38        * wrec/WRECGenerator.h:
     39        (JSC::WREC::Generator::Generator):
     40        * wrec/WRECParser.h:
     41        (JSC::WREC::Parser::Parser):
     42
    1432008-12-03  Geoffrey Garen  <[email protected]>
    244
  • trunk/JavaScriptCore/assembler/AssemblerBuffer.h

    r38545 r38975  
    3838
    3939    class AssemblerBuffer {
     40        static const int inlineCapacity = 256;
    4041    public:
    41         AssemblerBuffer(int capacity)
    42             : m_buffer(static_cast<char*>(fastMalloc(capacity)))
    43             , m_capacity(capacity)
     42        AssemblerBuffer()
     43            : m_buffer(m_inlineBuffer)
     44            , m_capacity(inlineCapacity)
    4445            , m_size(0)
    4546        {
     
    4849        ~AssemblerBuffer()
    4950        {
    50             fastFree(m_buffer);
     51            if (m_buffer != m_inlineBuffer)
     52                fastFree(m_buffer);
    5153        }
    5254
     
    113115        }
    114116
    115         AssemblerBuffer* reset()
    116         {
    117             m_size = 0;
    118             return this;
    119         }
    120 
    121117        void* executableCopy()
    122118        {
     
    136132        {
    137133            m_capacity += m_capacity / 2;
    138             m_buffer = static_cast<char*>(fastRealloc(m_buffer, m_capacity));
     134
     135            if (m_buffer == m_inlineBuffer) {
     136                char* newBuffer = static_cast<char*>(fastMalloc(m_capacity));
     137                m_buffer = static_cast<char*>(memcpy(newBuffer, m_buffer, m_size));
     138            } else
     139                m_buffer = static_cast<char*>(fastRealloc(m_buffer, m_capacity));
    139140        }
    140141
     142        char m_inlineBuffer[inlineCapacity];
    141143        char* m_buffer;
    142144        int m_capacity;
  • trunk/JavaScriptCore/assembler/MacroAssembler.h

    r38971 r38975  
    5050    };
    5151
    52     MacroAssembler(AssemblerBuffer* assemblerBuffer)
    53         : m_assembler(assemblerBuffer)
     52    MacroAssembler()
    5453    {
    5554    }
  • trunk/JavaScriptCore/assembler/X86Assembler.h

    r38971 r38975  
    206206    static const int maxInstructionSize = 16;
    207207
    208     X86Assembler(AssemblerBuffer* m_buffer)
    209         : m_buffer(m_buffer)
    210     {
    211         m_buffer->reset();
     208    X86Assembler()
     209    {
    212210    }
    213211
    214212    void int3()
    215213    {
    216         m_buffer->putByte(OP_INT3);
     214        m_buffer.putByte(OP_INT3);
    217215    }
    218216   
     
    220218    void pushq_r(RegisterID reg)
    221219    {
    222         m_buffer->putByte(OP_PUSH_EAX + reg);
     220        m_buffer.putByte(OP_PUSH_EAX + reg);
    223221    }
    224222
    225223    void popq_r(RegisterID reg)
    226224    {
    227         m_buffer->putByte(OP_POP_EAX + reg);
     225        m_buffer.putByte(OP_POP_EAX + reg);
    228226    }
    229227#else
    230228    void pushl_r(RegisterID reg)
    231229    {
    232         m_buffer->putByte(OP_PUSH_EAX + reg);
     230        m_buffer.putByte(OP_PUSH_EAX + reg);
    233231    }
    234232   
    235233    void pushl_m(int offset, RegisterID base)
    236234    {
    237         m_buffer->putByte(OP_GROUP5_Ev);
     235        m_buffer.putByte(OP_GROUP5_Ev);
    238236        modRm_opm(GROUP5_OP_PUSH, base, offset);
    239237    }
     
    241239    void pushl_i32(int imm)
    242240    {
    243         m_buffer->putByte(OP_PUSH_Iz);
    244         m_buffer->putInt(imm);
     241        m_buffer.putByte(OP_PUSH_Iz);
     242        m_buffer.putInt(imm);
    245243    }
    246244   
    247245    void popl_r(RegisterID reg)
    248246    {
    249         m_buffer->putByte(OP_POP_EAX + reg);
     247        m_buffer.putByte(OP_POP_EAX + reg);
    250248    }
    251249
    252250    void popl_m(int offset, RegisterID base)
    253251    {
    254         m_buffer->putByte(OP_GROUP1A_Ev);
     252        m_buffer.putByte(OP_GROUP1A_Ev);
    255253        modRm_opm(GROUP1A_OP_POP, base, offset);
    256254    }
     
    259257    void movl_rr(RegisterID src, RegisterID dst)
    260258    {
    261         m_buffer->putByte(OP_MOV_EvGv);
     259        m_buffer.putByte(OP_MOV_EvGv);
    262260        modRm_rr(src, dst);
    263261    }
     
    266264    void movq_rr(RegisterID src, RegisterID dst)
    267265    {
    268         m_buffer->putByte(REX_W);
    269         m_buffer->putByte(OP_MOV_EvGv);
     266        m_buffer.putByte(REX_W);
     267        m_buffer.putByte(OP_MOV_EvGv);
    270268        modRm_rr(src, dst);
    271269    }
     
    274272    void addl_rr(RegisterID src, RegisterID dst)
    275273    {
    276         m_buffer->putByte(OP_ADD_EvGv);
     274        m_buffer.putByte(OP_ADD_EvGv);
    277275        modRm_rr(src, dst);
    278276    }
     
    281279    void addl_i8m(int imm, void* addr)
    282280    {
    283         m_buffer->putByte(OP_GROUP1_EvIb);
     281        m_buffer.putByte(OP_GROUP1_EvIb);
    284282        modRm_opm(GROUP1_OP_ADD, addr);
    285         m_buffer->putByte(imm);
     283        m_buffer.putByte(imm);
    286284    }
    287285#endif
     
    289287    void addl_i8r(int imm, RegisterID dst)
    290288    {
    291         m_buffer->putByte(OP_GROUP1_EvIb);
     289        m_buffer.putByte(OP_GROUP1_EvIb);
    292290        modRm_opr(GROUP1_OP_ADD, dst);
    293         m_buffer->putByte(imm);
     291        m_buffer.putByte(imm);
    294292    }
    295293
    296294    void addl_i32r(int imm, RegisterID dst)
    297295    {
    298         m_buffer->putByte(OP_GROUP1_EvIz);
     296        m_buffer.putByte(OP_GROUP1_EvIz);
    299297        modRm_opr(GROUP1_OP_ADD, dst);
    300         m_buffer->putInt(imm);
     298        m_buffer.putInt(imm);
    301299    }
    302300
     
    304302    void addq_i8r(int imm, RegisterID dst)
    305303    {
    306         m_buffer->putByte(REX_W);
    307         m_buffer->putByte(OP_GROUP1_EvIb);
     304        m_buffer.putByte(REX_W);
     305        m_buffer.putByte(OP_GROUP1_EvIb);
    308306        modRm_opr(GROUP1_OP_ADD, dst);
    309         m_buffer->putByte(imm);
     307        m_buffer.putByte(imm);
    310308    }
    311309
    312310    void addq_i32r(int imm, RegisterID dst)
    313311    {
    314         m_buffer->putByte(REX_W);
    315         m_buffer->putByte(OP_GROUP1_EvIz);
     312        m_buffer.putByte(REX_W);
     313        m_buffer.putByte(OP_GROUP1_EvIz);
    316314        modRm_opr(GROUP1_OP_ADD, dst);
    317         m_buffer->putInt(imm);
     315        m_buffer.putInt(imm);
    318316    }
    319317#endif
     
    321319    void addl_mr(int offset, RegisterID base, RegisterID dst)
    322320    {
    323         m_buffer->putByte(OP_ADD_GvEv);
     321        m_buffer.putByte(OP_ADD_GvEv);
    324322        modRm_rm(dst, base, offset);
    325323    }
     
    327325    void andl_rr(RegisterID src, RegisterID dst)
    328326    {
    329         m_buffer->putByte(OP_AND_EvGv);
     327        m_buffer.putByte(OP_AND_EvGv);
    330328        modRm_rr(src, dst);
    331329    }
     
    333331    void andl_i32r(int imm, RegisterID dst)
    334332    {
    335         m_buffer->putByte(OP_GROUP1_EvIz);
     333        m_buffer.putByte(OP_GROUP1_EvIz);
    336334        modRm_opr(GROUP1_OP_AND, dst);
    337         m_buffer->putInt(imm);
     335        m_buffer.putInt(imm);
    338336    }
    339337
    340338    void cmpl_i8r(int imm, RegisterID dst)
    341339    {
    342         m_buffer->putByte(OP_GROUP1_EvIb);
     340        m_buffer.putByte(OP_GROUP1_EvIb);
    343341        modRm_opr(GROUP1_OP_CMP, dst);
    344         m_buffer->putByte(imm);
     342        m_buffer.putByte(imm);
    345343    }
    346344
    347345    void cmpl_rr(RegisterID src, RegisterID dst)
    348346    {
    349         m_buffer->putByte(OP_CMP_EvGv);
     347        m_buffer.putByte(OP_CMP_EvGv);
    350348        modRm_rr(src, dst);
    351349    }
     
    353351    void cmpl_rm(RegisterID src, int offset, RegisterID base)
    354352    {
    355         m_buffer->putByte(OP_CMP_EvGv);
     353        m_buffer.putByte(OP_CMP_EvGv);
    356354        modRm_rm(src, base, offset);
    357355    }
     
    359357    void cmpl_mr(int offset, RegisterID base, RegisterID dst)
    360358    {
    361         m_buffer->putByte(OP_CMP_GvEv);
     359        m_buffer.putByte(OP_CMP_GvEv);
    362360        modRm_rm(dst, base, offset);
    363361    }
     
    365363    void cmpl_i32r(int imm, RegisterID dst)
    366364    {
    367         m_buffer->putByte(OP_GROUP1_EvIz);
     365        m_buffer.putByte(OP_GROUP1_EvIz);
    368366        modRm_opr(GROUP1_OP_CMP, dst);
    369         m_buffer->putInt(imm);
     367        m_buffer.putInt(imm);
    370368    }
    371369
    372370    void cmpl_i32m(int imm, RegisterID dst)
    373371    {
    374         m_buffer->putByte(OP_GROUP1_EvIz);
     372        m_buffer.putByte(OP_GROUP1_EvIz);
    375373        modRm_opm(GROUP1_OP_CMP, dst);
    376         m_buffer->putInt(imm);
     374        m_buffer.putInt(imm);
    377375    }
    378376
    379377    void cmpl_i32m(int imm, int offset, RegisterID dst)
    380378    {
    381         m_buffer->putByte(OP_GROUP1_EvIz);
     379        m_buffer.putByte(OP_GROUP1_EvIz);
    382380        modRm_opm(GROUP1_OP_CMP, dst, offset);
    383         m_buffer->putInt(imm);
     381        m_buffer.putInt(imm);
    384382    }
    385383
     
    387385    void cmpl_i32m(int imm, void* addr)
    388386    {
    389         m_buffer->putByte(OP_GROUP1_EvIz);
     387        m_buffer.putByte(OP_GROUP1_EvIz);
    390388        modRm_opm(GROUP1_OP_CMP, addr);
    391         m_buffer->putInt(imm);
     389        m_buffer.putInt(imm);
    392390    }
    393391#endif
     
    395393    void cmpl_i8m(int imm, int offset, RegisterID base, RegisterID index, int scale)
    396394    {
    397         m_buffer->putByte(OP_GROUP1_EvIb);
     395        m_buffer.putByte(OP_GROUP1_EvIb);
    398396        modRm_opmsib(GROUP1_OP_CMP, base, index, scale, offset);
    399         m_buffer->putByte(imm);
     397        m_buffer.putByte(imm);
    400398    }
    401399
    402400    void cmpw_rm(RegisterID src, RegisterID base, RegisterID index, int scale)
    403401    {
    404         m_buffer->putByte(PRE_OPERAND_SIZE);
    405         m_buffer->putByte(OP_CMP_EvGv);
     402        m_buffer.putByte(PRE_OPERAND_SIZE);
     403        m_buffer.putByte(OP_CMP_EvGv);
    406404        modRm_rmsib(src, base, index, scale);
    407405    }
     
    409407    void cmpw_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)
    410408    {
    411         m_buffer->putByte(PRE_OPERAND_SIZE);
    412         m_buffer->putByte(OP_CMP_EvGv);
     409        m_buffer.putByte(PRE_OPERAND_SIZE);
     410        m_buffer.putByte(OP_CMP_EvGv);
    413411        modRm_rmsib(src, base, index, scale, offset);
    414412    }
     
    416414    void sete_r(RegisterID dst)
    417415    {
    418         m_buffer->putByte(OP_2BYTE_ESCAPE);
    419         m_buffer->putByte(OP_SETE);
    420         m_buffer->putByte(MODRM(3, 0, dst));
     416        m_buffer.putByte(OP_2BYTE_ESCAPE);
     417        m_buffer.putByte(OP_SETE);
     418        m_buffer.putByte(MODRM(3, 0, dst));
    421419    }
    422420
     
    428426    void setne_r(RegisterID dst)
    429427    {
    430         m_buffer->putByte(OP_2BYTE_ESCAPE);
    431         m_buffer->putByte(OP_SETNE);
    432         m_buffer->putByte(MODRM(3, 0, dst));
     428        m_buffer.putByte(OP_2BYTE_ESCAPE);
     429        m_buffer.putByte(OP_SETNE);
     430        m_buffer.putByte(MODRM(3, 0, dst));
    433431    }
    434432
     
    440438    void orl_rr(RegisterID src, RegisterID dst)
    441439    {
    442         m_buffer->putByte(OP_OR_EvGv);
     440        m_buffer.putByte(OP_OR_EvGv);
    443441        modRm_rr(src, dst);
    444442    }
     
    446444    void orl_mr(int offset, RegisterID base, RegisterID dst)
    447445    {
    448         m_buffer->putByte(OP_OR_GvEv);
     446        m_buffer.putByte(OP_OR_GvEv);
    449447        modRm_rm(dst, base, offset);
    450448    }
     
    452450    void orl_i8r(int imm, RegisterID dst)
    453451    {
    454         m_buffer->putByte(OP_GROUP1_EvIb);
     452        m_buffer.putByte(OP_GROUP1_EvIb);
    455453        modRm_opr(GROUP1_OP_OR, dst);
    456         m_buffer->putByte(imm);
     454        m_buffer.putByte(imm);
    457455    }
    458456
     
    466464    void subl_rr(RegisterID src, RegisterID dst)
    467465    {
    468         m_buffer->putByte(OP_SUB_EvGv);
     466        m_buffer.putByte(OP_SUB_EvGv);
    469467        modRm_rr(src, dst);
    470468    }
     
    472470    void subl_i8r(int imm, RegisterID dst)
    473471    {
    474         m_buffer->putByte(OP_GROUP1_EvIb);
     472        m_buffer.putByte(OP_GROUP1_EvIb);
    475473        modRm_opr(GROUP1_OP_SUB, dst);
    476         m_buffer->putByte(imm);
     474        m_buffer.putByte(imm);
    477475    }
    478476   
     
    480478    void subl_i8m(int imm, void* addr)
    481479    {
    482         m_buffer->putByte(OP_GROUP1_EvIb);
     480        m_buffer.putByte(OP_GROUP1_EvIb);
    483481        modRm_opm(GROUP1_OP_SUB, addr);
    484         m_buffer->putByte(imm);
     482        m_buffer.putByte(imm);
    485483    }
    486484#endif
     
    488486    void subl_i32r(int imm, RegisterID dst)
    489487    {
    490         m_buffer->putByte(OP_GROUP1_EvIz);
     488        m_buffer.putByte(OP_GROUP1_EvIz);
    491489        modRm_opr(GROUP1_OP_SUB, dst);
    492         m_buffer->putInt(imm);
     490        m_buffer.putInt(imm);
    493491    }
    494492
    495493    void subl_mr(int offset, RegisterID base, RegisterID dst)
    496494    {
    497         m_buffer->putByte(OP_SUB_GvEv);
     495        m_buffer.putByte(OP_SUB_GvEv);
    498496        modRm_rm(dst, base, offset);
    499497    }
     
    501499    void testl_i32r(int imm, RegisterID dst)
    502500    {
    503         m_buffer->ensureSpace(maxInstructionSize);
    504         m_buffer->putByteUnchecked(OP_GROUP3_EvIz);
     501        m_buffer.ensureSpace(maxInstructionSize);
     502        m_buffer.putByteUnchecked(OP_GROUP3_EvIz);
    505503        modRm_opr_Unchecked(GROUP3_OP_TEST, dst);
    506         m_buffer->putIntUnchecked(imm);
     504        m_buffer.putIntUnchecked(imm);
    507505    }
    508506
    509507    void testl_i32m(int imm, RegisterID dst)
    510508    {
    511         m_buffer->putByte(OP_GROUP3_EvIz);
     509        m_buffer.putByte(OP_GROUP3_EvIz);
    512510        modRm_opm(GROUP3_OP_TEST, dst);
    513         m_buffer->putInt(imm);
     511        m_buffer.putInt(imm);
    514512    }
    515513
    516514    void testl_i32m(int imm, int offset, RegisterID dst)
    517515    {
    518         m_buffer->putByte(OP_GROUP3_EvIz);
     516        m_buffer.putByte(OP_GROUP3_EvIz);
    519517        modRm_opm(GROUP3_OP_TEST, dst, offset);
    520         m_buffer->putInt(imm);
     518        m_buffer.putInt(imm);
    521519    }
    522520
    523521    void testl_rr(RegisterID src, RegisterID dst)
    524522    {
    525         m_buffer->putByte(OP_TEST_EvGv);
     523        m_buffer.putByte(OP_TEST_EvGv);
    526524        modRm_rr(src, dst);
    527525    }
     
    529527    void xorl_i8r(int imm, RegisterID dst)
    530528    {
    531         m_buffer->putByte(OP_GROUP1_EvIb);
     529        m_buffer.putByte(OP_GROUP1_EvIb);
    532530        modRm_opr(GROUP1_OP_XOR, dst);
    533         m_buffer->putByte(imm);
     531        m_buffer.putByte(imm);
    534532    }
    535533
    536534    void xorl_rr(RegisterID src, RegisterID dst)
    537535    {
    538         m_buffer->putByte(OP_XOR_EvGv);
     536        m_buffer.putByte(OP_XOR_EvGv);
    539537        modRm_rr(src, dst);
    540538    }
     
    543541    {
    544542        if (imm == 1) {
    545             m_buffer->putByte(OP_GROUP2_Ev1);
     543            m_buffer.putByte(OP_GROUP2_Ev1);
    546544            modRm_opr(GROUP2_OP_SAR, dst);
    547545        } else {
    548             m_buffer->putByte(OP_GROUP2_EvIb);
     546            m_buffer.putByte(OP_GROUP2_EvIb);
    549547            modRm_opr(GROUP2_OP_SAR, dst);
    550             m_buffer->putByte(imm);
     548            m_buffer.putByte(imm);
    551549        }
    552550    }
     
    554552    void sarl_CLr(RegisterID dst)
    555553    {
    556         m_buffer->putByte(OP_GROUP2_EvCL);
     554        m_buffer.putByte(OP_GROUP2_EvCL);
    557555        modRm_opr(GROUP2_OP_SAR, dst);
    558556    }
     
    561559    {
    562560        if (imm == 1) {
    563             m_buffer->putByte(OP_GROUP2_Ev1);
     561            m_buffer.putByte(OP_GROUP2_Ev1);
    564562            modRm_opr(GROUP2_OP_SHL, dst);
    565563        } else {
    566             m_buffer->putByte(OP_GROUP2_EvIb);
     564            m_buffer.putByte(OP_GROUP2_EvIb);
    567565            modRm_opr(GROUP2_OP_SHL, dst);
    568             m_buffer->putByte(imm);
     566            m_buffer.putByte(imm);
    569567        }
    570568    }
     
    572570    void shll_CLr(RegisterID dst)
    573571    {
    574         m_buffer->putByte(OP_GROUP2_EvCL);
     572        m_buffer.putByte(OP_GROUP2_EvCL);
    575573        modRm_opr(GROUP2_OP_SHL, dst);
    576574    }
     
    578576    void imull_rr(RegisterID src, RegisterID dst)
    579577    {
    580         m_buffer->putByte(OP_2BYTE_ESCAPE);
    581         m_buffer->putByte(OP2_IMUL_GvEv);
     578        m_buffer.putByte(OP_2BYTE_ESCAPE);
     579        m_buffer.putByte(OP2_IMUL_GvEv);
    582580        modRm_rr(dst, src);
    583581    }
     
    585583    void imull_i32r(RegisterID src, int32_t value, RegisterID dst)
    586584    {
    587         m_buffer->putByte(OP_IMUL_GvEvIz);
     585        m_buffer.putByte(OP_IMUL_GvEvIz);
    588586        modRm_rr(dst, src);
    589         m_buffer->putInt(value);
     587        m_buffer.putInt(value);
    590588    }
    591589
    592590    void idivl_r(RegisterID dst)
    593591    {
    594         m_buffer->putByte(OP_GROUP3_Ev);
     592        m_buffer.putByte(OP_GROUP3_Ev);
    595593        modRm_opr(GROUP3_OP_IDIV, dst);
    596594    }
     
    598596    void cdq()
    599597    {
    600         m_buffer->putByte(OP_CDQ);
     598        m_buffer.putByte(OP_CDQ);
    601599    }
    602600
    603601    void movl_mr(RegisterID base, RegisterID dst)
    604602    {
    605         m_buffer->putByte(OP_MOV_GvEv);
     603        m_buffer.putByte(OP_MOV_GvEv);
    606604        modRm_rm(dst, base);
    607605    }
     
    609607    void movl_mr(int offset, RegisterID base, RegisterID dst)
    610608    {
    611         m_buffer->ensureSpace(maxInstructionSize);
    612         m_buffer->putByteUnchecked(OP_MOV_GvEv);
     609        m_buffer.ensureSpace(maxInstructionSize);
     610        m_buffer.putByteUnchecked(OP_MOV_GvEv);
    613611        modRm_rm_Unchecked(dst, base, offset);
    614612    }
     
    617615    void movq_mr(RegisterID base, RegisterID dst)
    618616    {
    619         m_buffer->putByte(REX_W);
    620         m_buffer->putByte(OP_MOV_GvEv);
     617        m_buffer.putByte(REX_W);
     618        m_buffer.putByte(OP_MOV_GvEv);
    621619        modRm_rm(dst, base);
    622620    }
     
    624622    void movq_mr(int offset, RegisterID base, RegisterID dst)
    625623    {
    626         m_buffer->ensureSpace(maxInstructionSize);
    627         m_buffer->putByteUnchecked(REX_W);
    628         m_buffer->putByteUnchecked(OP_MOV_GvEv);
     624        m_buffer.ensureSpace(maxInstructionSize);
     625        m_buffer.putByteUnchecked(REX_W);
     626        m_buffer.putByteUnchecked(OP_MOV_GvEv);
    629627        modRm_rm_Unchecked(dst, base, offset);
    630628    }
     
    634632    void movl_mr(void* addr, RegisterID dst)
    635633    {
    636         m_buffer->putByte(OP_MOV_GvEv);
     634        m_buffer.putByte(OP_MOV_GvEv);
    637635        modRm_rm(dst, addr);
    638636    }
     
    641639    void movl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst)
    642640    {
    643         m_buffer->putByte(OP_MOV_GvEv);
     641        m_buffer.putByte(OP_MOV_GvEv);
    644642        modRm_rmsib(dst, base, index, scale, offset);
    645643    }
     
    647645    void movzbl_rr(RegisterID src, RegisterID dst)
    648646    {
    649         m_buffer->putByte(OP_2BYTE_ESCAPE);
    650         m_buffer->putByte(OP2_MOVZX_GvEb);
     647        m_buffer.putByte(OP_2BYTE_ESCAPE);
     648        m_buffer.putByte(OP2_MOVZX_GvEb);
    651649        modRm_rr(dst, src);
    652650    }
     
    654652    void movzwl_mr(int offset, RegisterID base, RegisterID dst)
    655653    {
    656         m_buffer->putByte(OP_2BYTE_ESCAPE);
    657         m_buffer->putByte(OP2_MOVZX_GvEw);
     654        m_buffer.putByte(OP_2BYTE_ESCAPE);
     655        m_buffer.putByte(OP2_MOVZX_GvEw);
    658656        modRm_rm(dst, base, offset);
    659657    }
     
    661659    void movzwl_mr(RegisterID base, RegisterID index, int scale, RegisterID dst)
    662660    {
    663         m_buffer->putByte(OP_2BYTE_ESCAPE);
    664         m_buffer->putByte(OP2_MOVZX_GvEw);
     661        m_buffer.putByte(OP_2BYTE_ESCAPE);
     662        m_buffer.putByte(OP2_MOVZX_GvEw);
    665663        modRm_rmsib(dst, base, index, scale);
    666664    }
     
    668666    void movzwl_mr(int offset, RegisterID base, RegisterID index, int scale, RegisterID dst)
    669667    {
    670         m_buffer->putByte(OP_2BYTE_ESCAPE);
    671         m_buffer->putByte(OP2_MOVZX_GvEw);
     668        m_buffer.putByte(OP_2BYTE_ESCAPE);
     669        m_buffer.putByte(OP2_MOVZX_GvEw);
    672670        modRm_rmsib(dst, base, index, scale, offset);
    673671    }
     
    675673    void movl_rm(RegisterID src, RegisterID base)
    676674    {
    677         m_buffer->putByte(OP_MOV_EvGv);
     675        m_buffer.putByte(OP_MOV_EvGv);
    678676        modRm_rm(src, base);
    679677    }
     
    681679    void movl_rm(RegisterID src, int offset, RegisterID base)
    682680    {
    683         m_buffer->ensureSpace(maxInstructionSize);
    684         m_buffer->putByteUnchecked(OP_MOV_EvGv);
     681        m_buffer.ensureSpace(maxInstructionSize);
     682        m_buffer.putByteUnchecked(OP_MOV_EvGv);
    685683        modRm_rm_Unchecked(src, base, offset);
    686684    }
     
    689687    void movq_rm(RegisterID src, RegisterID base)
    690688    {
    691         m_buffer->putByte(REX_W);
    692         m_buffer->putByte(OP_MOV_EvGv);
     689        m_buffer.putByte(REX_W);
     690        m_buffer.putByte(OP_MOV_EvGv);
    693691        modRm_rm(src, base);
    694692    }
     
    696694    void movq_rm(RegisterID src, int offset, RegisterID base)
    697695    {
    698         m_buffer->ensureSpace(maxInstructionSize);
    699         m_buffer->putByteUnchecked(REX_W);
    700         m_buffer->putByteUnchecked(OP_MOV_EvGv);
     696        m_buffer.ensureSpace(maxInstructionSize);
     697        m_buffer.putByteUnchecked(REX_W);
     698        m_buffer.putByteUnchecked(OP_MOV_EvGv);
    701699        modRm_rm_Unchecked(src, base, offset);
    702700    }
     
    705703    void movl_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)
    706704    {
    707         m_buffer->putByte(OP_MOV_EvGv);
     705        m_buffer.putByte(OP_MOV_EvGv);
    708706        modRm_rmsib(src, base, index, scale, offset);
    709707    }
     
    711709    void movl_i32r(int imm, RegisterID dst)
    712710    {
    713         m_buffer->putByte(OP_GROUP11_EvIz);
     711        m_buffer.putByte(OP_GROUP11_EvIz);
    714712        modRm_opr(GROUP11_MOV, dst);
    715         m_buffer->putInt(imm);
     713        m_buffer.putInt(imm);
    716714    }
    717715
    718716    void movl_i32m(int imm, int offset, RegisterID base)
    719717    {
    720         m_buffer->ensureSpace(maxInstructionSize);
    721         m_buffer->putByteUnchecked(OP_GROUP11_EvIz);
     718        m_buffer.ensureSpace(maxInstructionSize);
     719        m_buffer.putByteUnchecked(OP_GROUP11_EvIz);
    722720        modRm_opm_Unchecked(GROUP11_MOV, base, offset);
    723         m_buffer->putIntUnchecked(imm);
     721        m_buffer.putIntUnchecked(imm);
    724722    }
    725723
     
    727725    void movl_i32m(int imm, void* addr)
    728726    {
    729         m_buffer->putByte(OP_GROUP11_EvIz);
     727        m_buffer.putByte(OP_GROUP11_EvIz);
    730728        modRm_opm(GROUP11_MOV, addr);
    731         m_buffer->putInt(imm);
     729        m_buffer.putInt(imm);
    732730    }
    733731#endif
     
    735733    void leal_mr(int offset, RegisterID base, RegisterID dst)
    736734    {
    737         m_buffer->putByte(OP_LEA);
     735        m_buffer.putByte(OP_LEA);
    738736        modRm_rm(dst, base, offset);
    739737    }
     
    741739    void leal_mr(int offset, RegisterID index, int scale, RegisterID dst)
    742740    {
    743         m_buffer->putByte(OP_LEA);
     741        m_buffer.putByte(OP_LEA);
    744742        modRm_rmsib(dst, X86::noBase, index, scale, offset);
    745743    }
     
    747745    void ret()
    748746    {
    749         m_buffer->putByte(OP_RET);
     747        m_buffer.putByte(OP_RET);
    750748    }
    751749   
    752750    void jmp_r(RegisterID dst)
    753751    {
    754         m_buffer->putByte(OP_GROUP5_Ev);
     752        m_buffer.putByte(OP_GROUP5_Ev);
    755753        modRm_opr(GROUP5_OP_JMPN, dst);
    756754    }
     
    758756    void jmp_m(int offset, RegisterID base)
    759757    {
    760         m_buffer->putByte(OP_GROUP5_Ev);
     758        m_buffer.putByte(OP_GROUP5_Ev);
    761759        modRm_opm(GROUP5_OP_JMPN, base, offset);
    762760    }
     
    764762    void movsd_mr(int offset, RegisterID base, XMMRegisterID dst)
    765763    {
    766         m_buffer->putByte(PRE_SSE_F2);
    767         m_buffer->putByte(OP_2BYTE_ESCAPE);
    768         m_buffer->putByte(OP2_MOVSD_VsdWsd);
     764        m_buffer.putByte(PRE_SSE_F2);
     765        m_buffer.putByte(OP_2BYTE_ESCAPE);
     766        m_buffer.putByte(OP2_MOVSD_VsdWsd);
    769767        modRm_rm((RegisterID)dst, base, offset);
    770768    }
     
    772770    void movsd_rm(XMMRegisterID src, int offset, RegisterID base)
    773771    {
    774         m_buffer->putByte(PRE_SSE_F2);
    775         m_buffer->putByte(OP_2BYTE_ESCAPE);
    776         m_buffer->putByte(OP2_MOVSD_WsdVsd);
     772        m_buffer.putByte(PRE_SSE_F2);
     773        m_buffer.putByte(OP_2BYTE_ESCAPE);
     774        m_buffer.putByte(OP2_MOVSD_WsdVsd);
    777775        modRm_rm((RegisterID)src, base, offset);
    778776    }
     
    780778    void movd_rr(XMMRegisterID src, RegisterID dst)
    781779    {
    782         m_buffer->putByte(PRE_SSE_66);
    783         m_buffer->putByte(OP_2BYTE_ESCAPE);
    784         m_buffer->putByte(OP2_MOVD_EdVd);
     780        m_buffer.putByte(PRE_SSE_66);
     781        m_buffer.putByte(OP_2BYTE_ESCAPE);
     782        m_buffer.putByte(OP2_MOVD_EdVd);
    785783        modRm_rr((RegisterID)src, dst);
    786784    }
     
    788786    void cvtsi2sd_rr(RegisterID src, XMMRegisterID dst)
    789787    {
    790         m_buffer->putByte(PRE_SSE_F2);
    791         m_buffer->putByte(OP_2BYTE_ESCAPE);
    792         m_buffer->putByte(OP2_CVTSI2SD_VsdEd);
     788        m_buffer.putByte(PRE_SSE_F2);
     789        m_buffer.putByte(OP_2BYTE_ESCAPE);
     790        m_buffer.putByte(OP2_CVTSI2SD_VsdEd);
    793791        modRm_rr((RegisterID)dst, src);
    794792    }
     
    796794    void cvttsd2si_rr(XMMRegisterID src, RegisterID dst)
    797795    {
    798         m_buffer->putByte(PRE_SSE_F2);
    799         m_buffer->putByte(OP_2BYTE_ESCAPE);
    800         m_buffer->putByte(OP2_CVTTSD2SI_GdWsd);
     796        m_buffer.putByte(PRE_SSE_F2);
     797        m_buffer.putByte(OP_2BYTE_ESCAPE);
     798        m_buffer.putByte(OP2_CVTTSD2SI_GdWsd);
    801799        modRm_rr(dst, (RegisterID)src);
    802800    }
     
    804802    void addsd_mr(int offset, RegisterID base, XMMRegisterID dst)
    805803    {
    806         m_buffer->putByte(PRE_SSE_F2);
    807         m_buffer->putByte(OP_2BYTE_ESCAPE);
    808         m_buffer->putByte(OP2_ADDSD_VsdWsd);
     804        m_buffer.putByte(PRE_SSE_F2);
     805        m_buffer.putByte(OP_2BYTE_ESCAPE);
     806        m_buffer.putByte(OP2_ADDSD_VsdWsd);
    809807        modRm_rm((RegisterID)dst, base, offset);
    810808    }
     
    812810    void subsd_mr(int offset, RegisterID base, XMMRegisterID dst)
    813811    {
    814         m_buffer->putByte(PRE_SSE_F2);
    815         m_buffer->putByte(OP_2BYTE_ESCAPE);
    816         m_buffer->putByte(OP2_SUBSD_VsdWsd);
     812        m_buffer.putByte(PRE_SSE_F2);
     813        m_buffer.putByte(OP_2BYTE_ESCAPE);
     814        m_buffer.putByte(OP2_SUBSD_VsdWsd);
    817815        modRm_rm((RegisterID)dst, base, offset);
    818816    }
     
    820818    void mulsd_mr(int offset, RegisterID base, XMMRegisterID dst)
    821819    {
    822         m_buffer->putByte(PRE_SSE_F2);
    823         m_buffer->putByte(OP_2BYTE_ESCAPE);
    824         m_buffer->putByte(OP2_MULSD_VsdWsd);
     820        m_buffer.putByte(PRE_SSE_F2);
     821        m_buffer.putByte(OP_2BYTE_ESCAPE);
     822        m_buffer.putByte(OP2_MULSD_VsdWsd);
    825823        modRm_rm((RegisterID)dst, base, offset);
    826824    }
     
    828826    void addsd_rr(XMMRegisterID src, XMMRegisterID dst)
    829827    {
    830         m_buffer->putByte(PRE_SSE_F2);
    831         m_buffer->putByte(OP_2BYTE_ESCAPE);
    832         m_buffer->putByte(OP2_ADDSD_VsdWsd);
     828        m_buffer.putByte(PRE_SSE_F2);
     829        m_buffer.putByte(OP_2BYTE_ESCAPE);
     830        m_buffer.putByte(OP2_ADDSD_VsdWsd);
    833831        modRm_rr((RegisterID)dst, (RegisterID)src);
    834832    }
     
    836834    void subsd_rr(XMMRegisterID src, XMMRegisterID dst)
    837835    {
    838         m_buffer->putByte(PRE_SSE_F2);
    839         m_buffer->putByte(OP_2BYTE_ESCAPE);
    840         m_buffer->putByte(OP2_SUBSD_VsdWsd);
     836        m_buffer.putByte(PRE_SSE_F2);
     837        m_buffer.putByte(OP_2BYTE_ESCAPE);
     838        m_buffer.putByte(OP2_SUBSD_VsdWsd);
    841839        modRm_rr((RegisterID)dst, (RegisterID)src);
    842840    }
     
    844842    void mulsd_rr(XMMRegisterID src, XMMRegisterID dst)
    845843    {
    846         m_buffer->putByte(PRE_SSE_F2);
    847         m_buffer->putByte(OP_2BYTE_ESCAPE);
    848         m_buffer->putByte(OP2_MULSD_VsdWsd);
     844        m_buffer.putByte(PRE_SSE_F2);
     845        m_buffer.putByte(OP_2BYTE_ESCAPE);
     846        m_buffer.putByte(OP2_MULSD_VsdWsd);
    849847        modRm_rr((RegisterID)dst, (RegisterID)src);
    850848    }
     
    852850    void ucomis_rr(XMMRegisterID src, XMMRegisterID dst)
    853851    {
    854         m_buffer->putByte(PRE_SSE_66);
    855         m_buffer->putByte(OP_2BYTE_ESCAPE);
    856         m_buffer->putByte(OP2_UCOMISD_VsdWsd);
     852        m_buffer.putByte(PRE_SSE_66);
     853        m_buffer.putByte(OP_2BYTE_ESCAPE);
     854        m_buffer.putByte(OP2_UCOMISD_VsdWsd);
    857855        modRm_rr((RegisterID)dst, (RegisterID)src);
    858856    }
     
    860858    void pextrw_irr(int whichWord, XMMRegisterID src, RegisterID dst)
    861859    {
    862         m_buffer->putByte(PRE_SSE_66);
    863         m_buffer->putByte(OP_2BYTE_ESCAPE);
    864         m_buffer->putByte(OP2_PEXTRW_GdUdIb);
     860        m_buffer.putByte(PRE_SSE_66);
     861        m_buffer.putByte(OP_2BYTE_ESCAPE);
     862        m_buffer.putByte(OP2_PEXTRW_GdUdIb);
    865863        modRm_rr(dst, (RegisterID)src);
    866         m_buffer->putByte(whichWord);
     864        m_buffer.putByte(whichWord);
    867865    }
    868866
    869867    JmpSrc call()
    870868    {
    871         m_buffer->putByte(OP_CALL_rel32);
    872         m_buffer->putInt(0); // FIXME: make this point to a global label, linked later.
    873         return JmpSrc(m_buffer->size());
     869        m_buffer.putByte(OP_CALL_rel32);
     870        m_buffer.putInt(0); // FIXME: make this point to a global label, linked later.
     871        return JmpSrc(m_buffer.size());
    874872    }
    875873   
    876874    JmpSrc call(RegisterID dst)
    877875    {
    878         m_buffer->putByte(OP_GROUP5_Ev);
     876        m_buffer.putByte(OP_GROUP5_Ev);
    879877        modRm_opr(GROUP5_OP_CALLN, dst);
    880         return JmpSrc(m_buffer->size());
     878        return JmpSrc(m_buffer.size());
    881879    }
    882880
    883881    JmpDst label()
    884882    {
    885         return JmpDst(m_buffer->size());
     883        return JmpDst(m_buffer.size());
    886884    }
    887885   
    888886    JmpDst align(int alignment)
    889887    {
    890         while (!m_buffer->isAligned(alignment))
    891             m_buffer->putByte(OP_HLT);
     888        while (!m_buffer.isAligned(alignment))
     889            m_buffer.putByte(OP_HLT);
    892890
    893891        return label();
     
    896894    JmpSrc jmp()
    897895    {
    898         m_buffer->putByte(OP_JMP_rel32);
    899         m_buffer->putInt(0);
    900         return JmpSrc(m_buffer->size());
     896        m_buffer.putByte(OP_JMP_rel32);
     897        m_buffer.putInt(0);
     898        return JmpSrc(m_buffer.size());
    901899    }
    902900   
    903901    JmpSrc jne()
    904902    {
    905         m_buffer->putByte(OP_2BYTE_ESCAPE);
    906         m_buffer->putByte(OP2_JNE_rel32);
    907         m_buffer->putInt(0);
    908         return JmpSrc(m_buffer->size());
     903        m_buffer.putByte(OP_2BYTE_ESCAPE);
     904        m_buffer.putByte(OP2_JNE_rel32);
     905        m_buffer.putInt(0);
     906        return JmpSrc(m_buffer.size());
    909907    }
    910908   
     
    916914    JmpSrc je()
    917915    {
    918         m_buffer->ensureSpace(maxInstructionSize);
    919         m_buffer->putByteUnchecked(OP_2BYTE_ESCAPE);
    920         m_buffer->putByteUnchecked(OP2_JE_rel32);
    921         m_buffer->putIntUnchecked(0);
    922         return JmpSrc(m_buffer->size());
     916        m_buffer.ensureSpace(maxInstructionSize);
     917        m_buffer.putByteUnchecked(OP_2BYTE_ESCAPE);
     918        m_buffer.putByteUnchecked(OP2_JE_rel32);
     919        m_buffer.putIntUnchecked(0);
     920        return JmpSrc(m_buffer.size());
    923921    }
    924922   
    925923    JmpSrc jl()
    926924    {
    927         m_buffer->putByte(OP_2BYTE_ESCAPE);
    928         m_buffer->putByte(OP2_JL_rel32);
    929         m_buffer->putInt(0);
    930         return JmpSrc(m_buffer->size());
     925        m_buffer.putByte(OP_2BYTE_ESCAPE);
     926        m_buffer.putByte(OP2_JL_rel32);
     927        m_buffer.putInt(0);
     928        return JmpSrc(m_buffer.size());
    931929    }
    932930   
    933931    JmpSrc jb()
    934932    {
    935         m_buffer->putByte(OP_2BYTE_ESCAPE);
    936         m_buffer->putByte(OP2_JB_rel32);
    937         m_buffer->putInt(0);
    938         return JmpSrc(m_buffer->size());
     933        m_buffer.putByte(OP_2BYTE_ESCAPE);
     934        m_buffer.putByte(OP2_JB_rel32);
     935        m_buffer.putInt(0);
     936        return JmpSrc(m_buffer.size());
    939937    }
    940938   
    941939    JmpSrc jle()
    942940    {
    943         m_buffer->putByte(OP_2BYTE_ESCAPE);
    944         m_buffer->putByte(OP2_JLE_rel32);
    945         m_buffer->putInt(0);
    946         return JmpSrc(m_buffer->size());
     941        m_buffer.putByte(OP_2BYTE_ESCAPE);
     942        m_buffer.putByte(OP2_JLE_rel32);
     943        m_buffer.putInt(0);
     944        return JmpSrc(m_buffer.size());
    947945    }
    948946   
    949947    JmpSrc jbe()
    950948    {
    951         m_buffer->putByte(OP_2BYTE_ESCAPE);
    952         m_buffer->putByte(OP2_JBE_rel32);
    953         m_buffer->putInt(0);
    954         return JmpSrc(m_buffer->size());
     949        m_buffer.putByte(OP_2BYTE_ESCAPE);
     950        m_buffer.putByte(OP2_JBE_rel32);
     951        m_buffer.putInt(0);
     952        return JmpSrc(m_buffer.size());
    955953    }
    956954   
    957955    JmpSrc jge()
    958956    {
    959         m_buffer->putByte(OP_2BYTE_ESCAPE);
    960         m_buffer->putByte(OP2_JGE_rel32);
    961         m_buffer->putInt(0);
    962         return JmpSrc(m_buffer->size());
     957        m_buffer.putByte(OP_2BYTE_ESCAPE);
     958        m_buffer.putByte(OP2_JGE_rel32);
     959        m_buffer.putInt(0);
     960        return JmpSrc(m_buffer.size());
    963961    }
    964962
    965963    JmpSrc jg()
    966964    {
    967         m_buffer->putByte(OP_2BYTE_ESCAPE);
    968         m_buffer->putByte(OP2_JG_rel32);
    969         m_buffer->putInt(0);
    970         return JmpSrc(m_buffer->size());
     965        m_buffer.putByte(OP_2BYTE_ESCAPE);
     966        m_buffer.putByte(OP2_JG_rel32);
     967        m_buffer.putInt(0);
     968        return JmpSrc(m_buffer.size());
    971969    }
    972970
    973971    JmpSrc ja()
    974972    {
    975         m_buffer->putByte(OP_2BYTE_ESCAPE);
    976         m_buffer->putByte(OP2_JA_rel32);
    977         m_buffer->putInt(0);
    978         return JmpSrc(m_buffer->size());
     973        m_buffer.putByte(OP_2BYTE_ESCAPE);
     974        m_buffer.putByte(OP2_JA_rel32);
     975        m_buffer.putInt(0);
     976        return JmpSrc(m_buffer.size());
    979977    }
    980978   
    981979    JmpSrc jae()
    982980    {
    983         m_buffer->putByte(OP_2BYTE_ESCAPE);
    984         m_buffer->putByte(OP2_JAE_rel32);
    985         m_buffer->putInt(0);
    986         return JmpSrc(m_buffer->size());
     981        m_buffer.putByte(OP_2BYTE_ESCAPE);
     982        m_buffer.putByte(OP2_JAE_rel32);
     983        m_buffer.putInt(0);
     984        return JmpSrc(m_buffer.size());
    987985    }
    988986   
    989987    JmpSrc jo()
    990988    {
    991         m_buffer->putByte(OP_2BYTE_ESCAPE);
    992         m_buffer->putByte(OP2_JO_rel32);
    993         m_buffer->putInt(0);
    994         return JmpSrc(m_buffer->size());
     989        m_buffer.putByte(OP_2BYTE_ESCAPE);
     990        m_buffer.putByte(OP2_JO_rel32);
     991        m_buffer.putInt(0);
     992        return JmpSrc(m_buffer.size());
    995993    }
    996994
    997995    JmpSrc jp()
    998996    {
    999         m_buffer->putByte(OP_2BYTE_ESCAPE);
    1000         m_buffer->putByte(OP2_JP_rel32);
    1001         m_buffer->putInt(0);
    1002         return JmpSrc(m_buffer->size());
     997        m_buffer.putByte(OP_2BYTE_ESCAPE);
     998        m_buffer.putByte(OP2_JP_rel32);
     999        m_buffer.putInt(0);
     1000        return JmpSrc(m_buffer.size());
    10031001    }
    10041002   
    10051003    JmpSrc js()
    10061004    {
    1007         m_buffer->putByte(OP_2BYTE_ESCAPE);
    1008         m_buffer->putByte(OP2_JS_rel32);
    1009         m_buffer->putInt(0);
    1010         return JmpSrc(m_buffer->size());
     1005        m_buffer.putByte(OP_2BYTE_ESCAPE);
     1006        m_buffer.putByte(OP2_JS_rel32);
     1007        m_buffer.putInt(0);
     1008        return JmpSrc(m_buffer.size());
    10111009    }
    10121010   
    10131011    void predictNotTaken()
    10141012    {
    1015         m_buffer->putByte(PRE_PREDICT_BRANCH_NOT_TAKEN);
     1013        m_buffer.putByte(PRE_PREDICT_BRANCH_NOT_TAKEN);
    10161014    }
    10171015   
     
    10211019        ASSERT(from.m_offset != -1);
    10221020       
    1023         reinterpret_cast<int*>(reinterpret_cast<ptrdiff_t>(m_buffer->data()) + from.m_offset)[-1] = to.m_offset - from.m_offset;
     1021        reinterpret_cast<int*>(reinterpret_cast<ptrdiff_t>(m_buffer.data()) + from.m_offset)[-1] = to.m_offset - from.m_offset;
    10241022    }
    10251023   
     
    10811079    void* executableCopy()
    10821080    {
    1083         void* copy = m_buffer->executableCopy();
     1081        void* copy = m_buffer.executableCopy();
    10841082        ASSERT(copy);
    10851083        return copy;
     
    11111109    void modRm_rr(RegisterID reg, RegisterID rm)
    11121110    {
    1113         m_buffer->ensureSpace(maxInstructionSize);
     1111        m_buffer.ensureSpace(maxInstructionSize);
    11141112        modRm_rr_Unchecked(reg, rm);
    11151113    }
     
    11171115    void modRm_rr_Unchecked(RegisterID reg, RegisterID rm)
    11181116    {
    1119         m_buffer->putByteUnchecked(MODRM(3, reg, rm));
     1117        m_buffer.putByteUnchecked(MODRM(3, reg, rm));
    11201118    }
    11211119
     
    11231121    void modRm_rm(RegisterID reg, void* addr)
    11241122    {
    1125         m_buffer->putByte(MODRM(0, reg, X86::noBase));
    1126         m_buffer->putInt((int)addr);
     1123        m_buffer.putByte(MODRM(0, reg, X86::noBase));
     1124        m_buffer.putInt((int)addr);
    11271125    }
    11281126#endif
     
    11311129    {
    11321130        if (base == X86::esp) {
    1133             m_buffer->putByte(MODRM(0, reg, X86::hasSib));
    1134             m_buffer->putByte(SIB(0, X86::noScale, X86::esp));
     1131            m_buffer.putByte(MODRM(0, reg, X86::hasSib));
     1132            m_buffer.putByte(SIB(0, X86::noScale, X86::esp));
    11351133        } else
    1136             m_buffer->putByte(MODRM(0, reg, base));
     1134            m_buffer.putByte(MODRM(0, reg, base));
    11371135    }
    11381136
     
    11411139        if (base == X86::esp) {
    11421140            if (CAN_SIGN_EXTEND_8_32(offset)) {
    1143                 m_buffer->putByteUnchecked(MODRM(1, reg, X86::hasSib));
    1144                 m_buffer->putByteUnchecked(SIB(0, X86::noScale, X86::esp));
    1145                 m_buffer->putByteUnchecked(offset);
     1141                m_buffer.putByteUnchecked(MODRM(1, reg, X86::hasSib));
     1142                m_buffer.putByteUnchecked(SIB(0, X86::noScale, X86::esp));
     1143                m_buffer.putByteUnchecked(offset);
    11461144            } else {
    1147                 m_buffer->putByteUnchecked(MODRM(2, reg, X86::hasSib));
    1148                 m_buffer->putByteUnchecked(SIB(0, X86::noScale, X86::esp));
    1149                 m_buffer->putIntUnchecked(offset);
     1145                m_buffer.putByteUnchecked(MODRM(2, reg, X86::hasSib));
     1146                m_buffer.putByteUnchecked(SIB(0, X86::noScale, X86::esp));
     1147                m_buffer.putIntUnchecked(offset);
    11501148            }
    11511149        } else {
    11521150            if (CAN_SIGN_EXTEND_8_32(offset)) {
    1153                 m_buffer->putByteUnchecked(MODRM(1, reg, base));
    1154                 m_buffer->putByteUnchecked(offset);
     1151                m_buffer.putByteUnchecked(MODRM(1, reg, base));
     1152                m_buffer.putByteUnchecked(offset);
    11551153            } else {
    1156                 m_buffer->putByteUnchecked(MODRM(2, reg, base));
    1157                 m_buffer->putIntUnchecked(offset);
     1154                m_buffer.putByteUnchecked(MODRM(2, reg, base));
     1155                m_buffer.putIntUnchecked(offset);
    11581156            }
    11591157        }
     
    11621160    void modRm_rm(RegisterID reg, RegisterID base, int offset)
    11631161    {
    1164         m_buffer->ensureSpace(maxInstructionSize);
     1162        m_buffer.ensureSpace(maxInstructionSize);
    11651163        modRm_rm_Unchecked(reg, base, offset);
    11661164    }
     
    11721170            shift++;
    11731171   
    1174         m_buffer->putByte(MODRM(0, reg, X86::hasSib));
    1175         m_buffer->putByte(SIB(shift, index, base));
     1172        m_buffer.putByte(MODRM(0, reg, X86::hasSib));
     1173        m_buffer.putByte(SIB(shift, index, base));
    11761174    }
    11771175
     
    11831181   
    11841182        if (CAN_SIGN_EXTEND_8_32(offset)) {
    1185             m_buffer->putByte(MODRM(1, reg, X86::hasSib));
    1186             m_buffer->putByte(SIB(shift, index, base));
    1187             m_buffer->putByte(offset);
     1183            m_buffer.putByte(MODRM(1, reg, X86::hasSib));
     1184            m_buffer.putByte(SIB(shift, index, base));
     1185            m_buffer.putByte(offset);
    11881186        } else {
    1189             m_buffer->putByte(MODRM(2, reg, X86::hasSib));
    1190             m_buffer->putByte(SIB(shift, index, base));
    1191             m_buffer->putInt(offset);
     1187            m_buffer.putByte(MODRM(2, reg, X86::hasSib));
     1188            m_buffer.putByte(SIB(shift, index, base));
     1189            m_buffer.putInt(offset);
    11921190        }
    11931191    }
     
    11951193    void modRm_opr(OpcodeID opcodeID, RegisterID rm)
    11961194    {
    1197         m_buffer->ensureSpace(maxInstructionSize);
     1195        m_buffer.ensureSpace(maxInstructionSize);
    11981196        modRm_opr_Unchecked(opcodeID, rm);
    11991197    }
     
    12311229    }
    12321230
    1233     AssemblerBuffer* m_buffer;
     1231    AssemblerBuffer m_buffer;
    12341232};
    12351233
  • trunk/JavaScriptCore/interpreter/Interpreter.cpp

    r38917 r38975  
    611611    , m_ctiVirtualCallLink(0)
    612612    , m_ctiVirtualCall(0)
    613 #endif
    614 #if ENABLE(ASSEMBLER)
    615     , m_assemblerBuffer(new AssemblerBuffer(1024 * 1024))
    616613#endif
    617614    , m_reentryDepth(0)
  • trunk/JavaScriptCore/interpreter/Interpreter.h

    r38917 r38975  
    280280#endif // ENABLE(JIT)
    281281
    282 #if ENABLE(ASSEMBLER)
    283         AssemblerBuffer* assemblerBuffer() const { return m_assemblerBuffer.get(); }
    284 #endif
    285 
    286282        // Default number of ticks before a timeout check should be done.
    287283        static const int initialTickCountThreshold = 1024;
     
    345341#endif
    346342
    347 #if ENABLE(ASSEMBLER)
    348         OwnPtr<AssemblerBuffer> m_assemblerBuffer;
    349 #endif
    350 
    351343        int m_reentryDepth;
    352344        unsigned m_timeoutTime;
  • trunk/JavaScriptCore/jit/JIT.cpp

    r38971 r38975  
    590590
    591591JIT::JIT(JSGlobalData* globalData, CodeBlock* codeBlock)
    592     : m_assembler(globalData->interpreter->assemblerBuffer())
    593     , m_interpreter(globalData->interpreter)
     592    : m_interpreter(globalData->interpreter)
    594593    , m_globalData(globalData)
    595594    , m_codeBlock(codeBlock)
  • trunk/JavaScriptCore/parser/Nodes.cpp

    r38930 r38975  
    313313RegisterID* RegExpNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
    314314{
    315     RefPtr<RegExp> regExp = RegExp::create(generator.globalData(), m_pattern, m_flags);
     315    RefPtr<RegExp> regExp = RegExp::create(m_pattern, m_flags);
    316316    if (!regExp->isValid())
    317317        return emitThrowError(generator, SyntaxError, ("Invalid regular expression: " + UString(regExp->errorMessage())).UTF8String().c_str());
  • trunk/JavaScriptCore/runtime/RegExp.cpp

    r38839 r38975  
    3838#endif
    3939
    40 inline RegExp::RegExp(JSGlobalData* globalData, const UString& pattern)
     40inline RegExp::RegExp(const UString& pattern)
    4141    : m_pattern(pattern)
    4242    , m_flagBits(0)
     
    4646{
    4747#if ENABLE(WREC)
    48     m_wrecFunction = Generator::compileRegExp(globalData->interpreter, pattern, &m_numSubpatterns, &m_constructionError);
     48    m_wrecFunction = Generator::compileRegExp(pattern, &m_numSubpatterns, &m_constructionError);
    4949    if (m_wrecFunction)
    5050        return;
    5151    // Fall through to non-WREC case.
    52 #else
    53     UNUSED_PARAM(globalData);
    5452#endif
    5553    m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
     
    5755}
    5856
    59 PassRefPtr<RegExp> RegExp::create(JSGlobalData* globalData, const UString& pattern)
     57PassRefPtr<RegExp> RegExp::create(const UString& pattern)
    6058{
    61     return adoptRef(new RegExp(globalData, pattern));
     59    return adoptRef(new RegExp(pattern));
    6260}
    6361
    64 inline RegExp::RegExp(JSGlobalData* globalData, const UString& pattern, const UString& flags)
     62inline RegExp::RegExp(const UString& pattern, const UString& flags)
    6563    : m_pattern(pattern)
    6664    , m_flags(flags)
     
    8987
    9088#if ENABLE(WREC)
    91     m_wrecFunction = Generator::compileRegExp(globalData->interpreter, pattern, &m_numSubpatterns, &m_constructionError, (m_flagBits & IgnoreCase), (m_flagBits & Multiline));
     89    m_wrecFunction = Generator::compileRegExp(pattern, &m_numSubpatterns, &m_constructionError, (m_flagBits & IgnoreCase), (m_flagBits & Multiline));
    9290    if (m_wrecFunction)
    9391        return;
    9492    // Fall through to non-WREC case.
    95 #else
    96     UNUSED_PARAM(globalData);
    9793#endif
    9894    m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
     
    10096}
    10197
    102 PassRefPtr<RegExp> RegExp::create(JSGlobalData* globalData, const UString& pattern, const UString& flags)
     98PassRefPtr<RegExp> RegExp::create(const UString& pattern, const UString& flags)
    10399{
    104     return adoptRef(new RegExp(globalData, pattern, flags));
     100    return adoptRef(new RegExp(pattern, flags));
    105101}
    106102
  • trunk/JavaScriptCore/runtime/RegExp.h

    r38603 r38975  
    3535    class RegExp : public RefCounted<RegExp> {
    3636    public:
    37         static PassRefPtr<RegExp> create(JSGlobalData*, const UString& pattern);
    38         static PassRefPtr<RegExp> create(JSGlobalData*, const UString& pattern, const UString& flags);
     37        static PassRefPtr<RegExp> create(const UString& pattern);
     38        static PassRefPtr<RegExp> create(const UString& pattern, const UString& flags);
    3939        ~RegExp();
    4040
     
    5353
    5454    private:
    55         RegExp(JSGlobalData*, const UString& pattern);
    56         RegExp(JSGlobalData*, const UString& pattern, const UString& flags);
     55        RegExp(const UString& pattern);
     56        RegExp(const UString& pattern, const UString& flags);
    5757
    5858        void compile();
  • trunk/JavaScriptCore/runtime/RegExpConstructor.cpp

    r38440 r38975  
    332332    UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec);
    333333
    334     RefPtr<RegExp> regExp = RegExp::create(&exec->globalData(), pattern, flags);
     334    RefPtr<RegExp> regExp = RegExp::create(pattern, flags);
    335335    if (!regExp->isValid())
    336336        return throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage()));
  • trunk/JavaScriptCore/runtime/RegExpPrototype.cpp

    r38440 r38975  
    8686        UString pattern = args.isEmpty() ? UString("") : arg0->toString(exec);
    8787        UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec);
    88         regExp = RegExp::create(&exec->globalData(), pattern, flags);
     88        regExp = RegExp::create(pattern, flags);
    8989    }
    9090
  • trunk/JavaScriptCore/runtime/StringPrototype.cpp

    r38603 r38975  
    413413         *  replaced with the result of the expression new RegExp(regexp).
    414414         */
    415         reg = RegExp::create(&exec->globalData(), a0->toString(exec));
     415        reg = RegExp::create(a0->toString(exec));
    416416    }
    417417    RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
     
    463463         *  replaced with the result of the expression new RegExp(regexp).
    464464         */
    465         reg = RegExp::create(&exec->globalData(), a0->toString(exec));
     465        reg = RegExp::create(a0->toString(exec));
    466466    }
    467467    RegExpConstructor* regExpConstructor = exec->lexicalGlobalObject()->regExpConstructor();
  • trunk/JavaScriptCore/wrec/WREC.cpp

    r38929 r38975  
    4242static const int MaxPatternSize = (1 << 16);
    4343
    44 CompiledRegExp Generator::compileRegExp(Interpreter* interpreter, const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase, bool multiline)
     44CompiledRegExp Generator::compileRegExp(const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase, bool multiline)
    4545{
    4646    if (pattern.size() > MaxPatternSize) {
     
    4949    }
    5050
    51     Parser parser(pattern, ignoreCase, multiline, interpreter->assemblerBuffer());
     51    Parser parser(pattern, ignoreCase, multiline);
    5252    Generator& generator = parser.generator();
    5353    MacroAssembler::JumpList failures;
  • trunk/JavaScriptCore/wrec/WRECGenerator.h

    r38891 r38975  
    5050        using MacroAssembler::Label;
    5151
    52         static CompiledRegExp compileRegExp(Interpreter*, const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
    53    
    54         Generator(Parser& parser, AssemblerBuffer* assemblerBuffer)
    55             : MacroAssembler(assemblerBuffer)
    56             , m_parser(parser)
     52        static CompiledRegExp compileRegExp(const UString& pattern, unsigned* numSubpatterns_ptr, const char** error_ptr, bool ignoreCase = false, bool multiline = false);
     53
     54        Generator(Parser& parser)
     55            : m_parser(parser)
    5756        {
    5857        }
  • trunk/JavaScriptCore/wrec/WRECParser.h

    r38891 r38975  
    5656        };
    5757
    58         Parser(const UString& pattern, bool ignoreCase, bool multiline, AssemblerBuffer* assemblerBuffer)
    59             : m_generator(*this, assemblerBuffer)
     58        Parser(const UString& pattern, bool ignoreCase, bool multiline)
     59            : m_generator(*this)
    6060            , m_data(pattern.data())
    6161            , m_size(pattern.size())
Note: See TracChangeset for help on using the changeset viewer.