3091 {
3093 __ Comment(
"slow path %s operation",
name());
3094 }
3095 const bool use_shared_stub =
3098 const bool live_fpu_registers =
3100 const intptr_t num_args =
3105 const bool has_frame =
compiler->flow_graph().graph_entry()->NeedsFrame();
3106 if (use_shared_stub) {
3107 if (!has_frame) {
3108#if !defined(TARGET_ARCH_IA32)
3109 ASSERT(
__ constant_pool_allowed());
3110 __ set_constant_pool_allowed(
false);
3111#endif
3112 __ EnterDartFrame(0);
3113 }
3115#if defined(TARGET_ARCH_ARM) || defined(TARGET_ARCH_ARM64)
3116 if (!has_frame) {
3117
3118 RESTORES_LR_FROM_FRAME({});
3119 }
3120#endif
3121 } else {
3123
3126 __ CallRuntime(runtime_entry_, num_args);
3127 }
3129 compiler->AddCurrentDescriptor(UntaggedPcDescriptors::kOther, deopt_id,
3132 compiler->RecordSafepoint(locs, num_args);
3133 if (!FLAG_precompiled_mode ||
3137
3140 }
else if (
compiler->is_optimizing()) {
3143 } else {
3146
3147 compiler->AddCurrentDescriptor(UntaggedPcDescriptors::kDeopt,
3149 }
3150 }
3151 if (!use_shared_stub) {
3153 }
3154}
static CompilerState & Current()
static intptr_t ToDeoptAfter(intptr_t deopt_id)
virtual bool UseSharedSlowPathStub(bool is_optimizing) const
intptr_t deopt_id() const
RegisterSet * live_registers()
intptr_t FpuRegisterCount() const
compiler::Label * entry_label()
virtual void EmitCodeAtSlowPathEntry(FlowGraphCompiler *compiler)
virtual intptr_t GetNumberOfArgumentsForRuntimeCall()
virtual void EmitSharedStubCall(FlowGraphCompiler *compiler, bool save_fpu_registers)
virtual void AddMetadataForRuntimeCall(FlowGraphCompiler *compiler)
virtual void PushArgumentsForRuntimeCall(FlowGraphCompiler *compiler)
virtual const char * name()=0
void static bool EmittingComments()
static constexpr intptr_t kInvalidTryIndex
static bool Bind(PassBindingsCacheMTL &pass, ShaderStage stage, size_t bind_index, const BufferView &view)