1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-16 18:50:23 +02:00

Update barrier functions to also have the object being written

Also remove read barriers, as they were unused, and we have no plans to
use them.
This commit is contained in:
Andy Wingo 2022-07-31 21:30:59 +02:00
parent 7f405c929e
commit 13b3bb5b24
5 changed files with 11 additions and 20 deletions

7
bdw.h
View file

@ -103,15 +103,12 @@ static inline void collect(struct mutator *mut) {
GC_gcollect();
}
static inline void init_field(void **addr, void *val) {
static inline void init_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void set_field(void **addr, void *val) {
static inline void set_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void* get_field(void **addr) {
return *addr;
}
static inline struct mutator *add_mutator(struct heap *heap) {
struct mutator *ret = GC_malloc(sizeof(struct mutator));

View file

@ -202,8 +202,8 @@ static void populate(struct thread *t, int depth, Node *node) {
NodeHandle r = { allocate_node(mut) };
PUSH_HANDLE(mut, r);
set_field((void**)&HANDLE_REF(self)->left, HANDLE_REF(l));
set_field((void**)&HANDLE_REF(self)->right, HANDLE_REF(r));
set_field(HANDLE_REF(self), (void**)&HANDLE_REF(self)->left, HANDLE_REF(l));
set_field(HANDLE_REF(self), (void**)&HANDLE_REF(self)->right, HANDLE_REF(r));
// i is 0 because the memory is zeroed.
HANDLE_REF(self)->j = depth;
@ -228,8 +228,8 @@ static Node* make_tree(struct thread *t, int depth) {
allocate_garbage(t);
Node *result = allocate_node(mut);
init_field((void**)&result->left, HANDLE_REF(left));
init_field((void**)&result->right, HANDLE_REF(right));
init_field(result, (void**)&result->left, HANDLE_REF(left));
init_field(result, (void**)&result->right, HANDLE_REF(right));
// i is 0 because the memory is zeroed.
result->j = depth;

View file

@ -49,7 +49,7 @@ static Quad* make_tree(struct mutator *mut, int depth) {
Quad *result = allocate_quad(mut);
for (size_t i = 0; i < 4; i++)
init_field((void**)&result->kids[i], HANDLE_REF(kids[i]));
init_field(result, (void**)&result->kids[i], HANDLE_REF(kids[i]));
for (size_t i = 0; i < 4; i++)
POP_HANDLE(mut);

7
semi.h
View file

@ -255,15 +255,12 @@ static inline void* allocate_pointerless(struct mutator *mut,
return allocate(mut, kind, size);
}
static inline void init_field(void **addr, void *val) {
static inline void init_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void set_field(void **addr, void *val) {
static inline void set_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void* get_field(void **addr) {
return *addr;
}
static int initialize_semi_space(struct semi_space *space, size_t size) {
// Allocate even numbers of pages.

View file

@ -1652,15 +1652,12 @@ static inline void* allocate_pointerless(struct mutator *mut,
return allocate(mut, kind, size);
}
static inline void init_field(void **addr, void *val) {
static inline void init_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void set_field(void **addr, void *val) {
static inline void set_field(void *obj, void **addr, void *val) {
*addr = val;
}
static inline void* get_field(void **addr) {
return *addr;
}
static struct slab* allocate_slabs(size_t nslabs) {
size_t size = nslabs * SLAB_SIZE;