1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* %CopyrightBegin%
*
* Copyright Ericsson AB 2021. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* %CopyrightEnd%
*/
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include "sys.h"
#include "erl_vm.h"
#include "global.h"
#if defined(DEBUG) && defined(JIT_HARD_DEBUG)
void beam_jit_validate_term(Eterm term);
#endif
typedef Eterm BeamJitNifF(struct enif_environment_t *, int argc, Eterm argv[]);
enum beam_jit_nif_load_ret { RET_NIF_success, RET_NIF_error, RET_NIF_yield };
Eterm beam_jit_call_bif(Process *c_p,
Eterm *reg,
ErtsCodePtr I,
ErtsBifFunc vbf,
Uint arity);
Eterm beam_jit_call_nif(Process *c_p,
ErtsCodePtr I,
Eterm *reg,
BeamJitNifF *fp,
struct erl_module_nif *NifMod);
enum beam_jit_nif_load_ret beam_jit_load_nif(Process *c_p,
ErtsCodePtr I,
Eterm *reg);
Uint beam_jit_get_map_elements(Eterm map,
Eterm *reg,
Eterm *E,
Uint n,
Eterm *fs);
void beam_jit_bs_field_size_argument_error(Process *c_p, Eterm size);
void beam_jit_bs_add_argument_error(Process *c_p, Eterm A, Eterm B);
Eterm beam_jit_bs_start_match2(Eterm context,
Uint live,
Uint slots,
Process *c_p,
Eterm *reg);
Eterm beam_jit_bs_init(Process *c_p,
Eterm *reg,
ERL_BITS_DECLARE_STATEP,
Eterm BsOp1,
Eterm BsOp2,
unsigned Live);
Eterm beam_jit_bs_init_bits(Process *c_p,
Eterm *reg,
ERL_BITS_DECLARE_STATEP,
Uint num_bits,
Uint alloc,
unsigned Live);
Eterm beam_jit_bs_get_integer(Process *c_p,
Eterm *reg,
Eterm context,
Uint flags,
Uint size,
Uint Live);
ErtsMessage *beam_jit_decode_dist(Process *c_p, ErtsMessage *msgp);
Sint beam_jit_remove_message(Process *c_p,
Sint FCALLS,
Eterm *HTOP,
Eterm *E,
Uint32 active_code_ix);
void beam_jit_bs_context_to_binary(Eterm context);
void beam_jit_take_receive_lock(Process *c_p);
void beam_jit_wait_locked(Process *c_p, ErtsCodePtr cp);
void beam_jit_wait_unlocked(Process *c_p, ErtsCodePtr cp);
enum beam_jit_tmo_ret { RET_next = 0, RET_wait = 1, RET_badarg = 2 };
enum beam_jit_tmo_ret beam_jit_wait_timeout(Process *c_p,
Eterm timeout_value,
ErtsCodePtr next);
void beam_jit_timeout(Process *c_p);
void beam_jit_timeout_locked(Process *c_p);
|