Merge branch 'master' of git://factorcode.org/git/factor

db4
Doug Coleman 2009-12-13 21:39:14 -06:00
commit 19c5200b94
5 changed files with 27 additions and 9 deletions

8
basis/windows/dinput/constants/constants.factor Normal file → Executable file
View File

@ -102,8 +102,8 @@ M: array array-base-type first ;
: define-joystick-format-constant ( -- )
c_dfDIJoystick2 [
DIDF_ABSAXIS
"DIJOYSTATE2" heap-size
"DIJOYSTATE2" {
DIJOYSTATE2 heap-size
DIJOYSTATE2 {
{ GUID_XAxis_malloced "lX" 0 { DIDFT_OPTIONAL DIDFT_AXIS DIDFT_ANYINSTANCE } 0 }
{ GUID_YAxis_malloced "lY" 0 { DIDFT_OPTIONAL DIDFT_AXIS DIDFT_ANYINSTANCE } 0 }
{ GUID_ZAxis_malloced "lZ" 0 { DIDFT_OPTIONAL DIDFT_AXIS DIDFT_ANYINSTANCE } 0 }
@ -274,8 +274,8 @@ M: array array-base-type first ;
: define-mouse-format-constant ( -- )
c_dfDIMouse2 [
DIDF_RELAXIS
"DIMOUSESTATE2" heap-size
"DIMOUSESTATE2" {
DIMOUSESTATE2 heap-size
DIMOUSESTATE2 {
{ GUID_XAxis_malloced "lX" 0 { DIDFT_ANYINSTANCE DIDFT_AXIS } 0 }
{ GUID_YAxis_malloced "lY" 0 { DIDFT_ANYINSTANCE DIDFT_AXIS } 0 }
{ GUID_ZAxis_malloced "lZ" 0 { DIDFT_OPTIONAL DIDFT_ANYINSTANCE DIDFT_AXIS } 0 }

View File

@ -11,7 +11,7 @@ struct code_block
bool free_p() const
{
return header & 1 == 1;
return (header & 1) == 1;
}
code_block_type type() const

View File

@ -5,7 +5,7 @@ namespace factor
code_heap::code_heap(cell size)
{
if(size > (1L << (sizeof(cell) * 8 - 6))) fatal_error("Heap too large",size);
if(size > ((u64)1 << (sizeof(cell) * 8 - 6))) fatal_error("Heap too large",size);
seg = new segment(align_page(size),true);
if(!seg) fatal_error("Out of memory in heap allocator",size);
allocator = new free_list_allocator<code_block>(size,seg->start);

View File

@ -3,8 +3,9 @@
namespace factor
{
THREADHANDLE start_thread(void *(*start_routine)(void *),void *args){
return (void*) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0);
THREADHANDLE start_thread(void *(*start_routine)(void *), void *args)
{
return (void *)CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, args, 0, 0);
}
DWORD dwTlsIndex;
@ -36,10 +37,15 @@ u64 system_micros()
- EPOCH_OFFSET) / 10;
}
/* On VirtualBox, QueryPerformanceCounter does not increment
the high part every time the low part overflows. Workaround. */
u64 nano_count()
{
LARGE_INTEGER count;
LARGE_INTEGER frequency;
static u32 hi_correction = 0;
static u32 hi = 0xffffffff;
static u32 lo = 0xffffffff;
BOOL ret;
ret = QueryPerformanceCounter(&count);
if(ret == 0)
@ -47,7 +53,14 @@ u64 nano_count()
ret = QueryPerformanceFrequency(&frequency);
if(ret == 0)
fatal_error("QueryPerformanceFrequency", 0);
if((u32)count.LowPart < lo && (u32)count.HighPart == hi)
hi_correction++;
hi = count.HighPart;
lo = count.LowPart;
count.HighPart += hi_correction;
return count.QuadPart*(1000000000/frequency.QuadPart);
}

View File

@ -23,8 +23,13 @@ FACTOR_STDCALL LONG exception_handler(PEXCEPTION_POINTERS pe);
// SSE traps raise these exception codes, which are defined in internal NT headers
// but not winbase.h
#ifndef STATUS_FLOAT_MULTIPLE_FAULTS
#define STATUS_FLOAT_MULTIPLE_FAULTS 0xC00002B4
#endif
#ifndef STATUS_FLOAT_MULTIPLE_TRAPS
#define STATUS_FLOAT_MULTIPLE_TRAPS 0xC00002B5
#endif
typedef HANDLE THREADHANDLE;