1
Fork 0
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:
Andy Wingo 2019-04-03 15:25:21 +02:00
parent f348b8ed6d
commit 22d06620ee
3 changed files with 25 additions and 5 deletions

View file

@ -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);

View file

@ -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

View file

@ -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;