mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-19 05:39:17 +02:00
Compiles on x86_64
This commit is contained in:
parent
64d86bd1e2
commit
168e7d123d
2 changed files with 15 additions and 15 deletions
18
gc.c
18
gc.c
|
@ -22,6 +22,18 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
/* HEAP definitions, based off heap from Chibi scheme */
|
||||||
|
#define gc_heap_first_block(h) ((object)(h->data + gc_heap_align(gc_free_chunk_size)))
|
||||||
|
#define gc_heap_last_block(h) ((object)((char*)h->data + h->size - gc_heap_align(gc_free_chunk_size)))
|
||||||
|
#define gc_heap_end(h) ((object)((char*)h->data + h->size))
|
||||||
|
#define gc_heap_pad_size(s) (sizeof(struct gc_heap_t) + (s) + gc_heap_align(1))
|
||||||
|
#define gc_free_chunk_size (sizeof(gc_free_list))
|
||||||
|
|
||||||
|
#define gc_align(n, bits) (((n)+(1<<(bits))-1)&(((unsigned long)-1)-((1<<(bits))-1)))
|
||||||
|
// 64-bit is 3, 32-bit is 2
|
||||||
|
//#define gc_word_align(n) gc_align((n), 2)
|
||||||
|
#define gc_heap_align(n) gc_align(n, 5)
|
||||||
|
|
||||||
////////////////////
|
////////////////////
|
||||||
// Global variables
|
// Global variables
|
||||||
|
|
||||||
|
@ -166,8 +178,8 @@ gc_heap *gc_heap_create(size_t size, size_t max_size, size_t chunk_size)
|
||||||
{
|
{
|
||||||
gc_free_list *free, *next;
|
gc_free_list *free, *next;
|
||||||
gc_heap *h;
|
gc_heap *h;
|
||||||
// TODO: mmap?
|
size_t padded_size = gc_heap_pad_size(size);
|
||||||
h = malloc(gc_heap_pad_size(size));
|
h = malloc(padded_size); // TODO: mmap?
|
||||||
if (!h) return NULL;
|
if (!h) return NULL;
|
||||||
h->size = size;
|
h->size = size;
|
||||||
//h->free_size = size;
|
//h->free_size = size;
|
||||||
|
@ -450,7 +462,7 @@ size_t gc_allocated_bytes(object obj, gc_free_list *q, gc_free_list *r)
|
||||||
#if GC_SAFETY_CHECKS
|
#if GC_SAFETY_CHECKS
|
||||||
if (is_value_type(obj)) {
|
if (is_value_type(obj)) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
"gc_allocated_bytes - passed value type %p q=[%p, %zu] r=[%p, %zu]\n",
|
"gc_allocated_bytes - passed value type %p q=[%p, %d] r=[%p, %d]\n",
|
||||||
obj, q, q->size, r, r->size);
|
obj, q, q->size, r, r->size);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,18 +122,6 @@ struct gc_header_type_t {
|
||||||
#define mark(x) (((list) x)->hdr.mark)
|
#define mark(x) (((list) x)->hdr.mark)
|
||||||
#define grayed(x) (((list) x)->hdr.grayed)
|
#define grayed(x) (((list) x)->hdr.grayed)
|
||||||
|
|
||||||
/* HEAP definitions, based off heap from Chibi scheme */
|
|
||||||
#define gc_heap_first_block(h) ((object)(h->data + gc_heap_align(gc_free_chunk_size)))
|
|
||||||
#define gc_heap_last_block(h) ((object)((char*)h->data + h->size - gc_heap_align(gc_free_chunk_size)))
|
|
||||||
#define gc_heap_end(h) ((object)((char*)h->data + h->size))
|
|
||||||
#define gc_heap_pad_size(s) (sizeof(struct gc_heap_t) + (s) + gc_heap_align(1))
|
|
||||||
#define gc_free_chunk_size (sizeof(gc_free_list))
|
|
||||||
|
|
||||||
#define gc_align(n, bits) (((n)+(1<<(bits))-1)&(((unsigned int)-1)-((1<<(bits))-1)))
|
|
||||||
// 64-bit is 3, 32-bit is 2
|
|
||||||
#define gc_word_align(n) gc_align((n), 2)
|
|
||||||
#define gc_heap_align(n) gc_align(n, 5)
|
|
||||||
|
|
||||||
/* Enums for tri-color marking */
|
/* Enums for tri-color marking */
|
||||||
typedef enum { STATUS_ASYNC
|
typedef enum { STATUS_ASYNC
|
||||||
, STATUS_SYNC1
|
, STATUS_SYNC1
|
||||||
|
|
Loading…
Add table
Reference in a new issue