make inline_gc regparm(3) and cleaned up %call-gc stack alignment
parent
8173ef4710
commit
f5c70d4ad7
|
@ -40,6 +40,7 @@ M:: x86.32 %dispatch ( src temp -- )
|
||||||
! Registers for fastcall
|
! Registers for fastcall
|
||||||
M: x86.32 param-reg-1 EAX ;
|
M: x86.32 param-reg-1 EAX ;
|
||||||
M: x86.32 param-reg-2 EDX ;
|
M: x86.32 param-reg-2 EDX ;
|
||||||
|
M: x86.32 param-reg-3 ECX ;
|
||||||
|
|
||||||
M: x86.32 pic-tail-reg EBX ;
|
M: x86.32 pic-tail-reg EBX ;
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ M:: x86.64 %dispatch ( src temp -- )
|
||||||
|
|
||||||
M: x86.64 param-reg-1 int-regs param-regs first ;
|
M: x86.64 param-reg-1 int-regs param-regs first ;
|
||||||
M: x86.64 param-reg-2 int-regs param-regs second ;
|
M: x86.64 param-reg-2 int-regs param-regs second ;
|
||||||
: param-reg-3 ( -- reg ) int-regs param-regs third ; inline
|
M: x86.64 param-reg-3 int-regs param-regs third ;
|
||||||
|
|
||||||
M: x86.64 pic-tail-reg RBX ;
|
M: x86.64 pic-tail-reg RBX ;
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ HOOK: temp-reg cpu ( -- reg )
|
||||||
! Fastcall calling convention
|
! Fastcall calling convention
|
||||||
HOOK: param-reg-1 cpu ( -- reg )
|
HOOK: param-reg-1 cpu ( -- reg )
|
||||||
HOOK: param-reg-2 cpu ( -- reg )
|
HOOK: param-reg-2 cpu ( -- reg )
|
||||||
|
HOOK: param-reg-3 cpu ( -- reg )
|
||||||
|
|
||||||
HOOK: pic-tail-reg cpu ( -- reg )
|
HOOK: pic-tail-reg cpu ( -- reg )
|
||||||
|
|
||||||
|
@ -832,8 +833,10 @@ M:: x86 %call-gc ( gc-root-count -- )
|
||||||
param-reg-1 gc-root-base param@ LEA
|
param-reg-1 gc-root-base param@ LEA
|
||||||
! Pass number of roots as second parameter
|
! Pass number of roots as second parameter
|
||||||
param-reg-2 gc-root-count MOV
|
param-reg-2 gc-root-count MOV
|
||||||
|
! Pass vm as third argument
|
||||||
|
param-reg-3 0 MOV rc-absolute-cell rt-vm rel-fixup
|
||||||
! Call GC
|
! Call GC
|
||||||
"inline_gc" %vm-invoke-3rd-arg ;
|
"inline_gc" f %alien-invoke ;
|
||||||
|
|
||||||
M: x86 %alien-global ( dst symbol library -- )
|
M: x86 %alien-global ( dst symbol library -- )
|
||||||
[ 0 MOV ] 2dip rc-absolute-cell rel-dlsym ;
|
[ 0 MOV ] 2dip rc-absolute-cell rel-dlsym ;
|
||||||
|
|
|
@ -681,7 +681,7 @@ void factor_vm::inline_gc(cell *gc_roots_base, cell gc_roots_size)
|
||||||
gc_locals.pop_back();
|
gc_locals.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm)
|
VM_ASM_API_OVERFLOW void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm)
|
||||||
{
|
{
|
||||||
ASSERTVM();
|
ASSERTVM();
|
||||||
VM_PTR->inline_gc(gc_roots_base,gc_roots_size);
|
VM_PTR->inline_gc(gc_roots_base,gc_roots_size);
|
||||||
|
|
|
@ -20,6 +20,6 @@ PRIMITIVE(gc_stats);
|
||||||
PRIMITIVE(clear_gc_stats);
|
PRIMITIVE(clear_gc_stats);
|
||||||
PRIMITIVE(become);
|
PRIMITIVE(become);
|
||||||
struct factor_vm;
|
struct factor_vm;
|
||||||
VM_ASM_API void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm);
|
VM_ASM_API_OVERFLOW void inline_gc(cell *gc_roots_base, cell gc_roots_size, factor_vm *myvm);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue