From 5943680509c0469a1a43c27dc892536f4ea7f4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?John=20H=C3=B6gberg?= Date: Tue, 17 Sep 2019 10:45:56 +0200 Subject: erts: Use global trap entries for lists The local ones are redundant now that the global ones can't be traced anymore. --- erts/emulator/beam/erl_bif_lists.c | 59 +++++++------------------------------- erts/emulator/beam/erl_init.c | 1 - erts/emulator/beam/global.h | 3 -- 3 files changed, 10 insertions(+), 53 deletions(-) diff --git a/erts/emulator/beam/erl_bif_lists.c b/erts/emulator/beam/erl_bif_lists.c index 9d485abc35..40512a117d 100644 --- a/erts/emulator/beam/erl_bif_lists.c +++ b/erts/emulator/beam/erl_bif_lists.c @@ -32,45 +32,6 @@ #include "bif.h" #include "erl_binary.h" -static Export plusplus_trap_export; -static Export append_trap_export; - -static Export minusminus_trap_export; -static Export subtract_trap_export; - -static Export member_trap_export; - -static Export reverse_trap_export; - -static Export keymember_trap_export; -static Export keysearch_trap_export; -static Export keyfind_trap_export; - -void erts_init_bif_lists(void) { - erts_init_trap_export(&plusplus_trap_export, am_erlang, am_PlusPlus, 2, - ebif_plusplus_2); - erts_init_trap_export(&append_trap_export, am_erlang, am_append, 2, - append_2); - - erts_init_trap_export(&minusminus_trap_export, am_erlang, am_MinusMinus, 2, - ebif_minusminus_2); - erts_init_trap_export(&subtract_trap_export, am_lists, am_subtract, 2, - subtract_2); - - erts_init_trap_export(&reverse_trap_export, am_lists, am_reverse, 2, - lists_reverse_2); - - erts_init_trap_export(&member_trap_export, am_lists, am_member, 2, - lists_member_2); - - erts_init_trap_export(&keymember_trap_export, am_lists, am_keymember, 3, - lists_keymember_3); - erts_init_trap_export(&keysearch_trap_export, am_lists, am_keysearch, 3, - lists_keysearch_3); - erts_init_trap_export(&keyfind_trap_export, am_lists, am_keyfind, 3, - lists_keyfind_3); -} - static Eterm keyfind(Export* Bif, Process* p, Eterm Key, Eterm Pos, Eterm List); /* erlang:'++'/2 @@ -346,12 +307,12 @@ static Eterm append(Export *bif_entry, BIF_ALIST_2) { Eterm ebif_plusplus_2(BIF_ALIST_2) { - return append(&plusplus_trap_export, BIF_CALL_ARGS); + return append(&bif_trap_export[BIF_ebif_plusplus_2], BIF_CALL_ARGS); } BIF_RETTYPE append_2(BIF_ALIST_2) { - return append(&append_trap_export, BIF_CALL_ARGS); + return append(&bif_trap_export[BIF_append_2], BIF_CALL_ARGS); } /* erlang:'--'/2 @@ -1077,11 +1038,11 @@ static Eterm subtract(Export *bif_entry, BIF_ALIST_2) { } BIF_RETTYPE ebif_minusminus_2(BIF_ALIST_2) { - return subtract(&minusminus_trap_export, BIF_CALL_ARGS); + return subtract(&bif_trap_export[BIF_ebif_minusminus_2], BIF_CALL_ARGS); } BIF_RETTYPE subtract_2(BIF_ALIST_2) { - return subtract(&subtract_trap_export, BIF_CALL_ARGS); + return subtract(&bif_trap_export[BIF_subtract_2], BIF_CALL_ARGS); } @@ -1106,7 +1067,7 @@ BIF_RETTYPE lists_member_2(BIF_ALIST_2) while (is_list(list)) { if (--max_iter < 0) { BUMP_ALL_REDS(BIF_P); - BIF_TRAP2(&member_trap_export, BIF_P, term, list); + BIF_TRAP2(&bif_trap_export[BIF_lists_member_2], BIF_P, term, list); } item = CAR(list_val(list)); if ((item == term) || (non_immed_key && eq(item, term))) { @@ -1168,7 +1129,7 @@ static BIF_RETTYPE lists_reverse_alloc(Process *c_p, } ASSERT(is_list(tail) && cells_left == 0); - BIF_TRAP2(&reverse_trap_export, c_p, list, tail); + BIF_TRAP2(&bif_trap_export[BIF_lists_reverse_2], c_p, list, tail); } static BIF_RETTYPE lists_reverse_onheap(Process *c_p, @@ -1217,7 +1178,7 @@ static BIF_RETTYPE lists_reverse_onheap(Process *c_p, } BUMP_ALL_REDS(c_p); - BIF_TRAP2(&reverse_trap_export, c_p, list, tail); + BIF_TRAP2(&bif_trap_export[BIF_lists_reverse_2], c_p, list, tail); } BIF_ERROR(c_p, BADARG); @@ -1247,7 +1208,7 @@ lists_keymember_3(BIF_ALIST_3) { Eterm res; - res = keyfind(&keymember_trap_export, BIF_P, + res = keyfind(&bif_trap_export[BIF_lists_keymember_3], BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3); if (is_value(res) && is_tuple(res)) { return am_true; @@ -1261,7 +1222,7 @@ lists_keysearch_3(BIF_ALIST_3) { Eterm res; - res = keyfind(&keysearch_trap_export, BIF_P, + res = keyfind(&bif_trap_export[BIF_lists_keysearch_3], BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3); if (is_non_value(res) || is_not_tuple(res)) { return res; @@ -1274,7 +1235,7 @@ lists_keysearch_3(BIF_ALIST_3) BIF_RETTYPE lists_keyfind_3(BIF_ALIST_3) { - return keyfind(&keyfind_trap_export, BIF_P, + return keyfind(&bif_trap_export[BIF_lists_keyfind_3], BIF_P, BIF_ARG_1, BIF_ARG_2, BIF_ARG_3); } diff --git a/erts/emulator/beam/erl_init.c b/erts/emulator/beam/erl_init.c index 4d0ebbd1ed..547e4064a2 100644 --- a/erts/emulator/beam/erl_init.c +++ b/erts/emulator/beam/erl_init.c @@ -354,7 +354,6 @@ erl_init(int ncpu, erts_init_bif_chksum(); erts_init_bif_binary(); erts_init_bif_guard(); - erts_init_bif_lists(); erts_init_bif_persistent_term(); erts_init_bif_re(); erts_init_unicode(); /* after RE to get access to PCRE unicode */ diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h index b86709b093..dd114a98fa 100644 --- a/erts/emulator/beam/global.h +++ b/erts/emulator/beam/global.h @@ -912,9 +912,6 @@ Eterm erts_trapping_length_1(Process* p, Eterm* args); Eterm erl_is_function(Process* p, Eterm arg1, Eterm arg2); -/* beam_bif_lists.c */ -void erts_init_bif_lists(void); - /* beam_bif_load.c */ Eterm erts_check_process_code(Process *c_p, Eterm module, int *redsp, int fcalls); Eterm erts_proc_copy_literal_area(Process *c_p, int *redsp, int fcalls, int gc_allowed); -- cgit v1.2.1