| /arkcompiler/runtime_core/docs/ |
| D | runtime-compiled_code-interaction.md | 50 … StackFrameKind | A kind of the current stack frame (compiled code or interpreter stack fra… 82 ## Stack frame 83 A stack frame contains data necessary to execute the function the frame belongs to. 84 … code must have the structure described in [Compiled code stack frame](#compiled-code-stack-frame). 86 ### Interpreter stack frame argument 87 …ter stack frame is decribed by `panda::Frame` class. The class has fields to store virtual registe… 88 …a linked list. The field `panda::Frame::prev_` contains a pointer to the previous interpreter (or … 90 ### Compiled code stack frame argument 91 Each compiled function is responsible to reserve stack frame for its purpose and then release it wh… 92 Generaly compiled function builds the stack frame in prolog and releases it in epilog. If a compile… [all …]
|
| D | deoptimization.md | 23 1. fill the `Frame`(saves pointer to current CFrame) and `is_compiled_frame_`(saves true) fields in… 32 …e we should start executing code in the interpreter, restores interpreter frame from current CFram… 40 Frame* iframe = frame.ConvertToIFrame(&prev_frame_kind, &num_inlined_methods); 41 Frame* last_iframe = iframe; 52 Frame* StackWalker::ConvertToIFrame(CFrameType& cframe, uint32_t* num_inlined_methods) { 61 Frame* frame = CreateFrameAndSetsVRegs(cframe, prev_frame); 62 frame->SetBytecodeOffset(cframe.GetBytecodePc()); 70 * pointer to first restoring interpreter Frame 72 * pointer to last restoring interpreter Frame 84 …C(Interpreter To Compile) bridge, set last IFrame's previous frame to this C2I bridge frame and ca… [all …]
|
| D | cfi_directives.md | 7 `CFI` (**Call Frame Information**) is a subset of these debug symbols which is responsible for corr… 27 - to find the right previous `frame` (with `fp` and `lr` regs) 28 - to restore `callees` in previous frame 34 There are bridges which `hack` stack memory (setting `stack pointer` to other stack frame), i.e.: 41 …s frame. So we directly specify other frame in which we will return + spot slots for `callees` (it…
|
| /arkcompiler/ets_runtime/ecmascript/ |
| D | frames.cpp | 61 auto frame = GetFrame<OptimizedJSFunctionFrame>(); in GetFunction() local 62 return frame->GetFunction(); in GetFunction() 66 auto frame = GetFrame<AsmInterpretedFrame>(); in GetFunction() local 67 return frame->function; in GetFunction() 71 auto frame = GetFrame<InterpretedFrame>(); in GetFunction() local 72 return frame->function; in GetFunction() 75 auto frame = GetFrame<InterpretedBuiltinFrame>(); in GetFunction() local 76 return frame->function; in GetFunction() 79 auto *frame = BuiltinWithArgvFrame::GetFrameFromSp(GetSp()); in GetFunction() local 80 return frame->GetFunction(); in GetFunction() [all …]
|
| /arkcompiler/runtime_core/runtime/interpreter/ |
| D | state.h | 21 #include "runtime/interpreter/frame.h" 32 ALWAYS_INLINE inline explicit StateIface(Frame *frame) : acc_(frame->GetAcc()) {} in StateIface() argument 44 ALWAYS_INLINE inline Frame *GetFrame() const in GetFrame() 49 ALWAYS_INLINE inline void SetFrame(Frame *frame) in SetFrame() argument 51 static_cast<T *>(this)->SetFrame(frame); in SetFrame() 92 …AYS_INLINE inline State(ManagedThread *thread, const uint8_t *pc, Frame *frame) : StateIface(frame) in State() argument 95 SetFrame(frame); in State() 99 ALWAYS_INLINE inline void UpdateState(const uint8_t *pc, Frame *frame) in UpdateState() argument 102 SetFrame(frame); in UpdateState() 115 ALWAYS_INLINE inline Frame *GetFrame() const in GetFrame() [all …]
|
| D | frame.h | 31 // ========== Compatible Frame Layout ========== 33 // Frame layout - Static Languages 35 // | panda::Frame | 50 // Frame layout - Dynamic Languages 52 // | panda::Frame | 72 class Frame { 74 // Instrumentation: indicate what the frame must be force poped 76 // Instrumentation: indicate what the frame must retry last instruction 78 // Instrumentation: indicate what the frame must notify when poped 80 // Indicate that the frame was created after deoptimization. [all …]
|
| D | interpreter_impl.cpp | 28 void ExecuteImpl(ManagedThread *thread, const uint8_t *pc, Frame *frame, bool jump_to_eh) in ExecuteImpl() argument 30 const uint8_t *inst_ = frame->GetMethod()->GetInstructions(); in ExecuteImpl() 31 frame->SetInstruction(inst_); in ExecuteImpl() 42 ExecuteImplFast(thread, const_cast<uint8_t *>(pc), frame, dispath_table); in ExecuteImpl() 45 if (frame->IsDynamic()) { in ExecuteImpl() 46 ExecuteImpl_Inner<RuntimeInterface, true, true>(thread, pc, frame); in ExecuteImpl() 48 ExecuteImpl_Inner<RuntimeInterface, true, false>(thread, pc, frame); in ExecuteImpl() 51 if (frame->IsDynamic()) { in ExecuteImpl() 52 ExecuteImpl_Inner<RuntimeInterface, false, true>(thread, pc, frame); in ExecuteImpl() 54 ExecuteImpl_Inner<RuntimeInterface, false, false>(thread, pc, frame); in ExecuteImpl() [all …]
|
| D | instruction_handler_state.h | 27 ALWAYS_INLINE InstructionHandlerState(ManagedThread *thread, const uint8_t *pc, Frame *frame) in InstructionHandlerState() argument 28 : state_(thread, pc, frame) in InstructionHandlerState() 33 ALWAYS_INLINE void UpdateInstructionHandlerState(const uint8_t *pc, Frame *frame) in UpdateInstructionHandlerState() argument 35 state_.UpdateState(pc, frame); in UpdateInstructionHandlerState() 54 ALWAYS_INLINE Frame *GetFrame() const in GetFrame() 59 ALWAYS_INLINE void SetFrame(Frame *frame) in SetFrame() argument 61 state_.SetFrame(frame); in SetFrame()
|
| /arkcompiler/ets_runtime/ecmascript/interpreter/ |
| D | frame_handler.cpp | 65 auto frame = it.GetFrame<AsmInterpretedFrame>(); in PrevJSFrame() local 67 fp_ = frame->GetCurrentFramePointer(); in PrevJSFrame() 84 auto *frame = AsmInterpretedFrame::GetFrameFromSp(sp_); in GetNumberArgs() local 85 return static_cast<uint32_t>(frame->GetCurrentFramePointer() - sp_); in GetNumberArgs() 91 auto *frame = it.GetFrame<AsmInterpretedFrame>(); in GetNumberArgs() local 92 prevSp = frame->GetPrevFrameFp(); in GetNumberArgs() 94 auto *frame = it.GetFrame<InterpretedFrame>(); in GetNumberArgs() local 95 prevSp = frame->GetPrevFrameFp(); in GetNumberArgs() 120 auto *frame = it.GetFrame<AsmInterpretedFrame>(); in GetAcc() local 121 return frame->acc; in GetAcc() [all …]
|
| /arkcompiler/runtime_core/runtime/entrypoints/ |
| D | entrypoints.h | 23 class Frame; variable 25 extern "C" Frame *CreateFrameWithSize(uint32_t size, uint32_t nregs, Method *method, Frame *prev); 27 extern "C" Frame *CreateFrameWithActualArgsAndSize(uint32_t size, uint32_t nregs, uint32_t num_actu… 28 Method *method, Frame *prev); 30 extern "C" Frame *CreateNativeFrameWithActualArgsAndSize(uint32_t size, uint32_t nregs, uint32_t nu… 31 Method *method, Frame *prev); 33 extern "C" Frame *CreateFrameForMethod(Method *method, Frame *prev); 35 extern "C" Frame *CreateFrameForMethodDyn(Method *method, Frame *prev); 37 extern "C" Frame *CreateFrameForMethodWithActualArgs(uint32_t num_actual_args, Method *method, Fram… 39 extern "C" Frame *CreateFrameForMethodWithActualArgsDyn(uint32_t num_actual_args, Method *method, F… [all …]
|
| /arkcompiler/runtime_core/runtime/tests/ |
| D | i2c_bridge_test.cpp | 30 #include "runtime/interpreter/frame.h" 123 static Frame *CreateFrame(size_t nregs, Method *method, Frame *prev) in CreateFrame() 125 return panda::CreateFrameWithSize(Frame::GetActualSize<is_dynamic>(nregs), nregs, method, prev); in CreateFrame() 133 Frame *frame = CreateFrame(0, nullptr, nullptr); in TEST_F() local 137 InterpreterToCompiledCodeBridge(insn, frame, &callee, thread_); in TEST_F() 142 InterpreterToCompiledCodeBridge(insn2, frame, &callee, thread_); in TEST_F() 146 InvokeCompiledCodeWithArgArray(nullptr, frame, &callee, thread_); in TEST_F() 149 FreeFrame(frame); in TEST_F() 162 Frame *frame = CreateFrame(1, nullptr, nullptr); in TEST_F() local 163 auto frame_handler = StaticFrameHandler(frame); in TEST_F() [all …]
|
| D | debugger_test.cpp | 65 static Frame *CreateFrame(size_t nregs, Method *method, Frame *prev) in CreateFrame() 68 …void *mem = aligned_alloc(8, Frame::GetAllocSize(Frame::GetActualSize<is_dynamic>(nregs), ext_sz)); in CreateFrame() 69 return new (Frame::FromExt(mem, ext_sz)) Frame(mem, method, prev, nregs); in CreateFrame() 72 static void FreeFrame(Frame *frame) in FreeFrame() argument 74 std::free(frame->GetExt()); in FreeFrame() 77 TEST_F(DebuggerTest, Frame) in TEST_F() argument 117 panda::Frame *frame = test::CreateFrame(nregs + nargs, &method, nullptr); in TEST_F() local 118 frame->SetBytecodeOffset(BYTECODE_OFFSET); in TEST_F() 130 auto frame_handler = StaticFrameHandler(frame); in TEST_F() 141 frame->GetAccAsVReg().SetPrimitive(static_cast<int64_t>(acc.value)); in TEST_F() [all …]
|
| /arkcompiler/runtime_core/runtime/bridge/ |
| D | bridge.cpp | 67 …upposed to be called from the deoptimization code. It aims to call interpreter for given frame from 68 * specific pc. Note, that it releases input interpreter's frame at the exit. 70 extern "C" int64_t InvokeInterpreter(ManagedThread *thread, const uint8_t *pc, Frame *frame, Frame … in InvokeInterpreter() argument 73 thread->SetCurrentFrame(frame); in InvokeInterpreter() 75 LOG(DEBUG, INTEROP) << "InvokeInterpreter for method: " << frame->GetMethod()->GetFullName(); in InvokeInterpreter() 77 interpreter::Execute(thread, pc, frame, thread->HasPendingException()); in InvokeInterpreter() 80 auto acc = frame->GetAcc(); in InvokeInterpreter() 81 if (frame->IsDynamic()) { in InvokeInterpreter() 87 auto prev_frame = frame->GetPrevFrame(); in InvokeInterpreter() 90 FreeFrame(frame); in InvokeInterpreter() [all …]
|
| D | bridge.h | 24 class Frame; variable 44 extern "C" void InterpreterToCompiledCodeBridge(const uint8_t *, const Frame *, const Method *, Man… 45 extern "C" void InterpreterToCompiledCodeBridgeDyn(const uint8_t *, const Frame *, const Method *, … 46 extern "C" DecodedTaggedValue InvokeCompiledCodeWithArgArray(const int64_t *, const Frame *, const … 48 extern "C" uint64_t InvokeCompiledCodeWithArgArrayDyn(const uint64_t *, uint32_t, const Frame *, co… 51 extern "C" int64_t InvokeInterpreter(ManagedThread *thread, const uint8_t *pc, Frame *frame, Frame …
|
| /arkcompiler/runtime_core/runtime/include/ |
| D | method-inl.h | 40 inline void FrameDeleter::operator()(Frame *frame) const in operator() 42 interpreter::RuntimeInterface::FreeFrame(thread_, frame); in operator() 55 …ALWAYS_INLINE inline static void InitActualArgs(Frame *frame, Span<Value> args_span, uint32_t num_… in InitActualArgs() argument 58 StaticFrameHandler static_frame_helper(frame); in InitActualArgs() 73 …NLINE inline static void InterpreterExecute(ManagedThread *thread, const uint8_t *pc, Frame *frame) in InterpreterExecute() argument 75 interpreter::Execute(thread, pc, frame); in InterpreterExecute() 78 …ALWAYS_INLINE static Frame *CreateFrame([[maybe_unused]] ManagedThread *thread, uint32_t nregs_siz… in CreateFrame() 79 Frame *prev, uint32_t nregs, uint32_t num_actual_args) in CreateFrame() 96 …ALWAYS_INLINE inline static void InitActualArgs(Frame *frame, Span<coretypes::TaggedValue> args_sp… in InitActualArgs() argument 99 frame->SetDynamic(); in InitActualArgs() [all …]
|
| /arkcompiler/runtime_core/runtime/ |
| D | osr.cpp | 39 void WriteOsrEventError(Frame *frame, FrameKind kind, uintptr_t loop_head_bc) in WriteOsrEventError() argument 55 EVENT_OSR_ENTRY(std::string(frame->GetMethod()->GetFullName()), loop_head_bc, osr_kind, in WriteOsrEventError() 63 Frame *frame = stack.GetIFrame(); in OsrEntry() local 69 WriteOsrEventError(frame, stack.GetPreviousFrameKind(), loop_head_bc); in OsrEntry() 76 LOG(DEBUG, INTEROP) << "OSR: after interpreter frame"; in OsrEntry() 77 EVENT_OSR_ENTRY(std::string(frame->GetMethod()->GetFullName()), loop_head_bc, in OsrEntry() 79 OsrEntryAfterIFrame(frame, loop_head_bc, osr_code, code_info.GetFrameSize()); in OsrEntry() 82 UnpoisonAsanStack(frame->GetPrevFrame()); in OsrEntry() 83 LOG(DEBUG, INTEROP) << "OSR: after compiled frame"; in OsrEntry() 84 EVENT_OSR_ENTRY(std::string(frame->GetMethod()->GetFullName()), loop_head_bc, in OsrEntry() [all …]
|
| D | osr.h | 20 #include "runtime/interpreter/frame.h" 26 extern "C" void *PrepareOsrEntry(const Frame *iframe, uintptr_t bc_offset, const void *osr_code, vo… 31 extern "C" void OsrEntryAfterCFrame(Frame *frame, uintptr_t loop_head_bc, const void *osr_code, siz… 32 extern "C" void OsrEntryAfterIFrame(Frame *frame, uintptr_t loop_head_bc, const void *osr_code, siz… 33 extern "C" void OsrEntryTopFrame(Frame *frame, uintptr_t loop_head_bc, const void *osr_code, size_t… 35 extern "C" void SetOsrResult(Frame *frame, uint64_t uval, double fval);
|
| D | deoptimization.cpp | 31 …* @param frame Pointer to the first interpreter frame to that CFrame will be converted. It … 34 …* @param last_frame Pointer to the last interpreter frame to that CFrame will be converted. It w… 38 …"C" [[noreturn]] void DeoptimizeAfterCFrame(ManagedThread *thread, const uint8_t *pc, Frame *frame, 39 … void *cframe_fp, Frame *last_frame, void *callee_regs); 41 * \brief Deoptimize CFrame that lies after interpreter frame. 44 …* @param frame Pointer to the first interpreter frame to that CFrame will be converted. It … 47 …* @param last_frame Pointer to the last interpreter frame to that CFrame will be converted. It w… 51 …"C" [[noreturn]] void DeoptimizeAfterIFrame(ManagedThread *thread, const uint8_t *pc, Frame *frame, 52 … void *cframe_fp, Frame *last_frame, void *callee_regs); 75 …// TODO(msherstennikov): remove this loop and check `methods` contains frame's method in stack tra… in InvalidateCompiledEntryPoint() [all …]
|
| /arkcompiler/runtime_core/compiler/tests/x86/ |
| D | asmjit_test.cpp | 68 FuncFrame frame; in TEST_F() local 69 frame.init(func); in TEST_F() 70 frame.addDirtyRegs(lhs, rhs); in TEST_F() 74 args.updateFuncFrame(frame); in TEST_F() 75 frame.finalize(); in TEST_F() 77 a.emitProlog(frame); in TEST_F() 78 a.emitArgsAssignment(frame, args); in TEST_F() 80 a.emitEpilog(frame); in TEST_F() 110 FuncFrame frame; in TEST_F() local 111 frame.init(func); in TEST_F() [all …]
|
| /arkcompiler/runtime_core/irtoc/backend/compiler/ |
| D | codegen_interpreter.h | 41 auto frame = GetGraph()->GetLocalAllocator()->New<FrameInfo>( in CreateFrameInfo() local 44 frame->SetFrameSize(fl.GetFrameSize<CFrameLayout::BYTES>()); in CreateFrameInfo() 45 frame->SetSpillsCount(fl.GetSpillsCount()); in CreateFrameInfo() 47 frame->SetCallersOffset( in CreateFrameInfo() 49 frame->SetFpCallersOffset( in CreateFrameInfo() 51 frame->SetCalleesOffset( in CreateFrameInfo() 53 frame->SetFpCalleesOffset( in CreateFrameInfo() 56 frame->SetSetupFrame(false); in CreateFrameInfo() 57 frame->SetSaveFrameAndLinkRegs(true); in CreateFrameInfo() 58 frame->SetSaveUnusedCalleeRegs(true); in CreateFrameInfo() [all …]
|
| /arkcompiler/runtime_core/runtime/tooling/ |
| D | debugger.cpp | 22 #include "interpreter/frame.h" 35 #include "runtime/interpreter/frame.h" 155 static panda::Frame *GetPandaFrame(StackWalker *pstack, uint32_t frameDepth, bool *outIsNative = nu… in GetPandaFrame() 166 panda::Frame *frame = nullptr; in GetPandaFrame() local 171 frame = stack.GetIFrame(); in GetPandaFrame() 179 return frame; in GetPandaFrame() 182 static panda::Frame *GetPandaFrame(ManagedThread *thread, uint32_t frameDepth = 0, bool *outIsNativ… in GetPandaFrame() 188 static interpreter::StaticVRegisterRef GetThisAddrVRegByPandaFrame(panda::Frame *frame) in GetThisAddrVRegByPandaFrame() argument 190 ASSERT(!frame->IsDynamic()); in GetThisAddrVRegByPandaFrame() 191 ASSERT(frame->GetMethod()->GetNumArgs() > 0); in GetThisAddrVRegByPandaFrame() [all …]
|
| /arkcompiler/runtime_core/runtime/bridge/arch/amd64/ |
| D | compiled_code_to_interpreter_bridge_dyn_amd64.S | 19 // Frame* CreateFrameForMethodWithActualArgsDyn(uint32_t num_actual_args, Method* method, Frame* pr… 21 // void InterpreterEntryPoint(Method* pc, Frame* frame, bool is_dynamic); 23 // void FreeFrame(Frame* frame); 51 // construct the frame 55 movq %rsp, %rbp // set frame pointer 75 // Before we call IncrementHotnessCounter we should set pointer to C2I frame in the TLS, 86 // Compilation successfully done, so recover caller's frame in the TLS, since C2I is not needed. 116 // create an interpreter frame 130 …// Frame* CreateFrameForMethodWithActualArgsDyn(uint32_t num_actual_args, Method* method, Frame* p… 198 // void InterpreterEntryPoint(Method *method, Frame* frame); [all …]
|
| /arkcompiler/runtime_core/compiler/tests/amd64/ |
| D | asmjit_test.cpp | 92 FuncFrame frame; in TEST_F() local 93 frame.init(func); in TEST_F() 94 frame.addDirtyRegs(lhs, rhs); in TEST_F() 98 args.updateFuncFrame(frame); in TEST_F() 99 frame.finalize(); in TEST_F() 101 a.emitProlog(frame); in TEST_F() 102 a.emitArgsAssignment(frame, args); in TEST_F() 104 a.emitEpilog(frame); in TEST_F() 183 FuncFrame frame; in TEST_F() local 184 frame.init(func); in TEST_F() [all …]
|
| /arkcompiler/runtime_core/compiler/optimizer/code_generator/ |
| D | codegen_native.cpp | 24 auto frame = GetGraph()->GetLocalAllocator()->New<FrameInfo>( in CreateFrameInfo() local 27 frame->SetFrameSize(fl.GetFrameSize<CFrameLayout::BYTES>()); in CreateFrameInfo() 28 frame->SetSpillsCount(fl.GetSpillsCount()); in CreateFrameInfo() 30 frame->SetCallersOffset( in CreateFrameInfo() 32 frame->SetFpCallersOffset( in CreateFrameInfo() 34 frame->SetCalleesOffset( in CreateFrameInfo() 36 frame->SetFpCalleesOffset( in CreateFrameInfo() 40 // we don't need to setup frame in native mode in CreateFrameInfo() 41 frame->SetSetupFrame(false); in CreateFrameInfo() 43 frame->SetSaveFrameAndLinkRegs(!GetGraph()->GetMethodProperties().IsLeaf()); in CreateFrameInfo() [all …]
|
| /arkcompiler/runtime_core/runtime/bridge/arch/arm/ |
| D | compiled_code_to_interpreter_bridge_dyn_arm.S | 19 // Frame* CreateFrameForMethodDyn(Method* method, Frame* prev); 21 // void FreeFrame(Frame* frame) 23 // void InterpreterEntryPoint(const uint8_t* pc, Frame* frame);
|