initial commit to nanos branch to replace micros
parent
8800742f2b
commit
b4206f5252
|
@ -514,6 +514,9 @@ M: bad-executable summary
|
|||
\ micros { } { integer } define-primitive
|
||||
\ micros make-flushable
|
||||
|
||||
\ nanos { } { integer } define-primitive
|
||||
\ nanos make-flushable
|
||||
|
||||
\ tag { object } { fixnum } define-primitive
|
||||
\ tag make-foldable
|
||||
|
||||
|
|
|
@ -433,6 +433,7 @@ tuple
|
|||
{ "data-room" "memory" (( -- data-room )) }
|
||||
{ "code-room" "memory" (( -- code-room )) }
|
||||
{ "micros" "system" (( -- us )) }
|
||||
{ "nanos" "system" (( -- us )) }
|
||||
{ "modify-code-heap" "compiler.units" (( alist -- )) }
|
||||
{ "(dlopen)" "alien.libraries" (( path -- dll )) }
|
||||
{ "(dlsym)" "alien.libraries" (( name dll -- alien )) }
|
||||
|
|
|
@ -34,4 +34,14 @@ const char *default_image_path()
|
|||
return new_path;
|
||||
}
|
||||
|
||||
u64 current_nanos()
|
||||
{
|
||||
struct timespec t;
|
||||
int ret;
|
||||
ret = clock_gettime(CLOCK_MONOTONIC,&t);
|
||||
if(ret != 0)
|
||||
fatal_error("clock_gettime failed", 0);
|
||||
return (u64)t.tv_sec * 1000000000 + t.tv_nsec;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
#include <mach/mach_time.h>
|
||||
#include "master.hpp"
|
||||
|
||||
namespace factor
|
||||
|
@ -84,4 +85,16 @@ Protocol *objc_getProtocol(char *name)
|
|||
return nil;
|
||||
}
|
||||
|
||||
u64 current_nanos()
|
||||
{
|
||||
u64 t;
|
||||
mach_timebase_info_data_t info;
|
||||
kern_return_t ret;
|
||||
t = mach_absolute_time();
|
||||
ret = mach_timebase_info(&info);
|
||||
if(ret != 0)
|
||||
fatal_error("mach_timebase_info failed",ret);
|
||||
return t * (info.numer/info.denom);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -52,6 +52,11 @@ void sleep_micros(cell usec)
|
|||
usleep(usec);
|
||||
}
|
||||
|
||||
void sleep_nanos(cell nsec)
|
||||
{
|
||||
//nanosleep(n
|
||||
}
|
||||
|
||||
void factor_vm::init_ffi()
|
||||
{
|
||||
/* NULL_DLL is "libfactor.dylib" for OS X and NULL for generic unix */
|
||||
|
|
|
@ -53,6 +53,7 @@ void signal_handler(int signal, siginfo_t* siginfo, void* uap);
|
|||
void dump_stack_signal(int signal, siginfo_t* siginfo, void* uap);
|
||||
|
||||
s64 current_micros();
|
||||
u64 current_nanos();
|
||||
void sleep_micros(cell usec);
|
||||
|
||||
void init_platform_globals();
|
||||
|
|
|
@ -36,6 +36,21 @@ s64 current_micros()
|
|||
- EPOCH_OFFSET) / 10;
|
||||
}
|
||||
|
||||
u64 current_nanos()
|
||||
{
|
||||
LARGE_INTEGER count;
|
||||
LARGE_INTEGER frequency;
|
||||
BOOL ret;
|
||||
ret = QueryPerformanceCounter(&count);
|
||||
if(ret == 0)
|
||||
fatal_error("QueryPerformanceCounter", 0);
|
||||
ret = QueryPerformanceFrequency(&frequency);
|
||||
if(ret == 0)
|
||||
fatal_error("QueryPerformanceFrequency", 0);
|
||||
|
||||
return (ulonglong)count*(1000000000/frequency);
|
||||
}
|
||||
|
||||
LONG factor_vm::exception_handler(PEXCEPTION_POINTERS pe)
|
||||
{
|
||||
PEXCEPTION_RECORD e = (PEXCEPTION_RECORD)pe->ExceptionRecord;
|
||||
|
|
|
@ -131,6 +131,11 @@ void factor_vm::sleep_micros(u64 usec)
|
|||
Sleep((DWORD)(usec / 1000));
|
||||
}
|
||||
|
||||
void factor_vm::sleep_nanos(u64 nsec)
|
||||
{
|
||||
Sleep((DWORD)(nsec / 1000000));
|
||||
}
|
||||
|
||||
long getpagesize()
|
||||
{
|
||||
static long g_pagesize = 0;
|
||||
|
|
|
@ -67,6 +67,7 @@ PRIMITIVE_FORWARD(exit)
|
|||
PRIMITIVE_FORWARD(data_room)
|
||||
PRIMITIVE_FORWARD(code_room)
|
||||
PRIMITIVE_FORWARD(micros)
|
||||
PRIMITIVE_FORWARD(nanos)
|
||||
PRIMITIVE_FORWARD(modify_code_heap)
|
||||
PRIMITIVE_FORWARD(dlopen)
|
||||
PRIMITIVE_FORWARD(dlsym)
|
||||
|
@ -203,6 +204,7 @@ const primitive_type primitives[] = {
|
|||
primitive_data_room,
|
||||
primitive_code_room,
|
||||
primitive_micros,
|
||||
primitive_nanos,
|
||||
primitive_modify_code_heap,
|
||||
primitive_dlopen,
|
||||
primitive_dlsym,
|
||||
|
|
|
@ -13,6 +13,11 @@ void factor_vm::primitive_micros()
|
|||
box_unsigned_8(current_micros());
|
||||
}
|
||||
|
||||
void factor_vm::primitive_nanos()
|
||||
{
|
||||
box_unsigned_8(current_nanos());
|
||||
}
|
||||
|
||||
void factor_vm::primitive_sleep()
|
||||
{
|
||||
sleep_micros(to_cell(dpop()));
|
||||
|
|
|
@ -118,6 +118,7 @@ struct factor_vm
|
|||
// run
|
||||
void primitive_exit();
|
||||
void primitive_micros();
|
||||
void primitive_nanos();
|
||||
void primitive_sleep();
|
||||
void primitive_set_slot();
|
||||
|
||||
|
@ -674,6 +675,7 @@ struct factor_vm
|
|||
// os-windows
|
||||
#if defined(WINDOWS)
|
||||
void sleep_micros(u64 usec);
|
||||
void sleep_nanos(u64 nsec);
|
||||
const vm_char *vm_executable_path();
|
||||
const vm_char *default_image_path();
|
||||
void windows_image_path(vm_char *full_path, vm_char *temp_path, unsigned int length);
|
||||
|
|
Loading…
Reference in New Issue