// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

#ifndef RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
#define RUNTIME_VM_RUNTIME_ENTRY_LIST_H_

namespace dart {

#define RUNTIME_ENTRY_LIST(V)                                                  \
  V(AllocateArray)                                                             \
  V(AllocateMint)                                                              \
  V(AllocateDouble)                                                            \
  V(AllocateFloat32x4)                                                         \
  V(AllocateFloat64x2)                                                         \
  V(AllocateInt32x4)                                                           \
  V(AllocateTypedData)                                                         \
  V(AllocateClosure)                                                           \
  V(AllocateContext)                                                           \
  V(AllocateObject)                                                            \
  V(AllocateRecord)                                                            \
  V(AllocateSmallRecord)                                                       \
  V(AllocateSuspendState)                                                      \
  V(BoxDouble)                                                                 \
  V(BoxFloat32x4)                                                              \
  V(BoxFloat64x2)                                                              \
  V(BreakpointRuntimeHandler)                                                  \
  V(SingleStepHandler)                                                         \
  V(ResumptionBreakpointHandler)                                               \
  V(CloneContext)                                                              \
  V(CloneSuspendState)                                                         \
  V(DoubleToInteger)                                                           \
  V(FixCallersTarget)                                                          \
  V(FixCallersTargetMonomorphic)                                               \
  V(FixAllocationStubTarget)                                                   \
  V(InlineCacheMissHandlerOneArg)                                              \
  V(InlineCacheMissHandlerTwoArgs)                                             \
  V(StaticCallMissHandlerOneArg)                                               \
  V(StaticCallMissHandlerTwoArgs)                                              \
  V(Instanceof)                                                                \
  V(SubtypeCheck)                                                              \
  V(TypeCheck)                                                                 \
  V(InstantiateType)                                                           \
  V(InstantiateTypeArguments)                                                  \
  V(NoSuchMethodFromCallStub)                                                  \
  V(NoSuchMethodFromPrologue)                                                  \
  V(NoSuchMethodError)                                                         \
  V(OptimizeInvokedFunction)                                                   \
  V(PatchStaticCall)                                                           \
  V(RangeError)                                                                \
  V(RangeErrorUnboxedInt64)                                                    \
  V(WriteError)                                                                \
  V(NullError)                                                                 \
  V(NullErrorWithSelector)                                                     \
  V(NullCastError)                                                             \
  V(ArgumentNullError)                                                         \
  V(DispatchTableNullError)                                                    \
  V(ArgumentError)                                                             \
  V(ArgumentErrorUnboxedInt64)                                                 \
  V(IntegerDivisionByZeroException)                                            \
  V(ReThrow)                                                                   \
  V(InterruptOrStackOverflow)                                                  \
  V(Throw)                                                                     \
  V(DeoptimizeMaterialize)                                                     \
  V(RewindPostDeopt)                                                           \
  V(UpdateFieldCid)                                                            \
  V(InitInstanceField)                                                         \
  V(InitStaticField)                                                           \
  V(StaticFieldAccessedWithoutIsolateError)                                    \
  V(CheckedStoreIntoShared)                                                    \
  V(LateFieldAlreadyInitializedError)                                          \
  V(LateFieldAssignedDuringInitializationError)                                \
  V(LateFieldNotInitializedError)                                              \
  V(CompileFunction)                                                           \
  V(ResumeFrame)                                                               \
  V(SwitchableCallMiss)                                                        \
  V(NotLoaded)                                                                 \
  V(FfiAsyncCallbackSend)                                                      \
  V(AllocateSubtypeTestCache)                                                  \
  V(GetFieldForDispatch)                                                       \
  V(AdjustArgumentsDesciptorForImplicitClosure)                                \
  V(ConvertToInstanceTypeArguments)                                            \
  V(ClosureArgumentsValid)                                                     \
  V(ResolveCallFunction)                                                       \
  V(ResolveExternalCall)                                                       \
  V(FfiCall)                                                                   \
  V(CheckFunctionArgumentTypes)                                                \
  V(InterpretedInstanceCallMissHandler)                                        \
  V(InvokeNoSuchMethod)                                                        \
  V(ResumeInterpreter)                                                         \
  V(InitializeSharedField)                                                     \
  V(FatalError)                                                                \
  V(EnsureDeeplyImmutable)                                                     \
  V(AllocateBytecodeCoverageArray)

// Note: Leaf runtime function have C linkage, so they cannot pass C++ struct
// values like ObjectPtr.

#define LEAF_RUNTIME_ENTRY_LIST(V)                                             \
  V(intptr_t, DeoptimizeCopyFrame, uword, uword)                               \
  V(intptr_t, DeoptimizeFillFrame, uword)                                      \
  V(void, StoreBufferBlockProcess, Thread*)                                    \
  V(void, OldMarkingStackBlockProcess, Thread*)                                \
  V(void, NewMarkingStackBlockProcess, Thread*)                                \
  V(uword /*ObjectPtr*/, EnsureRememberedAndMarkingDeferred,                   \
    uword /*ObjectPtr*/ object, Thread* thread)                                \
  V(double, LibcPow, double, double)                                           \
  V(double, DartModulo, double, double)                                        \
  V(double, LibcFmod, double, double)                                          \
  V(double, LibcFloor, double)                                                 \
  V(double, LibcCeil, double)                                                  \
  V(double, LibcTrunc, double)                                                 \
  V(double, LibcRound, double)                                                 \
  V(double, LibcCos, double)                                                   \
  V(double, LibcSin, double)                                                   \
  V(double, LibcTan, double)                                                   \
  V(double, LibcAcos, double)                                                  \
  V(double, LibcAsin, double)                                                  \
  V(double, LibcAtan, double)                                                  \
  V(double, LibcAtan2, double, double)                                         \
  V(double, LibcExp, double)                                                   \
  V(double, LibcLog, double)                                                   \
  V(void, EnterSafepoint)                                                      \
  V(void, ExitSafepoint)                                                       \
  V(ApiLocalScope*, EnterHandleScope, Thread*)                                 \
  V(void, ExitHandleScope, Thread*)                                            \
  V(LocalHandle*, AllocateHandle, ApiLocalScope*)                              \
  V(void, PropagateError, Dart_Handle)                                         \
  V(void, MsanUnpoison, void*, size_t)                                         \
  V(void, MsanUnpoisonParam, size_t)                                           \
  V(uint32_t, TsanAtomic32Load, void*, int)                                    \
  V(void, TsanAtomic32Store, void*, uint32_t, int)                             \
  V(uint64_t, TsanAtomic64Load, void*, int)                                    \
  V(void, TsanAtomic64Store, void*, uint64_t, int)                             \
  V(void, SanRead1, void*)                                                     \
  V(void, SanRead2, void*)                                                     \
  V(void, SanRead4, void*)                                                     \
  V(void, SanRead8, void*)                                                     \
  V(void, SanRead16, void*)                                                    \
  V(void, SanWrite1, void*)                                                    \
  V(void, SanWrite2, void*)                                                    \
  V(void, SanWrite4, void*)                                                    \
  V(void, SanWrite8, void*)                                                    \
  V(void, SanWrite16, void*)                                                   \
  V(void, TsanFuncEntry, void*)                                                \
  V(void, TsanFuncExit)                                                        \
  V(bool, TryDoubleAsInteger, Thread*)                                         \
  V(void*, MemoryMove, void*, const void*, size_t)

}  // namespace dart

#endif  // RUNTIME_VM_RUNTIME_ENTRY_LIST_H_
