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

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

Reviewed by Geoff Garen.

Start porting the JIT to use the MacroAssembler.

https://bugs.webkit.org/show_bug.cgi?id=22671
No change in performance.

  • assembler/MacroAssembler.h: (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc): (JSC::MacroAssembler::add32): (JSC::MacroAssembler::and32): (JSC::MacroAssembler::lshift32): (JSC::MacroAssembler::rshift32): (JSC::MacroAssembler::storePtr): (JSC::MacroAssembler::store32): (JSC::MacroAssembler::poke): (JSC::MacroAssembler::move): (JSC::MacroAssembler::compareImm32ForBranchEquality): (JSC::MacroAssembler::jnePtr): (JSC::MacroAssembler::jnset32): (JSC::MacroAssembler::jset32): (JSC::MacroAssembler::jzeroSub32): (JSC::MacroAssembler::joverAdd32): (JSC::MacroAssembler::call):
  • assembler/X86Assembler.h: (JSC::X86Assembler::shll_i8r):
  • jit/JIT.cpp: (JSC::JIT::privateCompileMainPass): (JSC::JIT::privateCompile): (JSC::JIT::privateCompileCTIMachineTrampolines):
  • jit/JIT.h:
  • jit/JITArithmetic.cpp: (JSC::JIT::compileBinaryArithOp):
  • jit/JITInlineMethods.h: (JSC::JIT::emitGetVirtualRegister): (JSC::JIT::emitPutCTIArg): (JSC::JIT::emitPutCTIArgConstant): (JSC::JIT::emitGetCTIArg): (JSC::JIT::emitPutCTIArgFromVirtualRegister): (JSC::JIT::emitPutCTIParam): (JSC::JIT::emitGetCTIParam): (JSC::JIT::emitPutToCallFrameHeader): (JSC::JIT::emitPutImmediateToCallFrameHeader): (JSC::JIT::emitGetFromCallFrameHeader): (JSC::JIT::emitPutVirtualRegister): (JSC::JIT::emitInitRegister): (JSC::JIT::emitNakedCall): (JSC::JIT::restoreArgumentReference): (JSC::JIT::restoreArgumentReferenceForTrampoline): (JSC::JIT::emitCTICall): (JSC::JIT::checkStructure): (JSC::JIT::emitJumpSlowCaseIfNotJSCell): (JSC::JIT::emitJumpSlowCaseIfNotImmNum): (JSC::JIT::emitJumpSlowCaseIfNotImmNums): (JSC::JIT::emitFastArithDeTagImmediate): (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): (JSC::JIT::emitFastArithReTagImmediate): (JSC::JIT::emitFastArithPotentiallyReTagImmediate): (JSC::JIT::emitFastArithImmToInt): (JSC::JIT::emitFastArithIntToImmOrSlowCase): (JSC::JIT::emitFastArithIntToImmNoCheck): (JSC::JIT::emitTagAsBoolImmediate):
  • jit/JITPropertyAccess.cpp: (JSC::JIT::privateCompilePutByIdTransition):
File:
1 edited

Legend:

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

    r38989 r39020  
    115115        PRE_SSE_F2                      = 0xF2,
    116116        OP_HLT                          = 0xF4,
     117        OP_GROUP3_EbIb                  = 0xF6,
    117118        OP_GROUP3_Ev                    = 0xF7,
    118119        OP_GROUP3_EvIz                  = 0xF7, // OP_GROUP3_Ev has an immediate, when instruction is a test.
     
    391392#endif
    392393
     394    void cmpl_i8m(int imm, RegisterID dst)
     395    {
     396        m_buffer.putByte(OP_GROUP1_EvIb);
     397        modRm_opm(GROUP1_OP_CMP, dst);
     398        m_buffer.putByte(imm);
     399    }
     400
     401    void cmpl_i8m(int imm, int offset, RegisterID dst)
     402    {
     403        m_buffer.putByte(OP_GROUP1_EvIb);
     404        modRm_opm(GROUP1_OP_CMP, dst, offset);
     405        m_buffer.putByte(imm);
     406    }
     407
    393408    void cmpl_i8m(int imm, int offset, RegisterID base, RegisterID index, int scale)
    394409    {
     
    495510        m_buffer.putByte(OP_SUB_GvEv);
    496511        modRm_rm(dst, base, offset);
     512    }
     513
     514    void testb_i8r(int imm, RegisterID dst)
     515    {
     516        m_buffer.ensureSpace(maxInstructionSize);
     517        m_buffer.putByteUnchecked(OP_GROUP3_EbIb);
     518        modRm_opr_Unchecked(GROUP3_OP_TEST, dst);
     519        m_buffer.putByteUnchecked(imm);
    497520    }
    498521
     
    556579    }
    557580
    558     void shl_i8r(int imm, RegisterID dst)
     581    void shll_i8r(int imm, RegisterID dst)
    559582    {
    560583        if (imm == 1) {
     
    720743    }
    721744
     745    void movl_i32m(int imm, RegisterID base)
     746    {
     747        m_buffer.ensureSpace(maxInstructionSize);
     748        m_buffer.putByteUnchecked(OP_GROUP11_EvIz);
     749        modRm_opm_Unchecked(GROUP11_MOV, base);
     750        m_buffer.putIntUnchecked(imm);
     751    }
     752
    722753    void movl_i32m(int imm, int offset, RegisterID base)
    723754    {
     
    10901121    }
    10911122
    1092 #if USE(CTI_ARGUMENT)
    1093     void restoreArgumentReference()
    1094     {
    1095 #if USE(FAST_CALL_CTI_ARGUMENT)
    1096         movl_rr(X86::esp, X86::ecx);
    1097 #else
    1098         movl_rm(X86::esp, 0, X86::esp);
    1099 #endif
    1100     }
    1101 
    1102     void restoreArgumentReferenceForTrampoline()
    1103     {
    1104 #if USE(FAST_CALL_CTI_ARGUMENT)
    1105         movl_rr(X86::esp, X86::ecx);
    1106         addl_i32r(4, X86::ecx);
    1107 #endif
    1108     }
    1109 #else
    1110     void restoreArgumentReference() {}
    1111     void restoreArgumentReferenceForTrampoline() {}
    1112 #endif
    1113 
    11141123private:
    11151124    void modRm_rr(RegisterID reg, RegisterID rm)
     
    11311140    }
    11321141#endif
     1142
     1143    void modRm_rm_Unchecked(RegisterID reg, RegisterID base)
     1144    {
     1145        if (base == X86::esp) {
     1146            m_buffer.putByteUnchecked(MODRM(0, reg, X86::hasSib));
     1147            m_buffer.putByteUnchecked(SIB(0, X86::noScale, X86::esp));
     1148        } else {
     1149            m_buffer.putByteUnchecked(MODRM(0, reg, base));
     1150        }
     1151    }
    11331152
    11341153    void modRm_rm(RegisterID reg, RegisterID base)
     
    12131232    }
    12141233
     1234    void modRm_opm_Unchecked(OpcodeID opcodeID, RegisterID base)
     1235    {
     1236        modRm_rm_Unchecked(static_cast<RegisterID>(opcodeID), base);
     1237    }
     1238
    12151239    void modRm_opm_Unchecked(OpcodeID opcodeID, RegisterID base, int offset)
    12161240    {
Note: See TracChangeset for help on using the changeset viewer.