Changeset 36301 in webkit for trunk/JavaScriptCore/VM/CTI.cpp
- Timestamp:
- Sep 9, 2008, 3:35:29 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/VM/CTI.cpp
r36300 r36301 113 113 if (src < m_codeBlock->constantRegisters.size()) { 114 114 JSValue* js = m_codeBlock->constantRegisters[src].jsValue(m_exec); 115 m_jit. emitMovl_i32r(reinterpret_cast<unsigned>(js), dst);115 m_jit.movl_i32r(reinterpret_cast<unsigned>(js), dst); 116 116 } else 117 m_jit. emitMovl_mr(src * sizeof(Register), MacroAssembler::edi, dst);117 m_jit.movl_mr(src * sizeof(Register), MacroAssembler::edi, dst); 118 118 } 119 119 … … 123 123 if (src < m_codeBlock->constantRegisters.size()) { 124 124 JSValue* js = m_codeBlock->constantRegisters[src].jsValue(m_exec); 125 m_jit. emitMovl_i32m(reinterpret_cast<unsigned>(js), offset + sizeof(void*), MacroAssembler::esp);125 m_jit.movl_i32m(reinterpret_cast<unsigned>(js), offset + sizeof(void*), MacroAssembler::esp); 126 126 } else { 127 m_jit. emitMovl_mr(src * sizeof(Register), MacroAssembler::edi, scratch);128 m_jit. emitMovl_rm(scratch, offset + sizeof(void*), MacroAssembler::esp);127 m_jit.movl_mr(src * sizeof(Register), MacroAssembler::edi, scratch); 128 m_jit.movl_rm(scratch, offset + sizeof(void*), MacroAssembler::esp); 129 129 } 130 130 } … … 133 133 ALWAYS_INLINE void CTI::emitPutArg(MacroAssembler::RegisterID src, unsigned offset) 134 134 { 135 m_jit. emitMovl_rm(src, offset + sizeof(void*), MacroAssembler::esp);135 m_jit.movl_rm(src, offset + sizeof(void*), MacroAssembler::esp); 136 136 } 137 137 138 138 ALWAYS_INLINE void CTI::emitPutArgConstant(unsigned value, unsigned offset) 139 139 { 140 m_jit. emitMovl_i32m(value, offset + sizeof(void*), MacroAssembler::esp);140 m_jit.movl_i32m(value, offset + sizeof(void*), MacroAssembler::esp); 141 141 } 142 142 … … 152 152 ALWAYS_INLINE void CTI::emitPutCTIParam(MacroAssembler::RegisterID from, unsigned name) 153 153 { 154 m_jit. emitMovl_rm(from, name * sizeof(void*), MacroAssembler::esp);154 m_jit.movl_rm(from, name * sizeof(void*), MacroAssembler::esp); 155 155 } 156 156 157 157 ALWAYS_INLINE void CTI::emitGetCTIParam(unsigned name, MacroAssembler::RegisterID to) 158 158 { 159 m_jit. emitMovl_mr(name * sizeof(void*), MacroAssembler::esp, to);159 m_jit.movl_mr(name * sizeof(void*), MacroAssembler::esp, to); 160 160 } 161 161 162 162 ALWAYS_INLINE void CTI::emitPutToCallFrameHeader(MacroAssembler::RegisterID from, RegisterFile::CallFrameHeaderEntry entry) 163 163 { 164 m_jit. emitMovl_rm(from, -((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), MacroAssembler::edi);164 m_jit.movl_rm(from, -((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), MacroAssembler::edi); 165 165 } 166 166 167 167 ALWAYS_INLINE void CTI::emitGetFromCallFrameHeader(RegisterFile::CallFrameHeaderEntry entry, MacroAssembler::RegisterID to) 168 168 { 169 m_jit. emitMovl_mr(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), MacroAssembler::edi, to);169 m_jit.movl_mr(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - entry) * sizeof(Register), MacroAssembler::edi, to); 170 170 } 171 171 172 172 ALWAYS_INLINE void CTI::emitPutResult(unsigned dst, MacroAssembler::RegisterID from) 173 173 { 174 m_jit. emitMovl_rm(from, dst * sizeof(Register), MacroAssembler::edi);174 m_jit.movl_rm(from, dst * sizeof(Register), MacroAssembler::edi); 175 175 // FIXME: #ifndef NDEBUG, Write the correct m_type to the register. 176 176 } … … 201 201 { 202 202 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 203 m_jit. emitCmpl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx);203 m_jit.cmpl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx); 204 204 MacroAssembler::JmpSrc noException = m_jit.emitUnlinkedJe(); 205 205 m_jit.emitInt3(); … … 246 246 { 247 247 #if ENABLE(SAMPLING_TOOL) 248 m_jit. emitMovl_i32m(1, &incall);248 m_jit.movl_i32m(1, &incall); 249 249 #endif 250 250 m_calls.append(CallRecord(m_jit.emitCall(), helper, opcodeIndex)); 251 251 emitDebugExceptionCheck(); 252 252 #if ENABLE(SAMPLING_TOOL) 253 m_jit. emitMovl_i32m(0, &incall);253 m_jit.movl_i32m(0, &incall); 254 254 #endif 255 255 } … … 258 258 { 259 259 #if ENABLE(SAMPLING_TOOL) 260 m_jit. emitMovl_i32m(1, &incall);260 m_jit.movl_i32m(1, &incall); 261 261 #endif 262 262 m_calls.append(CallRecord(m_jit.emitCall(), helper, opcodeIndex)); 263 263 emitDebugExceptionCheck(); 264 264 #if ENABLE(SAMPLING_TOOL) 265 m_jit. emitMovl_i32m(0, &incall);265 m_jit.movl_i32m(0, &incall); 266 266 #endif 267 267 } … … 270 270 { 271 271 #if ENABLE(SAMPLING_TOOL) 272 m_jit. emitMovl_i32m(1, &incall);272 m_jit.movl_i32m(1, &incall); 273 273 #endif 274 274 m_calls.append(CallRecord(m_jit.emitCall(), helper, opcodeIndex)); 275 275 emitDebugExceptionCheck(); 276 276 #if ENABLE(SAMPLING_TOOL) 277 m_jit. emitMovl_i32m(0, &incall);277 m_jit.movl_i32m(0, &incall); 278 278 #endif 279 279 } … … 282 282 { 283 283 #if ENABLE(SAMPLING_TOOL) 284 m_jit. emitMovl_i32m(1, &incall);284 m_jit.movl_i32m(1, &incall); 285 285 #endif 286 286 m_calls.append(CallRecord(m_jit.emitCall(), helper, opcodeIndex)); 287 287 emitDebugExceptionCheck(); 288 288 #if ENABLE(SAMPLING_TOOL) 289 m_jit. emitMovl_i32m(0, &incall);289 m_jit.movl_i32m(0, &incall); 290 290 #endif 291 291 } … … 294 294 { 295 295 #if ENABLE(SAMPLING_TOOL) 296 m_jit. emitMovl_i32m(1, &incall);296 m_jit.movl_i32m(1, &incall); 297 297 #endif 298 298 m_calls.append(CallRecord(m_jit.emitCall(), helper, opcodeIndex)); 299 299 emitDebugExceptionCheck(); 300 300 #if ENABLE(SAMPLING_TOOL) 301 m_jit. emitMovl_i32m(0, &incall);301 m_jit.movl_i32m(0, &incall); 302 302 #endif 303 303 } … … 305 305 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImm(MacroAssembler::RegisterID reg, unsigned opcodeIndex) 306 306 { 307 m_jit. emitTestl_i32r(JSImmediate::TagBitTypeInteger, reg);307 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, reg); 308 308 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJe(), opcodeIndex)); 309 309 } … … 311 311 ALWAYS_INLINE void CTI::emitJumpSlowCaseIfNotImms(MacroAssembler::RegisterID reg1, MacroAssembler::RegisterID reg2, unsigned opcodeIndex) 312 312 { 313 m_jit. emitMovl_rr(reg1, MacroAssembler::ecx);314 m_jit. emitAndl_rr(reg2, MacroAssembler::ecx);313 m_jit.movl_rr(reg1, MacroAssembler::ecx); 314 m_jit.andl_rr(reg2, MacroAssembler::ecx); 315 315 emitJumpSlowCaseIfNotImm(MacroAssembler::ecx, opcodeIndex); 316 316 } … … 325 325 { 326 326 // op_mod relies on this being a sub - setting zf if result is 0. 327 m_jit. emitSubl_i8r(JSImmediate::TagBitTypeInteger, reg);327 m_jit.subl_i8r(JSImmediate::TagBitTypeInteger, reg); 328 328 } 329 329 330 330 ALWAYS_INLINE void CTI::emitFastArithReTagImmediate(MacroAssembler::RegisterID reg) 331 331 { 332 m_jit. emitAddl_i8r(JSImmediate::TagBitTypeInteger, reg);332 m_jit.addl_i8r(JSImmediate::TagBitTypeInteger, reg); 333 333 } 334 334 335 335 ALWAYS_INLINE void CTI::emitFastArithPotentiallyReTagImmediate(MacroAssembler::RegisterID reg) 336 336 { 337 m_jit. emitOrl_i8r(JSImmediate::TagBitTypeInteger, reg);337 m_jit.orl_rr(JSImmediate::TagBitTypeInteger, reg); 338 338 } 339 339 340 340 ALWAYS_INLINE void CTI::emitFastArithImmToInt(MacroAssembler::RegisterID reg) 341 341 { 342 m_jit. emitSarl_i8r(1, reg);342 m_jit.sarl_i8r(1, reg); 343 343 } 344 344 345 345 ALWAYS_INLINE void CTI::emitFastArithIntToImmOrSlowCase(MacroAssembler::RegisterID reg, unsigned opcodeIndex) 346 346 { 347 m_jit. emitAddl_rr(reg, reg);347 m_jit.addl_rr(reg, reg); 348 348 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), opcodeIndex)); 349 349 emitFastArithReTagImmediate(reg); … … 352 352 ALWAYS_INLINE void CTI::emitFastArithIntToImmNoCheck(MacroAssembler::RegisterID reg) 353 353 { 354 m_jit. emitAddl_rr(reg, reg);354 m_jit.addl_rr(reg, reg); 355 355 emitFastArithReTagImmediate(reg); 356 356 } … … 405 405 emitGetCTIParam(CTI_ARGS_r, MacroAssembler::edi); // edi := r 406 406 407 m_jit. emitCmpl_i32r(reinterpret_cast<unsigned>(JSImmediate::impossibleValue()), MacroAssembler::eax);407 m_jit.cmpl_i32r(reinterpret_cast<unsigned>(JSImmediate::impossibleValue()), MacroAssembler::eax); 408 408 wasEval = m_jit.emitUnlinkedJne(); 409 409 … … 417 417 418 418 // Fast check for JS function. 419 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::ecx);419 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::ecx); 420 420 MacroAssembler::JmpSrc isNotObject = m_jit.emitUnlinkedJne(); 421 m_jit. emitCmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsFunctionVptr), MacroAssembler::ecx);421 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsFunctionVptr), MacroAssembler::ecx); 422 422 MacroAssembler::JmpSrc isJSFunction = m_jit.emitUnlinkedJe(); 423 423 m_jit.link(isNotObject, m_jit.label()); … … 432 432 // This handles JSFunctions 433 433 emitCall(i, ((type == OpConstruct) ? Machine::cti_op_construct_JSConstruct : Machine::cti_op_call_JSFunction)); 434 m_jit. emitCallN_r(MacroAssembler::eax);434 m_jit.call_r(MacroAssembler::eax); 435 435 emitGetCTIParam(CTI_ARGS_r, MacroAssembler::edi); // edi := r 436 436 … … 445 445 void CTI::emitSlowScriptCheck(unsigned opcodeIndex) 446 446 { 447 m_jit. emitSubl_i8r(1, MacroAssembler::esi);447 m_jit.subl_i8r(1, MacroAssembler::esi); 448 448 MacroAssembler::JmpSrc skipTimeout = m_jit.emitUnlinkedJne(); 449 449 emitCall(opcodeIndex, Machine::cti_timeout_check); 450 450 451 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);452 m_jit.movl_mr(OBJECT_OFFSET(ExecState, m_globalData), MacroAssembler::ecx, MacroAssembler::ecx); 453 m_jit.movl_mr(OBJECT_OFFSET(JSGlobalData, machine), MacroAssembler::ecx, MacroAssembler::ecx); 454 m_jit.movl_mr(OBJECT_OFFSET(Machine, m_ticksUntilNextTimeoutCheck), MacroAssembler::ecx, MacroAssembler::esi); 455 455 m_jit.link(skipTimeout, m_jit.label()); 456 456 } … … 465 465 466 466 #if ENABLE(SAMPLING_TOOL) 467 m_jit. emitMovl_i32m(m_machine->getOpcodeID(instruction[i].u.opcode), &what);467 m_jit.movl_i32m(m_machine->getOpcodeID(instruction[i].u.opcode), &what); 468 468 #endif 469 469 … … 474 474 unsigned src = instruction[i + 2].u.operand; 475 475 if (src < m_codeBlock->constantRegisters.size()) 476 m_jit. emitMovl_i32r(reinterpret_cast<unsigned>(m_codeBlock->constantRegisters[src].jsValue(m_exec)), MacroAssembler::edx);476 m_jit.movl_i32r(reinterpret_cast<unsigned>(m_codeBlock->constantRegisters[src].jsValue(m_exec)), MacroAssembler::edx); 477 477 else 478 478 emitGetArg(src, MacroAssembler::edx); … … 490 490 emitGetArg(src1, MacroAssembler::eax); 491 491 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 492 m_jit. emitAddl_i32r(getDeTaggedConstantImmediate(value), MacroAssembler::eax);492 m_jit.addl_i32r(getDeTaggedConstantImmediate(value), MacroAssembler::eax); 493 493 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 494 494 emitPutResult(dst); … … 501 501 emitJumpSlowCaseIfNotImms(MacroAssembler::eax, MacroAssembler::edx, i); 502 502 emitFastArithDeTagImmediate(MacroAssembler::eax); 503 m_jit. emitAddl_rr(MacroAssembler::edx, MacroAssembler::eax);503 m_jit.addl_rr(MacroAssembler::edx, MacroAssembler::eax); 504 504 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 505 505 emitPutResult(dst); … … 519 519 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::eax); 520 520 #if ENABLE(SAMPLING_TOOL) 521 m_jit. emitMovl_i32m(-1, &what);521 m_jit.movl_i32m(-1, &what); 522 522 #endif 523 m_jit. emitPushl_m(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - RegisterFile::CTIReturnEIP) * sizeof(Register), MacroAssembler::edi);524 m_jit. emitRet();523 m_jit.pushl_m(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - RegisterFile::CTIReturnEIP) * sizeof(Register), MacroAssembler::edi); 524 m_jit.ret(); 525 525 i += 2; 526 526 break; … … 536 536 emitGetArg(srcDst, MacroAssembler::eax); 537 537 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 538 m_jit. emitAddl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax);538 m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax); 539 539 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 540 540 emitPutResult(srcDst, MacroAssembler::eax); … … 558 558 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::edx); 559 559 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 560 m_jit. emitCmpl_i32r(reinterpret_cast<unsigned>(src2imm), MacroAssembler::edx);560 m_jit.cmpl_i32r(reinterpret_cast<unsigned>(src2imm), MacroAssembler::edx); 561 561 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJl(), i + 3 + target)); 562 562 } else { … … 565 565 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 566 566 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 567 m_jit. emitCmpl_rr(MacroAssembler::edx, MacroAssembler::eax);567 m_jit.cmpl_rr(MacroAssembler::edx, MacroAssembler::eax); 568 568 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJl(), i + 3 + target)); 569 569 } … … 634 634 emitGetCTIParam(CTI_ARGS_scopeChain, MacroAssembler::eax); 635 635 while (skip--) 636 m_jit. emitMovl_mr(OBJECT_OFFSET(ScopeChainNode, next), MacroAssembler::eax, MacroAssembler::eax);637 638 m_jit. emitMovl_mr(OBJECT_OFFSET(ScopeChainNode, object), MacroAssembler::eax, MacroAssembler::eax);639 m_jit. emitMovl_mr(JSVariableObject::offsetOf_d(), MacroAssembler::eax, MacroAssembler::eax);640 m_jit. emitMovl_mr(JSVariableObject::offsetOf_Data_registers(), MacroAssembler::eax, MacroAssembler::eax);641 m_jit. emitMovl_mr((instruction[i + 2].u.operand) * sizeof(Register), MacroAssembler::eax, MacroAssembler::eax);636 m_jit.movl_mr(OBJECT_OFFSET(ScopeChainNode, next), MacroAssembler::eax, MacroAssembler::eax); 637 638 m_jit.movl_mr(OBJECT_OFFSET(ScopeChainNode, object), MacroAssembler::eax, MacroAssembler::eax); 639 m_jit.movl_mr(JSVariableObject::offsetOf_d(), MacroAssembler::eax, MacroAssembler::eax); 640 m_jit.movl_mr(JSVariableObject::offsetOf_Data_registers(), MacroAssembler::eax, MacroAssembler::eax); 641 m_jit.movl_mr((instruction[i + 2].u.operand) * sizeof(Register), MacroAssembler::eax, MacroAssembler::eax); 642 642 emitPutResult(instruction[i + 1].u.operand); 643 643 i += 4; … … 650 650 emitGetArg(instruction[i + 3].u.operand, MacroAssembler::eax); 651 651 while (skip--) 652 m_jit. emitMovl_mr(OBJECT_OFFSET(ScopeChainNode, next), MacroAssembler::edx, MacroAssembler::edx);653 654 m_jit. emitMovl_mr(OBJECT_OFFSET(ScopeChainNode, object), MacroAssembler::edx, MacroAssembler::edx);655 m_jit. emitMovl_mr(JSVariableObject::offsetOf_d(), MacroAssembler::edx, MacroAssembler::edx);656 m_jit. emitMovl_mr(JSVariableObject::offsetOf_Data_registers(), MacroAssembler::edx, MacroAssembler::edx);657 m_jit. emitMovl_rm(MacroAssembler::eax, (instruction[i + 1].u.operand) * sizeof(Register), MacroAssembler::edx);652 m_jit.movl_mr(OBJECT_OFFSET(ScopeChainNode, next), MacroAssembler::edx, MacroAssembler::edx); 653 654 m_jit.movl_mr(OBJECT_OFFSET(ScopeChainNode, object), MacroAssembler::edx, MacroAssembler::edx); 655 m_jit.movl_mr(JSVariableObject::offsetOf_d(), MacroAssembler::edx, MacroAssembler::edx); 656 m_jit.movl_mr(JSVariableObject::offsetOf_Data_registers(), MacroAssembler::edx, MacroAssembler::edx); 657 m_jit.movl_rm(MacroAssembler::eax, (instruction[i + 1].u.operand) * sizeof(Register), MacroAssembler::edx); 658 658 i += 4; 659 659 break; … … 663 663 emitCall(i, Machine::cti_op_ret); 664 664 665 m_jit. emitPushl_m(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - RegisterFile::CTIReturnEIP) * sizeof(Register), MacroAssembler::edi);666 m_jit. emitRet();665 m_jit.pushl_m(-((m_codeBlock->numLocals + RegisterFile::CallFrameHeaderSize) - RegisterFile::CTIReturnEIP) * sizeof(Register), MacroAssembler::edi); 666 m_jit.ret(); 667 667 i += 2; 668 668 break; 669 669 } 670 670 case op_new_array: { 671 m_jit. emitLeal_mr(sizeof(Register) * instruction[i + 2].u.operand, MacroAssembler::edi, MacroAssembler::edx);671 m_jit.leal_mr(sizeof(Register) * instruction[i + 2].u.operand, MacroAssembler::edi, MacroAssembler::edx); 672 672 emitPutArg(MacroAssembler::edx, 0); 673 673 emitPutArgConstant(instruction[i + 3].u.operand, 4); … … 695 695 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 696 696 emitFastArithImmToInt(MacroAssembler::edx); 697 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);697 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 698 698 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 699 m_jit. emitCmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax);699 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax); 700 700 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 701 m_jit. emitCmpl_rm(MacroAssembler::edx, OBJECT_OFFSET(JSArray, m_fastAccessCutoff), MacroAssembler::eax);701 m_jit.cmpl_rm(MacroAssembler::edx, OBJECT_OFFSET(JSArray, m_fastAccessCutoff), MacroAssembler::eax); 702 702 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJbe(), i)); 703 703 704 m_jit. emitMovl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax);705 m_jit. emitMovl_mr(OBJECT_OFFSET(ArrayStorage, m_vector[0]), MacroAssembler::eax, MacroAssembler::edx, sizeof(JSValue*), MacroAssembler::eax);704 m_jit.movl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax); 705 m_jit.movl_mr(OBJECT_OFFSET(ArrayStorage, m_vector[0]), MacroAssembler::eax, MacroAssembler::edx, sizeof(JSValue*), MacroAssembler::eax); 706 706 emitPutResult(instruction[i + 1].u.operand); 707 707 i += 4; … … 722 722 emitGetArg(instruction[i + 3].u.operand, MacroAssembler::edx); 723 723 emitJumpSlowCaseIfNotImms(MacroAssembler::eax, MacroAssembler::edx, i); 724 m_jit. emitSubl_rr(MacroAssembler::edx, MacroAssembler::eax);724 m_jit.subl_rr(MacroAssembler::edx, MacroAssembler::eax); 725 725 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 726 726 emitFastArithReTagImmediate(MacroAssembler::eax); … … 735 735 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 736 736 emitFastArithImmToInt(MacroAssembler::edx); 737 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);737 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 738 738 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 739 m_jit. emitCmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax);739 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax); 740 740 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 741 m_jit. emitCmpl_rm(MacroAssembler::edx, OBJECT_OFFSET(JSArray, m_fastAccessCutoff), MacroAssembler::eax);741 m_jit.cmpl_rm(MacroAssembler::edx, OBJECT_OFFSET(JSArray, m_fastAccessCutoff), MacroAssembler::eax); 742 742 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJbe(), i)); 743 743 744 m_jit. emitMovl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax);745 m_jit. emitMovl_rm(MacroAssembler::ecx, OBJECT_OFFSET(ArrayStorage, m_vector[0]), MacroAssembler::eax, MacroAssembler::edx, sizeof(JSValue*));744 m_jit.movl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax); 745 m_jit.movl_rm(MacroAssembler::ecx, OBJECT_OFFSET(ArrayStorage, m_vector[0]), MacroAssembler::eax, MacroAssembler::edx, sizeof(JSValue*)); 746 746 i += 4; 747 747 break; … … 754 754 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::eax); 755 755 756 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax);756 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax); 757 757 MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe(); 758 m_jit. emitTestl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax);758 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax); 759 759 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); 760 760 761 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax);761 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax); 762 762 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 763 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax);763 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax); 764 764 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 765 765 … … 797 797 emitGetArg(srcDst, MacroAssembler::eax); 798 798 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 799 m_jit. emitSubl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax);799 m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax); 800 800 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 801 801 emitPutResult(srcDst, MacroAssembler::eax); … … 809 809 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::edx); 810 810 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 811 m_jit. emitCmpl_i32r(reinterpret_cast<unsigned>(src2imm), MacroAssembler::edx);811 m_jit.cmpl_i32r(reinterpret_cast<unsigned>(src2imm), MacroAssembler::edx); 812 812 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJge(), i + 3 + target)); 813 813 } else { … … 816 816 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 817 817 emitJumpSlowCaseIfNotImm(MacroAssembler::edx, i); 818 m_jit. emitCmpl_rr(MacroAssembler::edx, MacroAssembler::eax);818 m_jit.cmpl_rr(MacroAssembler::edx, MacroAssembler::eax); 819 819 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJge(), i + 3 + target)); 820 820 } … … 824 824 case op_not: { 825 825 emitGetArg(instruction[i + 2].u.operand, MacroAssembler::eax); 826 m_jit. emitXorl_i8r(JSImmediate::FullTagTypeBool, MacroAssembler::eax);827 m_jit. emitTestl_i32r(JSImmediate::FullTagTypeMask, MacroAssembler::eax); // i8?826 m_jit.xorl_i8r(JSImmediate::FullTagTypeBool, MacroAssembler::eax); 827 m_jit.testl_i32r(JSImmediate::FullTagTypeMask, MacroAssembler::eax); // i8? 828 828 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 829 m_jit. emitXorl_i8r((JSImmediate::FullTagTypeBool | JSImmediate::ExtendedPayloadBitBoolValue), MacroAssembler::eax);829 m_jit.xorl_i8r((JSImmediate::FullTagTypeBool | JSImmediate::ExtendedPayloadBitBoolValue), MacroAssembler::eax); 830 830 emitPutResult(instruction[i + 1].u.operand); 831 831 i += 3; … … 836 836 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::eax); 837 837 838 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax);838 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax); 839 839 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 840 m_jit. emitTestl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax);840 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax); 841 841 MacroAssembler::JmpSrc isNonZero = m_jit.emitUnlinkedJne(); 842 842 843 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax);843 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax); 844 844 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 845 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax);845 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax); 846 846 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 847 847 … … 853 853 int srcDst = instruction[i + 2].u.operand; 854 854 emitGetArg(srcDst, MacroAssembler::eax); 855 m_jit. emitMovl_rr(MacroAssembler::eax, MacroAssembler::edx);855 m_jit.movl_rr(MacroAssembler::eax, MacroAssembler::edx); 856 856 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 857 m_jit. emitAddl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::edx);857 m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::edx); 858 858 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 859 859 emitPutResult(srcDst, MacroAssembler::edx); … … 864 864 case op_unexpected_load: { 865 865 JSValue* v = m_codeBlock->unexpectedConstants[instruction[i + 2].u.operand]; 866 m_jit. emitMovl_i32r(reinterpret_cast<unsigned>(v), MacroAssembler::eax);866 m_jit.movl_i32r(reinterpret_cast<unsigned>(v), MacroAssembler::eax); 867 867 emitPutResult(instruction[i + 1].u.operand); 868 868 i += 3; … … 872 872 int retAddrDst = instruction[i + 1].u.operand; 873 873 int target = instruction[i + 2].u.operand; 874 m_jit. emitMovl_i32m(0, sizeof(Register) * retAddrDst, MacroAssembler::edi);874 m_jit.movl_i32m(0, sizeof(Register) * retAddrDst, MacroAssembler::edi); 875 875 MacroAssembler::JmpDst addrPosition = m_jit.label(); 876 876 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJmp(), i + 2 + target)); … … 881 881 } 882 882 case op_sret: { 883 m_jit. emitJmpN_m(sizeof(Register) * instruction[i + 1].u.operand, MacroAssembler::edi);883 m_jit.jmp_m(sizeof(Register) * instruction[i + 1].u.operand, MacroAssembler::edi); 884 884 i += 2; 885 885 break; … … 893 893 emitFastArithImmToInt(MacroAssembler::eax); 894 894 emitFastArithImmToInt(MacroAssembler::ecx); 895 m_jit. emitShll_CLr(MacroAssembler::eax);895 m_jit.shll_CLr(MacroAssembler::eax); 896 896 emitFastArithIntToImmOrSlowCase(MacroAssembler::eax, i); 897 897 emitPutResult(instruction[i + 1].u.operand); … … 906 906 emitGetArg(src2, MacroAssembler::eax); 907 907 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 908 m_jit. emitAndl_i32r(reinterpret_cast<unsigned>(value), MacroAssembler::eax); // FIXME: make it more obvious this is relying on the format of JSImmediate908 m_jit.andl_i32r(reinterpret_cast<unsigned>(value), MacroAssembler::eax); // FIXME: make it more obvious this is relying on the format of JSImmediate 909 909 emitPutResult(dst); 910 910 } else if (JSValue* value = getConstantImmediateNumericArg(src2)) { 911 911 emitGetArg(src1, MacroAssembler::eax); 912 912 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 913 m_jit. emitAndl_i32r(reinterpret_cast<unsigned>(value), MacroAssembler::eax);913 m_jit.andl_i32r(reinterpret_cast<unsigned>(value), MacroAssembler::eax); 914 914 emitPutResult(dst); 915 915 } else { 916 916 emitGetArg(src1, MacroAssembler::eax); 917 917 emitGetArg(src2, MacroAssembler::edx); 918 m_jit. emitAndl_rr(MacroAssembler::edx, MacroAssembler::eax);918 m_jit.andl_rr(MacroAssembler::edx, MacroAssembler::eax); 919 919 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 920 920 emitPutResult(dst); … … 929 929 emitJumpSlowCaseIfNotImm(MacroAssembler::ecx, i); 930 930 emitFastArithImmToInt(MacroAssembler::ecx); 931 m_jit. emitSarl_CLr(MacroAssembler::eax);931 m_jit.sarl_CLr(MacroAssembler::eax); 932 932 emitFastArithPotentiallyReTagImmediate(MacroAssembler::eax); 933 933 emitPutResult(instruction[i + 1].u.operand); … … 938 938 emitGetArg(instruction[i + 2].u.operand, MacroAssembler::eax); 939 939 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 940 m_jit. emitXorl_i8r(~JSImmediate::TagBitTypeInteger, MacroAssembler::eax);940 m_jit.xorl_i8r(~JSImmediate::TagBitTypeInteger, MacroAssembler::eax); 941 941 emitPutResult(instruction[i + 1].u.operand); 942 942 i += 3; … … 969 969 emitFastArithDeTagImmediate(MacroAssembler::ecx); 970 970 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJe(), i)); // This is checking if the last detag resulted in a value 0. 971 m_jit. emitCdq();972 m_jit. emitIdivl_r(MacroAssembler::ecx);971 m_jit.cdq(); 972 m_jit.idivl_r(MacroAssembler::ecx); 973 973 emitFastArithReTagImmediate(MacroAssembler::edx); 974 m_jit. emitMovl_rr(MacroAssembler::edx, MacroAssembler::eax);974 m_jit.movl_rr(MacroAssembler::edx, MacroAssembler::eax); 975 975 emitPutResult(instruction[i + 1].u.operand); 976 976 i += 4; … … 981 981 emitGetArg(instruction[i + 1].u.operand, MacroAssembler::eax); 982 982 983 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax);983 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::zeroImmediate()), MacroAssembler::eax); 984 984 MacroAssembler::JmpSrc isZero = m_jit.emitUnlinkedJe(); 985 m_jit. emitTestl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax);985 m_jit.testl_i32r(JSImmediate::TagBitTypeInteger, MacroAssembler::eax); 986 986 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJne(), i + 2 + target)); 987 987 988 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax);988 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::trueImmediate()), MacroAssembler::eax); 989 989 m_jmpTable.append(JmpTable(m_jit.emitUnlinkedJe(), i + 2 + target)); 990 m_jit. emitCmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax);990 m_jit.cmpl_i32r(reinterpret_cast<uint32_t>(JSImmediate::falseImmediate()), MacroAssembler::eax); 991 991 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJne(), i)); 992 992 … … 1000 1000 int srcDst = instruction[i + 2].u.operand; 1001 1001 emitGetArg(srcDst, MacroAssembler::eax); 1002 m_jit. emitMovl_rr(MacroAssembler::eax, MacroAssembler::edx);1002 m_jit.movl_rr(MacroAssembler::eax, MacroAssembler::edx); 1003 1003 emitJumpSlowCaseIfNotImm(MacroAssembler::eax, i); 1004 m_jit. emitSubl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::edx);1004 m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::edx); 1005 1005 m_slowCases.append(SlowCaseEntry(m_jit.emitUnlinkedJo(), i)); 1006 1006 emitPutResult(srcDst, MacroAssembler::edx); … … 1014 1014 emitGetArg(instruction[i + 3].u.operand, MacroAssembler::edx); 1015 1015 emitJumpSlowCaseIfNotImms(MacroAssembler::eax, MacroAssembler::edx, i); 1016 m_jit. emitXorl_rr(MacroAssembler::edx, MacroAssembler::eax);1016 m_jit.xorl_rr(MacroAssembler::edx, MacroAssembler::eax); 1017 1017 emitFastArithReTagImmediate(MacroAssembler::eax); 1018 1018 emitPutResult(instruction[i + 1].u.operand); … … 1032 1032 emitGetArg(instruction[i + 3].u.operand, MacroAssembler::edx); 1033 1033 emitJumpSlowCaseIfNotImms(MacroAssembler::eax, MacroAssembler::edx, i); 1034 m_jit. emitOrl_rr(MacroAssembler::edx, MacroAssembler::eax);1034 m_jit.orl_rr(MacroAssembler::edx, MacroAssembler::eax); 1035 1035 emitPutResult(instruction[i + 1].u.operand); 1036 1036 i += 4; … … 1045 1045 emitGetPutArg(instruction[i + 1].u.operand, 0, MacroAssembler::ecx); 1046 1046 emitCall(i, Machine::cti_op_throw); 1047 m_jit. emitAddl_i8r(0x24, MacroAssembler::esp);1048 m_jit. emitPopl_r(MacroAssembler::edi);1049 m_jit. emitPopl_r(MacroAssembler::esi);1050 m_jit. emitRet();1047 m_jit.addl_i8r(0x24, MacroAssembler::esp); 1048 m_jit.popl_r(MacroAssembler::edi); 1049 m_jit.popl_r(MacroAssembler::esi); 1050 m_jit.ret(); 1051 1051 i += 2; 1052 1052 break; … … 1063 1063 unsigned target = instruction[i + 3].u.operand; 1064 1064 emitCall(i, Machine::cti_op_next_pname); 1065 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1065 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1066 1066 MacroAssembler::JmpSrc endOfIter = m_jit.emitUnlinkedJe(); 1067 1067 emitPutResult(instruction[i + 1].u.operand); … … 1118 1118 emitGetCTIParam(CTI_ARGS_r, MacroAssembler::edi); // edi := r 1119 1119 emitGetCTIParam(CTI_ARGS_exec, MacroAssembler::ecx); 1120 m_jit. emitMovl_mr(OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx, MacroAssembler::eax);1121 m_jit. emitMovl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx);1120 m_jit.movl_mr(OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx, MacroAssembler::eax); 1121 m_jit.movl_i32m(0, OBJECT_OFFSET(ExecState, m_exception), MacroAssembler::ecx); 1122 1122 emitPutResult(instruction[i + 1].u.operand); 1123 1123 i += 2; … … 1154 1154 emitPutArgConstant(tableIndex, 4); 1155 1155 emitCall(i, Machine::cti_op_switch_imm); 1156 m_jit. emitJmpN_r(MacroAssembler::eax);1156 m_jit.jmp_r(MacroAssembler::eax); 1157 1157 i += 4; 1158 1158 break; … … 1171 1171 emitPutArgConstant(tableIndex, 4); 1172 1172 emitCall(i, Machine::cti_op_switch_char); 1173 m_jit. emitJmpN_r(MacroAssembler::eax);1173 m_jit.jmp_r(MacroAssembler::eax); 1174 1174 i += 4; 1175 1175 break; … … 1187 1187 emitPutArgConstant(tableIndex, 4); 1188 1188 emitCall(i, Machine::cti_op_switch_string); 1189 m_jit. emitJmpN_r(MacroAssembler::eax);1189 m_jit.jmp_r(MacroAssembler::eax); 1190 1190 i += 4; 1191 1191 break; … … 1286 1286 MacroAssembler::JmpSrc notImm = iter->from; 1287 1287 m_jit.link((++iter)->from, m_jit.label()); 1288 m_jit. emitSubl_i32r(getDeTaggedConstantImmediate(value), MacroAssembler::eax);1288 m_jit.subl_i32r(getDeTaggedConstantImmediate(value), MacroAssembler::eax); 1289 1289 m_jit.link(notImm, m_jit.label()); 1290 1290 emitPutArg(MacroAssembler::eax, 0); … … 1301 1301 MacroAssembler::JmpSrc notImm = iter->from; 1302 1302 m_jit.link((++iter)->from, m_jit.label()); 1303 m_jit. emitSubl_rr(MacroAssembler::edx, MacroAssembler::eax);1303 m_jit.subl_rr(MacroAssembler::edx, MacroAssembler::eax); 1304 1304 emitFastArithReTagImmediate(MacroAssembler::eax); 1305 1305 m_jit.link(notImm, m_jit.label()); … … 1328 1328 MacroAssembler::JmpSrc notImm = iter->from; 1329 1329 m_jit.link((++iter)->from, m_jit.label()); 1330 m_jit. emitAddl_rr(MacroAssembler::edx, MacroAssembler::eax);1330 m_jit.addl_rr(MacroAssembler::edx, MacroAssembler::eax); 1331 1331 m_jit.link(notImm, m_jit.label()); 1332 1332 emitPutArg(MacroAssembler::eax, 0); … … 1372 1372 emitGetPutArg(instruction[i + 2].u.operand, 4, MacroAssembler::ecx); 1373 1373 emitCall(i, Machine::cti_op_loop_if_less); 1374 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1374 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1375 1375 m_jit.link(m_jit.emitUnlinkedJne(), m_labels[i + 3 + target]); 1376 1376 } else { … … 1380 1380 emitPutArg(MacroAssembler::edx, 4); 1381 1381 emitCall(i, Machine::cti_op_loop_if_less); 1382 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1382 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1383 1383 m_jit.link(m_jit.emitUnlinkedJne(), m_labels[i + 3 + target]); 1384 1384 } … … 1390 1390 MacroAssembler::JmpSrc notImm = iter->from; 1391 1391 m_jit.link((++iter)->from, m_jit.label()); 1392 m_jit. emitSubl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax);1392 m_jit.subl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax); 1393 1393 m_jit.link(notImm, m_jit.label()); 1394 1394 emitPutArg(MacroAssembler::eax, 0); … … 1418 1418 emitPutArg(MacroAssembler::eax, 0); 1419 1419 emitCall(i, Machine::cti_op_jtrue); 1420 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1420 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1421 1421 unsigned target = instruction[i + 2].u.operand; 1422 1422 m_jit.link(m_jit.emitUnlinkedJne(), m_labels[i + 2 + target]); … … 1428 1428 MacroAssembler::JmpSrc notImm = iter->from; 1429 1429 m_jit.link((++iter)->from, m_jit.label()); 1430 m_jit. emitAddl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax);1430 m_jit.addl_i8r(getDeTaggedConstantImmediate(JSImmediate::oneImmediate()), MacroAssembler::eax); 1431 1431 m_jit.link(notImm, m_jit.label()); 1432 1432 emitPutArg(MacroAssembler::eax, 0); … … 1444 1444 emitGetPutArg(instruction[i + 2].u.operand, 4, MacroAssembler::ecx); 1445 1445 emitCall(i, Machine::cti_op_jless); 1446 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1446 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1447 1447 m_jit.link(m_jit.emitUnlinkedJe(), m_labels[i + 3 + target]); 1448 1448 } else { … … 1452 1452 emitPutArg(MacroAssembler::edx, 4); 1453 1453 emitCall(i, Machine::cti_op_jless); 1454 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1454 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1455 1455 m_jit.link(m_jit.emitUnlinkedJe(), m_labels[i + 3 + target]); 1456 1456 } … … 1460 1460 case op_not: { 1461 1461 m_jit.link(iter->from, m_jit.label()); 1462 m_jit. emitXorl_i8r(JSImmediate::FullTagTypeBool, MacroAssembler::eax);1462 m_jit.xorl_i8r(JSImmediate::FullTagTypeBool, MacroAssembler::eax); 1463 1463 emitPutArg(MacroAssembler::eax, 0); 1464 1464 emitCall(i, Machine::cti_op_not); … … 1471 1471 emitPutArg(MacroAssembler::eax, 0); 1472 1472 emitCall(i, Machine::cti_op_jtrue); 1473 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1473 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1474 1474 unsigned target = instruction[i + 2].u.operand; 1475 1475 m_jit.link(m_jit.emitUnlinkedJe(), m_labels[i + 2 + target]); // inverted! … … 1527 1527 emitPutArg(MacroAssembler::eax, 0); 1528 1528 emitCall(i, Machine::cti_op_jtrue); 1529 m_jit. emitTestl_rr(MacroAssembler::eax, MacroAssembler::eax);1529 m_jit.testl_rr(MacroAssembler::eax, MacroAssembler::eax); 1530 1530 unsigned target = instruction[i + 2].u.operand; 1531 1531 m_jit.link(m_jit.emitUnlinkedJne(), m_labels[i + 2 + target]); … … 1589 1589 void CTI::privateCompile() 1590 1590 { 1591 // Could use a emitPopl_m, but would need to offset the following instruction if so.1592 m_jit. emitPopl_r(MacroAssembler::ecx);1591 // Could use a popl_m, but would need to offset the following instruction if so. 1592 m_jit.popl_r(MacroAssembler::ecx); 1593 1593 emitGetCTIParam(CTI_ARGS_r, MacroAssembler::edi); // edi := r 1594 1594 emitPutToCallFrameHeader(MacroAssembler::ecx, RegisterFile::CTIReturnEIP); … … 1652 1652 { 1653 1653 // Check eax is an object of the right StructureID. 1654 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1654 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1655 1655 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1656 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax);1656 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax); 1657 1657 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1658 1658 1659 1659 // Checks out okay! - getDirectOffset 1660 m_jit. emitMovl_mr(OBJECT_OFFSET(JSObject, m_propertyStorage), MacroAssembler::eax, MacroAssembler::eax);1661 m_jit. emitMovl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::eax, MacroAssembler::eax);1662 m_jit. emitRet();1660 m_jit.movl_mr(OBJECT_OFFSET(JSObject, m_propertyStorage), MacroAssembler::eax, MacroAssembler::eax); 1661 m_jit.movl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::eax, MacroAssembler::eax); 1662 m_jit.ret(); 1663 1663 1664 1664 void* code = m_jit.copy(); … … 1679 1679 JSObject* protoObject = static_cast<JSObject*>(structureID->prototype()); 1680 1680 OwnArrayPtr<JSValue*>* protoPropertyStorage = &protoObject->m_propertyStorage; 1681 m_jit. emitMovl_mr(static_cast<void*>(protoPropertyStorage), MacroAssembler::edx);1681 m_jit.movl_mr(static_cast<void*>(protoPropertyStorage), MacroAssembler::edx); 1682 1682 1683 1683 // check eax is an object of the right StructureID. 1684 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1684 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1685 1685 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1686 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax);1686 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax); 1687 1687 MacroAssembler::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 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructureID), static_cast<void*>(protoStructureIDAddress));1691 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(prototypeStructureID), static_cast<void*>(protoStructureIDAddress)); 1692 1692 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJne(); 1693 1693 1694 1694 // Checks out okay! - getDirectOffset 1695 m_jit. emitMovl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::edx, MacroAssembler::eax);1696 1697 m_jit. emitRet();1695 m_jit.movl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::edx, MacroAssembler::eax); 1696 1697 m_jit.ret(); 1698 1698 1699 1699 void* code = m_jit.copy(); … … 1716 1716 1717 1717 // Check eax is an object of the right StructureID. 1718 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1718 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1719 1719 bucketsOfFail.append(m_jit.emitUnlinkedJne()); 1720 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax);1720 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax); 1721 1721 bucketsOfFail.append(m_jit.emitUnlinkedJne()); 1722 1722 … … 1730 1730 // Check the prototype object's StructureID had not changed. 1731 1731 StructureID** protoStructureIDAddress = &(protoObject->m_structureID); 1732 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(currStructureID), static_cast<void*>(protoStructureIDAddress));1732 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(currStructureID), static_cast<void*>(protoStructureIDAddress)); 1733 1733 bucketsOfFail.append(m_jit.emitUnlinkedJne()); 1734 1734 } … … 1736 1736 1737 1737 OwnArrayPtr<JSValue*>* protoPropertyStorage = &static_cast<JSObject*>(protoObject)->m_propertyStorage; 1738 m_jit. emitMovl_mr(static_cast<void*>(protoPropertyStorage), MacroAssembler::edx);1739 m_jit. emitMovl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::edx, MacroAssembler::eax);1740 m_jit. emitRet();1738 m_jit.movl_mr(static_cast<void*>(protoPropertyStorage), MacroAssembler::edx); 1739 m_jit.movl_mr(cachedOffset * sizeof(JSValue*), MacroAssembler::edx, MacroAssembler::eax); 1740 m_jit.ret(); 1741 1741 1742 1742 bucketsOfFail.append(m_jit.emitUnlinkedJmp()); … … 1754 1754 { 1755 1755 // check eax is an object of the right StructureID. 1756 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1756 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1757 1757 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1758 m_jit. emitCmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax);1758 m_jit.cmpl_i32m(reinterpret_cast<uint32_t>(structureID), OBJECT_OFFSET(JSCell, m_structureID), MacroAssembler::eax); 1759 1759 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1760 1760 1761 1761 // checks out okay! - putDirectOffset 1762 m_jit. emitMovl_mr(OBJECT_OFFSET(JSObject, m_propertyStorage), MacroAssembler::eax, MacroAssembler::eax);1763 m_jit. emitMovl_rm(MacroAssembler::edx, cachedOffset * sizeof(JSValue*), MacroAssembler::eax);1764 m_jit. emitRet();1762 m_jit.movl_mr(OBJECT_OFFSET(JSObject, m_propertyStorage), MacroAssembler::eax, MacroAssembler::eax); 1763 m_jit.movl_rm(MacroAssembler::edx, cachedOffset * sizeof(JSValue*), MacroAssembler::eax); 1764 m_jit.ret(); 1765 1765 1766 1766 void* code = m_jit.copy(); … … 1778 1778 { 1779 1779 // Check eax is an array 1780 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1780 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1781 1781 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1782 m_jit. emitCmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax);1782 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsArrayVptr), MacroAssembler::eax); 1783 1783 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1784 1784 1785 1785 // Checks out okay! - get the length from the storage 1786 m_jit. emitMovl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax);1787 m_jit. emitMovl_mr(OBJECT_OFFSET(ArrayStorage, m_length), MacroAssembler::eax, MacroAssembler::eax);1788 1789 m_jit. emitAddl_rr(MacroAssembler::eax, MacroAssembler::eax);1786 m_jit.movl_mr(OBJECT_OFFSET(JSArray, m_storage), MacroAssembler::eax, MacroAssembler::eax); 1787 m_jit.movl_mr(OBJECT_OFFSET(ArrayStorage, m_length), MacroAssembler::eax, MacroAssembler::eax); 1788 1789 m_jit.addl_rr(MacroAssembler::eax, MacroAssembler::eax); 1790 1790 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1791 m_jit. emitAddl_i8r(1, MacroAssembler::eax);1791 m_jit.addl_i8r(1, MacroAssembler::eax); 1792 1792 1793 m_jit. emitRet();1793 m_jit.ret(); 1794 1794 1795 1795 void* code = m_jit.copy(); … … 1806 1806 { 1807 1807 // Check eax is a string 1808 m_jit. emitTestl_i32r(JSImmediate::TagMask, MacroAssembler::eax);1808 m_jit.testl_i32r(JSImmediate::TagMask, MacroAssembler::eax); 1809 1809 MacroAssembler::JmpSrc failureCases1 = m_jit.emitUnlinkedJne(); 1810 m_jit. emitCmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsStringVptr), MacroAssembler::eax);1810 m_jit.cmpl_i32m(reinterpret_cast<unsigned>(m_machine->m_jsStringVptr), MacroAssembler::eax); 1811 1811 MacroAssembler::JmpSrc failureCases2 = m_jit.emitUnlinkedJne(); 1812 1812 1813 1813 // Checks out okay! - get the length from the Ustring. 1814 m_jit. emitMovl_mr(OBJECT_OFFSET(JSString, m_value) + OBJECT_OFFSET(UString, m_rep), MacroAssembler::eax, MacroAssembler::eax);1815 m_jit. emitMovl_mr(OBJECT_OFFSET(UString::Rep, len), MacroAssembler::eax, MacroAssembler::eax);1816 1817 m_jit. emitAddl_rr(MacroAssembler::eax, MacroAssembler::eax);1814 m_jit.movl_mr(OBJECT_OFFSET(JSString, m_value) + OBJECT_OFFSET(UString, m_rep), MacroAssembler::eax, MacroAssembler::eax); 1815 m_jit.movl_mr(OBJECT_OFFSET(UString::Rep, len), MacroAssembler::eax, MacroAssembler::eax); 1816 1817 m_jit.addl_rr(MacroAssembler::eax, MacroAssembler::eax); 1818 1818 MacroAssembler::JmpSrc failureCases3 = m_jit.emitUnlinkedJo(); 1819 m_jit. emitAddl_i8r(1, MacroAssembler::eax);1819 m_jit.addl_i8r(1, MacroAssembler::eax); 1820 1820 1821 m_jit. emitRet();1821 m_jit.ret(); 1822 1822 1823 1823 void* code = m_jit.copy(); … … 1847 1847 // (0) Setup: 1848 1848 // Preserve regs & initialize outputRegister. 1849 jit. emitPushl_r(WRECGenerator::outputRegister);1850 jit. emitPushl_r(WRECGenerator::currentValueRegister);1849 jit.pushl_r(WRECGenerator::outputRegister); 1850 jit.pushl_r(WRECGenerator::currentValueRegister); 1851 1851 // push pos onto the stack, both to preserve and as a parameter available to parseDisjunction 1852 jit. emitPushl_r(WRECGenerator::currentPositionRegister);1852 jit.pushl_r(WRECGenerator::currentPositionRegister); 1853 1853 // load output pointer 1854 jit. emitMovl_mr(161854 jit.movl_mr(16 1855 1855 #if COMPILER(MSVC) 1856 1856 + 3 * sizeof(void*) … … 1878 1878 // Set return value & pop registers from the stack. 1879 1879 1880 jit. emitTestl_rr(WRECGenerator::outputRegister, WRECGenerator::outputRegister);1880 jit.testl_rr(WRECGenerator::outputRegister, WRECGenerator::outputRegister); 1881 1881 WRECGenerator::JmpSrc noOutput = jit.emitUnlinkedJe(); 1882 1882 1883 jit. emitMovl_rm(WRECGenerator::currentPositionRegister, 4, WRECGenerator::outputRegister);1884 jit. emitPopl_r(MacroAssembler::eax);1885 jit. emitMovl_rm(MacroAssembler::eax, WRECGenerator::outputRegister);1886 jit. emitPopl_r(WRECGenerator::currentValueRegister);1887 jit. emitPopl_r(WRECGenerator::outputRegister);1888 jit. emitRet();1883 jit.movl_rm(WRECGenerator::currentPositionRegister, 4, WRECGenerator::outputRegister); 1884 jit.popl_r(MacroAssembler::eax); 1885 jit.movl_rm(MacroAssembler::eax, WRECGenerator::outputRegister); 1886 jit.popl_r(WRECGenerator::currentValueRegister); 1887 jit.popl_r(WRECGenerator::outputRegister); 1888 jit.ret(); 1889 1889 1890 1890 jit.link(noOutput, jit.label()); 1891 1891 1892 jit. emitPopl_r(MacroAssembler::eax);1893 jit. emitMovl_rm(MacroAssembler::eax, WRECGenerator::outputRegister);1894 jit. emitPopl_r(WRECGenerator::currentValueRegister);1895 jit. emitPopl_r(WRECGenerator::outputRegister);1896 jit. emitRet();1892 jit.popl_r(MacroAssembler::eax); 1893 jit.movl_rm(MacroAssembler::eax, WRECGenerator::outputRegister); 1894 jit.popl_r(WRECGenerator::currentValueRegister); 1895 jit.popl_r(WRECGenerator::outputRegister); 1896 jit.ret(); 1897 1897 1898 1898 // (3) Failure: … … 1904 1904 failures.clear(); 1905 1905 1906 jit. emitMovl_mr(MacroAssembler::esp, WRECGenerator::currentPositionRegister);1907 jit. emitAddl_i8r(1, WRECGenerator::currentPositionRegister);1908 jit. emitMovl_rm(WRECGenerator::currentPositionRegister, MacroAssembler::esp);1909 jit. emitCmpl_rr(WRECGenerator::lengthRegister, WRECGenerator::currentPositionRegister);1906 jit.movl_mr(MacroAssembler::esp, WRECGenerator::currentPositionRegister); 1907 jit.addl_i8r(1, WRECGenerator::currentPositionRegister); 1908 jit.movl_rm(WRECGenerator::currentPositionRegister, MacroAssembler::esp); 1909 jit.cmpl_rr(WRECGenerator::lengthRegister, WRECGenerator::currentPositionRegister); 1910 1910 jit.link(jit.emitUnlinkedJle(), nextLabel); 1911 1911 1912 jit. emitAddl_i8r(4, MacroAssembler::esp);1913 1914 jit. emitMovl_i32r(-1, MacroAssembler::eax);1915 jit. emitPopl_r(WRECGenerator::currentValueRegister);1916 jit. emitPopl_r(WRECGenerator::outputRegister);1917 jit. emitRet();1912 jit.addl_i8r(4, MacroAssembler::esp); 1913 1914 jit.movl_i32r(-1, MacroAssembler::eax); 1915 jit.popl_r(WRECGenerator::currentValueRegister); 1916 jit.popl_r(WRECGenerator::outputRegister); 1917 jit.ret(); 1918 1918 1919 1919 *numSubpatterns_ptr = parser.m_numSubpatterns;
Note:
See TracChangeset
for help on using the changeset viewer.