diff options
author | Rickard Green <rickard@erlang.org> | 2021-10-07 12:20:34 +0200 |
---|---|---|
committer | Rickard Green <rickard@erlang.org> | 2021-10-07 12:20:34 +0200 |
commit | 84c1cc4c2727a4f57b4f137d7eb664168d2a1b02 (patch) | |
tree | 3bd60ca57021f2a690a24de7566ff25b559fe8e7 | |
parent | e8d30d1a87db03144fa6f7c76b84d2928b6737b6 (diff) | |
parent | efab76beb0ff9188f5afa04a2242b8f5d68aa1b0 (diff) | |
download | erlang-84c1cc4c2727a4f57b4f137d7eb664168d2a1b02.tar.gz |
Merge branch 'rickard/apply-reds-fix/OTP-17675' into maint
* rickard/apply-reds-fix/OTP-17675:
HAlloc arguments in apply/fixed_apply instead of GC
Swap out/in reduction count on apply and fixed_apply for GC
-rw-r--r-- | erts/emulator/beam/beam_common.c | 6 | ||||
-rw-r--r-- | erts/emulator/beam/jit/x86/instr_call.cpp | 8 |
2 files changed, 5 insertions, 9 deletions
diff --git a/erts/emulator/beam/beam_common.c b/erts/emulator/beam/beam_common.c index 5eeb9a9807..1a1326450f 100644 --- a/erts/emulator/beam/beam_common.c +++ b/erts/emulator/beam/beam_common.c @@ -1300,11 +1300,7 @@ apply_setup_error_handler(Process* p, Eterm module, Eterm function, Uint arity, * properly adjusted). */ - if (HeapWordsLeft(p) < sz) { - erts_garbage_collect(p, sz, reg, arity); - } - hp = HEAP_TOP(p); - HEAP_TOP(p) += sz; + hp = HAlloc(p, sz); for (i = arity-1; i >= 0; i--) { args = CONS(hp, reg[i], args); hp += 2; diff --git a/erts/emulator/beam/jit/x86/instr_call.cpp b/erts/emulator/beam/jit/x86/instr_call.cpp index b79ef5567c..e0ee3543bd 100644 --- a/erts/emulator/beam/jit/x86/instr_call.cpp +++ b/erts/emulator/beam/jit/x86/instr_call.cpp @@ -136,7 +136,7 @@ x86::Mem BeamModuleAssembler::emit_variable_apply(bool includeI) { align_erlang_cp(); a.bind(entry); - emit_enter_runtime<Update::eStack | Update::eHeap>(); + emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>(); a.mov(ARG1, c_p); load_x_reg_array(ARG2); @@ -151,7 +151,7 @@ x86::Mem BeamModuleAssembler::emit_variable_apply(bool includeI) { runtime_call<4>(apply); - emit_leave_runtime<Update::eStack | Update::eHeap>(); + emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>(); a.test(RET, RET); a.short_().jne(dispatch); @@ -185,7 +185,7 @@ x86::Mem BeamModuleAssembler::emit_fixed_apply(const ArgVal &Arity, mov_arg(ARG3, Arity); - emit_enter_runtime<Update::eStack | Update::eHeap>(); + emit_enter_runtime<Update::eReductions | Update::eStack | Update::eHeap>(); a.mov(ARG1, c_p); load_x_reg_array(ARG2); @@ -200,7 +200,7 @@ x86::Mem BeamModuleAssembler::emit_fixed_apply(const ArgVal &Arity, runtime_call<5>(fixed_apply); - emit_leave_runtime<Update::eStack | Update::eHeap>(); + emit_leave_runtime<Update::eReductions | Update::eStack | Update::eHeap>(); a.test(RET, RET); a.short_().jne(dispatch); |