VM: the delete_context() and reset_context() api functions can be
simplified a bit The functions always operates on parent->ctx, so passing a context* parameter is redundant. This enables shorter assembly code for the (start-context-and-delete) and (set-context-and-delete) primitives.db4
parent
528e9f61f3
commit
016614747d
|
@ -820,7 +820,6 @@ IN: bootstrap.ppc
|
|||
: jit-delete-current-context ( -- )
|
||||
jit-load-context
|
||||
3 vm-reg MR
|
||||
4 ctx-reg MR
|
||||
"delete_context" jit-call ;
|
||||
|
||||
[
|
||||
|
@ -831,7 +830,6 @@ IN: bootstrap.ppc
|
|||
: jit-start-context-and-delete ( -- )
|
||||
jit-load-context
|
||||
3 vm-reg MR
|
||||
4 ctx-reg MR
|
||||
"reset_context" jit-call
|
||||
jit-pop-quot-and-param
|
||||
ctx-reg jit-switch-context
|
||||
|
|
|
@ -344,7 +344,7 @@ IN: bootstrap.x86
|
|||
: jit-delete-current-context ( -- )
|
||||
jit-load-vm
|
||||
jit-load-context
|
||||
vm-reg ctx-reg "delete_context" jit-call-2arg ;
|
||||
vm-reg "delete_context" jit-call-1arg ;
|
||||
|
||||
[
|
||||
jit-delete-current-context
|
||||
|
@ -354,7 +354,7 @@ IN: bootstrap.x86
|
|||
: jit-start-context-and-delete ( -- )
|
||||
jit-load-vm
|
||||
jit-load-context
|
||||
vm-reg ctx-reg "reset_context" jit-call-2arg
|
||||
vm-reg "reset_context" jit-call-1arg
|
||||
|
||||
jit-save-quot-and-param
|
||||
ctx-reg jit-switch-context
|
||||
|
|
|
@ -62,6 +62,7 @@ IN: bootstrap.x86
|
|||
ctx-reg context-datastack-offset [+] ds-reg MOV
|
||||
ctx-reg context-retainstack-offset [+] rs-reg MOV ;
|
||||
|
||||
! ctx-reg must already have been loaded
|
||||
: jit-restore-context ( -- )
|
||||
ds-reg ctx-reg context-datastack-offset [+] MOV
|
||||
rs-reg ctx-reg context-retainstack-offset [+] MOV ;
|
||||
|
@ -298,8 +299,7 @@ IN: bootstrap.x86
|
|||
[ jit-start-context ] \ (start-context) define-sub-primitive
|
||||
|
||||
: jit-delete-current-context ( -- )
|
||||
jit-load-context
|
||||
vm-reg ctx-reg "delete_context" jit-call-2arg ;
|
||||
vm-reg "delete_context" jit-call-1arg ;
|
||||
|
||||
[
|
||||
jit-delete-current-context
|
||||
|
@ -307,9 +307,9 @@ IN: bootstrap.x86
|
|||
] \ (set-context-and-delete) define-sub-primitive
|
||||
|
||||
: jit-start-context-and-delete ( -- )
|
||||
jit-load-context
|
||||
vm-reg ctx-reg "reset_context" jit-call-2arg
|
||||
|
||||
jit-load-context
|
||||
vm-reg "reset_context" jit-call-1arg
|
||||
jit-pop-quot-and-param
|
||||
ctx-reg jit-switch-context
|
||||
jit-push-param
|
||||
|
|
|
@ -100,15 +100,15 @@ void factor_vm::init_context(context* ctx) {
|
|||
}
|
||||
|
||||
/* Allocates memory (init_context(), but not parent->new_context() */
|
||||
context* new_context(factor_vm* parent) {
|
||||
VM_C_API context* new_context(factor_vm* parent) {
|
||||
context* new_context = parent->new_context();
|
||||
parent->init_context(new_context);
|
||||
return new_context;
|
||||
}
|
||||
|
||||
void factor_vm::delete_context(context* old_context) {
|
||||
unused_contexts.push_back(old_context);
|
||||
active_contexts.erase(old_context);
|
||||
void factor_vm::delete_context() {
|
||||
unused_contexts.push_back(ctx);
|
||||
active_contexts.erase(ctx);
|
||||
|
||||
while (unused_contexts.size() > 10) {
|
||||
context* stale_context = unused_contexts.front();
|
||||
|
@ -117,14 +117,14 @@ void factor_vm::delete_context(context* old_context) {
|
|||
}
|
||||
}
|
||||
|
||||
VM_C_API void delete_context(factor_vm* parent, context* old_context) {
|
||||
parent->delete_context(old_context);
|
||||
VM_C_API void delete_context(factor_vm* parent) {
|
||||
parent->delete_context();
|
||||
}
|
||||
|
||||
/* Allocates memory (init_context()) */
|
||||
VM_C_API void reset_context(factor_vm* parent, context* ctx) {
|
||||
ctx->reset();
|
||||
parent->init_context(ctx);
|
||||
VM_C_API void reset_context(factor_vm* parent) {
|
||||
parent->ctx->reset();
|
||||
parent->init_context(parent->ctx);
|
||||
}
|
||||
|
||||
/* Allocates memory */
|
||||
|
@ -147,7 +147,7 @@ cell begin_callback(factor_vm* parent, cell quot) {
|
|||
|
||||
void factor_vm::end_callback() {
|
||||
callback_ids.pop_back();
|
||||
delete_context(ctx);
|
||||
delete_context();
|
||||
}
|
||||
|
||||
void end_callback(factor_vm* parent) { parent->end_callback(); }
|
||||
|
|
|
@ -66,8 +66,8 @@ struct context {
|
|||
};
|
||||
|
||||
VM_C_API context* new_context(factor_vm* parent);
|
||||
VM_C_API void delete_context(factor_vm* parent, context* old_context);
|
||||
VM_C_API void reset_context(factor_vm* parent, context* ctx);
|
||||
VM_C_API void delete_context(factor_vm* parent);
|
||||
VM_C_API void reset_context(factor_vm* parent);
|
||||
VM_C_API cell begin_callback(factor_vm* parent, cell quot);
|
||||
VM_C_API void end_callback(factor_vm* parent);
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ struct factor_vm {
|
|||
// contexts
|
||||
context* new_context();
|
||||
void init_context(context* ctx);
|
||||
void delete_context(context* old_context);
|
||||
void delete_context();
|
||||
void init_contexts(cell datastack_size_, cell retainstack_size_,
|
||||
cell callstack_size_);
|
||||
void delete_contexts();
|
||||
|
|
Loading…
Reference in New Issue