Changeset 36311 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Sep 9, 2008, 8:22:04 PM (17 years ago)
Author:
[email protected]
Message:

2008-09-09 Cameron Zwarich <[email protected]>

Reviewed by Maciej Stachowiak.

Bug 20759: Remove MacroAssembler
<https://bugs.webkit.org/show_bug.cgi?id=20759>

Remove MacroAssembler and move its functionality to X86Assembler.

JavaScriptCore:

  • JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
  • JavaScriptCore.xcodeproj/project.pbxproj:
  • VM/CTI.cpp: (JSC::CTI::emitGetArg): (JSC::CTI::emitGetPutArg): (JSC::CTI::emitPutArg): (JSC::CTI::emitPutCTIParam): (JSC::CTI::emitGetCTIParam): (JSC::CTI::emitPutToCallFrameHeader): (JSC::CTI::emitGetFromCallFrameHeader): (JSC::CTI::emitPutResult): (JSC::CTI::emitDebugExceptionCheck): (JSC::CTI::emitJumpSlowCaseIfNotImm): (JSC::CTI::emitJumpSlowCaseIfNotImms): (JSC::CTI::emitFastArithDeTagImmediate): (JSC::CTI::emitFastArithReTagImmediate): (JSC::CTI::emitFastArithPotentiallyReTagImmediate): (JSC::CTI::emitFastArithImmToInt): (JSC::CTI::emitFastArithIntToImmOrSlowCase): (JSC::CTI::emitFastArithIntToImmNoCheck): (JSC::CTI::compileOpCall): (JSC::CTI::emitSlowScriptCheck): (JSC::CTI::privateCompileMainPass): (JSC::CTI::privateCompileSlowCases): (JSC::CTI::privateCompile): (JSC::CTI::privateCompileGetByIdSelf): (JSC::CTI::privateCompileGetByIdProto): (JSC::CTI::privateCompileGetByIdChain): (JSC::CTI::privateCompilePutByIdReplace): (JSC::CTI::privateArrayLengthTrampoline): (JSC::CTI::privateStringLengthTrampoline): (JSC::CTI::compileRegExp):
  • VM/CTI.h: (JSC::CallRecord::CallRecord): (JSC::JmpTable::JmpTable): (JSC::SlowCaseEntry::SlowCaseEntry): (JSC::CTI::JSRInfo::JSRInfo):
  • masm/MacroAssembler.h: Removed.
  • masm/MacroAssemblerWin.cpp: Removed.
  • masm/X86Assembler.h: (JSC::X86Assembler::emitConvertToFastCall): (JSC::X86Assembler::emitRestoreArgumentReference):
  • wrec/WREC.h: (JSC::WRECGenerator::WRECGenerator): (JSC::WRECParser::WRECParser):

WebCore:

  • ForwardingHeaders/masm/IA32MacroAsm.h: Removed.
  • ForwardingHeaders/masm/MacroAssembler.h: Removed.
  • ForwardingHeaders/masm/X86Assembler.h: Added.
Location:
trunk/JavaScriptCore
Files:
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r36310 r36311  
     12008-09-09  Cameron Zwarich  <[email protected]>
     2
     3        Reviewed by Maciej Stachowiak.
     4
     5        Bug 20759: Remove MacroAssembler
     6        <https://bugs.webkit.org/show_bug.cgi?id=20759>
     7
     8        Remove MacroAssembler and move its functionality to X86Assembler.
     9
     10        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
     11        * JavaScriptCore.xcodeproj/project.pbxproj:
     12        * VM/CTI.cpp:
     13        (JSC::CTI::emitGetArg):
     14        (JSC::CTI::emitGetPutArg):
     15        (JSC::CTI::emitPutArg):
     16        (JSC::CTI::emitPutCTIParam):
     17        (JSC::CTI::emitGetCTIParam):
     18        (JSC::CTI::emitPutToCallFrameHeader):
     19        (JSC::CTI::emitGetFromCallFrameHeader):
     20        (JSC::CTI::emitPutResult):
     21        (JSC::CTI::emitDebugExceptionCheck):
     22        (JSC::CTI::emitJumpSlowCaseIfNotImm):
     23        (JSC::CTI::emitJumpSlowCaseIfNotImms):
     24        (JSC::CTI::emitFastArithDeTagImmediate):
     25        (JSC::CTI::emitFastArithReTagImmediate):
     26        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
     27        (JSC::CTI::emitFastArithImmToInt):
     28        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
     29        (JSC::CTI::emitFastArithIntToImmNoCheck):
     30        (JSC::CTI::compileOpCall):
     31        (JSC::CTI::emitSlowScriptCheck):
     32        (JSC::CTI::privateCompileMainPass):
     33        (JSC::CTI::privateCompileSlowCases):
     34        (JSC::CTI::privateCompile):
     35        (JSC::CTI::privateCompileGetByIdSelf):
     36        (JSC::CTI::privateCompileGetByIdProto):
     37        (JSC::CTI::privateCompileGetByIdChain):
     38        (JSC::CTI::privateCompilePutByIdReplace):
     39        (JSC::CTI::privateArrayLengthTrampoline):
     40        (JSC::CTI::privateStringLengthTrampoline):
     41        (JSC::CTI::compileRegExp):
     42        * VM/CTI.h:
     43        (JSC::CallRecord::CallRecord):
     44        (JSC::JmpTable::JmpTable):
     45        (JSC::SlowCaseEntry::SlowCaseEntry):
     46        (JSC::CTI::JSRInfo::JSRInfo):
     47        * masm/MacroAssembler.h: Removed.
     48        * masm/MacroAssemblerWin.cpp: Removed.
     49        * masm/X86Assembler.h:
     50        (JSC::X86Assembler::emitConvertToFastCall):
     51        (JSC::X86Assembler::emitRestoreArgumentReference):
     52        * wrec/WREC.h:
     53        (JSC::WRECGenerator::WRECGenerator):
     54        (JSC::WRECParser::WRECParser):
     55
    1562008-09-09  Sam Weinig  <[email protected]>
    257
  • trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj

    r36261 r36311  
    13501350                                >
    13511351                        </File>
    1352                         <File
    1353                                 RelativePath="..\..\masm\MacroAssembler.h"
    1354                                 >
    1355                         </File>
    1356                         <File
    1357                                 RelativePath="..\..\masm\MacroAssemblerWin.cpp"
    1358                                 >
    1359                         </File>
    13601352                </Filter>
    13611353                <Filter
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r36292 r36311  
    115115                A72701B90DADE94900E548D7 /* ExceptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A72701B30DADE94900E548D7 /* ExceptionHelpers.h */; };
    116116                A727FF6B0DA3092200E548D7 /* JSPropertyNameIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A727FF660DA3053B00E548D7 /* JSPropertyNameIterator.cpp */; };
    117                 A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */ = {isa = PBXBuildFile; fileRef = A763F79C0E70E0FE00BC151E /* MacroAssembler.h */; settings = {ATTRIBUTES = (Private, ); }; };
    118117                A7C31DAA0DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; };
    119118                BC02E90D0E1839DB000F9297 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; };
     
    640639                A727FF650DA3053B00E548D7 /* JSPropertyNameIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSPropertyNameIterator.h; path = VM/JSPropertyNameIterator.h; sourceTree = "<group>"; };
    641640                A727FF660DA3053B00E548D7 /* JSPropertyNameIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSPropertyNameIterator.cpp; path = VM/JSPropertyNameIterator.cpp; sourceTree = "<group>"; };
    642                 A763F79C0E70E0FE00BC151E /* MacroAssembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssembler.h; sourceTree = "<group>"; };
    643641                A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SegmentedVector.h; path = VM/SegmentedVector.h; sourceTree = "<group>"; };
    644642                A7E42C180E3938830065A544 /* JSStaticScopeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStaticScopeObject.h; sourceTree = "<group>"; };
     
    13171315                        isa = PBXGroup;
    13181316                        children = (
    1319                                 A763F79C0E70E0FE00BC151E /* MacroAssembler.h */,
    13201317                                869081400E640C89000D36ED /* X86Assembler.h */,
    13211318                        );
     
    15891586                                933040040E6A749400786E6A /* SmallStrings.h in Headers */,
    15901587                                BCDE3AB80E6C82F5001453A7 /* StructureID.h in Headers */,
    1591                                 A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */,
    15921588                                147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */,
    15931589                                147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */,
  • trunk/JavaScriptCore/VM/CTI.cpp

    r36307 r36311  
    108108
    109109// get arg puts an arg from the SF register array into a h/w register
    110 ALWAYS_INLINE void CTI::emitGetArg(unsigned src, MacroAssembler::RegisterID dst)
     110ALWAYS_INLINE void CTI::emitGetArg(unsigned src, X86Assembler::RegisterID dst)
    111111{
    112112    // TODO: we want to reuse values that are already in registers if we can - add a register allocator!
     
    119119
    120120// get arg puts an arg from the SF register array onto the stack, as an arg to a context threaded function.
    121 ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, MacroAssembler::RegisterID scratch)
     121ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, X86Assembler::RegisterID scratch)
    122122{
    123123    if (src < m_codeBlock->constantRegisters.size()) {
     
    131131
    132132// puts an arg onto the stack, as an arg to a context threaded function.
    133 ALWAYS_INLINE void CTI::emitPutArg(MacroAssembler::RegisterID src, unsigned offset)
     133ALWAYS_INLINE void CTI::emitPutArg(X86Assembler::RegisterID src, unsigned offset)
    134134{
    135135    m_jit.movl_rm(src, offset + sizeof(void*), X86::esp);
     
    150150}
    151151
    152 ALWAYS_INLINE void CTI::emitPutCTIParam(MacroAssembler::RegisterID from, unsigned name)
     152ALWAYS_INLINE void CTI::emitPutCTIParam(X86Assembler::RegisterID from, unsigned name)
    153153{
    154154    m_jit.movl_rm(from, name * sizeof(void*), X86::esp);
    155155}
    156156
    157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, MacroAssembler::RegisterID to)
     157ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, X86Assembler::RegisterID to)
    158158{
    159159    m_jit.movl_mr(name * sizeof(void*), X86::esp, to);
    160160}
    161161
    162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader(MacroAssembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry)
     162ALWAYS_INLINE void CTI::emitPutToCallFrameHeader(X86Assembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry)
    163163{
    164164    m_jit.movl_rm(from, -((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi);
    165165}
    166166
    167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, MacroAssembler::RegisterID to)
     167ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, X86Assembler::RegisterID to)
    168168{
    169169    m_jit.movl_mr(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi, to);
    170170}
    171171
    172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, MacroAssembler::RegisterID from)
     172ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, X86Assembler::RegisterID from)
    173173{
    174174    m_jit.movl_rm(from, dst * sizeof(Register), X86::edi);
     
    202202    emitGetCTIParam(CTI_ARGS_exec, X86::ecx);
    203203    m_jit.cmpl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), X86::ecx);
    204     MacroAssembler::JmpSrc noException = m_jit.emitUnlinkedJe();
     204    X86Assembler::JmpSrc noException = m_jit.emitUnlinkedJe();
    205205    m_jit.emitInt3();
    206206    m_jit.link(noException, m_jit.label());
     
    303303}
    304304
    305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm(MacroAssembler::RegisterID reg, unsigned opcodeIndex)
     305ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm(X86Assembler::RegisterID reg, unsigned opcodeIndex)
    306306{
    307307    m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, reg);
     
    309309}
    310310
    311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms(MacroAssembler::RegisterID reg1, MacroAssembler::RegisterID reg2, unsigned opcodeIndex)
     311ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms(X86Assembler::RegisterID reg1, X86Assembler::RegisterID reg2, unsigned opcodeIndex)
    312312{
    313313    m_jit.movl_rr(reg1, X86::ecx);
     
    322322}
    323323
    324 ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate(MacroAssembler::RegisterID reg)
     324ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate(X86Assembler::RegisterID reg)
    325325{
    326326    // op_mod relies on this being a sub - setting zf if result is 0.
     
    328328}
    329329
    330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate(MacroAssembler::RegisterID reg)
     330ALWAYS_INLINE void CTI::emitFastArithReTagImmediate(X86Assembler::RegisterID reg)
    331331{
    332332    m_jit.addl_i8r(JSImmediate::TagBitTypeInteger, reg);
    333333}
    334334
    335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate(MacroAssembler::RegisterID reg)
     335ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate(X86Assembler::RegisterID reg)
    336336{
    337337    m_jit.orl_rr(JSImmediate::TagBitTypeInteger, reg);
    338338}
    339339
    340 ALWAYS_INLINE void CTI::emitFastArithImmToInt(MacroAssembler::RegisterID reg)
     340ALWAYS_INLINE void CTI::emitFastArithImmToInt(X86Assembler::RegisterID reg)
    341341{
    342342    m_jit.sarl_i8r(1, reg);
    343343}
    344344
    345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase(MacroAssembler::RegisterID reg, unsigned opcodeIndex)
     345ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase(X86Assembler::RegisterID reg, unsigned opcodeIndex)
    346346{
    347347    m_jit.addl_rr(reg, reg);
     
    350350}
    351351
    352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck(MacroAssembler::RegisterID reg)
     352ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck(X86Assembler::RegisterID reg)
    353353{
    354354    m_jit.addl_rr(reg, reg);
     
    397397    }
    398398
    399     MacroAssembler::JmpSrc wasEval;
     399    X86Assembler::JmpSrc wasEval;
    400400    if (type == OpCallEval) {
    401401        emitGetPutArg(instruction[i + 2].u.operand, 0, X86::ecx);
     
    418418    // Fast check for JS function.
    419419    m_jit.testl_i32r(JSImmediate::TagMask, X86::ecx);
    420     MacroAssembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne();
     420    X86Assembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne();
    421421    m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsFunctionVptr), X86::ecx);
    422     MacroAssembler::JmpSrc isJSFunction = m_jit.emitUnlinkedJe();
     422    X86Assembler::JmpSrc isJSFunction = m_jit.emitUnlinkedJe();
    423423    m_jit.link(isNotObject, m_jit.label());
    424424
     
    427427    emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r
    428428   
    429     MacroAssembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp();
     429    X86Assembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp();
    430430    m_jit.link(isJSFunction, m_jit.label());
    431431
     
    435435    emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r
    436436
    437     MacroAssembler::JmpDst end = m_jit.label();
     437    X86Assembler::JmpDst end = m_jit.label();
    438438    m_jit.link(wasNotJSFunction, end);
    439439    if (type == OpCallEval)
     
    446446{
    447447    m_jit.subl_i8r(1, X86::esi);
    448     MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne();
     448    X86Assembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne();
    449449    emitCall(opcodeIndex, Machine::cti_timeout_check);
    450450
     
    755755
    756756            m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), X86::eax);
    757             MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe();
     757            X86Assembler::JmpSrc isZero = m_jit.emitUnlinkedJe();
    758758            m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax);
    759759            m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target));
     
    839839            m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target));
    840840            m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax);
    841             MacroAssembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne();
     841            X86Assembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne();
    842842
    843843            m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), X86::eax);
     
    873873            int target = instruction[i + 2].u.operand;
    874874            m_jit.movl_i32m(0, sizeof(Register) * retAddrDst, X86::edi);
    875             MacroAssembler::JmpDst addrPosition = m_jit.label();
     875            X86Assembler::JmpDst addrPosition = m_jit.label();
    876876            m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 2 + target));
    877             MacroAssembler::JmpDst sretTarget = m_jit.label();
     877            X86Assembler::JmpDst sretTarget = m_jit.label();
    878878            m_jsrSites.append(JSRInfo(addrPosition, sretTarget));
    879879            i += 3;
     
    982982
    983983            m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), X86::eax);
    984             MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe();
     984            X86Assembler::JmpSrc isZero = m_jit.emitUnlinkedJe();
    985985            m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax);
    986986            m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target));
     
    10641064            emitCall(i, Machine::cti_op_next_pname);
    10651065            m_jit.testl_rr(X86::eax, X86::eax);
    1066             MacroAssembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe();
     1066            X86Assembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe();
    10671067            emitPutResult(instruction[i + 1].u.operand);
    10681068            m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 3 + target));
     
    12841284                JSValue* value = m_codeBlock->constantRegisters[src2].jsValue(m_exec);
    12851285                if (JSImmediate::isNumber(value)) {
    1286                     MacroAssembler::JmpSrc notImm = iter->from;
     1286                    X86Assembler::JmpSrc notImm = iter->from;
    12871287                    m_jit.link((++iter)->from, m_jit.label());
    12881288                    m_jit.subl_i32r(getDeTaggedConstantImmediate(value), X86::eax);
     
    12991299            ASSERT(!(static_cast<unsigned>(instruction[i + 2].u.operand) < m_codeBlock->constantRegisters.size()));
    13001300
    1301             MacroAssembler::JmpSrc notImm = iter->from;
     1301            X86Assembler::JmpSrc notImm = iter->from;
    13021302            m_jit.link((++iter)->from, m_jit.label());
    13031303            m_jit.subl_rr(X86::edx, X86::eax);
     
    13121312        }
    13131313        case op_get_by_val: {
    1314             MacroAssembler::JmpSrc notImm = iter->from;
     1314            X86Assembler::JmpSrc notImm = iter->from;
    13151315            m_jit.link((++iter)->from, m_jit.label());
    13161316            m_jit.link((++iter)->from, m_jit.label());
     
    13261326        }
    13271327        case op_sub: {
    1328             MacroAssembler::JmpSrc notImm = iter->from;
     1328            X86Assembler::JmpSrc notImm = iter->from;
    13291329            m_jit.link((++iter)->from, m_jit.label());
    13301330            m_jit.addl_rr(X86::edx, X86::eax);
     
    13481348        }
    13491349        case op_lshift: {
    1350             MacroAssembler::JmpSrc notImm1 = iter->from;
    1351             MacroAssembler::JmpSrc notImm2 = (++iter)->from;
     1350            X86Assembler::JmpSrc notImm1 = iter->from;
     1351            X86Assembler::JmpSrc notImm2 = (++iter)->from;
    13521352            m_jit.link((++iter)->from, m_jit.label());
    13531353            emitGetArg(instruction[i + 2].u.operand, X86::eax);
     
    13881388        case op_pre_inc: {
    13891389            unsigned srcDst = instruction[i + 1].u.operand;
    1390             MacroAssembler::JmpSrc notImm = iter->from;
     1390            X86Assembler::JmpSrc notImm = iter->from;
    13911391            m_jit.link((++iter)->from, m_jit.label());
    13921392            m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax);
     
    13991399        }
    14001400        case op_put_by_val: {
    1401             MacroAssembler::JmpSrc notImm = iter->from;
     1401            X86Assembler::JmpSrc notImm = iter->from;
    14021402            m_jit.link((++iter)->from, m_jit.label());
    14031403            m_jit.link((++iter)->from, m_jit.label());
     
    14261426        case op_pre_dec: {
    14271427            unsigned srcDst = instruction[i + 1].u.operand;
    1428             MacroAssembler::JmpSrc notImm = iter->from;
     1428            X86Assembler::JmpSrc notImm = iter->from;
    14291429            m_jit.link((++iter)->from, m_jit.label());
    14301430            m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax);
     
    15641564        }
    15651565        case op_mod: {
    1566             MacroAssembler::JmpSrc notImm1 = iter->from;
    1567             MacroAssembler::JmpSrc notImm2 = (++iter)->from;
     1566            X86Assembler::JmpSrc notImm1 = iter->from;
     1567            X86Assembler::JmpSrc notImm2 = (++iter)->from;
    15681568            m_jit.link((++iter)->from, m_jit.label());
    15691569            emitFastArithReTagImmediate(X86::eax);
     
    16381638    // m_codeBlock->ctiReturnAddressVPCMap.grow(m_calls.size());
    16391639    for (Vector<CallRecord>::iterator iter = m_calls.begin(); iter != m_calls.end(); ++iter) {
    1640         MacroAssembler::link(code, iter->from, iter->to);
     1640        X86Assembler::link(code, iter->from, iter->to);
    16411641        m_codeBlock->ctiReturnAddressVPCMap.add(m_jit.getRelocatedAddress(code, iter->from), iter->opcodeIndex);
    16421642    }
     
    16441644    // Link absolute addresses for jsr
    16451645    for (Vector<JSRInfo>::iterator iter = m_jsrSites.begin(); iter != m_jsrSites.end(); ++iter)
    1646         MacroAssembler::linkAbsoluteAddress(code, iter->addrPosition, iter->target);
     1646        X86Assembler::linkAbsoluteAddress(code, iter->addrPosition, iter->target);
    16471647
    16481648    m_codeBlock->ctiCode = code;
     
    16531653    // Check eax is an object of the right StructureID.
    16541654    m_jit.testl_i32r(JSImmediate::TagMask, X86::eax);
    1655     MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
     1655    X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
    16561656    m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax);
    1657     MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
     1657    X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
    16581658
    16591659    // Checks out okay! - getDirectOffset
     
    16651665    ASSERT(code);
    16661666
    1667     MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1668     MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1667    X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1668    X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    16691669   
    16701670    m_codeBlock->structureIDAccessStubs.append(code);
     
    16831683    // check eax is an object of the right StructureID.
    16841684    m_jit.testl_i32r(JSImmediate::TagMask, X86::eax);
    1685     MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
     1685    X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
    16861686    m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax);
    1687     MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
     1687    X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
    16881688
    16891689    // Check the prototype object's StructureID had not changed.
    16901690    StructureID** protoStructureIDAddress = &(protoObject->m_structureID);
    16911691    m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructureID), static_cast<void*>(protoStructureIDAddress));
    1692     MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJne();
     1692    X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJne();
    16931693
    16941694    // Checks out okay! - getDirectOffset
     
    17001700    ASSERT(code);
    17011701
    1702     MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1703     MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1704     MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1702    X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1703    X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1704    X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    17051705
    17061706    m_codeBlock->structureIDAccessStubs.append(code);
     
    17131713    ASSERT(count);
    17141714   
    1715     Vector<MacroAssembler::JmpSrc> bucketsOfFail;
     1715    Vector<X86Assembler::JmpSrc> bucketsOfFail;
    17161716
    17171717    // Check eax is an object of the right StructureID.
     
    17461746
    17471747    for (unsigned i = 0; i < bucketsOfFail.size(); ++i)
    1748         MacroAssembler::link(code, bucketsOfFail[i], reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1748        X86Assembler::link(code, bucketsOfFail[i], reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    17491749    m_codeBlock->structureIDAccessStubs.append(code);
    17501750    return code;
     
    17551755    // check eax is an object of the right StructureID.
    17561756    m_jit.testl_i32r(JSImmediate::TagMask, X86::eax);
    1757     MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
     1757    X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
    17581758    m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), X86::eax);
    1759     MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
     1759    X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
    17601760
    17611761    // checks out okay! - putDirectOffset
     
    17671767    ASSERT(code);
    17681768   
    1769     MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));
    1770     MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));
     1769    X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));
     1770    X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_put_by_id_fail));
    17711771
    17721772    m_codeBlock->structureIDAccessStubs.append(code);
     
    17791779    // Check eax is an array
    17801780    m_jit.testl_i32r(JSImmediate::TagMask, X86::eax);
    1781     MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
     1781    X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
    17821782    m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), X86::eax);
    1783     MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
     1783    X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
    17841784
    17851785    // Checks out okay! - get the length from the storage
     
    17881788
    17891789    m_jit.addl_rr(X86::eax, X86::eax);
    1790     MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();
     1790    X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();
    17911791    m_jit.addl_i8r(1, X86::eax);
    17921792   
     
    17961796    ASSERT(code);
    17971797
    1798     MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1799     MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1800     MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1798    X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1799    X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1800    X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    18011801   
    18021802    return code;
     
    18071807    // Check eax is a string
    18081808    m_jit.testl_i32r(JSImmediate::TagMask, X86::eax);
    1809     MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
     1809    X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();
    18101810    m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsStringVptr), X86::eax);
    1811     MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
     1811    X86Assembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne();
    18121812
    18131813    // Checks out okay! - get the length from the Ustring.
     
    18161816
    18171817    m_jit.addl_rr(X86::eax, X86::eax);
    1818     MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();
     1818    X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();
    18191819    m_jit.addl_i8r(1, X86::eax);
    18201820   
     
    18241824    ASSERT(code);
    18251825
    1826     MacroAssembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1827     MacroAssembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    1828     MacroAssembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1826    X86Assembler::link(code, failureCases1, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1827    X86Assembler::link(code, failureCases2, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
     1828    X86Assembler::link(code, failureCases3, reinterpret_cast<void*>(Machine::cti_op_get_by_id_fail));
    18291829
    18301830    return code;
     
    18411841    }
    18421842
    1843     MacroAssembler jit(exec->machine()->jitCodeBuffer());
     1843    X86Assembler jit(exec->machine()->jitCodeBuffer());
    18441844    WRECParser parser(pattern, ignoreCase, multiline, jit);
    18451845   
  • trunk/JavaScriptCore/VM/CTI.h

    r36307 r36311  
    3333#include "RegisterFile.h"
    3434#include "RegisterFile.h"
    35 #include <masm/MacroAssembler.h>
     35#include <masm/X86Assembler.h>
    3636#include <profiler/Profiler.h>
    3737#include <wtf/AlwaysInline.h>
     
    115115
    116116    struct CallRecord {
    117         MacroAssembler::JmpSrc from;
     117        X86Assembler::JmpSrc from;
    118118        void* to;
    119119        unsigned opcodeIndex;
     
    123123        }
    124124
    125         CallRecord(MacroAssembler::JmpSrc f, CTIHelper_j t, unsigned i)
    126             : from(f)
    127             , to((void*)t)
    128             , opcodeIndex(i)
    129         {
    130         }
    131 
    132         CallRecord(MacroAssembler::JmpSrc f, CTIHelper_p t, unsigned i)
    133             : from(f)
    134             , to((void*)t)
    135             , opcodeIndex(i)
    136         {
    137         }
    138        
    139         CallRecord(MacroAssembler::JmpSrc f, CTIHelper_v t, unsigned i)
    140             : from(f)
    141             , to((void*)t)
    142             , opcodeIndex(i)
    143         {
    144         }
    145        
    146         CallRecord(MacroAssembler::JmpSrc f, CTIHelper_s t, unsigned i)
    147             : from(f)
    148             , to((void*)t)
    149             , opcodeIndex(i)
    150         {
    151         }
    152        
    153         CallRecord(MacroAssembler::JmpSrc f, CTIHelper_b t, unsigned i)
     125        CallRecord(X86Assembler::JmpSrc f, CTIHelper_j t, unsigned i)
     126            : from(f)
     127            , to((void*)t)
     128            , opcodeIndex(i)
     129        {
     130        }
     131
     132        CallRecord(X86Assembler::JmpSrc f, CTIHelper_p t, unsigned i)
     133            : from(f)
     134            , to((void*)t)
     135            , opcodeIndex(i)
     136        {
     137        }
     138       
     139        CallRecord(X86Assembler::JmpSrc f, CTIHelper_v t, unsigned i)
     140            : from(f)
     141            , to((void*)t)
     142            , opcodeIndex(i)
     143        {
     144        }
     145       
     146        CallRecord(X86Assembler::JmpSrc f, CTIHelper_s t, unsigned i)
     147            : from(f)
     148            , to((void*)t)
     149            , opcodeIndex(i)
     150        {
     151        }
     152       
     153        CallRecord(X86Assembler::JmpSrc f, CTIHelper_b t, unsigned i)
    154154            : from(f)
    155155            , to((void*)t)
     
    160160
    161161    struct JmpTable {
    162         MacroAssembler::JmpSrc from;
     162        X86Assembler::JmpSrc from;
    163163        unsigned to;
    164164       
    165         JmpTable(MacroAssembler::JmpSrc f, unsigned t)
     165        JmpTable(X86Assembler::JmpSrc f, unsigned t)
    166166            : from(f)
    167167            , to(t)
     
    171171
    172172    struct SlowCaseEntry {
    173         MacroAssembler::JmpSrc from;
     173        X86Assembler::JmpSrc from;
    174174        unsigned to;
    175175        unsigned hint;
    176176       
    177         SlowCaseEntry(MacroAssembler::JmpSrc f, unsigned t, unsigned h = 0)
     177        SlowCaseEntry(X86Assembler::JmpSrc f, unsigned t, unsigned h = 0)
    178178            : from(f)
    179179            , to(t)
     
    298298        void compileOpCall(Instruction* instruction, unsigned i, CompileOpCallType type = OpCallNormal);
    299299
    300         void emitGetArg(unsigned src, MacroAssembler::RegisterID dst);
    301         void emitGetPutArg(unsigned src, unsigned offset, MacroAssembler::RegisterID scratch);
    302         void emitPutArg(MacroAssembler::RegisterID src, unsigned offset);
     300        void emitGetArg(unsigned src, X86Assembler::RegisterID dst);
     301        void emitGetPutArg(unsigned src, unsigned offset, X86Assembler::RegisterID scratch);
     302        void emitPutArg(X86Assembler::RegisterID src, unsigned offset);
    303303        void emitPutArgConstant(unsigned value, unsigned offset);
    304         void emitPutResult(unsigned dst, MacroAssembler::RegisterID from = X86::eax);
    305 
    306         void emitPutCTIParam(MacroAssembler::RegisterID from, unsigned name);
    307         void emitGetCTIParam(unsigned name, MacroAssembler::RegisterID to);
    308 
    309         void emitPutToCallFrameHeader(MacroAssembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry);
    310         void emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, MacroAssembler::RegisterID to);
     304        void emitPutResult(unsigned dst, X86Assembler::RegisterID from = X86::eax);
     305
     306        void emitPutCTIParam(X86Assembler::RegisterID from, unsigned name);
     307        void emitGetCTIParam(unsigned name, X86Assembler::RegisterID to);
     308
     309        void emitPutToCallFrameHeader(X86Assembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry);
     310        void emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, X86Assembler::RegisterID to);
    311311
    312312        JSValue* getConstantImmediateNumericArg(unsigned src);
    313313        unsigned getDeTaggedConstantImmediate(JSValue* imm);
    314314
    315         void emitJumpSlowCaseIfNotImm(MacroAssembler::RegisterID, unsigned opcodeIndex);
    316         void emitJumpSlowCaseIfNotImms(MacroAssembler::RegisterID, MacroAssembler::RegisterID, unsigned opcodeIndex);
    317 
    318         void emitFastArithDeTagImmediate(MacroAssembler::RegisterID);
    319         void emitFastArithReTagImmediate(MacroAssembler::RegisterID);
    320         void emitFastArithPotentiallyReTagImmediate(MacroAssembler::RegisterID);
    321         void emitFastArithImmToInt(MacroAssembler::RegisterID);
    322         void emitFastArithIntToImmOrSlowCase(MacroAssembler::RegisterID, unsigned opcodeIndex);
    323         void emitFastArithIntToImmNoCheck(MacroAssembler::RegisterID);
     315        void emitJumpSlowCaseIfNotImm(X86Assembler::RegisterID, unsigned opcodeIndex);
     316        void emitJumpSlowCaseIfNotImms(X86Assembler::RegisterID, X86Assembler::RegisterID, unsigned opcodeIndex);
     317
     318        void emitFastArithDeTagImmediate(X86Assembler::RegisterID);
     319        void emitFastArithReTagImmediate(X86Assembler::RegisterID);
     320        void emitFastArithPotentiallyReTagImmediate(X86Assembler::RegisterID);
     321        void emitFastArithImmToInt(X86Assembler::RegisterID);
     322        void emitFastArithIntToImmOrSlowCase(X86Assembler::RegisterID, unsigned opcodeIndex);
     323        void emitFastArithIntToImmNoCheck(X86Assembler::RegisterID);
    324324
    325325        void emitDebugExceptionCheck();
     
    336336#endif
    337337
    338         MacroAssembler m_jit;
     338        X86Assembler m_jit;
    339339        Machine* m_machine;
    340340        ExecState* m_exec;
     
    342342
    343343        Vector<CallRecord> m_calls;
    344         Vector<MacroAssembler::JmpDst> m_labels;
     344        Vector<X86Assembler::JmpDst> m_labels;
    345345        Vector<JmpTable> m_jmpTable;
    346346
    347347        struct JSRInfo {
    348             MacroAssembler::JmpDst addrPosition;
    349             MacroAssembler::JmpDst target;
    350 
    351             JSRInfo(const MacroAssembler::JmpDst& storeLocation, const MacroAssembler::JmpDst& targetLocation)
     348            X86Assembler::JmpDst addrPosition;
     349            X86Assembler::JmpDst target;
     350
     351            JSRInfo(const X86Assembler::JmpDst& storeLocation, const X86Assembler::JmpDst& targetLocation)
    352352                : addrPosition(storeLocation)
    353353                , target(targetLocation)
  • trunk/JavaScriptCore/masm/X86Assembler.h

    r36307 r36311  
    779779    }
    780780
     781#if COMPILER(MSVC)
     782    void emitConvertToFastCall()
     783    {
     784        movl_mr(4, X86::esp, X86::eax);
     785        movl_mr(8, X86::esp, X86::edx);
     786        movl_mr(12, X86::esp, X86::ecx);
     787    }
     788
     789    void emitRestoreArgumentReference()
     790    {
     791        movl_rm(X86::esp, 0, X86::esp);
     792    }
     793#else
     794    void emitConvertToFastCall() {};
     795    void emitRestoreArgumentReference() {};
     796#endif
     797
    781798private:
    782799    void emitModRm_rr(RegisterID reg, RegisterID rm)
  • trunk/JavaScriptCore/wrec/WREC.h

    r36307 r36311  
    3030
    3131#include "ustring.h"
    32 #include <masm/MacroAssembler.h>
     32#include <masm/X86Assembler.h>
    3333#include <wtf/ASCIICType.h>
    3434#include <wtf/Vector.h>
     35
     36#if COMPILER(GCC)
     37#define WREC_CALL __attribute__ ((regparm (3)))
     38#else
     39#define WREC_CALL
     40#endif
    3541
    3642namespace JSC {
     
    7379    class WRECParser;
    7480
    75     typedef Vector<MacroAssembler::JmpSrc> JmpSrcVector;
     81    typedef Vector<X86Assembler::JmpSrc> JmpSrcVector;
    7682
    7783    class WRECGenerator {
    7884    public:
    79         WRECGenerator(WRECParser& parser, MacroAssembler& jit)
     85        WRECGenerator(WRECParser& parser, X86Assembler& jit)
    8086            : m_parser(parser)
    8187            , m_jit(jit)
     
    8389        }
    8490
    85         typedef MacroAssembler::JmpSrc JmpSrc;
    86         typedef MacroAssembler::JmpDst JmpDst;
     91        typedef X86Assembler::JmpSrc JmpSrc;
     92        typedef X86Assembler::JmpDst JmpDst;
    8793
    8894        // these regs setup by the params
     
    123129    private:
    124130        WRECParser& m_parser;
    125         MacroAssembler& m_jit;
     131        X86Assembler& m_jit;
    126132    };
    127133
     
    142148        } m_err;
    143149
    144         WRECParser(const UString& pattern, bool ignoreCase, bool multiline, MacroAssembler& jit)
     150        WRECParser(const UString& pattern, bool ignoreCase, bool multiline, X86Assembler& jit)
    145151            : m_ignoreCase(ignoreCase)
    146152            , m_multiline(multiline)
Note: See TracChangeset for help on using the changeset viewer.