Changeset 36311 in webkit for trunk/JavaScriptCore
- Timestamp:
- Sep 9, 2008, 8:22:04 PM (17 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 2 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r36310 r36311 1 2008-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 1 56 2008-09-09 Sam Weinig <[email protected]> 2 57 -
trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
r36261 r36311 1350 1350 > 1351 1351 </File> 1352 <File1353 RelativePath="..\..\masm\MacroAssembler.h"1354 >1355 </File>1356 <File1357 RelativePath="..\..\masm\MacroAssemblerWin.cpp"1358 >1359 </File>1360 1352 </Filter> 1361 1353 <Filter -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r36292 r36311 115 115 A72701B90DADE94900E548D7 /* ExceptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A72701B30DADE94900E548D7 /* ExceptionHelpers.h */; }; 116 116 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, ); }; };118 117 A7C31DAA0DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; }; 119 118 BC02E90D0E1839DB000F9297 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; }; … … 640 639 A727FF650DA3053B00E548D7 /* JSPropertyNameIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSPropertyNameIterator.h; path = VM/JSPropertyNameIterator.h; sourceTree = "<group>"; }; 641 640 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>"; };643 641 A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SegmentedVector.h; path = VM/SegmentedVector.h; sourceTree = "<group>"; }; 644 642 A7E42C180E3938830065A544 /* JSStaticScopeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStaticScopeObject.h; sourceTree = "<group>"; }; … … 1317 1315 isa = PBXGroup; 1318 1316 children = ( 1319 A763F79C0E70E0FE00BC151E /* MacroAssembler.h */,1320 1317 869081400E640C89000D36ED /* X86Assembler.h */, 1321 1318 ); … … 1589 1586 933040040E6A749400786E6A /* SmallStrings.h in Headers */, 1590 1587 BCDE3AB80E6C82F5001453A7 /* StructureID.h in Headers */, 1591 A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */,1592 1588 147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */, 1593 1589 147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */, -
trunk/JavaScriptCore/VM/CTI.cpp
r36307 r36311 108 108 109 109 // 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)110 ALWAYS_INLINE void CTI::emitGetArg(unsigned src, X86Assembler::RegisterID dst) 111 111 { 112 112 // TODO: we want to reuse values that are already in registers if we can - add a register allocator! … … 119 119 120 120 // 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)121 ALWAYS_INLINE void CTI::emitGetPutArg(unsigned src, unsigned offset, X86Assembler::RegisterID scratch) 122 122 { 123 123 if (src < m_codeBlock->constantRegisters.size()) { … … 131 131 132 132 // 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)133 ALWAYS_INLINE void CTI::emitPutArg(X86Assembler::RegisterID src, unsigned offset) 134 134 { 135 135 m_jit.movl_rm(src, offset + sizeof(void*), X86::esp); … … 150 150 } 151 151 152 ALWAYS_INLINE void CTI::emitPutCTIParam( MacroAssembler::RegisterID from, unsigned name)152 ALWAYS_INLINE void CTI::emitPutCTIParam(X86Assembler::RegisterID from, unsigned name) 153 153 { 154 154 m_jit.movl_rm(from, name * sizeof(void*), X86::esp); 155 155 } 156 156 157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, MacroAssembler::RegisterID to)157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, X86Assembler::RegisterID to) 158 158 { 159 159 m_jit.movl_mr(name * sizeof(void*), X86::esp, to); 160 160 } 161 161 162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader( MacroAssembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry)162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader(X86Assembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry) 163 163 { 164 164 m_jit.movl_rm(from, -((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi); 165 165 } 166 166 167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, MacroAssembler::RegisterID to)167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, X86Assembler::RegisterID to) 168 168 { 169 169 m_jit.movl_mr(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), X86::edi, to); 170 170 } 171 171 172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, MacroAssembler::RegisterID from)172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, X86Assembler::RegisterID from) 173 173 { 174 174 m_jit.movl_rm(from, dst * sizeof(Register), X86::edi); … … 202 202 emitGetCTIParam(CTI_ARGS_exec, X86::ecx); 203 203 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(); 205 205 m_jit.emitInt3(); 206 206 m_jit.link(noException, m_jit.label()); … … 303 303 } 304 304 305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm( MacroAssembler::RegisterID reg, unsigned opcodeIndex)305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm(X86Assembler::RegisterID reg, unsigned opcodeIndex) 306 306 { 307 307 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, reg); … … 309 309 } 310 310 311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms( MacroAssembler::RegisterID reg1, MacroAssembler::RegisterID reg2, unsigned opcodeIndex)311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms(X86Assembler::RegisterID reg1, X86Assembler::RegisterID reg2, unsigned opcodeIndex) 312 312 { 313 313 m_jit.movl_rr(reg1, X86::ecx); … … 322 322 } 323 323 324 ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate( MacroAssembler::RegisterID reg)324 ALWAYS_INLINE void CTI::emitFastArithDeTagImmediate(X86Assembler::RegisterID reg) 325 325 { 326 326 // op_mod relies on this being a sub - setting zf if result is 0. … … 328 328 } 329 329 330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate( MacroAssembler::RegisterID reg)330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate(X86Assembler::RegisterID reg) 331 331 { 332 332 m_jit.addl_i8r(JSImmediate::TagBitTypeInteger, reg); 333 333 } 334 334 335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate( MacroAssembler::RegisterID reg)335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate(X86Assembler::RegisterID reg) 336 336 { 337 337 m_jit.orl_rr(JSImmediate::TagBitTypeInteger, reg); 338 338 } 339 339 340 ALWAYS_INLINE void CTI::emitFastArithImmToInt( MacroAssembler::RegisterID reg)340 ALWAYS_INLINE void CTI::emitFastArithImmToInt(X86Assembler::RegisterID reg) 341 341 { 342 342 m_jit.sarl_i8r(1, reg); 343 343 } 344 344 345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase( MacroAssembler::RegisterID reg, unsigned opcodeIndex)345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase(X86Assembler::RegisterID reg, unsigned opcodeIndex) 346 346 { 347 347 m_jit.addl_rr(reg, reg); … … 350 350 } 351 351 352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck( MacroAssembler::RegisterID reg)352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck(X86Assembler::RegisterID reg) 353 353 { 354 354 m_jit.addl_rr(reg, reg); … … 397 397 } 398 398 399 MacroAssembler::JmpSrc wasEval;399 X86Assembler::JmpSrc wasEval; 400 400 if (type == OpCallEval) { 401 401 emitGetPutArg(instruction[i + 2].u.operand, 0, X86::ecx); … … 418 418 // Fast check for JS function. 419 419 m_jit.testl_i32r(JSImmediate::TagMask, X86::ecx); 420 MacroAssembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne();420 X86Assembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne(); 421 421 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(); 423 423 m_jit.link(isNotObject, m_jit.label()); 424 424 … … 427 427 emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r 428 428 429 MacroAssembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp();429 X86Assembler::JmpSrc wasNotJSFunction = m_jit.emitUnlinkedJmp(); 430 430 m_jit.link(isJSFunction, m_jit.label()); 431 431 … … 435 435 emitGetCTIParam(CTI_ARGS_r, X86::edi); // edi := r 436 436 437 MacroAssembler::JmpDst end = m_jit.label();437 X86Assembler::JmpDst end = m_jit.label(); 438 438 m_jit.link(wasNotJSFunction, end); 439 439 if (type == OpCallEval) … … 446 446 { 447 447 m_jit.subl_i8r(1, X86::esi); 448 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne();448 X86Assembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 449 449 emitCall(opcodeIndex, Machine::cti_timeout_check); 450 450 … … 755 755 756 756 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(); 758 758 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 759 759 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); … … 839 839 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 840 840 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 841 MacroAssembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne();841 X86Assembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne(); 842 842 843 843 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), X86::eax); … … 873 873 int target = instruction[i + 2].u.operand; 874 874 m_jit.movl_i32m(0, sizeof(Register) * retAddrDst, X86::edi); 875 MacroAssembler::JmpDst addrPosition = m_jit.label();875 X86Assembler::JmpDst addrPosition = m_jit.label(); 876 876 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 2 + target)); 877 MacroAssembler::JmpDst sretTarget = m_jit.label();877 X86Assembler::JmpDst sretTarget = m_jit.label(); 878 878 m_jsrSites.append(JSRInfo(addrPosition, sretTarget)); 879 879 i += 3; … … 982 982 983 983 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(); 985 985 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, X86::eax); 986 986 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); … … 1064 1064 emitCall(i, Machine::cti_op_next_pname); 1065 1065 m_jit.testl_rr(X86::eax, X86::eax); 1066 MacroAssembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe();1066 X86Assembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe(); 1067 1067 emitPutResult(instruction[i + 1].u.operand); 1068 1068 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 3 + target)); … … 1284 1284 JSValue* value = m_codeBlock->constantRegisters[src2].jsValue(m_exec); 1285 1285 if (JSImmediate::isNumber(value)) { 1286 MacroAssembler::JmpSrc notImm = iter->from;1286 X86Assembler::JmpSrc notImm = iter->from; 1287 1287 m_jit.link((++iter)->from, m_jit.label()); 1288 1288 m_jit.subl_i32r(getDeTaggedConstantImmediate(value), X86::eax); … … 1299 1299 ASSERT(!(static_cast<unsigned>(instruction[i + 2].u.operand) < m_codeBlock->constantRegisters.size())); 1300 1300 1301 MacroAssembler::JmpSrc notImm = iter->from;1301 X86Assembler::JmpSrc notImm = iter->from; 1302 1302 m_jit.link((++iter)->from, m_jit.label()); 1303 1303 m_jit.subl_rr(X86::edx, X86::eax); … … 1312 1312 } 1313 1313 case op_get_by_val: { 1314 MacroAssembler::JmpSrc notImm = iter->from;1314 X86Assembler::JmpSrc notImm = iter->from; 1315 1315 m_jit.link((++iter)->from, m_jit.label()); 1316 1316 m_jit.link((++iter)->from, m_jit.label()); … … 1326 1326 } 1327 1327 case op_sub: { 1328 MacroAssembler::JmpSrc notImm = iter->from;1328 X86Assembler::JmpSrc notImm = iter->from; 1329 1329 m_jit.link((++iter)->from, m_jit.label()); 1330 1330 m_jit.addl_rr(X86::edx, X86::eax); … … 1348 1348 } 1349 1349 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; 1352 1352 m_jit.link((++iter)->from, m_jit.label()); 1353 1353 emitGetArg(instruction[i + 2].u.operand, X86::eax); … … 1388 1388 case op_pre_inc: { 1389 1389 unsigned srcDst = instruction[i + 1].u.operand; 1390 MacroAssembler::JmpSrc notImm = iter->from;1390 X86Assembler::JmpSrc notImm = iter->from; 1391 1391 m_jit.link((++iter)->from, m_jit.label()); 1392 1392 m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); … … 1399 1399 } 1400 1400 case op_put_by_val: { 1401 MacroAssembler::JmpSrc notImm = iter->from;1401 X86Assembler::JmpSrc notImm = iter->from; 1402 1402 m_jit.link((++iter)->from, m_jit.label()); 1403 1403 m_jit.link((++iter)->from, m_jit.label()); … … 1426 1426 case op_pre_dec: { 1427 1427 unsigned srcDst = instruction[i + 1].u.operand; 1428 MacroAssembler::JmpSrc notImm = iter->from;1428 X86Assembler::JmpSrc notImm = iter->from; 1429 1429 m_jit.link((++iter)->from, m_jit.label()); 1430 1430 m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), X86::eax); … … 1564 1564 } 1565 1565 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; 1568 1568 m_jit.link((++iter)->from, m_jit.label()); 1569 1569 emitFastArithReTagImmediate(X86::eax); … … 1638 1638 // m_codeBlock->ctiReturnAddressVPCMap.grow(m_calls.size()); 1639 1639 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); 1641 1641 m_codeBlock->ctiReturnAddressVPCMap.add(m_jit.getRelocatedAddress(code, iter->from), iter->opcodeIndex); 1642 1642 } … … 1644 1644 // Link absolute addresses for jsr 1645 1645 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); 1647 1647 1648 1648 m_codeBlock->ctiCode = code; … … 1653 1653 // Check eax is an object of the right StructureID. 1654 1654 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1655 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1655 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1656 1656 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(); 1658 1658 1659 1659 // Checks out okay! - getDirectOffset … … 1665 1665 ASSERT(code); 1666 1666 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)); 1669 1669 1670 1670 m_codeBlock->structureIDAccessStubs.append(code); … … 1683 1683 // check eax is an object of the right StructureID. 1684 1684 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1685 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1685 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1686 1686 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(); 1688 1688 1689 1689 // Check the prototype object's StructureID had not changed. 1690 1690 StructureID** protoStructureIDAddress = &(protoObject->m_structureID); 1691 1691 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(); 1693 1693 1694 1694 // Checks out okay! - getDirectOffset … … 1700 1700 ASSERT(code); 1701 1701 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)); 1705 1705 1706 1706 m_codeBlock->structureIDAccessStubs.append(code); … … 1713 1713 ASSERT(count); 1714 1714 1715 Vector< MacroAssembler::JmpSrc> bucketsOfFail;1715 Vector<X86Assembler::JmpSrc> bucketsOfFail; 1716 1716 1717 1717 // Check eax is an object of the right StructureID. … … 1746 1746 1747 1747 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)); 1749 1749 m_codeBlock->structureIDAccessStubs.append(code); 1750 1750 return code; … … 1755 1755 // check eax is an object of the right StructureID. 1756 1756 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1757 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1757 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1758 1758 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(); 1760 1760 1761 1761 // checks out okay! - putDirectOffset … … 1767 1767 ASSERT(code); 1768 1768 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)); 1771 1771 1772 1772 m_codeBlock->structureIDAccessStubs.append(code); … … 1779 1779 // Check eax is an array 1780 1780 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1781 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1781 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1782 1782 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(); 1784 1784 1785 1785 // Checks out okay! - get the length from the storage … … 1788 1788 1789 1789 m_jit.addl_rr(X86::eax, X86::eax); 1790 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();1790 X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1791 1791 m_jit.addl_i8r(1, X86::eax); 1792 1792 … … 1796 1796 ASSERT(code); 1797 1797 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)); 1801 1801 1802 1802 return code; … … 1807 1807 // Check eax is a string 1808 1808 m_jit.testl_i32r(JSImmediate::TagMask, X86::eax); 1809 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne();1809 X86Assembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1810 1810 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(); 1812 1812 1813 1813 // Checks out okay! - get the length from the Ustring. … … 1816 1816 1817 1817 m_jit.addl_rr(X86::eax, X86::eax); 1818 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo();1818 X86Assembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1819 1819 m_jit.addl_i8r(1, X86::eax); 1820 1820 … … 1824 1824 ASSERT(code); 1825 1825 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)); 1829 1829 1830 1830 return code; … … 1841 1841 } 1842 1842 1843 MacroAssembler jit(exec->machine()->jitCodeBuffer());1843 X86Assembler jit(exec->machine()->jitCodeBuffer()); 1844 1844 WRECParser parser(pattern, ignoreCase, multiline, jit); 1845 1845 -
trunk/JavaScriptCore/VM/CTI.h
r36307 r36311 33 33 #include "RegisterFile.h" 34 34 #include "RegisterFile.h" 35 #include <masm/ MacroAssembler.h>35 #include <masm/X86Assembler.h> 36 36 #include <profiler/Profiler.h> 37 37 #include <wtf/AlwaysInline.h> … … 115 115 116 116 struct CallRecord { 117 MacroAssembler::JmpSrc from;117 X86Assembler::JmpSrc from; 118 118 void* to; 119 119 unsigned opcodeIndex; … … 123 123 } 124 124 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) 154 154 : from(f) 155 155 , to((void*)t) … … 160 160 161 161 struct JmpTable { 162 MacroAssembler::JmpSrc from;162 X86Assembler::JmpSrc from; 163 163 unsigned to; 164 164 165 JmpTable( MacroAssembler::JmpSrc f, unsigned t)165 JmpTable(X86Assembler::JmpSrc f, unsigned t) 166 166 : from(f) 167 167 , to(t) … … 171 171 172 172 struct SlowCaseEntry { 173 MacroAssembler::JmpSrc from;173 X86Assembler::JmpSrc from; 174 174 unsigned to; 175 175 unsigned hint; 176 176 177 SlowCaseEntry( MacroAssembler::JmpSrc f, unsigned t, unsigned h = 0)177 SlowCaseEntry(X86Assembler::JmpSrc f, unsigned t, unsigned h = 0) 178 178 : from(f) 179 179 , to(t) … … 298 298 void compileOpCall(Instruction* instruction, unsigned i, CompileOpCallType type = OpCallNormal); 299 299 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); 303 303 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); 311 311 312 312 JSValue* getConstantImmediateNumericArg(unsigned src); 313 313 unsigned getDeTaggedConstantImmediate(JSValue* imm); 314 314 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); 324 324 325 325 void emitDebugExceptionCheck(); … … 336 336 #endif 337 337 338 MacroAssembler m_jit;338 X86Assembler m_jit; 339 339 Machine* m_machine; 340 340 ExecState* m_exec; … … 342 342 343 343 Vector<CallRecord> m_calls; 344 Vector< MacroAssembler::JmpDst> m_labels;344 Vector<X86Assembler::JmpDst> m_labels; 345 345 Vector<JmpTable> m_jmpTable; 346 346 347 347 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) 352 352 : addrPosition(storeLocation) 353 353 , target(targetLocation) -
trunk/JavaScriptCore/masm/X86Assembler.h
r36307 r36311 779 779 } 780 780 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 781 798 private: 782 799 void emitModRm_rr(RegisterID reg, RegisterID rm) -
trunk/JavaScriptCore/wrec/WREC.h
r36307 r36311 30 30 31 31 #include "ustring.h" 32 #include <masm/ MacroAssembler.h>32 #include <masm/X86Assembler.h> 33 33 #include <wtf/ASCIICType.h> 34 34 #include <wtf/Vector.h> 35 36 #if COMPILER(GCC) 37 #define WREC_CALL __attribute__ ((regparm (3))) 38 #else 39 #define WREC_CALL 40 #endif 35 41 36 42 namespace JSC { … … 73 79 class WRECParser; 74 80 75 typedef Vector< MacroAssembler::JmpSrc> JmpSrcVector;81 typedef Vector<X86Assembler::JmpSrc> JmpSrcVector; 76 82 77 83 class WRECGenerator { 78 84 public: 79 WRECGenerator(WRECParser& parser, MacroAssembler& jit)85 WRECGenerator(WRECParser& parser, X86Assembler& jit) 80 86 : m_parser(parser) 81 87 , m_jit(jit) … … 83 89 } 84 90 85 typedef MacroAssembler::JmpSrc JmpSrc;86 typedef MacroAssembler::JmpDst JmpDst;91 typedef X86Assembler::JmpSrc JmpSrc; 92 typedef X86Assembler::JmpDst JmpDst; 87 93 88 94 // these regs setup by the params … … 123 129 private: 124 130 WRECParser& m_parser; 125 MacroAssembler& m_jit;131 X86Assembler& m_jit; 126 132 }; 127 133 … … 142 148 } m_err; 143 149 144 WRECParser(const UString& pattern, bool ignoreCase, bool multiline, MacroAssembler& jit)150 WRECParser(const UString& pattern, bool ignoreCase, bool multiline, X86Assembler& jit) 145 151 : m_ignoreCase(ignoreCase) 146 152 , m_multiline(multiline)
Note:
See TracChangeset
for help on using the changeset viewer.