6#if defined(TARGET_ARCH_ARM)
17 ASSERT(
code.ContainsInstructionAt(return_address));
18 CallPattern
call(return_address,
code);
19 return call.TargetCode();
24 const Code& new_target) {
25 ASSERT(
code.ContainsInstructionAt(return_address));
26 CallPattern
call(return_address,
code);
27 call.SetTargetCode(new_target);
35 const Code& caller_code,
37 ASSERT(caller_code.ContainsInstructionAt(return_address));
38 ICCallPattern
call(return_address, caller_code);
39 if (
data !=
nullptr) {
42 return call.TargetCode();
46 const Code& caller_code,
50 thread->isolate_group()->RunWithStoppedMutators([&]() {
59 const Code& caller_code,
62 ASSERT(caller_code.ContainsInstructionAt(return_address));
63 ICCallPattern
call(return_address, caller_code);
69 const Code& caller_code,
70 ICData* ic_data_result) {
71 ASSERT(caller_code.ContainsInstructionAt(return_address));
72 ICCallPattern static_call(return_address, caller_code);
74 ic_data ^= static_call.Data();
75 if (ic_data_result !=
nullptr) {
76 *ic_data_result = ic_data.ptr();
78 return ic_data.GetTargetAt(0);
82 const Code& caller_code,
87 thread->isolate_group()->RunWithStoppedMutators([&]() {
96 const Code& caller_code,
99 if (FLAG_precompiled_mode) {
100 BareSwitchableCallPattern
call(return_address);
104 SwitchableCallPattern
call(return_address, caller_code);
111 const Code& caller_code) {
112 if (FLAG_precompiled_mode) {
113 BareSwitchableCallPattern
call(return_address);
114 return call.target_entry();
116 SwitchableCallPattern
call(return_address, caller_code);
117 return call.target_entry();
122 const Code& caller_code) {
123 if (FLAG_precompiled_mode) {
124 BareSwitchableCallPattern
call(return_address);
127 SwitchableCallPattern
call(return_address, caller_code);
135 const Code& trampoline) {
137 ASSERT(
code.ContainsInstructionAt(return_address));
138 NativeCallPattern
call(return_address,
code);
139 call.set_target(trampoline);
147 ASSERT(
code.ContainsInstructionAt(return_address));
148 NativeCallPattern
call(return_address,
code);
150 return call.target();
static void PatchInstanceCallAt(uword return_address, const Code &caller_code, const Object &data, const Code &target)
static CodePtr GetStaticCallTargetAt(uword return_address, const Code &code)
static void PatchSwitchableCallAtWithMutatorsStopped(Thread *thread, uword return_address, const Code &caller_code, const Object &data, const Code &target)
static void PatchInstanceCallAtWithMutatorsStopped(Thread *thread, uword return_address, const Code &caller_code, const Object &data, const Code &target)
static void PatchSwitchableCallAt(uword return_address, const Code &caller_code, const Object &data, const Code &target)
static FunctionPtr GetUnoptimizedStaticCallAt(uword return_address, const Code &code, ICData *ic_data)
static uword GetSwitchableCallTargetEntryAt(uword return_address, const Code &caller_code)
static ObjectPtr GetSwitchableCallDataAt(uword return_address, const Code &caller_code)
static void InsertDeoptimizationCallAt(uword start)
static CodePtr GetInstanceCallAt(uword return_address, const Code &caller_code, Object *data)
static CodePtr GetNativeCallAt(uword return_address, const Code &caller_code, NativeFunction *target)
static void PatchStaticCallAt(uword return_address, const Code &code, const Code &new_target)
static void PatchNativeCallAt(uword return_address, const Code &caller_code, NativeFunction target, const Code &trampoline)
void RunWithStoppedMutators(T single_current_mutator, S otherwise, bool use_force_growth_in_otherwise=false)
static Thread * Current()
IsolateGroup * isolate_group() const
static int8_t data[kExtLength]
void(* NativeFunction)(NativeArguments *arguments)