cleaned up code a bit, added multithreaded mode flags
parent
9b013faed4
commit
05d17492ed
|
@ -12,9 +12,9 @@ factorvm *lookup_vm(unsigned long threadid)
|
||||||
return thread_vms[threadid];
|
return thread_vms[threadid];
|
||||||
}
|
}
|
||||||
|
|
||||||
void register_vm(unsigned long threadid, factorvm *vm)
|
void register_vm(unsigned long threadid, factorvm *thevm)
|
||||||
{
|
{
|
||||||
thread_vms[threadid] = vm;
|
thread_vms[threadid] = thevm;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef FACTOR_MULTITHREADED
|
||||||
|
factor::THREADHANDLE thread = factor::start_standalone_factor_in_new_thread(argc,argv);
|
||||||
|
pthread_join(thread,NULL);
|
||||||
|
#else
|
||||||
factor::start_standalone_factor(argc,argv);
|
factor::start_standalone_factor(argc,argv);
|
||||||
|
#endif
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,9 +16,12 @@ int WINAPI WinMain(
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FACTOR_MULTITHREADED
|
||||||
|
factor::THREADHANDLE thread = factor::start_standalone_factor_in_new_thread(nArgs,szArglist);
|
||||||
|
WaitForSingleObject(thread, INFINITE);
|
||||||
|
#else
|
||||||
factor::start_standalone_factor(nArgs,szArglist);
|
factor::start_standalone_factor(nArgs,szArglist);
|
||||||
//HANDLE thread = factor::start_standalone_factor_in_new_thread(nArgs,szArglist);
|
#endif
|
||||||
//WaitForSingleObject(thread, INFINITE);
|
|
||||||
|
|
||||||
LocalFree(szArglist);
|
LocalFree(szArglist);
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,4 @@ s64 current_micros();
|
||||||
void sleep_micros(cell usec);
|
void sleep_micros(cell usec);
|
||||||
|
|
||||||
void open_console();
|
void open_console();
|
||||||
|
|
||||||
#define SIGNAL_VM_PTR vm
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,4 @@ typedef HANDLE THREADHANDLE;
|
||||||
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
|
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
|
||||||
unsigned long thread_id();
|
unsigned long thread_id();
|
||||||
|
|
||||||
#define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId())
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,15 +4,10 @@ namespace factor
|
||||||
#if defined(FACTOR_X86)
|
#if defined(FACTOR_X86)
|
||||||
extern "C" __attribute__ ((regparm (1))) typedef void (*primitive_type)(void *myvm);
|
extern "C" __attribute__ ((regparm (1))) typedef void (*primitive_type)(void *myvm);
|
||||||
#define PRIMITIVE(name) extern "C" __attribute__ ((regparm (1))) void primitive_##name(void *myvm)
|
#define PRIMITIVE(name) extern "C" __attribute__ ((regparm (1))) void primitive_##name(void *myvm)
|
||||||
#define PRIMITIVE_GETVM() ((factorvm*)myvm)
|
|
||||||
#else
|
#else
|
||||||
extern "C" typedef void (*primitive_type)(void *myvm);
|
extern "C" typedef void (*primitive_type)(void *myvm);
|
||||||
#define PRIMITIVE(name) extern "C" void primitive_##name(void *myvm)
|
#define PRIMITIVE(name) extern "C" void primitive_##name(void *myvm)
|
||||||
#define PRIMITIVE_GETVM() vm
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern const primitive_type primitives[];
|
extern const primitive_type primitives[];
|
||||||
#define PRIMITIVE_OVERFLOW_GETVM() vm
|
|
||||||
#define VM_PTR vm
|
|
||||||
#define ASSERTVM()
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,13 +37,13 @@ struct tagged
|
||||||
|
|
||||||
explicit tagged(cell tagged) : value_(tagged) {
|
explicit tagged(cell tagged) : value_(tagged) {
|
||||||
#ifdef FACTOR_DEBUG
|
#ifdef FACTOR_DEBUG
|
||||||
untag_check(vm);
|
untag_check(SIGNAL_VM_PTR);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit tagged(TYPE *untagged) : value_(factor::tag(untagged)) {
|
explicit tagged(TYPE *untagged) : value_(factor::tag(untagged)) {
|
||||||
#ifdef FACTOR_DEBUG
|
#ifdef FACTOR_DEBUG
|
||||||
untag_check(vm);
|
untag_check(SIGNAL_VM_PTR);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
34
vm/vm.hpp
34
vm/vm.hpp
|
@ -677,17 +677,47 @@ struct factorvm {
|
||||||
bool windows_stat(vm_char *path);
|
bool windows_stat(vm_char *path);
|
||||||
|
|
||||||
#if defined(WINNT)
|
#if defined(WINNT)
|
||||||
void c_to_factor_toplevel(cell quot);
|
|
||||||
void open_console();
|
void open_console();
|
||||||
// next method here:
|
// next method here:
|
||||||
#endif
|
#endif
|
||||||
|
#else // UNIX
|
||||||
|
|
||||||
|
stack_frame *uap_stack_pointer(void *uap);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
extern factorvm *vm;
|
|
||||||
|
|
||||||
extern factorvm *lookup_vm(unsigned long threadid);
|
extern factorvm *lookup_vm(unsigned long threadid);
|
||||||
extern void register_vm(unsigned long threadid,factorvm *vm);
|
extern void register_vm(unsigned long threadid,factorvm *vm);
|
||||||
|
|
||||||
|
#define FACTOR_SINGLE_THREADED
|
||||||
|
|
||||||
|
#ifdef FACTOR_SINGLE_THREADED
|
||||||
|
extern factorvm *vm;
|
||||||
|
#define PRIMITIVE_GETVM() vm
|
||||||
|
#define PRIMITIVE_OVERFLOW_GETVM() vm
|
||||||
|
#define VM_PTR vm
|
||||||
|
#define ASSERTVM()
|
||||||
|
#define SIGNAL_VM_PTR vm
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef FACTOR_TESTING_MULTITHREADED
|
||||||
|
extern factorvm *vm;
|
||||||
|
#define PRIMITIVE_GETVM() ((factorvm*)myvm)
|
||||||
|
#define PRIMITIVE_OVERFLOW_GETVM() vm
|
||||||
|
#define VM_PTR myvm
|
||||||
|
#define ASSERTVM() assert(vm==myvm)
|
||||||
|
#define SIGNAL_VM_PTR lookup_vm(thread_id())
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef FACTOR_MULTITHREADED
|
||||||
|
#define PRIMITIVE_GETVM() ((factorvm*)myvm)
|
||||||
|
#define PRIMITIVE_OVERFLOW_GETVM() ((factorvm*)myvm)
|
||||||
|
#define VM_PTR myvm
|
||||||
|
#define ASSERTVM()
|
||||||
|
#define SIGNAL_VM_PTR lookup_vm(thread_id())
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue