Changeset 50982 in webkit for trunk/JavaScriptCore/jit/JITPropertyAccess.cpp
- Timestamp:
- Nov 13, 2009, 5:07:01 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JITPropertyAccess.cpp
r50254 r50982 213 213 emitJumpSlowCaseIfNotJSCell(base, regT1); 214 214 215 BEGIN_UNINTERRUPTED_SEQUENCE(sequenceMethodCheck); 216 215 217 Jump structureCheck = branchPtrWithPatch(NotEqual, Address(regT0, OBJECT_OFFSETOF(JSCell, m_structure)), info.structureToCompare, ImmPtr(reinterpret_cast<void*>(patchGetByIdDefaultStructure))); 216 218 DataLabelPtr protoStructureToCompare, protoObj = moveWithPatch(ImmPtr(0), regT2); … … 219 221 // This will be relinked to load the function without doing a load. 220 222 DataLabelPtr putFunction = moveWithPatch(ImmPtr(0), regT0); 223 224 END_UNINTERRUPTED_SEQUENCE(sequenceMethodCheck); 225 221 226 move(Imm32(JSValue::CellTag), regT1); 222 227 Jump match = jump(); … … 375 380 // to array-length / prototype access tranpolines, and finally we also the the property-map access offset as a label 376 381 // to jump back to if one of these trampolies finds a match. 382 383 BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath); 384 377 385 Label hotPathBegin(this); 378 386 m_propertyAccessCompilationInfo[m_propertyAccessInstructionIndex].hotPathBegin = hotPathBegin; … … 397 405 Label putResult(this); 398 406 ASSERT(differenceBetween(hotPathBegin, putResult) == patchOffsetGetByIdPutResult); 407 408 END_UNINTERRUPTED_SEQUENCE(sequenceGetByIdHotPath); 399 409 } 400 410 … … 418 428 linkSlowCase(iter); 419 429 430 BEGIN_UNINTERRUPTED_SEQUENCE(sequenceGetByIdSlowCase); 431 432 #ifndef NDEBUG 420 433 Label coldPathBegin(this); 421 434 #endif 422 435 JITStubCall stubCall(this, isMethodCheck ? cti_op_get_by_id_method_check : cti_op_get_by_id); 423 436 stubCall.addArgument(regT1, regT0); … … 425 438 Call call = stubCall.call(dst); 426 439 440 END_UNINTERRUPTED_SEQUENCE(sequenceGetByIdSlowCase); 441 427 442 ASSERT(differenceBetween(coldPathBegin, call) == patchOffsetGetByIdSlowCaseCall); 428 443 … … 444 459 445 460 emitJumpSlowCaseIfNotJSCell(base, regT1); 461 462 BEGIN_UNINTERRUPTED_SEQUENCE(sequencePutById); 446 463 447 464 Label hotPathBegin(this); … … 462 479 DataLabel32 displacementLabel1 = storePtrWithAddressOffsetPatch(regT2, Address(regT0, patchGetByIdDefaultOffset)); // payload 463 480 DataLabel32 displacementLabel2 = storePtrWithAddressOffsetPatch(regT3, Address(regT0, patchGetByIdDefaultOffset)); // tag 481 482 END_UNINTERRUPTED_SEQUENCE(sequencePutById); 483 464 484 ASSERT(differenceBetween(hotPathBegin, displacementLabel1) == patchOffsetPutByIdPropertyMapOffset1); 465 485 ASSERT(differenceBetween(hotPathBegin, displacementLabel2) == patchOffsetPutByIdPropertyMapOffset2);
Note:
See TracChangeset
for help on using the changeset viewer.