extern void DRT_##
name(NativeArguments arguments); \
extern const RuntimeEntry k##
name##RuntimeEntry( \
false, false, can_lazy_deopt); \
static void DRT_Helper##
name(Isolate* isolate, Thread* thread, Zone* zone, \
NativeArguments arguments); \
void DRT_##
name(NativeArguments arguments) { \
\
MSAN_UNPOISON(&arguments, sizeof(arguments)); \
TRACE_RUNTIME_CALL(
"%s",
"" #
name); \
{ \
Thread* thread = arguments.thread(); \
ASSERT(thread == Thread::Current()); \
RuntimeCallDeoptScope runtime_call_deopt_scope( \
thread, can_lazy_deopt ? RuntimeCallDeoptAbility::kCanLazyDeopt \
: RuntimeCallDeoptAbility::kCannotLazyDeopt); \
Isolate* isolate = thread->isolate(); \
TransitionGeneratedToVM transition(thread); \
StackZone zone(thread); \
CHECK_SIMULATOR_STACK_OVERFLOW(); \
if (FLAG_deoptimize_on_runtime_call_every > 0) { \
OnEveryRuntimeEntryCall(thread,
"" #
name, can_lazy_deopt); \
} \
DRT_Helper##
name(isolate, thread, zone.GetZone(), arguments); \
} \
} \
static void DRT_Helper##
name(Isolate* isolate, Thread* thread, Zone* zone, \
NativeArguments arguments)
99 { \
101 \
102 MSAN_UNPOISON(&arguments, sizeof(arguments)); \
104 TRACE_RUNTIME_CALL(
"%s",
"" #
name); \
105 { \
106 Thread* thread = arguments.thread(); \
107 ASSERT(thread == Thread::Current()); \
108 RuntimeCallDeoptScope runtime_call_deopt_scope( \
109 thread, can_lazy_deopt ? RuntimeCallDeoptAbility::kCanLazyDeopt \
111 Isolate* isolate = thread->isolate(); \
112 TransitionGeneratedToVM transition(thread); \
113 StackZone zone(thread); \
114 CHECK_SIMULATOR_STACK_OVERFLOW(); \
115 if (FLAG_deoptimize_on_runtime_call_every > 0) { \
116 OnEveryRuntimeEntryCall(thread,
"" #
name, can_lazy_deopt); \
117 } \
118 DRT_Helper##
name(isolate, thread, zone.GetZone(), arguments); \
119 } \
120 } \
121 static void DRT_Helper##
name(Isolate* isolate, Thread* thread, Zone* zone, \
122 NativeArguments arguments)