Ignore:
Timestamp:
Dec 8, 2008, 6:10:41 PM (16 years ago)
Author:
[email protected]
Message:

2008-12-08 Gavin Barraclough <[email protected]>

Reviewed by Geoff Garen.

Expand MacroAssembler to support more operations, required by the JIT.

Generally adds more operations and permutations of operands to the existing
interface. Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer,
and require that immediate pointer operands (though not pointer addresses to
load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32().

No performance impact.

  • assembler/MacroAssembler.h: (JSC::MacroAssembler::): (JSC::MacroAssembler::ImmPtr::ImmPtr): (JSC::MacroAssembler::add32): (JSC::MacroAssembler::and32): (JSC::MacroAssembler::or32): (JSC::MacroAssembler::sub32): (JSC::MacroAssembler::xor32): (JSC::MacroAssembler::loadPtr): (JSC::MacroAssembler::load32): (JSC::MacroAssembler::storePtr): (JSC::MacroAssembler::store32): (JSC::MacroAssembler::poke): (JSC::MacroAssembler::move): (JSC::MacroAssembler::testImm32): (JSC::MacroAssembler::jae32): (JSC::MacroAssembler::jb32): (JSC::MacroAssembler::jePtr): (JSC::MacroAssembler::je32): (JSC::MacroAssembler::jnePtr): (JSC::MacroAssembler::jne32): (JSC::MacroAssembler::jnzPtr): (JSC::MacroAssembler::jnz32): (JSC::MacroAssembler::jzPtr): (JSC::MacroAssembler::jz32): (JSC::MacroAssembler::joSub32): (JSC::MacroAssembler::jump): (JSC::MacroAssembler::sete32): (JSC::MacroAssembler::setne32): (JSC::MacroAssembler::setnz32): (JSC::MacroAssembler::setz32):
  • assembler/X86Assembler.h: (JSC::X86Assembler::addl_mr): (JSC::X86Assembler::andl_i8r): (JSC::X86Assembler::cmpl_rm): (JSC::X86Assembler::cmpl_mr): (JSC::X86Assembler::cmpl_i8m): (JSC::X86Assembler::subl_mr): (JSC::X86Assembler::testl_i32m): (JSC::X86Assembler::xorl_i32r): (JSC::X86Assembler::movl_rm): (JSC::X86Assembler::modRm_opmsib):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass):
  • jit/JITInlineMethods.h: (JSC::JIT::emitGetVirtualRegister): (JSC::JIT::emitPutCTIArgConstant): (JSC::JIT::emitPutCTIParam): (JSC::JIT::emitPutImmediateToCallFrameHeader): (JSC::JIT::emitInitRegister): (JSC::JIT::checkStructure): (JSC::JIT::emitJumpIfJSCell): (JSC::JIT::emitJumpIfNotJSCell): (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
File:
1 edited

Legend:

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

    r39083 r39121  
    320320#endif
    321321
     322    void addl_mr(RegisterID base, RegisterID dst)
     323    {
     324        m_buffer.putByte(OP_ADD_GvEv);
     325        modRm_rm(dst, base);
     326    }
     327
    322328    void addl_mr(int offset, RegisterID base, RegisterID dst)
    323329    {
     
    330336        m_buffer.putByte(OP_AND_EvGv);
    331337        modRm_rr(src, dst);
     338    }
     339
     340    void andl_i8r(int imm, RegisterID dst)
     341    {
     342        m_buffer.putByte(OP_GROUP1_EvIb);
     343        modRm_opr(GROUP1_OP_AND, dst);
     344        m_buffer.putByte(imm);
    332345    }
    333346
     
    352365    }
    353366
     367    void cmpl_rm(RegisterID src, RegisterID base)
     368    {
     369        m_buffer.putByte(OP_CMP_EvGv);
     370        modRm_rm(src, base);
     371    }
     372
    354373    void cmpl_rm(RegisterID src, int offset, RegisterID base)
    355374    {
    356375        m_buffer.putByte(OP_CMP_EvGv);
    357376        modRm_rm(src, base, offset);
     377    }
     378
     379    void cmpl_mr(RegisterID base, RegisterID dst)
     380    {
     381        m_buffer.putByte(OP_CMP_GvEv);
     382        modRm_rm(dst, base);
    358383    }
    359384
     
    408433    }
    409434
     435    void cmpl_i8m(int imm, RegisterID base, RegisterID index, int scale)
     436    {
     437        m_buffer.putByte(OP_GROUP1_EvIb);
     438        modRm_opmsib(GROUP1_OP_CMP, base, index, scale);
     439        m_buffer.putByte(imm);
     440    }
     441
    410442    void cmpl_i8m(int imm, int offset, RegisterID base, RegisterID index, int scale)
    411443    {
     
    506538        modRm_opr(GROUP1_OP_SUB, dst);
    507539        m_buffer.putInt(imm);
     540    }
     541
     542    void subl_mr(RegisterID base, RegisterID dst)
     543    {
     544        m_buffer.putByte(OP_SUB_GvEv);
     545        modRm_rm(dst, base);
    508546    }
    509547
     
    544582    }
    545583
     584    void testl_i32m(int imm, RegisterID base, RegisterID index, int scale)
     585    {
     586        m_buffer.putByte(OP_GROUP3_EvIz);
     587        modRm_opmsib(GROUP3_OP_TEST, base, index, scale);
     588        m_buffer.putInt(imm);
     589    }
     590
     591    void testl_i32m(int imm, int offset, RegisterID base, RegisterID index, int scale)
     592    {
     593        m_buffer.putByte(OP_GROUP3_EvIz);
     594        modRm_opmsib(GROUP3_OP_TEST, base, index, scale, offset);
     595        m_buffer.putInt(imm);
     596    }
     597
    546598    void testl_rr(RegisterID src, RegisterID dst)
    547599    {
     
    555607        modRm_opr(GROUP1_OP_XOR, dst);
    556608        m_buffer.putByte(imm);
     609    }
     610
     611    void xorl_i32r(int imm, RegisterID dst)
     612    {
     613        m_buffer.putByte(OP_GROUP1_EvIz);
     614        modRm_opr(GROUP1_OP_XOR, dst);
     615        m_buffer.putInt(imm);
    557616    }
    558617
     
    732791#endif
    733792
     793    void movl_rm(RegisterID src, RegisterID base, RegisterID index, int scale)
     794    {
     795        m_buffer.putByte(OP_MOV_EvGv);
     796        modRm_rmsib(src, base, index, scale);
     797    }
     798   
    734799    void movl_rm(RegisterID src, int offset, RegisterID base, RegisterID index, int scale)
    735800    {
     
    12611326    }
    12621327
     1328    void modRm_opmsib(OpcodeID opcodeID, RegisterID base, RegisterID index, int scale)
     1329    {
     1330        modRm_rmsib(static_cast<RegisterID>(opcodeID), base, index, scale);
     1331    }
     1332
    12631333    AssemblerBuffer m_buffer;
    12641334};
Note: See TracChangeset for help on using the changeset viewer.