Skip to content

Commit

Permalink
Compilation bug fixes for Windows.
Browse files Browse the repository at this point in the history
  • Loading branch information
ronsaldo committed Dec 13, 2023
1 parent 38519a2 commit 84c7d8f
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 22 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
@@ -1,9 +1,9 @@
# AbstractGPU cmake build script.
cmake_minimum_required(VERSION 3.0)
cmake_minimum_required(VERSION 3.5)
project(Tuuvm C)

if(MSVC)
set(CMAKE_C_FLAGS "/std:c11 ${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "/std:c11 /experimental:c11atomics ${CMAKE_C_FLAGS}")
#SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:0x2000000")
else()
set(CMAKE_C_FLAGS "-Wall -Wextra ${CMAKE_C_FLAGS}")
Expand Down
4 changes: 2 additions & 2 deletions include/sysbvm/chunkedAllocator.h
Expand Up @@ -56,13 +56,13 @@ SYSBVM_INLINE void sysbvm_chunkedAllocatorIterator_setForChunk(sysbvm_chunkedAll

SYSBVM_INLINE void sysbvm_chunkedAllocatorIterator_begin(sysbvm_chunkedAllocator_t *allocator, sysbvm_chunkedAllocatorIterator_t *iterator)
{
return sysbvm_chunkedAllocatorIterator_setForChunk(iterator, allocator->firstChunk);
sysbvm_chunkedAllocatorIterator_setForChunk(iterator, allocator->firstChunk);
}

SYSBVM_INLINE void sysbvm_chunkedAllocatorIterator_advance(sysbvm_chunkedAllocatorIterator_t *iterator)
{
if(iterator->chunk)
return sysbvm_chunkedAllocatorIterator_setForChunk(iterator, iterator->chunk->next);
sysbvm_chunkedAllocatorIterator_setForChunk(iterator, iterator->chunk->next);
}

SYSBVM_INLINE bool sysbvm_chunkedAllocatorIterator_isValid(sysbvm_chunkedAllocatorIterator_t *iterator)
Expand Down
4 changes: 2 additions & 2 deletions lib/sysbvm/bytecode.c
Expand Up @@ -243,7 +243,7 @@ SYSBVM_API void sysbvm_bytecodeInterpreter_interpretWithActivationRecord(sysbvm_

// Validate the destination operands.
uint8_t destinationOperandCount = sysbvm_bytecodeInterpreter_destinationOperandCountForOpcode(standardOpcode);
uint8_t offsetOperandCount = caseCount + sysbvm_bytecodeInterpreter_offsetOperandCountForOpcode(standardOpcode);
size_t offsetOperandCount = caseCount + sysbvm_bytecodeInterpreter_offsetOperandCountForOpcode(standardOpcode);

for(uint8_t i = 0; i < destinationOperandCount; ++i)
{
Expand Down Expand Up @@ -500,7 +500,7 @@ SYSBVM_API void sysbvm_bytecodeInterpreter_interpretWithActivationRecord(sysbvm_

SYSBVM_API sysbvm_tuple_t sysbvm_bytecodeInterpreter_getSourcePositionForPC(sysbvm_context_t *context, sysbvm_functionBytecode_t *functionBytecode, size_t pc)
{
return sysbvm_orderedOffsetTable_findValueWithOffset(context, functionBytecode->debugSourcePositions, pc);
return sysbvm_orderedOffsetTable_findValueWithOffset(context, functionBytecode->debugSourcePositions, (uint32_t)pc);
}

SYSBVM_API sysbvm_tuple_t sysbvm_bytecodeInterpreter_getSourcePositionForActivationRecord(sysbvm_context_t *context, sysbvm_stackFrameBytecodeFunctionActivationRecord_t *activationRecord)
Expand Down
2 changes: 1 addition & 1 deletion lib/sysbvm/bytecodeJitCommon.c
Expand Up @@ -495,7 +495,7 @@ SYSBVM_API void sysbvm_bytecodeJit_jit(sysbvm_context_t *context, sysbvm_functio

// Validate the destination operands.
uint8_t destinationOperandCount = sysbvm_bytecodeInterpreter_destinationOperandCountForOpcode(standardOpcode);
uint8_t offsetOperandCount = caseCount + sysbvm_bytecodeInterpreter_offsetOperandCountForOpcode(standardOpcode);
size_t offsetOperandCount = caseCount + sysbvm_bytecodeInterpreter_offsetOperandCountForOpcode(standardOpcode);

for(uint8_t i = 0; i < destinationOperandCount; ++i)
{
Expand Down
16 changes: 8 additions & 8 deletions lib/sysbvm/float.c
Expand Up @@ -213,7 +213,7 @@ static sysbvm_tuple_t sysbvm_float32_primitive_floor(sysbvm_context_t *context,
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, floor(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float32_encode(context, (float)floor(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float32_primitive_ceiling(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -222,7 +222,7 @@ static sysbvm_tuple_t sysbvm_float32_primitive_ceiling(sysbvm_context_t *context
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, ceil(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float32_encode(context, (float)ceil(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float32_primitive_rounded(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -231,7 +231,7 @@ static sysbvm_tuple_t sysbvm_float32_primitive_rounded(sysbvm_context_t *context
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, round(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float32_encode(context, (float)round(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float32_primitive_truncated(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -240,7 +240,7 @@ static sysbvm_tuple_t sysbvm_float32_primitive_truncated(sysbvm_context_t *conte
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, trunc(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float32_encode(context, (float)trunc(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float32_primitive_compare(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand Down Expand Up @@ -644,7 +644,7 @@ static sysbvm_tuple_t sysbvm_float64_primitive_floor(sysbvm_context_t *context,
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, floor(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float64_encode(context, floor(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float64_primitive_ceiling(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -653,7 +653,7 @@ static sysbvm_tuple_t sysbvm_float64_primitive_ceiling(sysbvm_context_t *context
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, ceil(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float64_encode(context, ceil(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float64_primitive_rounded(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -662,7 +662,7 @@ static sysbvm_tuple_t sysbvm_float64_primitive_rounded(sysbvm_context_t *context
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, round(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float64_encode(context, round(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float64_primitive_truncated(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand All @@ -671,7 +671,7 @@ static sysbvm_tuple_t sysbvm_float64_primitive_truncated(sysbvm_context_t *conte
(void)closure;
if(argumentCount != 1) sysbvm_error_argumentCountMismatch(1, argumentCount);

return sysbvm_tuple_float32_encode(context, trunc(sysbvm_tuple_float32_decode(arguments[0])));
return sysbvm_tuple_float64_encode(context, trunc(sysbvm_tuple_float32_decode(arguments[0])));
}

static sysbvm_tuple_t sysbvm_float64_primitive_compare(sysbvm_context_t *context, sysbvm_tuple_t closure, size_t argumentCount, sysbvm_tuple_t *arguments)
Expand Down
36 changes: 29 additions & 7 deletions lib/sysbvm/virtualMemory.c
Expand Up @@ -29,26 +29,48 @@ size_t sysbvm_virtualMemory_getSystemAllocationAlignment(void)
return systemInfo.dwPageSize;
}

void sysbvm_virtualMemory_lockCodePagesForWriting(void *codePointer, size_t size)
bool sysbvm_virtualMemory_lockCodePagesForWriting(void *writePointer, void *executablePointer, size_t size)
{
if(writePointer != executablePointer)
return true;

size_t pageAlignment = sysbvm_virtualMemory_getSystemAllocationAlignment();
uintptr_t startAddress = (uintptr_t)codePointer & (-pageAlignment);
uintptr_t endAddress = ((uintptr_t)codePointer + size + pageAlignment - 1) & (-pageAlignment);
uintptr_t startAddress = (uintptr_t)executablePointer & (-pageAlignment);
uintptr_t endAddress = ((uintptr_t)executablePointer + size + pageAlignment - 1) & (-pageAlignment);

DWORD oldProtection = 0;
VirtualProtect((void*)startAddress, endAddress - startAddress, PAGE_READWRITE, &oldProtection);
return VirtualProtect((void*)startAddress, endAddress - startAddress, PAGE_EXECUTE_READWRITE, &oldProtection);
}

void sysbvm_virtualMemory_unlockCodePagesForExecution(void *codePointer, size_t size)
void sysbvm_virtualMemory_unlockCodePagesForExecution(void *writePointer, void *executablePointer, size_t size)
{
if(writePointer != executablePointer)
return;

size_t pageAlignment = sysbvm_virtualMemory_getSystemAllocationAlignment();
uintptr_t startAddress = (uintptr_t)codePointer & (-pageAlignment);
uintptr_t endAddress = ((uintptr_t)codePointer + size + pageAlignment - 1) & (-pageAlignment);
uintptr_t startAddress = (uintptr_t)executablePointer & (-pageAlignment);
uintptr_t endAddress = ((uintptr_t)executablePointer + size + pageAlignment - 1) & (-pageAlignment);

DWORD oldProtection = 0;
VirtualProtect((void*)startAddress, endAddress - startAddress, PAGE_EXECUTE_READ, &oldProtection);
}

bool sysbvm_virtualMemory_hasSupportForRWXMapping(void)
{
return true;
}

void *sysbvm_virtualMemory_allocateSystemMemoryWithDualMapping(size_t sizeToAllocate, void **writeableMapping, void **executableMapping)
{
*writeableMapping = NULL;
*executableMapping = NULL;
return NULL;
}

void sysbvm_virtualMemory_freeSystemMemoryWithDualMapping(size_t sizeToFree, void *mappingHandle, void *writeableMapping, void *executableMapping)
{
}

#else

#include <sys/mman.h>
Expand Down

0 comments on commit 84c7d8f

Please sign in to comment.