: (a,inf] ( a -- interval ) 1/0. (a,b] ; inline
+: [0,inf] ( -- interval ) 0 [a,inf] ; foldable
+
: [-inf,inf] ( -- interval ) full-interval ; inline
: compare-endpoints ( p1 p2 quot -- ? )
: interval-abs ( i1 -- i2 )
{
{ [ dup empty-interval eq? ] [ ] }
- { [ dup full-interval eq? ] [ drop 0 [a,inf] ] }
+ { [ dup full-interval eq? ] [ drop [0,inf] ] }
{ [ 0 over interval-contains? ] [ (interval-abs) { 0 t } suffix points>interval ] }
[ (interval-abs) points>interval ]
} cond ;
: interval-log2 ( i1 -- i2 )
{
{ empty-interval [ empty-interval ] }
- { full-interval [ 0 [a,inf] ] }
+ { full-interval [ [0,inf] ] }
[
to>> first 1 max dup most-positive-fixnum >
[ drop full-interval interval-log2 ]
}
/* Compute where each block is going to go, after compaction */
- cell compute_heap_forwarding(heap *heap, unordered_map<heap_block *,char *> &forwarding)
+cell compute_heap_forwarding(heap *heap, unordered_map<heap_block *,char *> &forwarding)
{
heap_block *scan = first_block(heap);
char *address = (char *)first_block(heap);
return (cell)address - heap->seg->start;
}
- void compact_heap(heap *heap, unordered_map<heap_block *,char *> &forwarding)
+void compact_heap(heap *heap, unordered_map<heap_block *,char *> &forwarding)
{
heap_block *scan = first_block(heap);
#include "asm.h"
-/* Note that primitive word definitions are compiled with
-__attribute__((regparm 2), so the pointer to the word object is passed in EAX,
-and the callstack top is passed in EDX */
-
#define ARG0 %eax
#define ARG1 %edx
#define STACK_REG %esp
mov %edx,%eax
ret
-DEF(F_FASTCALL void,primitive_inline_cache_miss,(void)):
+DEF(void,primitive_inline_cache_miss,(void)):
mov (%esp),%ebx
-DEF(F_FASTCALL void,primitive_inline_cache_miss_tail,(void)):
+DEF(void,primitive_inline_cache_miss_tail,(void)):
sub $8,%esp
push %ebx
call MANGLE(inline_cache_miss)
call *ARG3 /* call memcpy */
ret /* return _with new stack_ */
-DEF(F_FASTCALL void,primitive_inline_cache_miss,(void)):
+DEF(void,primitive_inline_cache_miss,(void)):
mov (%rsp),%rbx
-DEF(F_FASTCALL void,primitive_inline_cache_miss_tail,(void)):
+DEF(void,primitive_inline_cache_miss_tail,(void)):
sub $STACK_PADDING,%rsp
mov %rbx,ARG0
call MANGLE(inline_cache_miss)