• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10.1/JavaScriptCore-7600.1.17/jit/

Lines Matching defs:stubInfo

100 static void repatchByIdSelfAccess(VM& vm, CodeBlock* codeBlock, StructureStubInfo& stubInfo, Structure* structure, const Identifier& propertyName, PropertyOffset offset,
104 vm.registerWatchpointForImpureProperty(propertyName, stubInfo.addWatchpoint(codeBlock));
109 repatchCall(repatchBuffer, stubInfo.callReturnLocation, slowPathFunction);
112 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(-(intptr_t)stubInfo.patch.deltaCheckImmToCall), bitwise_cast<int32_t>(structure->id()));
113 repatchBuffer.setLoadInstructionIsActive(stubInfo.callReturnLocation.convertibleLoadAtOffset(stubInfo.patch.deltaCallToStorageLoad), isOutOfLineOffset(offset));
116 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToLoadOrStore), offsetRelativeToPatchedStorage(offset));
118 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToLoadOrStore), offsetRelativeToPatchedStorage(offset));
121 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToTagLoadOrStore), offsetRelativeToPatchedStorage(offset) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag));
122 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToPayloadLoadOrStore), offsetRelativeToPatchedStorage(offset) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload));
124 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToTagLoadOrStore), offsetRelativeToPatchedStorage(offset) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.tag));
125 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToPayloadLoadOrStore), offsetRelativeToPatchedStorage(offset) + OBJECT_OFFSETOF(EncodedValueDescriptor, asBits.payload));
131 JSCell* object, Structure* structure, CodeBlock* codeBlock, StructureStubInfo& stubInfo,
135 structure->addTransitionWatchpoint(stubInfo.addWatchpoint(codeBlock));
160 JSValue prototype, CodeBlock* codeBlock, StructureStubInfo& stubInfo,
169 prototype.asCell(), prototype.asCell()->structure(), codeBlock, stubInfo, jit,
173 static void replaceWithJump(RepatchBuffer& repatchBuffer, StructureStubInfo& stubInfo, const MacroAssemblerCodePtr target)
178 stubInfo.callReturnLocation.dataLabel32AtOffset(
179 -(intptr_t)stubInfo.patch.deltaCheckImmToCall)),
185 stubInfo.callReturnLocation.jumpAtOffset(
186 stubInfo.patch.deltaCallToJump),
222 static void linkRestoreScratch(LinkBuffer& patchBuffer, bool needToRestoreScratch, StructureStubInfo& stubInfo, MacroAssembler::Jump success, MacroAssembler::Jump fail, MacroAssembler::JumpList failureCases)
224 linkRestoreScratch(patchBuffer, needToRestoreScratch, success, fail, failureCases, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase));
289 FunctionPtr custom, StructureStubInfo& stubInfo, StructureChain* chain, size_t count,
294 GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
297 static_cast<GPRReg>(stubInfo.patch.valueTagGPR),
299 static_cast<GPRReg>(stubInfo.patch.valueGPR));
300 GPRReg scratchGPR = TempRegisterSet(stubInfo.patch.usedRegisters).getFreeGPR();
339 vm->registerWatchpointForImpureProperty(propertyName, stubInfo.addWatchpoint(codeBlock));
342 watchpointSet->add(stubInfo.addWatchpoint(codeBlock));
352 vm->registerWatchpointForImpureProperty(propertyName, stubInfo.addWatchpoint(codeBlock));
354 protoObject, protoStructure, codeBlock, stubInfo, stubJit,
435 callLinkInfo->codeOrigin = stubInfo.codeOrigin;
626 static InlineCacheAction tryCacheGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo)
638 GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
640 GPRReg resultTagGPR = static_cast<GPRReg>(stubInfo.patch.valueTagGPR);
642 GPRReg resultGPR = static_cast<GPRReg>(stubInfo.patch.valueGPR);
647 GPRReg scratchGPR = TempRegisterSet(stubInfo.patch.usedRegisters).getFreeGPR();
683 linkRestoreScratch(patchBuffer, needToRestoreScratch, stubInfo, success, fail, failureCases);
685 stubInfo.stubRoutine = FINALIZE_CODE_FOR_STUB(
688 toCString(*exec->codeBlock()).data(), stubInfo.callReturnLocation.labelAtOffset(
689 stubInfo.patch.deltaCallToDone).executableAddress()));
692 replaceWithJump(repatchBuffer, stubInfo, stubInfo.stubRoutine->code().code());
693 repatchCall(repatchBuffer, stubInfo.callReturnLocation, operationGetById);
713 patchBuffer.link(success, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone));
714 patchBuffer.link(failure, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase));
716 stubInfo.stubRoutine = FINALIZE_CODE_FOR_STUB(
719 toCString(*exec->codeBlock()).data(), stubInfo.callReturnLocation.labelAtOffset(
720 stubInfo.patch.deltaCallToDone).executableAddress()));
723 replaceWithJump(repatchBuffer, stubInfo, stubInfo.stubRoutine->code().code());
724 repatchCall(repatchBuffer, stubInfo.callReturnLocation, operationGetById);
746 repatchByIdSelfAccess(*vm, codeBlock, stubInfo, structure, propertyName, slot.cachedOffset(), operationGetByIdBuildList, true);
747 stubInfo.initGetByIdSelf(*vm, codeBlock->ownerExecutable(), structure);
751 repatchCall(codeBlock, stubInfo.callReturnLocation, operationGetByIdBuildList);
755 void repatchGetByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo)
759 if (tryCacheGetByID(exec, baseValue, propertyName, slot, stubInfo) == GiveUpOnCache)
760 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, operationGetById);
763 static void patchJumpToGetByIdStub(CodeBlock* codeBlock, StructureStubInfo& stubInfo, JITStubRoutine* stubRoutine)
765 RELEASE_ASSERT(stubInfo.accessType == access_get_by_id_list);
767 if (stubInfo.u.getByIdList.list->didSelfPatching()) {
769 stubInfo.callReturnLocation.jumpAtOffset(
770 stubInfo.patch.deltaCallToJump),
775 replaceWithJump(repatchBuffer, stubInfo, stubRoutine->code().code());
778 static InlineCacheAction tryBuildGetByIDList(ExecState* exec, JSValue baseValue, const Identifier& ident, const PropertySlot& slot, StructureStubInfo& stubInfo)
802 if (stubInfo.patch.spillMode == NeedToSpill) {
825 PolymorphicGetByIdList* list = PolymorphicGetByIdList::from(stubInfo);
833 exec, kindFor(slot), ident, customFor(slot), stubInfo, prototypeChain, count, offset,
835 stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone),
836 CodeLocationLabel(list->currentSlowPathTarget(stubInfo)), stubRoutine);
850 patchJumpToGetByIdStub(codeBlock, stubInfo, stubRoutine.get());
855 void buildGetByIDList(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PropertySlot& slot, StructureStubInfo& stubInfo)
859 if (tryBuildGetByIDList(exec, baseValue, propertyName, slot, stubInfo) == GiveUpOnCache)
860 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, operationGetById);
892 StructureStubInfo& stubInfo,
899 GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
901 GPRReg valueTagGPR = static_cast<GPRReg>(stubInfo.patch.valueTagGPR);
903 GPRReg valueGPR = static_cast<GPRReg>(stubInfo.patch.valueGPR);
905 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
957 patchBuffer.link(success, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone));
963 toCString(*exec->codeBlock()).data(), stubInfo.callReturnLocation.labelAtOffset(
964 stubInfo.patch.deltaCallToDone).executableAddress()));
972 StructureStubInfo& stubInfo,
982 GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
984 GPRReg valueTagGPR = static_cast<GPRReg>(stubInfo.patch.valueTagGPR);
986 GPRReg valueGPR = static_cast<GPRReg>(stubInfo.patch.valueGPR);
988 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
1034 oldStructure->storedPrototype(), exec->codeBlock(), stubInfo, stubJit, failureCases,
1040 (*it)->storedPrototype(), exec->codeBlock(), stubInfo, stubJit, failureCases,
1144 patchBuffer.link(success, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone));
1151 patchBuffer.link(successInSlowPath, stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone));
1161 toCString(*exec->codeBlock()).data(), stubInfo.callReturnLocation.labelAtOffset(
1162 stubInfo.patch.deltaCallToDone).executableAddress())),
1169 static InlineCacheAction tryCachePutByID(ExecState* exec, JSValue baseValue, const Identifier& ident, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
1214 exec, baseValue, ident, slot, stubInfo, putKind,
1216 stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase),
1217 stubInfo.stubRoutine);
1221 stubInfo.callReturnLocation.jumpAtOffset(
1222 stubInfo.patch.deltaCallToJump),
1223 CodeLocationLabel(stubInfo.stubRoutine->code().code()));
1224 repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateListBuildingPutByIdFunction(slot, putKind));
1226 stubInfo.initPutByIdTransition(*vm, codeBlock->ownerExecutable(), oldStructure, structure, prototypeChain, putKind == Direct);
1234 repatchByIdSelfAccess(*vm, codeBlock, stubInfo, structure, ident, slot.cachedOffset(), appropriateListBuildingPutByIdFunction(slot, putKind), false);
1235 stubInfo.initPutByIdReplace(*vm, codeBlock->ownerExecutable(), structure);
1239 && stubInfo.patch.spillMode == DontSpill) {
1253 list = PolymorphicPutByIdList::from(putKind, stubInfo);
1256 exec, kindFor(slot), ident, customFor(slot), stubInfo, prototypeChain, count,
1258 stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone),
1259 stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase),
1268 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine->code().code()));
1269 repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateListBuildingPutByIdFunction(slot, putKind));
1277 void repatchPutByID(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
1281 if (tryCachePutByID(exec, baseValue, propertyName, slot, stubInfo, putKind) == GiveUpOnCache)
1282 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
1285 static InlineCacheAction tryBuildPutByIdList(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
1329 list = PolymorphicPutByIdList::from(putKind, stubInfo);
1335 exec, baseValue, propertyName, slot, stubInfo, putKind,
1346 list = PolymorphicPutByIdList::from(putKind, stubInfo);
1352 exec, baseValue, propertyName, slot, stubInfo, putKind,
1362 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine->code().code()));
1365 repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
1371 && stubInfo.patch.spillMode == DontSpill) {
1384 list = PolymorphicPutByIdList::from(putKind, stubInfo);
1387 exec, kindFor(slot), propertyName, customFor(slot), stubInfo, prototypeChain, count,
1389 stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone),
1399 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine->code().code()));
1401 repatchCall(repatchBuffer, stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
1408 void buildPutByIdList(ExecState* exec, JSValue baseValue, const Identifier& propertyName, const PutPropertySlot& slot, StructureStubInfo& stubInfo, PutKind putKind)
1412 if (tryBuildPutByIdList(exec, baseValue, propertyName, slot, stubInfo, putKind) == GiveUpOnCache)
1413 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, appropriateGenericPutByIdFunction(slot, putKind));
1418 const PropertySlot& slot, StructureStubInfo& stubInfo)
1443 CodeLocationLabel successLabel = stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToDone);
1446 if (stubInfo.accessType == access_unset) {
1448 stubInfo.initInList(polymorphicStructureList, 0);
1449 slowCaseLabel = stubInfo.callReturnLocation.labelAtOffset(
1450 stubInfo.patch.deltaCallToSlowCase);
1453 RELEASE_ASSERT(stubInfo.accessType == access_in_list);
1454 polymorphicStructureList = stubInfo.u.inList.structureList;
1455 listIndex = stubInfo.u.inList.listSize;
1466 GPRReg baseGPR = static_cast<GPRReg>(stubInfo.patch.baseGPR);
1467 GPRReg resultGPR = static_cast<GPRReg>(stubInfo.patch.valueGPR);
1468 GPRReg scratchGPR = TempRegisterSet(stubInfo.patch.usedRegisters).getFreeGPR();
1488 vm->registerWatchpointForImpureProperty(ident, stubInfo.addWatchpoint(codeBlock));
1491 slot.watchpointSet()->add(stubInfo.addWatchpoint(codeBlock));
1499 prototype, protoStructure, exec->codeBlock(), stubInfo, stubJit,
1502 vm->registerWatchpointForImpureProperty(ident, stubInfo.addWatchpoint(codeBlock));
1528 stubInfo.u.inList.listSize++;
1531 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), CodeLocationLabel(stubRoutine->code().code()));
1538 const PropertySlot& slot, StructureStubInfo& stubInfo)
1540 if (tryRepatchIn(exec, base, ident, wasFound, slot, stubInfo) == GiveUpOnCache)
1541 repatchCall(exec->codeBlock(), stubInfo.callReturnLocation, operationIn);
1708 void resetGetByID(RepatchBuffer& repatchBuffer, StructureStubInfo& stubInfo)
1710 repatchCall(repatchBuffer, stubInfo.callReturnLocation, operationGetByIdOptimize);
1711 CodeLocationDataLabel32 structureLabel = stubInfo.callReturnLocation.dataLabel32AtOffset(-(intptr_t)stubInfo.patch.deltaCheckImmToCall);
1716 static_cast<MacroAssembler::RegisterID>(stubInfo.patch.baseGPR),
1722 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToLoadOrStore), 0);
1724 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToTagLoadOrStore), 0);
1725 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabelCompactAtOffset(stubInfo.patch.deltaCallToPayloadLoadOrStore), 0);
1727 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase));
1730 void resetPutByID(RepatchBuffer& repatchBuffer, StructureStubInfo& stubInfo)
1732 V_JITOperation_ESsiJJI unoptimizedFunction = bitwise_cast<V_JITOperation_ESsiJJI>(readCallTarget(repatchBuffer, stubInfo.callReturnLocation).executableAddress());
1744 repatchCall(repatchBuffer, stubInfo.callReturnLocation, optimizedFunction);
1745 CodeLocationDataLabel32 structureLabel = stubInfo.callReturnLocation.dataLabel32AtOffset(-(intptr_t)stubInfo.patch.deltaCheckImmToCall);
1750 static_cast<MacroAssembler::RegisterID>(stubInfo.patch.baseGPR),
1756 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToLoadOrStore), 0);
1758 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToTagLoadOrStore), 0);
1759 repatchBuffer.repatch(stubInfo.callReturnLocation.dataLabel32AtOffset(stubInfo.patch.deltaCallToPayloadLoadOrStore), 0);
1761 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase));
1764 void resetIn(RepatchBuffer& repatchBuffer, StructureStubInfo& stubInfo)
1766 repatchBuffer.relink(stubInfo.callReturnLocation.jumpAtOffset(stubInfo.patch.deltaCallToJump), stubInfo.callReturnLocation.labelAtOffset(stubInfo.patch.deltaCallToSlowCase));