mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-30 06:50:31 +02:00
Merge from upstream Lightening
This commit is contained in:
commit
9f22ec9e2d
3 changed files with 28 additions and 8 deletions
|
@ -110,6 +110,18 @@ typedef struct jit_reloc
|
||||||
#define jit_class(bits) ((bits) & 0xffff0000)
|
#define jit_class(bits) ((bits) & 0xffff0000)
|
||||||
#define jit_regno(bits) ((bits) & 0x00007fff)
|
#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;
|
typedef struct jit_state jit_state_t;
|
||||||
enum jit_arg_loc
|
enum jit_arg_loc
|
||||||
{
|
{
|
||||||
|
@ -155,7 +167,8 @@ typedef union jit_anyreg
|
||||||
|
|
||||||
JIT_API jit_bool_t init_jit(void);
|
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_destroy_state(jit_state_t*);
|
||||||
|
|
||||||
JIT_API void jit_begin(jit_state_t*, uint8_t*, size_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_gpr_saved;
|
||||||
uint8_t temp_fpr_saved;
|
uint8_t temp_fpr_saved;
|
||||||
uint8_t overflow;
|
uint8_t overflow;
|
||||||
|
void* (*alloc)(size_t);
|
||||||
|
void (*free)(void*);
|
||||||
};
|
};
|
||||||
|
|
||||||
enum jit_reloc_flags
|
enum jit_reloc_flags
|
||||||
|
@ -177,13 +179,18 @@ init_jit(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_state_t *
|
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)
|
if (!_jit)
|
||||||
abort ();
|
abort ();
|
||||||
|
|
||||||
memset(_jit, 0, sizeof (*_jit));
|
memset(_jit, 0, sizeof (*_jit));
|
||||||
|
_jit->alloc = alloc_fn;
|
||||||
|
_jit->free = free_fn;
|
||||||
|
|
||||||
if (!jit_init (_jit));
|
if (!jit_init (_jit));
|
||||||
|
|
||||||
|
@ -193,7 +200,7 @@ jit_new_state(void)
|
||||||
void
|
void
|
||||||
jit_destroy_state(jit_state_t *_jit)
|
jit_destroy_state(jit_state_t *_jit)
|
||||||
{
|
{
|
||||||
free (_jit);
|
_jit->free (_jit);
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_pointer_t
|
jit_pointer_t
|
||||||
|
@ -207,9 +214,9 @@ jit_begin(jit_state_t *_jit, uint8_t* buf, size_t length)
|
||||||
{
|
{
|
||||||
ASSERT (!_jit->start);
|
ASSERT (!_jit->start);
|
||||||
|
|
||||||
_jit->start = buf;
|
_jit->pc.uc = _jit->start = buf;
|
||||||
_jit->limit = buf + length;
|
_jit->limit = buf + length;
|
||||||
jit_reset(_jit);
|
_jit->overflow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_bool_t
|
jit_bool_t
|
||||||
|
@ -223,7 +230,7 @@ void
|
||||||
jit_reset(jit_state_t *_jit)
|
jit_reset(jit_state_t *_jit)
|
||||||
{
|
{
|
||||||
ASSERT (_jit->start);
|
ASSERT (_jit->start);
|
||||||
_jit->pc.uc = _jit->start;
|
_jit->pc.uc = _jit->start = _jit->limit = NULL;
|
||||||
_jit->overflow = 0;
|
_jit->overflow = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ main_helper (int argc, char *argv[],
|
||||||
void (*run_test)(jit_state_t*, uint8_t*, size_t))
|
void (*run_test)(jit_state_t*, uint8_t*, size_t))
|
||||||
{
|
{
|
||||||
ASSERT(init_jit());
|
ASSERT(init_jit());
|
||||||
jit_state_t *j = jit_new_state();
|
jit_state_t *j = jit_new_state (NULL, NULL);
|
||||||
ASSERT(j);
|
ASSERT(j);
|
||||||
|
|
||||||
const size_t arena_size = 4096;
|
const size_t arena_size = 4096;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue