mirror of
https://github.com/justinethier/cyclone.git
synced 2025-07-15 16:57:35 +02:00
Basic bignum2 hooks
This commit is contained in:
parent
79f4a1f4ea
commit
22c4f0277a
3 changed files with 32 additions and 0 deletions
29
gc.c
29
gc.c
|
@ -910,6 +910,15 @@ char *gc_copy_obj(object dest, char *obj, gc_thread_data * thd)
|
||||||
((bignum_type *)hp)->bn.dp = ((bignum_type *)obj)->bn.dp;
|
((bignum_type *)hp)->bn.dp = ((bignum_type *)obj)->bn.dp;
|
||||||
return (char *)hp;
|
return (char *)hp;
|
||||||
}
|
}
|
||||||
|
case bignum2_tag: {
|
||||||
|
bignum2_type *hp = dest;
|
||||||
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
type_of(hp) = bignum2_tag;
|
||||||
|
((bignum2_type *)hp)->num_digits = ((bignum2_type *)obj)->num_digits;
|
||||||
|
((bignum2_type *)hp)->sign = ((bignum2_type *)obj)->sign;
|
||||||
|
// Don't copy digits, caller will populate them
|
||||||
|
return (char *)hp;
|
||||||
|
}
|
||||||
case cvar_tag:{
|
case cvar_tag:{
|
||||||
cvar_type *hp = dest;
|
cvar_type *hp = dest;
|
||||||
mark(hp) = thd->gc_alloc_color;
|
mark(hp) = thd->gc_alloc_color;
|
||||||
|
@ -1308,6 +1317,24 @@ hrt_log_delta("gc sweep fixed size", tstamp);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief A convenience function for allocating bignums
|
||||||
|
* @param data The mutator's thread data object
|
||||||
|
* @return Pointer to a heap object for the bignum
|
||||||
|
*/
|
||||||
|
void *gc_alloc_bignum2(gc_thread_data *data)
|
||||||
|
{
|
||||||
|
int heap_grown, result;
|
||||||
|
bignum2_type *bn;
|
||||||
|
bignum2_type tmp;
|
||||||
|
// No need to do this since tmp is always local
|
||||||
|
//tmp.hdr.mark = gc_color_red;
|
||||||
|
//tmp.hdr.grayed = 0;
|
||||||
|
tmp.tag = bignum2_tag;
|
||||||
|
bn = gc_alloc(((gc_thread_data *)data)->heap, sizeof(bignum2_type), (char *)(&tmp), (gc_thread_data *)data, &heap_grown);
|
||||||
|
return bn;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief A convenience function for allocating bignums
|
* @brief A convenience function for allocating bignums
|
||||||
* @param data The mutator's thread data object
|
* @param data The mutator's thread data object
|
||||||
|
@ -1500,6 +1527,8 @@ size_t gc_allocated_bytes(object obj, gc_free_list * q, gc_free_list * r)
|
||||||
return gc_heap_align(sizeof(macro_type));
|
return gc_heap_align(sizeof(macro_type));
|
||||||
if (t == bignum_tag)
|
if (t == bignum_tag)
|
||||||
return gc_heap_align(sizeof(bignum_type));
|
return gc_heap_align(sizeof(bignum_type));
|
||||||
|
if (t == bignum2_tag)
|
||||||
|
return gc_heap_align(sizeof(bignum2_type) + ((bignum2_type *)obj)->num_digits * sizeof(uint32_t));
|
||||||
if (t == port_tag)
|
if (t == port_tag)
|
||||||
return gc_heap_align(sizeof(port_type));
|
return gc_heap_align(sizeof(port_type));
|
||||||
if (t == cvar_tag)
|
if (t == cvar_tag)
|
||||||
|
|
|
@ -71,6 +71,7 @@ enum object_tag {
|
||||||
, atomic_tag = 22
|
, atomic_tag = 22
|
||||||
, void_tag = 23
|
, void_tag = 23
|
||||||
, record_tag = 24
|
, record_tag = 24
|
||||||
|
, bignum2_tag = 25
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -414,6 +415,7 @@ void *gc_try_alloc_slow(gc_heap *h_passed, gc_heap *h, size_t size, char *obj, g
|
||||||
void *gc_alloc(gc_heap_root * h, size_t size, char *obj, gc_thread_data * thd,
|
void *gc_alloc(gc_heap_root * h, size_t size, char *obj, gc_thread_data * thd,
|
||||||
int *heap_grown);
|
int *heap_grown);
|
||||||
void *gc_alloc_bignum(gc_thread_data *data);
|
void *gc_alloc_bignum(gc_thread_data *data);
|
||||||
|
void *gc_alloc_bignum2(gc_thread_data *data);
|
||||||
size_t gc_allocated_bytes(object obj, gc_free_list * q, gc_free_list * r);
|
size_t gc_allocated_bytes(object obj, gc_free_list * q, gc_free_list * r);
|
||||||
gc_heap *gc_heap_last(gc_heap * h);
|
gc_heap *gc_heap_last(gc_heap * h);
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ const char *tag_names[] = {
|
||||||
/*atomic_tag*/ , "atomic"
|
/*atomic_tag*/ , "atomic"
|
||||||
/*void_tag*/ , "void"
|
/*void_tag*/ , "void"
|
||||||
/*record_tag*/ , "record"
|
/*record_tag*/ , "record"
|
||||||
|
/*bignum2_tag*/ , "bignum2"
|
||||||
, "Reserved for future use"
|
, "Reserved for future use"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue