cleaned up code a bit, added multithreaded mode flags
parent
fa6d8d239b
commit
ca16daa4b2
|
@ -12,9 +12,9 @@ factorvm *lookup_vm(unsigned long 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)
|
||||
{
|
||||
factor::start_standalone_factor(argc,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);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -16,9 +16,12 @@ int WINAPI WinMain(
|
|||
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);
|
||||
//HANDLE thread = factor::start_standalone_factor_in_new_thread(nArgs,szArglist);
|
||||
//WaitForSingleObject(thread, INFINITE);
|
||||
#endif
|
||||
|
||||
LocalFree(szArglist);
|
||||
|
||||
|
|
|
@ -55,6 +55,4 @@ s64 current_micros();
|
|||
void sleep_micros(cell usec);
|
||||
|
||||
void open_console();
|
||||
|
||||
#define SIGNAL_VM_PTR vm
|
||||
}
|
||||
|
|
|
@ -31,6 +31,4 @@ typedef HANDLE THREADHANDLE;
|
|||
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args);
|
||||
unsigned long thread_id();
|
||||
|
||||
#define SIGNAL_VM_PTR lookup_vm(GetCurrentThreadId())
|
||||
|
||||
}
|
||||
|
|
|
@ -4,15 +4,10 @@ namespace factor
|
|||
#if defined(FACTOR_X86)
|
||||
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_GETVM() ((factorvm*)myvm)
|
||||
#else
|
||||
extern "C" typedef void (*primitive_type)(void *myvm);
|
||||
#define PRIMITIVE(name) extern "C" void primitive_##name(void *myvm)
|
||||
#define PRIMITIVE_GETVM() vm
|
||||
#endif
|
||||
|
||||
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) {
|
||||
#ifdef FACTOR_DEBUG
|
||||
untag_check(vm);
|
||||
untag_check(SIGNAL_VM_PTR);
|
||||
#endif
|
||||
}
|
||||
|
||||
explicit tagged(TYPE *untagged) : value_(factor::tag(untagged)) {
|
||||
#ifdef FACTOR_DEBUG
|
||||
untag_check(vm);
|
||||
untag_check(SIGNAL_VM_PTR);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
34
vm/vm.hpp
34
vm/vm.hpp
|
@ -677,17 +677,47 @@ struct factorvm {
|
|||
bool windows_stat(vm_char *path);
|
||||
|
||||
#if defined(WINNT)
|
||||
void c_to_factor_toplevel(cell quot);
|
||||
void open_console();
|
||||
// next method here:
|
||||
#endif
|
||||
#else // UNIX
|
||||
|
||||
stack_frame *uap_stack_pointer(void *uap);
|
||||
|
||||
#endif
|
||||
|
||||
};
|
||||
|
||||
extern factorvm *vm;
|
||||
|
||||
extern factorvm *lookup_vm(unsigned long threadid);
|
||||
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