Changeset 252690 in webkit
- Timestamp:
- Nov 20, 2019 9:48:39 AM (4 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r252684 r252690 1 2019-11-20 Caio Lima <ticaiolima@gmail.com> 2 3 Regression (r252680): JSCOnly build broken: no matching function for call to JSC::DFG::SpeculativeJIT::jsValueResult 4 https://bugs.webkit.org/show_bug.cgi?id=204404 5 6 Reviewed by Saam Barati. 7 8 Adjusting build after changes from r252684 and r252680. 9 10 * bytecode/AccessCase.cpp: 11 (JSC::AccessCase::generateWithGuard): 12 * dfg/DFGSpeculativeJIT.cpp: 13 (JSC::DFG::SpeculativeJIT::compileIncOrDec): 14 * dfg/DFGSpeculativeJIT32_64.cpp: 15 (JSC::DFG::SpeculativeJIT::compile): 16 * jit/JITOpcodes32_64.cpp: 17 (JSC::JIT::emit_op_to_numeric): 18 * jit/JITPropertyAccess32_64.cpp: 19 (JSC::JIT::emit_op_get_by_val): 20 (JSC::JIT::emitSlow_op_get_by_val): 21 1 22 2019-11-19 Saam Barati <sbarati@apple.com> 2 23 -
trunk/Source/JavaScriptCore/bytecode/AccessCase.cpp
r252684 r252690 869 869 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters); 870 870 allocator.lock(baseGPR); 871 allocator.lock(valueRegs. gpr());871 allocator.lock(valueRegs.payloadGPR()); 872 872 allocator.lock(propertyGPR); 873 873 allocator.lock(scratchGPR); … … 899 899 jit.neg32(scratch2GPR); 900 900 jit.loadPtr(CCallHelpers::Address(baseGPR, ScopedArguments::offsetOfStorage()), scratch3GPR); 901 jit.loadValue(CCallHelpers::BaseIndex(scratch3GPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs (scratchGPR));901 jit.loadValue(CCallHelpers::BaseIndex(scratch3GPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs::payloadOnly(scratchGPR)); 902 902 failAndIgnore.append(jit.branchIfEmpty(scratchGPR)); 903 jit.move(scratchGPR, valueRegs. gpr());903 jit.move(scratchGPR, valueRegs.payloadGPR()); 904 904 905 905 done.link(&jit); … … 957 957 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters); 958 958 allocator.lock(baseGPR); 959 allocator.lock(valueRegs. gpr());959 allocator.lock(valueRegs.payloadGPR()); 960 960 allocator.lock(propertyGPR); 961 961 allocator.lock(scratchGPR); … … 973 973 case 1: 974 974 if (JSC::isSigned(type)) 975 jit.load8SignedExtendTo32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs. gpr());975 jit.load8SignedExtendTo32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs.payloadGPR()); 976 976 else 977 jit.load8(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs. gpr());977 jit.load8(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs.payloadGPR()); 978 978 break; 979 979 case 2: 980 980 if (JSC::isSigned(type)) 981 jit.load16SignedExtendTo32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs. gpr());981 jit.load16SignedExtendTo32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs.payloadGPR()); 982 982 else 983 jit.load16(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs. gpr());983 jit.load16(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs.payloadGPR()); 984 984 break; 985 985 case 4: 986 jit.load32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesFour), valueRegs. gpr());986 jit.load32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesFour), valueRegs.payloadGPR()); 987 987 break; 988 988 default: … … 993 993 if (type == TypeUint32) { 994 994 RELEASE_ASSERT(state.scratchFPR != InvalidFPRReg); 995 auto canBeInt = jit.branch32(CCallHelpers::GreaterThanOrEqual, valueRegs. gpr(), CCallHelpers::TrustedImm32(0));995 auto canBeInt = jit.branch32(CCallHelpers::GreaterThanOrEqual, valueRegs.payloadGPR(), CCallHelpers::TrustedImm32(0)); 996 996 997 jit.convertInt32ToDouble(valueRegs. gpr(), state.scratchFPR);997 jit.convertInt32ToDouble(valueRegs.payloadGPR(), state.scratchFPR); 998 998 jit.addDouble(CCallHelpers::AbsoluteAddress(&CCallHelpers::twoToThe32), state.scratchFPR); 999 999 jit.boxDouble(state.scratchFPR, valueRegs); … … 1002 1002 } 1003 1003 1004 jit.boxInt32(valueRegs. gpr(), valueRegs);1004 jit.boxInt32(valueRegs.payloadGPR(), valueRegs); 1005 1005 if (done.isSet()) 1006 1006 done.link(&jit); … … 1039 1039 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters); 1040 1040 allocator.lock(baseGPR); 1041 allocator.lock(valueRegs. gpr());1041 allocator.lock(valueRegs.payloadGPR()); 1042 1042 allocator.lock(propertyGPR); 1043 1043 allocator.lock(scratchGPR); … … 1068 1068 failAndIgnore.append(jit.branch32(CCallHelpers::Above, scratch2GPR, CCallHelpers::TrustedImm32(maxSingleCharacterString))); 1069 1069 jit.move(CCallHelpers::TrustedImmPtr(vm.smallStrings.singleCharacterStrings()), scratchGPR); 1070 jit.loadPtr(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::ScalePtr, 0), valueRegs. gpr());1070 jit.loadPtr(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::ScalePtr, 0), valueRegs.payloadGPR()); 1071 1071 allocator.restoreReusedRegistersByPopping(jit, preservedState); 1072 1072 state.succeed(); … … 1098 1098 ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters); 1099 1099 allocator.lock(baseGPR); 1100 allocator.lock(valueRegs. gpr());1100 allocator.lock(valueRegs.payloadGPR()); 1101 1101 allocator.lock(propertyGPR); 1102 1102 allocator.lock(scratchGPR); … … 1119 1119 1120 1120 jit.zeroExtend32ToPtr(propertyGPR, scratch2GPR); 1121 jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight, ArrayStorage::vectorOffset()), JSValueRegs (scratchGPR));1121 jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight, ArrayStorage::vectorOffset()), JSValueRegs::payloadOnly(scratchGPR)); 1122 1122 isEmpty = jit.branchIfEmpty(scratchGPR); 1123 jit.move(scratchGPR, valueRegs. gpr());1123 jit.move(scratchGPR, valueRegs.payloadGPR()); 1124 1124 } else { 1125 1125 IndexingType expectedShape; … … 1152 1152 jit.boxDouble(state.scratchFPR, valueRegs); 1153 1153 } else { 1154 jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs (scratchGPR));1154 jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs::payloadOnly(scratchGPR)); 1155 1155 isEmpty = jit.branchIfEmpty(scratchGPR); 1156 jit.move(scratchGPR, valueRegs. gpr());1156 jit.move(scratchGPR, valueRegs.payloadGPR()); 1157 1157 } 1158 1158 } -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp
r252684 r252690 4618 4618 JSValueRegs op1Regs = op1.jsValueRegs(); 4619 4619 flushRegisters(); 4620 GPRFlushedCallResult result(this);4621 GPRReg resultGPR = result.gpr();4620 JSValueRegsFlushedCallResult result(this); 4621 JSValueRegs resultRegs = result.regs(); 4622 4622 auto operation = node->op() == Inc ? operationInc : operationDec; 4623 callOperation(operation, result GPR, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), op1Regs);4623 callOperation(operation, resultRegs, TrustedImmPtr::weakPointer(m_graph, m_graph.globalObjectFor(node->origin.semantic)), op1Regs); 4624 4624 m_jit.exceptionCheck(); 4625 jsValueResult(result .gpr(), node);4625 jsValueResult(resultRegs, node); 4626 4626 } 4627 4627 -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp
r252684 r252690 1822 1822 break; 1823 1823 } 1824 1825 case Inc: 1826 case Dec: 1827 compileIncOrDec(node); 1828 break; 1824 1829 1825 1830 case GetLocal: { -
trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp
r252680 r252690 845 845 int dst = bytecode.m_dst.offset(); 846 846 int src = bytecode.m_operand.offset(); 847 JSValueRegs argumentValueRegs(regT1, regT0); 847 848 848 849 emitLoad(src, regT1, regT0); … … 853 854 854 855 isNotCell.link(this); 855 addSlowCase(branchIfNotNumber( regT1));856 addSlowCase(branchIfNotNumber(argumentValueRegs, regT2)); 856 857 isBigInt.link(this); 857 858 -
trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp
r252684 r252690 146 146 int base = bytecode.m_base.offset(); 147 147 int property = bytecode.m_property.offset(); 148 ArrayProfile* profile = &metadata.m_arrayProfile; 149 148 150 emitLoad2(base, regT1, regT0, property, regT3, regT2); 149 callOperation(operationGetByVal, dst, m_codeBlock->globalObject(), JSValueRegs(regT1, regT0), JSValueRegs(regT3, regT2)); 151 152 emitJumpSlowCaseIfNotJSCell(base, regT1); 153 emitArrayProfilingSiteWithCell(regT0, regT4, profile); 154 155 JITGetByValGenerator gen( 156 m_codeBlock, CodeOrigin(m_bytecodeIndex), CallSiteIndex(m_bytecodeIndex), RegisterSet::stubUnavailableRegisters(), 157 JSValueRegs::payloadOnly(regT0), JSValueRegs(regT3, regT2), JSValueRegs(regT1, regT0)); 158 gen.generateFastPath(*this); 159 addSlowCase(gen.slowPathJump()); 160 m_getByVals.append(gen); 161 162 emitValueProfilingSite(bytecode.metadata(m_codeBlock)); 163 emitStore(dst, regT1, regT0); 150 164 } 151 165 … … 154 168 auto bytecode = currentInstruction->as<OpGetByVal>(); 155 169 int dst = bytecode.m_dst.offset(); 156 int base = bytecode.m_base.offset(); 157 int property = bytecode.m_property.offset(); 158 ByValInfo* byValInfo = m_byValCompilationInfo[m_byValInstructionIndex].byValInfo; 159 160 linkSlowCaseIfNotJSCell(iter, base); // base cell check 161 linkSlowCase(iter); // property int32 check 162 163 Jump nonCell = jump(); 164 linkSlowCase(iter); // base array check 165 Jump notString = branchIfNotString(regT0); 166 emitNakedCall(CodeLocationLabel<NoPtrTag>(m_vm->getCTIStub(stringGetByValGenerator).retaggedCode<NoPtrTag>())); 167 Jump failed = branchTestPtr(Zero, regT0); 168 emitStoreCell(dst, regT0); 169 emitJumpSlowToHot(jump(), currentInstruction->size()); 170 failed.link(this); 171 notString.link(this); 172 nonCell.link(this); 173 174 linkSlowCase(iter); // vector length check 175 linkSlowCase(iter); // empty value 176 177 Label slowPath = label(); 178 179 emitLoad(base, regT1, regT0); 180 emitLoad(property, regT3, regT2); 181 Call call = callOperation(operationGetByValOptimize, dst, m_codeBlock->globalObject(), JSValueRegs(regT1, regT0), JSValueRegs(regT3, regT2), byValInfo); 182 183 m_byValCompilationInfo[m_byValInstructionIndex].slowPathTarget = slowPath; 184 m_byValCompilationInfo[m_byValInstructionIndex].returnAddress = call; 185 m_byValInstructionIndex++; 186 187 emitValueProfilingSite(bytecode.metadata(m_codeBlock)); 170 auto& metadata = bytecode.metadata(m_codeBlock); 171 ArrayProfile* profile = &metadata.m_arrayProfile; 172 173 JITGetByValGenerator& gen = m_getByVals[m_getByValIndex]; 174 ++m_getByValIndex; 175 176 linkAllSlowCases(iter); 177 178 Label coldPathBegin = label(); 179 Call call = callOperationWithProfile(bytecode.metadata(m_codeBlock), operationGetByValGeneric, dst, TrustedImmPtr(m_codeBlock->globalObject()), gen.stubInfo(), profile, JSValueRegs(regT1, regT0), JSValueRegs(regT3, regT2)); 180 gen.reportSlowPathCall(coldPathBegin, call); 188 181 } 189 182
Note: See TracChangeset
for help on using the changeset viewer.