mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-06-27 02:29:35 +00:00
321 lines
22 KiB
C++
321 lines
22 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef jit_MOpcodes_h
|
|
#define jit_MOpcodes_h
|
|
|
|
namespace js {
|
|
namespace jit {
|
|
|
|
#define MIR_OPCODE_LIST(_) \
|
|
_(Constant) \
|
|
_(SimdBox) \
|
|
_(SimdUnbox) \
|
|
_(SimdValueX4) \
|
|
_(SimdSplatX4) \
|
|
_(SimdConstant) \
|
|
_(SimdConvert) \
|
|
_(SimdReinterpretCast) \
|
|
_(SimdExtractElement) \
|
|
_(SimdInsertElement) \
|
|
_(SimdSignMask) \
|
|
_(SimdSwizzle) \
|
|
_(SimdGeneralShuffle) \
|
|
_(SimdShuffle) \
|
|
_(SimdUnaryArith) \
|
|
_(SimdBinaryComp) \
|
|
_(SimdBinaryArith) \
|
|
_(SimdBinaryBitwise) \
|
|
_(SimdShift) \
|
|
_(SimdSelect) \
|
|
_(CloneLiteral) \
|
|
_(Parameter) \
|
|
_(Callee) \
|
|
_(IsConstructing) \
|
|
_(TableSwitch) \
|
|
_(Goto) \
|
|
_(Test) \
|
|
_(GotoWithFake) \
|
|
_(ObjectGroupDispatch) \
|
|
_(FunctionDispatch) \
|
|
_(Compare) \
|
|
_(Phi) \
|
|
_(Beta) \
|
|
_(OsrValue) \
|
|
_(OsrScopeChain) \
|
|
_(OsrReturnValue) \
|
|
_(OsrArgumentsObject) \
|
|
_(ReturnFromCtor) \
|
|
_(BinarySharedStub) \
|
|
_(UnarySharedStub) \
|
|
_(CheckOverRecursed) \
|
|
_(DefVar) \
|
|
_(DefLexical) \
|
|
_(DefFun) \
|
|
_(CreateThis) \
|
|
_(CreateThisWithProto) \
|
|
_(CreateThisWithTemplate) \
|
|
_(CreateArgumentsObject) \
|
|
_(GetArgumentsObjectArg) \
|
|
_(SetArgumentsObjectArg) \
|
|
_(ComputeThis) \
|
|
_(Call) \
|
|
_(ApplyArgs) \
|
|
_(ApplyArray) \
|
|
_(ArraySplice) \
|
|
_(Bail) \
|
|
_(Unreachable) \
|
|
_(EncodeSnapshot) \
|
|
_(AssertFloat32) \
|
|
_(AssertRecoveredOnBailout) \
|
|
_(GetDynamicName) \
|
|
_(CallDirectEval) \
|
|
_(BitNot) \
|
|
_(TypeOf) \
|
|
_(ToId) \
|
|
_(BitAnd) \
|
|
_(BitOr) \
|
|
_(BitXor) \
|
|
_(Lsh) \
|
|
_(Rsh) \
|
|
_(Ursh) \
|
|
_(MinMax) \
|
|
_(Abs) \
|
|
_(Clz) \
|
|
_(Sqrt) \
|
|
_(Atan2) \
|
|
_(Hypot) \
|
|
_(Pow) \
|
|
_(PowHalf) \
|
|
_(Random) \
|
|
_(MathFunction) \
|
|
_(Add) \
|
|
_(Sub) \
|
|
_(Mul) \
|
|
_(Div) \
|
|
_(Mod) \
|
|
_(Concat) \
|
|
_(CharCodeAt) \
|
|
_(FromCharCode) \
|
|
_(SinCos) \
|
|
_(StringSplit) \
|
|
_(Substr) \
|
|
_(Return) \
|
|
_(Throw) \
|
|
_(Box) \
|
|
_(Unbox) \
|
|
_(GuardObject) \
|
|
_(GuardString) \
|
|
_(PolyInlineGuard) \
|
|
_(AssertRange) \
|
|
_(ToDouble) \
|
|
_(ToFloat32) \
|
|
_(ToInt32) \
|
|
_(TruncateToInt32) \
|
|
_(ToString) \
|
|
_(ToObjectOrNull) \
|
|
_(NewArray) \
|
|
_(NewArrayCopyOnWrite) \
|
|
_(NewArrayDynamicLength) \
|
|
_(NewObject) \
|
|
_(NewTypedObject) \
|
|
_(NewDeclEnvObject) \
|
|
_(NewCallObject) \
|
|
_(NewRunOnceCallObject) \
|
|
_(NewStringObject) \
|
|
_(ObjectState) \
|
|
_(ArrayState) \
|
|
_(InitElem) \
|
|
_(InitElemGetterSetter) \
|
|
_(MutateProto) \
|
|
_(InitProp) \
|
|
_(InitPropGetterSetter) \
|
|
_(Start) \
|
|
_(OsrEntry) \
|
|
_(Nop) \
|
|
_(LimitedTruncate) \
|
|
_(RegExp) \
|
|
_(RegExpExec) \
|
|
_(RegExpTest) \
|
|
_(RegExpReplace) \
|
|
_(StringReplace) \
|
|
_(Lambda) \
|
|
_(LambdaArrow) \
|
|
_(KeepAliveObject) \
|
|
_(Slots) \
|
|
_(Elements) \
|
|
_(ConstantElements) \
|
|
_(ConvertElementsToDoubles) \
|
|
_(MaybeToDoubleElement) \
|
|
_(MaybeCopyElementsForWrite) \
|
|
_(LoadSlot) \
|
|
_(StoreSlot) \
|
|
_(FunctionEnvironment) \
|
|
_(FilterTypeSet) \
|
|
_(TypeBarrier) \
|
|
_(MonitorTypes) \
|
|
_(PostWriteBarrier) \
|
|
_(GetPropertyCache) \
|
|
_(GetPropertyPolymorphic) \
|
|
_(SetPropertyPolymorphic) \
|
|
_(BindNameCache) \
|
|
_(CallBindVar) \
|
|
_(GuardShape) \
|
|
_(GuardReceiverPolymorphic) \
|
|
_(GuardObjectGroup) \
|
|
_(GuardObjectIdentity) \
|
|
_(GuardClass) \
|
|
_(GuardUnboxedExpando) \
|
|
_(LoadUnboxedExpando) \
|
|
_(ArrayLength) \
|
|
_(SetArrayLength) \
|
|
_(TypedArrayLength) \
|
|
_(TypedArrayElements) \
|
|
_(SetDisjointTypedElements) \
|
|
_(TypedObjectDescr) \
|
|
_(TypedObjectElements) \
|
|
_(SetTypedObjectOffset) \
|
|
_(InitializedLength) \
|
|
_(SetInitializedLength) \
|
|
_(UnboxedArrayLength) \
|
|
_(UnboxedArrayInitializedLength) \
|
|
_(IncrementUnboxedArrayInitializedLength) \
|
|
_(SetUnboxedArrayInitializedLength) \
|
|
_(Not) \
|
|
_(BoundsCheck) \
|
|
_(BoundsCheckLower) \
|
|
_(InArray) \
|
|
_(LoadElement) \
|
|
_(LoadElementHole) \
|
|
_(LoadUnboxedScalar) \
|
|
_(LoadUnboxedObjectOrNull) \
|
|
_(LoadUnboxedString) \
|
|
_(StoreElement) \
|
|
_(StoreElementHole) \
|
|
_(StoreUnboxedScalar) \
|
|
_(StoreUnboxedObjectOrNull) \
|
|
_(StoreUnboxedString) \
|
|
_(ConvertUnboxedObjectToNative) \
|
|
_(ArrayPopShift) \
|
|
_(ArrayPush) \
|
|
_(ArrayConcat) \
|
|
_(ArraySlice) \
|
|
_(ArrayJoin) \
|
|
_(LoadTypedArrayElementHole) \
|
|
_(LoadTypedArrayElementStatic) \
|
|
_(StoreTypedArrayElementHole) \
|
|
_(StoreTypedArrayElementStatic) \
|
|
_(AtomicIsLockFree) \
|
|
_(GuardSharedTypedArray) \
|
|
_(CompareExchangeTypedArrayElement) \
|
|
_(AtomicExchangeTypedArrayElement) \
|
|
_(AtomicTypedArrayElementBinop) \
|
|
_(EffectiveAddress) \
|
|
_(ClampToUint8) \
|
|
_(LoadFixedSlot) \
|
|
_(LoadFixedSlotAndUnbox) \
|
|
_(StoreFixedSlot) \
|
|
_(CallGetProperty) \
|
|
_(GetNameCache) \
|
|
_(CallGetIntrinsicValue) \
|
|
_(CallGetElement) \
|
|
_(CallSetElement) \
|
|
_(CallSetProperty) \
|
|
_(CallInitElementArray) \
|
|
_(DeleteProperty) \
|
|
_(DeleteElement) \
|
|
_(SetPropertyCache) \
|
|
_(IteratorStart) \
|
|
_(IteratorMore) \
|
|
_(IsNoIter) \
|
|
_(IteratorEnd) \
|
|
_(StringLength) \
|
|
_(ArgumentsLength) \
|
|
_(GetFrameArgument) \
|
|
_(SetFrameArgument) \
|
|
_(RunOncePrologue) \
|
|
_(Rest) \
|
|
_(Floor) \
|
|
_(Ceil) \
|
|
_(Round) \
|
|
_(In) \
|
|
_(InstanceOf) \
|
|
_(CallInstanceOf) \
|
|
_(InterruptCheck) \
|
|
_(AsmJSInterruptCheck) \
|
|
_(GetDOMProperty) \
|
|
_(GetDOMMember) \
|
|
_(SetDOMProperty) \
|
|
_(IsCallable) \
|
|
_(IsObject) \
|
|
_(HasClass) \
|
|
_(AsmJSNeg) \
|
|
_(AsmJSUnsignedToDouble) \
|
|
_(AsmJSUnsignedToFloat32) \
|
|
_(AsmJSLoadHeap) \
|
|
_(AsmJSStoreHeap) \
|
|
_(AsmJSLoadGlobalVar) \
|
|
_(AsmJSStoreGlobalVar) \
|
|
_(AsmJSLoadFuncPtr) \
|
|
_(AsmJSLoadFFIFunc) \
|
|
_(AsmJSReturn) \
|
|
_(AsmJSParameter) \
|
|
_(AsmJSVoidReturn) \
|
|
_(AsmJSPassStackArg) \
|
|
_(AsmJSCall) \
|
|
_(NewDerivedTypedObject) \
|
|
_(RecompileCheck) \
|
|
_(MemoryBarrier) \
|
|
_(AsmJSCompareExchangeHeap) \
|
|
_(AsmJSAtomicExchangeHeap) \
|
|
_(AsmJSAtomicBinopHeap) \
|
|
_(UnknownValue) \
|
|
_(LexicalCheck) \
|
|
_(ThrowRuntimeLexicalError) \
|
|
_(GlobalNameConflictsCheck) \
|
|
_(Debugger) \
|
|
_(NewTarget) \
|
|
_(ArrowNewTarget) \
|
|
_(CheckReturn) \
|
|
_(CheckObjCoercible)
|
|
|
|
// Forward declarations of MIR types.
|
|
#define FORWARD_DECLARE(op) class M##op;
|
|
MIR_OPCODE_LIST(FORWARD_DECLARE)
|
|
#undef FORWARD_DECLARE
|
|
|
|
class MDefinitionVisitor // interface i.e. pure abstract class
|
|
{
|
|
public:
|
|
#define VISIT_INS(op) virtual void visit##op(M##op*) = 0;
|
|
MIR_OPCODE_LIST(VISIT_INS)
|
|
#undef VISIT_INS
|
|
};
|
|
|
|
// MDefinition visitor which raises a Not Yet Implemented error for
|
|
// non-overloaded visit functions.
|
|
class MDefinitionVisitorDefaultNYI : public MDefinitionVisitor
|
|
{
|
|
public:
|
|
#define VISIT_INS(op) virtual void visit##op(M##op*) { MOZ_CRASH("NYI: " #op); }
|
|
MIR_OPCODE_LIST(VISIT_INS)
|
|
#undef VISIT_INS
|
|
};
|
|
|
|
// MDefinition visitor which ignores non-overloaded visit functions.
|
|
class MDefinitionVisitorDefaultNoop : public MDefinitionVisitor
|
|
{
|
|
public:
|
|
#define VISIT_INS(op) virtual void visit##op(M##op*) { }
|
|
MIR_OPCODE_LIST(VISIT_INS)
|
|
#undef VISIT_INS
|
|
};
|
|
|
|
} // namespace jit
|
|
} // namespace js
|
|
|
|
#endif /* jit_MOpcodes_h */
|