blob: 802f9aa62329af345b4666aae520a8891846bb80 [file] [log] [blame]
/* -*- 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) \
_(Parameter) \
_(Callee) \
_(TableSwitch) \
_(Goto) \
_(Test) \
_(TypeObjectDispatch) \
_(FunctionDispatch) \
_(PolyInlineDispatch) \
_(Compare) \
_(Phi) \
_(Beta) \
_(OsrValue) \
_(OsrScopeChain) \
_(ReturnFromCtor) \
_(CheckOverRecursed) \
_(DefVar) \
_(DefFun) \
_(CreateThis) \
_(CreateThisWithProto) \
_(CreateThisWithTemplate) \
_(CreateArgumentsObject) \
_(GetArgumentsObjectArg) \
_(SetArgumentsObjectArg) \
_(PrepareCall) \
_(PassArg) \
_(Call) \
_(ApplyArgs) \
_(GetDynamicName) \
_(FilterArguments) \
_(CallDirectEval) \
_(BitNot) \
_(TypeOf) \
_(ToId) \
_(BitAnd) \
_(BitOr) \
_(BitXor) \
_(Lsh) \
_(Rsh) \
_(Ursh) \
_(MinMax) \
_(Abs) \
_(Sqrt) \
_(Atan2) \
_(Pow) \
_(PowHalf) \
_(Random) \
_(MathFunction) \
_(Add) \
_(Sub) \
_(Mul) \
_(Div) \
_(Mod) \
_(Concat) \
_(CharCodeAt) \
_(FromCharCode) \
_(Return) \
_(Throw) \
_(Box) \
_(Unbox) \
_(GuardObject) \
_(GuardString) \
_(ToDouble) \
_(ToInt32) \
_(TruncateToInt32) \
_(ToString) \
_(NewSlots) \
_(NewParallelArray) \
_(NewArray) \
_(NewObject) \
_(NewDeclEnvObject) \
_(NewCallObject) \
_(NewStringObject) \
_(InitElem) \
_(InitProp) \
_(Start) \
_(OsrEntry) \
_(Nop) \
_(RegExp) \
_(RegExpTest) \
_(Lambda) \
_(ImplicitThis) \
_(Slots) \
_(Elements) \
_(ConstantElements) \
_(ConvertElementsToDoubles) \
_(LoadSlot) \
_(StoreSlot) \
_(FunctionEnvironment) \
_(TypeBarrier) \
_(MonitorTypes) \
_(PostWriteBarrier) \
_(GetPropertyCache) \
_(GetPropertyPolymorphic) \
_(SetPropertyPolymorphic) \
_(GetElementCache) \
_(SetElementCache) \
_(BindNameCache) \
_(GuardShape) \
_(GuardObjectType) \
_(GuardClass) \
_(ArrayLength) \
_(TypedArrayLength) \
_(TypedArrayElements) \
_(InitializedLength) \
_(SetInitializedLength) \
_(Not) \
_(BoundsCheck) \
_(BoundsCheckLower) \
_(InArray) \
_(LoadElement) \
_(LoadElementHole) \
_(StoreElement) \
_(StoreElementHole) \
_(ArrayPopShift) \
_(ArrayPush) \
_(ArrayConcat) \
_(LoadTypedArrayElement) \
_(LoadTypedArrayElementHole) \
_(LoadTypedArrayElementStatic) \
_(StoreTypedArrayElement) \
_(StoreTypedArrayElementHole) \
_(StoreTypedArrayElementStatic) \
_(EffectiveAddress) \
_(ClampToUint8) \
_(LoadFixedSlot) \
_(StoreFixedSlot) \
_(CallGetProperty) \
_(GetNameCache) \
_(CallGetIntrinsicValue) \
_(CallsiteCloneCache) \
_(CallGetElement) \
_(CallSetElement) \
_(CallSetProperty) \
_(CallInitElementArray) \
_(DeleteProperty) \
_(SetPropertyCache) \
_(IteratorStart) \
_(IteratorNext) \
_(IteratorMore) \
_(IteratorEnd) \
_(StringLength) \
_(ArgumentsLength) \
_(GetArgument) \
_(RunOncePrologue) \
_(Rest) \
_(Floor) \
_(Round) \
_(In) \
_(InstanceOf) \
_(CallInstanceOf) \
_(InterruptCheck) \
_(FunctionBoundary) \
_(GetDOMProperty) \
_(SetDOMProperty) \
_(IsCallable) \
_(HaveSameClass) \
_(AsmJSNeg) \
_(AsmJSUDiv) \
_(AsmJSUMod) \
_(AsmJSUnsignedToDouble) \
_(AsmJSLoadHeap) \
_(AsmJSStoreHeap) \
_(AsmJSLoadGlobalVar) \
_(AsmJSStoreGlobalVar) \
_(AsmJSLoadFuncPtr) \
_(AsmJSLoadFFIFunc) \
_(AsmJSReturn) \
_(AsmJSParameter) \
_(AsmJSVoidReturn) \
_(AsmJSPassStackArg) \
_(AsmJSCall) \
_(AsmJSCheckOverRecursed) \
_(ParCheckOverRecursed) \
_(ParNewCallObject) \
_(ParNew) \
_(ParNewDenseArray) \
_(ParBailout) \
_(ParLambda) \
_(ParRest) \
_(ParSlice) \
_(ParWriteGuard) \
_(ParDump) \
_(ParCheckInterrupt)
// Forward declarations of MIR types.
#define FORWARD_DECLARE(op) class M##op;
MIR_OPCODE_LIST(FORWARD_DECLARE)
#undef FORWARD_DECLARE
class MInstructionVisitor // interface i.e. pure abstract class
{
public:
#define VISIT_INS(op) virtual bool visit##op(M##op *) = 0;
MIR_OPCODE_LIST(VISIT_INS)
#undef VISIT_INS
};
class MInstructionVisitorWithDefaults : public MInstructionVisitor
{
public:
#define VISIT_INS(op) virtual bool visit##op(M##op *) { JS_NOT_REACHED("NYI: " #op); return false; }
MIR_OPCODE_LIST(VISIT_INS)
#undef VISIT_INS
};
} // namespace jit
} // namespace js
#endif /* jit_MOpcodes_h */