js/src/jit/Lowering.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     2  * vim: set ts=8 sts=4 et sw=4 tw=99:
     3  * This Source Code Form is subject to the terms of the Mozilla Public
     4  * License, v. 2.0. If a copy of the MPL was not distributed with this
     5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     7 #ifndef jit_Lowering_h
     8 #define jit_Lowering_h
    10 // This file declares the structures that are used for attaching LIR to a
    11 // MIRGraph.
    13 #include "jit/LIR.h"
    14 #if defined(JS_CODEGEN_X86)
    15 # include "jit/x86/Lowering-x86.h"
    16 #elif defined(JS_CODEGEN_X64)
    17 # include "jit/x64/Lowering-x64.h"
    18 #elif defined(JS_CODEGEN_ARM)
    19 # include "jit/arm/Lowering-arm.h"
    20 #elif defined(JS_CODEGEN_MIPS)
    21 # include "jit/mips/Lowering-mips.h"
    22 #else
    23 # error "Unknown architecture!"
    24 #endif
    26 namespace js {
    27 namespace jit {
    29 class LIRGenerator : public LIRGeneratorSpecific
    30 {
    31     void updateResumeState(MInstruction *ins);
    32     void updateResumeState(MBasicBlock *block);
    34     // The maximum depth, for framesizeclass determination.
    35     uint32_t maxargslots_;
    37   public:
    38     LIRGenerator(MIRGenerator *gen, MIRGraph &graph, LIRGraph &lirGraph)
    39       : LIRGeneratorSpecific(gen, graph, lirGraph),
    40         maxargslots_(0)
    41     { }
    43     bool generate();
    45   private:
    47     bool useBoxAtStart(LInstruction *lir, size_t n, MDefinition *mir,
    48                        LUse::Policy policy = LUse::REGISTER) {
    49         return useBox(lir, n, mir, policy, true);
    50     }
    52     bool lowerBitOp(JSOp op, MInstruction *ins);
    53     bool lowerShiftOp(JSOp op, MShiftInstruction *ins);
    54     bool lowerBinaryV(JSOp op, MBinaryInstruction *ins);
    55     bool precreatePhi(LBlock *block, MPhi *phi);
    56     bool definePhis();
    58     bool lowerCallArguments(MCall *call);
    60   public:
    61     bool visitInstruction(MInstruction *ins);
    62     bool visitBlock(MBasicBlock *block);
    64     // Visitor hooks are explicit, to give CPU-specific versions a chance to
    65     // intercept without a bunch of explicit gunk in the .cpp.
    66     bool visitCloneLiteral(MCloneLiteral *ins);
    67     bool visitParameter(MParameter *param);
    68     bool visitCallee(MCallee *callee);
    69     bool visitGoto(MGoto *ins);
    70     bool visitTableSwitch(MTableSwitch *tableswitch);
    71     bool visitNewSlots(MNewSlots *ins);
    72     bool visitNewArray(MNewArray *ins);
    73     bool visitNewObject(MNewObject *ins);
    74     bool visitNewDeclEnvObject(MNewDeclEnvObject *ins);
    75     bool visitNewCallObject(MNewCallObject *ins);
    76     bool visitNewRunOnceCallObject(MNewRunOnceCallObject *ins);
    77     bool visitNewStringObject(MNewStringObject *ins);
    78     bool visitNewDerivedTypedObject(MNewDerivedTypedObject *ins);
    79     bool visitNewPar(MNewPar *ins);
    80     bool visitNewCallObjectPar(MNewCallObjectPar *ins);
    81     bool visitNewDenseArrayPar(MNewDenseArrayPar *ins);
    82     bool visitAbortPar(MAbortPar *ins);
    83     bool visitInitElem(MInitElem *ins);
    84     bool visitInitElemGetterSetter(MInitElemGetterSetter *ins);
    85     bool visitMutateProto(MMutateProto *ins);
    86     bool visitInitProp(MInitProp *ins);
    87     bool visitInitPropGetterSetter(MInitPropGetterSetter *ins);
    88     bool visitCheckOverRecursed(MCheckOverRecursed *ins);
    89     bool visitCheckOverRecursedPar(MCheckOverRecursedPar *ins);
    90     bool visitDefVar(MDefVar *ins);
    91     bool visitDefFun(MDefFun *ins);
    92     bool visitCreateThisWithTemplate(MCreateThisWithTemplate *ins);
    93     bool visitCreateThisWithProto(MCreateThisWithProto *ins);
    94     bool visitCreateThis(MCreateThis *ins);
    95     bool visitCreateArgumentsObject(MCreateArgumentsObject *ins);
    96     bool visitGetArgumentsObjectArg(MGetArgumentsObjectArg *ins);
    97     bool visitSetArgumentsObjectArg(MSetArgumentsObjectArg *ins);
    98     bool visitReturnFromCtor(MReturnFromCtor *ins);
    99     bool visitComputeThis(MComputeThis *ins);
   100     bool visitLoadArrowThis(MLoadArrowThis *ins);
   101     bool visitCall(MCall *call);
   102     bool visitApplyArgs(MApplyArgs *apply);
   103     bool visitArraySplice(MArraySplice *splice);
   104     bool visitBail(MBail *bail);
   105     bool visitAssertFloat32(MAssertFloat32 *ins);
   106     bool visitGetDynamicName(MGetDynamicName *ins);
   107     bool visitFilterArgumentsOrEval(MFilterArgumentsOrEval *ins);
   108     bool visitCallDirectEval(MCallDirectEval *ins);
   109     bool visitTest(MTest *test);
   110     bool visitFunctionDispatch(MFunctionDispatch *ins);
   111     bool visitTypeObjectDispatch(MTypeObjectDispatch *ins);
   112     bool visitCompare(MCompare *comp);
   113     bool visitTypeOf(MTypeOf *ins);
   114     bool visitToId(MToId *ins);
   115     bool visitBitNot(MBitNot *ins);
   116     bool visitBitAnd(MBitAnd *ins);
   117     bool visitBitOr(MBitOr *ins);
   118     bool visitBitXor(MBitXor *ins);
   119     bool visitLsh(MLsh *ins);
   120     bool visitRsh(MRsh *ins);
   121     bool visitUrsh(MUrsh *ins);
   122     bool visitFloor(MFloor *ins);
   123     bool visitRound(MRound *ins);
   124     bool visitMinMax(MMinMax *ins);
   125     bool visitAbs(MAbs *ins);
   126     bool visitSqrt(MSqrt *ins);
   127     bool visitAtan2(MAtan2 *ins);
   128     bool visitHypot(MHypot *ins);
   129     bool visitPow(MPow *ins);
   130     bool visitRandom(MRandom *ins);
   131     bool visitMathFunction(MMathFunction *ins);
   132     bool visitAdd(MAdd *ins);
   133     bool visitSub(MSub *ins);
   134     bool visitMul(MMul *ins);
   135     bool visitDiv(MDiv *ins);
   136     bool visitMod(MMod *ins);
   137     bool visitConcat(MConcat *ins);
   138     bool visitConcatPar(MConcatPar *ins);
   139     bool visitCharCodeAt(MCharCodeAt *ins);
   140     bool visitFromCharCode(MFromCharCode *ins);
   141     bool visitStringSplit(MStringSplit *ins);
   142     bool visitStart(MStart *start);
   143     bool visitOsrEntry(MOsrEntry *entry);
   144     bool visitNop(MNop *nop);
   145     bool visitOsrValue(MOsrValue *value);
   146     bool visitOsrScopeChain(MOsrScopeChain *object);
   147     bool visitOsrReturnValue(MOsrReturnValue *value);
   148     bool visitOsrArgumentsObject(MOsrArgumentsObject *object);
   149     bool visitToDouble(MToDouble *convert);
   150     bool visitToFloat32(MToFloat32 *convert);
   151     bool visitToInt32(MToInt32 *convert);
   152     bool visitTruncateToInt32(MTruncateToInt32 *truncate);
   153     bool visitToString(MToString *convert);
   154     bool visitRegExp(MRegExp *ins);
   155     bool visitRegExpExec(MRegExpExec *ins);
   156     bool visitRegExpTest(MRegExpTest *ins);
   157     bool visitRegExpReplace(MRegExpReplace *ins);
   158     bool visitStringReplace(MStringReplace *ins);
   159     bool visitLambda(MLambda *ins);
   160     bool visitLambdaArrow(MLambdaArrow *ins);
   161     bool visitLambdaPar(MLambdaPar *ins);
   162     bool visitImplicitThis(MImplicitThis *ins);
   163     bool visitSlots(MSlots *ins);
   164     bool visitElements(MElements *ins);
   165     bool visitConstantElements(MConstantElements *ins);
   166     bool visitConvertElementsToDoubles(MConvertElementsToDoubles *ins);
   167     bool visitMaybeToDoubleElement(MMaybeToDoubleElement *ins);
   168     bool visitLoadSlot(MLoadSlot *ins);
   169     bool visitFunctionEnvironment(MFunctionEnvironment *ins);
   170     bool visitForkJoinContext(MForkJoinContext *ins);
   171     bool visitGuardThreadExclusive(MGuardThreadExclusive *ins);
   172     bool visitInterruptCheck(MInterruptCheck *ins);
   173     bool visitInterruptCheckPar(MInterruptCheckPar *ins);
   174     bool visitStoreSlot(MStoreSlot *ins);
   175     bool visitFilterTypeSet(MFilterTypeSet *ins);
   176     bool visitTypeBarrier(MTypeBarrier *ins);
   177     bool visitMonitorTypes(MMonitorTypes *ins);
   178     bool visitPostWriteBarrier(MPostWriteBarrier *ins);
   179     bool visitArrayLength(MArrayLength *ins);
   180     bool visitSetArrayLength(MSetArrayLength *ins);
   181     bool visitTypedArrayLength(MTypedArrayLength *ins);
   182     bool visitTypedArrayElements(MTypedArrayElements *ins);
   183     bool visitNeuterCheck(MNeuterCheck *lir);
   184     bool visitTypedObjectElements(MTypedObjectElements *ins);
   185     bool visitSetTypedObjectOffset(MSetTypedObjectOffset *ins);
   186     bool visitInitializedLength(MInitializedLength *ins);
   187     bool visitSetInitializedLength(MSetInitializedLength *ins);
   188     bool visitNot(MNot *ins);
   189     bool visitBoundsCheck(MBoundsCheck *ins);
   190     bool visitBoundsCheckLower(MBoundsCheckLower *ins);
   191     bool visitLoadElement(MLoadElement *ins);
   192     bool visitLoadElementHole(MLoadElementHole *ins);
   193     bool visitStoreElement(MStoreElement *ins);
   194     bool visitStoreElementHole(MStoreElementHole *ins);
   195     bool visitEffectiveAddress(MEffectiveAddress *ins);
   196     bool visitArrayPopShift(MArrayPopShift *ins);
   197     bool visitArrayPush(MArrayPush *ins);
   198     bool visitArrayConcat(MArrayConcat *ins);
   199     bool visitLoadTypedArrayElement(MLoadTypedArrayElement *ins);
   200     bool visitLoadTypedArrayElementHole(MLoadTypedArrayElementHole *ins);
   201     bool visitLoadTypedArrayElementStatic(MLoadTypedArrayElementStatic *ins);
   202     bool visitStoreTypedArrayElement(MStoreTypedArrayElement *ins);
   203     bool visitStoreTypedArrayElementHole(MStoreTypedArrayElementHole *ins);
   204     bool visitClampToUint8(MClampToUint8 *ins);
   205     bool visitLoadFixedSlot(MLoadFixedSlot *ins);
   206     bool visitStoreFixedSlot(MStoreFixedSlot *ins);
   207     bool visitGetPropertyCache(MGetPropertyCache *ins);
   208     bool visitGetPropertyPolymorphic(MGetPropertyPolymorphic *ins);
   209     bool visitSetPropertyPolymorphic(MSetPropertyPolymorphic *ins);
   210     bool visitGetElementCache(MGetElementCache *ins);
   211     bool visitBindNameCache(MBindNameCache *ins);
   212     bool visitGuardObjectIdentity(MGuardObjectIdentity *ins);
   213     bool visitGuardClass(MGuardClass *ins);
   214     bool visitGuardObject(MGuardObject *ins);
   215     bool visitGuardString(MGuardString *ins);
   216     bool visitAssertRange(MAssertRange *ins);
   217     bool visitCallGetProperty(MCallGetProperty *ins);
   218     bool visitDeleteProperty(MDeleteProperty *ins);
   219     bool visitDeleteElement(MDeleteElement *ins);
   220     bool visitGetNameCache(MGetNameCache *ins);
   221     bool visitCallGetIntrinsicValue(MCallGetIntrinsicValue *ins);
   222     bool visitCallsiteCloneCache(MCallsiteCloneCache *ins);
   223     bool visitCallGetElement(MCallGetElement *ins);
   224     bool visitCallSetElement(MCallSetElement *ins);
   225     bool visitCallInitElementArray(MCallInitElementArray *ins);
   226     bool visitSetPropertyCache(MSetPropertyCache *ins);
   227     bool visitSetElementCache(MSetElementCache *ins);
   228     bool visitCallSetProperty(MCallSetProperty *ins);
   229     bool visitIteratorStart(MIteratorStart *ins);
   230     bool visitIteratorNext(MIteratorNext *ins);
   231     bool visitIteratorMore(MIteratorMore *ins);
   232     bool visitIteratorEnd(MIteratorEnd *ins);
   233     bool visitStringLength(MStringLength *ins);
   234     bool visitArgumentsLength(MArgumentsLength *ins);
   235     bool visitGetFrameArgument(MGetFrameArgument *ins);
   236     bool visitSetFrameArgument(MSetFrameArgument *ins);
   237     bool visitRunOncePrologue(MRunOncePrologue *ins);
   238     bool visitRest(MRest *ins);
   239     bool visitRestPar(MRestPar *ins);
   240     bool visitThrow(MThrow *ins);
   241     bool visitIn(MIn *ins);
   242     bool visitInArray(MInArray *ins);
   243     bool visitInstanceOf(MInstanceOf *ins);
   244     bool visitCallInstanceOf(MCallInstanceOf *ins);
   245     bool visitProfilerStackOp(MProfilerStackOp *ins);
   246     bool visitIsCallable(MIsCallable *ins);
   247     bool visitHaveSameClass(MHaveSameClass *ins);
   248     bool visitHasClass(MHasClass *ins);
   249     bool visitAsmJSLoadGlobalVar(MAsmJSLoadGlobalVar *ins);
   250     bool visitAsmJSStoreGlobalVar(MAsmJSStoreGlobalVar *ins);
   251     bool visitAsmJSLoadFFIFunc(MAsmJSLoadFFIFunc *ins);
   252     bool visitAsmJSParameter(MAsmJSParameter *ins);
   253     bool visitAsmJSReturn(MAsmJSReturn *ins);
   254     bool visitAsmJSVoidReturn(MAsmJSVoidReturn *ins);
   255     bool visitAsmJSPassStackArg(MAsmJSPassStackArg *ins);
   256     bool visitAsmJSCall(MAsmJSCall *ins);
   257     bool visitSetDOMProperty(MSetDOMProperty *ins);
   258     bool visitGetDOMProperty(MGetDOMProperty *ins);
   259     bool visitGetDOMMember(MGetDOMMember *ins);
   260     bool visitRecompileCheck(MRecompileCheck *ins);
   261 };
   263 } // namespace jit
   264 } // namespace js
   266 #endif /* jit_Lowering_h */

mercurial