Changeset 36282 in webkit for trunk/JavaScriptCore/VM/CTI.cpp
- Timestamp:
- Sep 8, 2008, 9:43:25 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/CTI.cpp
r36279 r36282 443 443 } 444 444 445 void CTI::emitSlowScriptCheck(unsigned opcodeIndex) 446 { 447 m_jit.emitSubl_i8r(1, MacroAssembler::esi); 448 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 449 emitCall(opcodeIndex, Machine::cti_timeout_check); 450 451 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 452 m_jit.emitMovl_mr(OBJECT_OFFSET(ExecState, m_globalData), MacroAssembler::ecx, MacroAssembler::ecx); 453 m_jit.emitMovl_mr(OBJECT_OFFSET(JSGlobalData, machine), MacroAssembler::ecx, MacroAssembler::ecx); 454 m_jit.emitMovl_mr(OBJECT_OFFSET(Machine, m_ticksUntilNextTimeoutCheck), MacroAssembler::ecx, MacroAssembler::esi); 455 m_jit.link(skipTimeout, m_jit.label()); 456 } 457 445 458 void CTI::privateCompileMainPass() 446 459 { … … 530 543 } 531 544 case op_loop: { 532 m_jit.emitSubl_i8r(1, MacroAssembler::esi); 533 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 534 emitCall(i, Machine::cti_timeout_check); 535 536 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 537 m_jit.emitMovl_mr(OBJECT_OFFSET(ExecState, m_globalData) + OBJECT_OFFSET(JSGlobalData, machine), MacroAssembler::ecx, MacroAssembler::ecx); 538 m_jit.emitMovl_mr(OBJECT_OFFSET(Machine, m_ticksUntilNextTimeoutCheck), MacroAssembler::ecx, MacroAssembler::esi); 539 m_jit.link(skipTimeout, m_jit.label()); 545 emitSlowScriptCheck(i); 540 546 541 547 unsigned target = instruction[i + 1].u.operand; … … 545 551 } 546 552 case op_loop_if_less: { 547 m_jit.emitSubl_i8r(1, MacroAssembler::esi); 548 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 549 emitCall(i, Machine::cti_timeout_check); 550 551 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 552 m_jit.emitMovl_mr(OBJECT_OFFSET(ExecState, m_globalData) + OBJECT_OFFSET(JSGlobalData, machine), MacroAssembler::ecx, MacroAssembler::ecx); 553 m_jit.emitMovl_mr(OBJECT_OFFSET(Machine, m_ticksUntilNextTimeoutCheck), MacroAssembler::ecx, MacroAssembler::esi); 554 m_jit.link(skipTimeout, m_jit.label()); 553 emitSlowScriptCheck(i); 555 554 556 555 unsigned target = instruction[i + 3].u.operand; … … 750 749 CTI_COMPILE_BINARY_OP(op_lesseq) 751 750 case op_loop_if_true: { 752 m_jit.emitSubl_i8r(1, MacroAssembler::esi); 753 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 754 emitCall(i, Machine::cti_timeout_check); 755 756 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 757 m_jit.emitMovl_mr(OBJECT_OFFSET(ExecState, m_globalData) + OBJECT_OFFSET(JSGlobalData, machine), MacroAssembler::ecx, MacroAssembler::ecx); 758 m_jit.emitMovl_mr(OBJECT_OFFSET(Machine, m_ticksUntilNextTimeoutCheck), MacroAssembler::ecx, MacroAssembler::esi); 759 m_jit.link(skipTimeout, m_jit.label()); 751 emitSlowScriptCheck(i); 760 752 761 753 unsigned target = instruction[i + 2].u.operand; … … 1371 1363 } 1372 1364 case op_loop_if_less: { 1365 emitSlowScriptCheck(i); 1366 1373 1367 unsigned target = instruction[i + 3].u.operand; 1374 1368 JSValue* src2imm = getConstantImmediateNumericArg(instruction[i + 2].u.operand); … … 1419 1413 } 1420 1414 case op_loop_if_true: { 1415 emitSlowScriptCheck(i); 1416 1421 1417 m_jit.link(iter->from, m_jit.label()); 1422 1418 emitPutArg(MacroAssembler::eax, 0);
Note:
See TracChangeset
for help on using the changeset viewer.