Changeset 214069 in webkit for trunk/Source/JavaScriptCore/ftl/FTLLink.cpp
- Timestamp:
- Mar 16, 2017, 2:19:23 PM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ftl/FTLLink.cpp
r209764 r214069 128 128 switch (graph.m_plan.mode) { 129 129 case FTLMode: { 130 CCallHelpers::JumpList mainPathJumps; 131 132 jit.load32( 133 frame.withOffset(sizeof(Register) * CallFrameSlot::argumentCount), 134 GPRInfo::regT1); 135 mainPathJumps.append(jit.branch32( 136 CCallHelpers::AboveOrEqual, GPRInfo::regT1, 137 CCallHelpers::TrustedImm32(codeBlock->numParameters()))); 138 jit.emitFunctionPrologue(); 139 jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 140 jit.storePtr(GPRInfo::callFrameRegister, &vm.topCallFrame); 141 CCallHelpers::Call callArityCheck = jit.call(); 142 143 auto noException = jit.branch32(CCallHelpers::GreaterThanOrEqual, GPRInfo::returnValueGPR, CCallHelpers::TrustedImm32(0)); 144 jit.copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(); 145 jit.move(CCallHelpers::TrustedImmPtr(jit.vm()), GPRInfo::argumentGPR0); 146 jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR1); 147 CCallHelpers::Call callLookupExceptionHandlerFromCallerFrame = jit.call(); 148 jit.jumpToExceptionHandler(); 149 noException.link(&jit); 150 151 if (!ASSERT_DISABLED) { 152 jit.load64(vm.addressOfException(), GPRInfo::regT1); 153 jit.jitAssertIsNull(GPRInfo::regT1); 130 if (codeBlock->codeType() == FunctionCode) { 131 CCallHelpers::JumpList mainPathJumps; 132 133 jit.load32( 134 frame.withOffset(sizeof(Register) * CallFrameSlot::argumentCount), 135 GPRInfo::regT1); 136 mainPathJumps.append(jit.branch32( 137 CCallHelpers::AboveOrEqual, GPRInfo::regT1, 138 CCallHelpers::TrustedImm32(codeBlock->numParameters()))); 139 jit.emitFunctionPrologue(); 140 jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 141 jit.storePtr(GPRInfo::callFrameRegister, &vm.topCallFrame); 142 CCallHelpers::Call callArityCheck = jit.call(); 143 144 auto noException = jit.branch32(CCallHelpers::GreaterThanOrEqual, GPRInfo::returnValueGPR, CCallHelpers::TrustedImm32(0)); 145 jit.copyCalleeSavesToVMEntryFrameCalleeSavesBuffer(); 146 jit.move(CCallHelpers::TrustedImmPtr(jit.vm()), GPRInfo::argumentGPR0); 147 jit.move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR1); 148 CCallHelpers::Call callLookupExceptionHandlerFromCallerFrame = jit.call(); 149 jit.jumpToExceptionHandler(); 150 noException.link(&jit); 151 152 if (!ASSERT_DISABLED) { 153 jit.load64(vm.addressOfException(), GPRInfo::regT1); 154 jit.jitAssertIsNull(GPRInfo::regT1); 155 } 156 157 jit.move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR0); 158 jit.emitFunctionEpilogue(); 159 mainPathJumps.append(jit.branchTest32(CCallHelpers::Zero, GPRInfo::argumentGPR0)); 160 jit.emitFunctionPrologue(); 161 CCallHelpers::Call callArityFixup = jit.call(); 162 jit.emitFunctionEpilogue(); 163 mainPathJumps.append(jit.jump()); 164 165 linkBuffer = std::make_unique<LinkBuffer>(vm, jit, codeBlock, JITCompilationCanFail); 166 if (linkBuffer->didFailToAllocate()) { 167 state.allocationFailed = true; 168 return; 169 } 170 linkBuffer->link(callArityCheck, codeBlock->m_isConstructor ? operationConstructArityCheck : operationCallArityCheck); 171 linkBuffer->link(callLookupExceptionHandlerFromCallerFrame, lookupExceptionHandlerFromCallerFrame); 172 linkBuffer->link(callArityFixup, FunctionPtr((vm.getCTIStub(arityFixupGenerator)).code().executableAddress())); 173 linkBuffer->link(mainPathJumps, CodeLocationLabel(bitwise_cast<void*>(state.generatedFunction))); 154 174 } 155 156 jit.move(GPRInfo::returnValueGPR, GPRInfo::argumentGPR0); 157 jit.emitFunctionEpilogue(); 158 mainPathJumps.append(jit.branchTest32(CCallHelpers::Zero, GPRInfo::argumentGPR0)); 159 jit.emitFunctionPrologue(); 160 CCallHelpers::Call callArityFixup = jit.call(); 161 jit.emitFunctionEpilogue(); 162 mainPathJumps.append(jit.jump()); 163 164 linkBuffer = std::make_unique<LinkBuffer>(vm, jit, codeBlock, JITCompilationCanFail); 165 if (linkBuffer->didFailToAllocate()) { 166 state.allocationFailed = true; 167 return; 168 } 169 linkBuffer->link(callArityCheck, codeBlock->m_isConstructor ? operationConstructArityCheck : operationCallArityCheck); 170 linkBuffer->link(callLookupExceptionHandlerFromCallerFrame, lookupExceptionHandlerFromCallerFrame); 171 linkBuffer->link(callArityFixup, FunctionPtr((vm.getCTIStub(arityFixupGenerator)).code().executableAddress())); 172 linkBuffer->link(mainPathJumps, CodeLocationLabel(bitwise_cast<void*>(state.generatedFunction))); 173 175 174 176 state.jitCode->initializeAddressForCall(MacroAssemblerCodePtr(bitwise_cast<void*>(state.generatedFunction))); 175 177 break;
Note:
See TracChangeset
for help on using the changeset viewer.