Changeset 252690 in webkit


Ignore:
Timestamp:
Nov 20, 2019 9:48:39 AM (4 years ago)
Author:
Caio Lima
Message:

Regression (r252680): JSCOnly build broken: no matching function for call to JSC::DFG::SpeculativeJIT::jsValueResult
https://bugs.webkit.org/show_bug.cgi?id=204404

Reviewed by Saam Barati.

Adjusting build after changes from r252684 and r252680.

  • bytecode/AccessCase.cpp:

(JSC::AccessCase::generateWithGuard):

  • dfg/DFGSpeculativeJIT.cpp:

(JSC::DFG::SpeculativeJIT::compileIncOrDec):

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::compile):

  • jit/JITOpcodes32_64.cpp:

(JSC::JIT::emit_op_to_numeric):

  • jit/JITPropertyAccess32_64.cpp:

(JSC::JIT::emit_op_get_by_val):
(JSC::JIT::emitSlow_op_get_by_val):

Location:
trunk/Source/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r252684 r252690  
     12019-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
    1222019-11-19  Saam Barati  <sbarati@apple.com>
    223
  • trunk/Source/JavaScriptCore/bytecode/AccessCase.cpp

    r252684 r252690  
    869869        ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
    870870        allocator.lock(baseGPR);
    871         allocator.lock(valueRegs.gpr());
     871        allocator.lock(valueRegs.payloadGPR());
    872872        allocator.lock(propertyGPR);
    873873        allocator.lock(scratchGPR);
     
    899899        jit.neg32(scratch2GPR);
    900900        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));
    902902        failAndIgnore.append(jit.branchIfEmpty(scratchGPR));
    903         jit.move(scratchGPR, valueRegs.gpr());
     903        jit.move(scratchGPR, valueRegs.payloadGPR());
    904904
    905905        done.link(&jit);
     
    957957        ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
    958958        allocator.lock(baseGPR);
    959         allocator.lock(valueRegs.gpr());
     959        allocator.lock(valueRegs.payloadGPR());
    960960        allocator.lock(propertyGPR);
    961961        allocator.lock(scratchGPR);
     
    973973            case 1:
    974974                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());
    976976                else
    977                     jit.load8(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs.gpr());
     977                    jit.load8(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesOne), valueRegs.payloadGPR());
    978978                break;
    979979            case 2:
    980980                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());
    982982                else
    983                     jit.load16(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs.gpr());
     983                    jit.load16(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesTwo), valueRegs.payloadGPR());
    984984                break;
    985985            case 4:
    986                 jit.load32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesFour), valueRegs.gpr());
     986                jit.load32(CCallHelpers::BaseIndex(scratch2GPR, scratchGPR, CCallHelpers::TimesFour), valueRegs.payloadGPR());
    987987                break;
    988988            default:
     
    993993            if (type == TypeUint32) {
    994994                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));
    996996               
    997                 jit.convertInt32ToDouble(valueRegs.gpr(), state.scratchFPR);
     997                jit.convertInt32ToDouble(valueRegs.payloadGPR(), state.scratchFPR);
    998998                jit.addDouble(CCallHelpers::AbsoluteAddress(&CCallHelpers::twoToThe32), state.scratchFPR);
    999999                jit.boxDouble(state.scratchFPR, valueRegs);
     
    10021002            }
    10031003
    1004             jit.boxInt32(valueRegs.gpr(), valueRegs);
     1004            jit.boxInt32(valueRegs.payloadGPR(), valueRegs);
    10051005            if (done.isSet())
    10061006                done.link(&jit);
     
    10391039        ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
    10401040        allocator.lock(baseGPR);
    1041         allocator.lock(valueRegs.gpr());
     1041        allocator.lock(valueRegs.payloadGPR());
    10421042        allocator.lock(propertyGPR);
    10431043        allocator.lock(scratchGPR);
     
    10681068        failAndIgnore.append(jit.branch32(CCallHelpers::Above, scratch2GPR, CCallHelpers::TrustedImm32(maxSingleCharacterString)));
    10691069        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());
    10711071        allocator.restoreReusedRegistersByPopping(jit, preservedState);
    10721072        state.succeed();
     
    10981098        ScratchRegisterAllocator allocator(stubInfo.patch.usedRegisters);
    10991099        allocator.lock(baseGPR);
    1100         allocator.lock(valueRegs.gpr());
     1100        allocator.lock(valueRegs.payloadGPR());
    11011101        allocator.lock(propertyGPR);
    11021102        allocator.lock(scratchGPR);
     
    11191119
    11201120            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));
    11221122            isEmpty = jit.branchIfEmpty(scratchGPR);
    1123             jit.move(scratchGPR, valueRegs.gpr());
     1123            jit.move(scratchGPR, valueRegs.payloadGPR());
    11241124        } else {
    11251125            IndexingType expectedShape;
     
    11521152                jit.boxDouble(state.scratchFPR, valueRegs);
    11531153            } else {
    1154                 jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs(scratchGPR));
     1154                jit.loadValue(CCallHelpers::BaseIndex(scratchGPR, scratch2GPR, CCallHelpers::TimesEight), JSValueRegs::payloadOnly(scratchGPR));
    11551155                isEmpty = jit.branchIfEmpty(scratchGPR);
    1156                 jit.move(scratchGPR, valueRegs.gpr());
     1156                jit.move(scratchGPR, valueRegs.payloadGPR());
    11571157            }
    11581158        }
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp

    r252684 r252690  
    46184618    JSValueRegs op1Regs = op1.jsValueRegs();
    46194619    flushRegisters();
    4620     GPRFlushedCallResult result(this);
    4621     GPRReg resultGPR = result.gpr();
     4620    JSValueRegsFlushedCallResult result(this);
     4621    JSValueRegs resultRegs = result.regs();
    46224622    auto operation = node->op() == Inc ? operationInc : operationDec;
    4623     callOperation(operation, resultGPR, 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);
    46244624    m_jit.exceptionCheck();
    4625     jsValueResult(result.gpr(), node);
     4625    jsValueResult(resultRegs, node);
    46264626}
    46274627
  • trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp

    r252684 r252690  
    18221822        break;
    18231823    }
     1824
     1825    case Inc:
     1826    case Dec:
     1827        compileIncOrDec(node);
     1828        break;
    18241829
    18251830    case GetLocal: {
  • trunk/Source/JavaScriptCore/jit/JITOpcodes32_64.cpp

    r252680 r252690  
    845845    int dst = bytecode.m_dst.offset();
    846846    int src = bytecode.m_operand.offset();
     847    JSValueRegs argumentValueRegs(regT1, regT0);
    847848
    848849    emitLoad(src, regT1, regT0);
     
    853854
    854855    isNotCell.link(this);
    855     addSlowCase(branchIfNotNumber(regT1));
     856    addSlowCase(branchIfNotNumber(argumentValueRegs, regT2));
    856857    isBigInt.link(this);
    857858
  • trunk/Source/JavaScriptCore/jit/JITPropertyAccess32_64.cpp

    r252684 r252690  
    146146    int base = bytecode.m_base.offset();
    147147    int property = bytecode.m_property.offset();
     148    ArrayProfile* profile = &metadata.m_arrayProfile;
     149
    148150    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);
    150164}
    151165
     
    154168    auto bytecode = currentInstruction->as<OpGetByVal>();
    155169    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);
    188181}
    189182
Note: See TracChangeset for help on using the changeset viewer.