summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/jit/x86/instr_trace.cpp
diff options
context:
space:
mode:
authorJohn Högberg <john@erlang.org>2021-04-16 08:51:50 +0200
committerBjörn Gustavsson <bjorn@erlang.org>2021-05-24 13:24:42 +0200
commite65733cd637e91d8bb38edb66aa0bddb148eb355 (patch)
treeda6b654873d9bce2825c6f69effbac16a33f3e15 /erts/emulator/beam/jit/x86/instr_trace.cpp
parent02c561271d5e64f0bff4b75b83af7d6a3d5cf93b (diff)
downloaderlang-e65733cd637e91d8bb38edb66aa0bddb148eb355.tar.gz
jit: Break out architecture-agnostic parts to prepare for ARM JIT
Diffstat (limited to 'erts/emulator/beam/jit/x86/instr_trace.cpp')
-rw-r--r--erts/emulator/beam/jit/x86/instr_trace.cpp31
1 files changed, 1 insertions, 30 deletions
diff --git a/erts/emulator/beam/jit/x86/instr_trace.cpp b/erts/emulator/beam/jit/x86/instr_trace.cpp
index f04f3493a8..f464152be9 100644
--- a/erts/emulator/beam/jit/x86/instr_trace.cpp
+++ b/erts/emulator/beam/jit/x86/instr_trace.cpp
@@ -199,46 +199,17 @@ void BeamModuleAssembler::emit_i_return_time_trace() {
emit_return();
}
-static void i_return_to_trace(Process *c_p) {
- if (IS_TRACED_FL(c_p, F_TRACE_RETURN_TO)) {
- ErtsCodePtr return_to_address;
- Uint *cpp;
-
- cpp = (Uint *)c_p->stop;
- ASSERT(is_CP(cpp[0]));
-
- for (;;) {
- erts_inspect_frame(cpp, &return_to_address);
-
- if (BeamIsReturnTrace(return_to_address)) {
- cpp += CP_SIZE + 2;
- } else if (BeamIsReturnTimeTrace(return_to_address)) {
- cpp += CP_SIZE + 1;
- } else if (BeamIsReturnToTrace(return_to_address)) {
- cpp += CP_SIZE;
- } else {
- break;
- }
- }
-
- ERTS_UNREQ_PROC_MAIN_LOCK(c_p);
- erts_trace_return_to(c_p, return_to_address);
- ERTS_REQ_PROC_MAIN_LOCK(c_p);
- }
-}
-
void BeamModuleAssembler::emit_i_return_to_trace() {
emit_enter_runtime<Update::eStack | Update::eHeap>();
a.mov(ARG1, c_p);
- runtime_call<1>(i_return_to_trace);
+ runtime_call<1>(beam_jit_return_to_trace);
emit_leave_runtime<Update::eStack | Update::eHeap>();
/* Remove the zero-sized stack frame. (Will actually do nothing if
* the native stack is used.) */
emit_deallocate(ArgVal(ArgVal::u, 0));
-
emit_return();
}