mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 11:40:18 +02:00
Allow users to pass custom allocators
This commit is contained in:
parent
f348b8ed6d
commit
22d06620ee
3 changed files with 25 additions and 5 deletions
15
lightening.h
15
lightening.h
|
@ -110,6 +110,18 @@ typedef struct jit_reloc
|
|||
#define jit_class(bits) ((bits) & 0xffff0000)
|
||||
#define jit_regno(bits) ((bits) & 0x00007fff)
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_gpr_is_callee_save (jit_gpr_t reg)
|
||||
{
|
||||
return jit_class(reg.bits) & jit_class_sav;
|
||||
}
|
||||
|
||||
static inline jit_bool_t
|
||||
jit_fpr_is_callee_save (jit_fpr_t reg)
|
||||
{
|
||||
return jit_class(reg.bits) & jit_class_sav;
|
||||
}
|
||||
|
||||
typedef struct jit_state jit_state_t;
|
||||
enum jit_arg_loc
|
||||
{
|
||||
|
@ -155,7 +167,8 @@ typedef union jit_anyreg
|
|||
|
||||
JIT_API jit_bool_t init_jit(void);
|
||||
|
||||
JIT_API jit_state_t *jit_new_state(void);
|
||||
JIT_API jit_state_t *jit_new_state(void* (*alloc_fn)(size_t),
|
||||
void (*free_fn)(void*));
|
||||
JIT_API void jit_destroy_state(jit_state_t*);
|
||||
|
||||
JIT_API void jit_begin(jit_state_t*, uint8_t*, size_t);
|
||||
|
|
|
@ -137,6 +137,8 @@ struct jit_state
|
|||
uint8_t temp_gpr_saved;
|
||||
uint8_t temp_fpr_saved;
|
||||
uint8_t overflow;
|
||||
void* (*alloc)(size_t);
|
||||
void (*free)(void*);
|
||||
};
|
||||
|
||||
enum jit_reloc_flags
|
||||
|
@ -177,13 +179,18 @@ init_jit(void)
|
|||
}
|
||||
|
||||
jit_state_t *
|
||||
jit_new_state(void)
|
||||
jit_new_state(void* (*alloc_fn)(size_t), void (*free_fn)(void*))
|
||||
{
|
||||
jit_state_t *_jit = malloc (sizeof (*_jit));
|
||||
if (!alloc_fn) alloc_fn = malloc;
|
||||
if (!free_fn) free_fn = free;
|
||||
|
||||
jit_state_t *_jit = alloc_fn (sizeof (*_jit));
|
||||
if (!_jit)
|
||||
abort ();
|
||||
|
||||
memset(_jit, 0, sizeof (*_jit));
|
||||
_jit->alloc = alloc_fn;
|
||||
_jit->free = free_fn;
|
||||
|
||||
if (!jit_init (_jit));
|
||||
|
||||
|
@ -193,7 +200,7 @@ jit_new_state(void)
|
|||
void
|
||||
jit_destroy_state(jit_state_t *_jit)
|
||||
{
|
||||
free (_jit);
|
||||
_jit->free (_jit);
|
||||
}
|
||||
|
||||
jit_pointer_t
|
||||
|
|
|
@ -18,7 +18,7 @@ main_helper (int argc, char *argv[],
|
|||
void (*run_test)(jit_state_t*, uint8_t*, size_t))
|
||||
{
|
||||
ASSERT(init_jit());
|
||||
jit_state_t *j = jit_new_state();
|
||||
jit_state_t *j = jit_new_state (NULL, NULL);
|
||||
ASSERT(j);
|
||||
|
||||
const size_t arena_size = 4096;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue