[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 84/86: Allow users to pass custom allocators
From: |
Andy Wingo |
Subject: |
[Guile-commits] 84/86: Allow users to pass custom allocators |
Date: |
Wed, 3 Apr 2019 11:39:06 -0400 (EDT) |
wingo pushed a commit to branch lightening
in repository guile.
commit 22d06620ee225d6003f5a29fd6f91873637a6575
Author: Andy Wingo <address@hidden>
Date: Wed Apr 3 15:25:21 2019 +0200
Allow users to pass custom allocators
---
lightening.h | 15 ++++++++++++++-
lightening/lightening.c | 13 ++++++++++---
tests/test.h | 2 +-
3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/lightening.h b/lightening.h
index da1d4ec..5331a8d 100644
--- a/lightening.h
+++ b/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);
diff --git a/lightening/lightening.c b/lightening/lightening.c
index afb0b11..7b46d4f 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -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
diff --git a/tests/test.h b/tests/test.h
index d2d7ec7..578709f 100644
--- a/tests/test.h
+++ b/tests/test.h
@@ -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;
- [Guile-commits] 58/86: Add bltr test, (continued)
- [Guile-commits] 58/86: Add bltr test, Andy Wingo, 2019/04/03
- [Guile-commits] 65/86: Add add-and-branch-on-overflow tests, Andy Wingo, 2019/04/03
- [Guile-commits] 59/86: Add more integer reg/reg branch-and-compare tests, Andy Wingo, 2019/04/03
- [Guile-commits] 80/86: Add subdir-objects option to libguile makefile., Andy Wingo, 2019/04/03
- [Guile-commits] 82/86: Merge in changes from upstream lightening, Andy Wingo, 2019/04/03
- [Guile-commits] 68/86: Add push/pop test, Andy Wingo, 2019/04/03
- [Guile-commits] 70/86: Add truncr_[df]_[li] tests, Andy Wingo, 2019/04/03
- [Guile-commits] 72/86: Add int->float tests, Andy Wingo, 2019/04/03
- [Guile-commits] 54/86: Add stxi tests, Andy Wingo, 2019/04/03
- [Guile-commits] 16/86: Create beginning of stripped-down lightning interface, Andy Wingo, 2019/04/03
- [Guile-commits] 84/86: Allow users to pass custom allocators,
Andy Wingo <=
- [Guile-commits] 85/86: Fix jit_reset to be useful, Andy Wingo, 2019/04/03
- [Guile-commits] 76/86: Implement arg shuffling for jit_call{i,r}, Andy Wingo, 2019/04/03
- [Guile-commits] 86/86: Merge from upstream Lightening, Andy Wingo, 2019/04/03
- [Guile-commits] 81/86: Change headers and files to be named "lightening" instead of "jit", Andy Wingo, 2019/04/03
- [Guile-commits] 71/86: Add float/double cast inst tests, Andy Wingo, 2019/04/03
- [Guile-commits] 60/86: Add floating-point reg/reg compare-and-branch tests, Andy Wingo, 2019/04/03
- [Guile-commits] 20/86: Trim unneded bits from jit.c, Andy Wingo, 2019/04/03
- [Guile-commits] 05/86: Inline body.texi and version.texi into lightning.texi, Andy Wingo, 2019/04/03
- [Guile-commits] 77/86: Provide some type safety for jit_gpr_t and jit_fpr_t, Andy Wingo, 2019/04/03
- [Guile-commits] 79/86: Replace GNU Lightning with Lightening, Andy Wingo, 2019/04/03