VM: Refactor utilities.cpp/hpp to Factor style

db4
Erik Charlebois 2013-05-11 22:30:45 -04:00
parent 5b1a9d753e
commit 8522265169
2 changed files with 56 additions and 67 deletions

View File

@ -1,12 +1,10 @@
#include "master.hpp" #include "master.hpp"
namespace factor namespace factor {
{
/* Fill in a PPC function descriptor */ /* Fill in a PPC function descriptor */
void *fill_function_descriptor(void *ptr, void *code) void* fill_function_descriptor(void* ptr, void* code) {
{ void** descriptor = (void**)ptr;
void **descriptor = (void **)ptr;
descriptor[0] = code; descriptor[0] = code;
descriptor[1] = NULL; descriptor[1] = NULL;
descriptor[2] = NULL; descriptor[2] = NULL;
@ -14,32 +12,30 @@ void *fill_function_descriptor(void *ptr, void *code)
} }
/* Get a field from a PPC function descriptor */ /* Get a field from a PPC function descriptor */
void *function_descriptor_field(void *ptr, size_t idx) void* function_descriptor_field(void* ptr, size_t idx) {
{ return ptr ? ((void**)ptr)[idx] : ptr;
return ptr ? ((void **) ptr)[idx] : ptr;
} }
/* If memory allocation fails, bail out */ /* If memory allocation fails, bail out */
vm_char *safe_strdup(const vm_char *str) vm_char* safe_strdup(const vm_char* str) {
{ vm_char* ptr = STRDUP(str);
vm_char *ptr = STRDUP(str); if (!ptr)
if(!ptr) fatal_error("Out of memory in safe_strdup", 0); fatal_error("Out of memory in safe_strdup", 0);
return ptr; return ptr;
} }
cell read_cell_hex() cell read_cell_hex() {
{
cell cell; cell cell;
std::cin >> std::hex >> cell >> std::dec; std::cin >> std::hex >> cell >> std::dec;
if(!std::cin.good()) exit(1); if (!std::cin.good())
exit(1);
return cell; return cell;
} }
/* On Windows, memcpy() is in a different DLL and the non-optimizing /* On Windows, memcpy() is in a different DLL and the non-optimizing
compiler can't find it */ compiler can't find it */
VM_C_API void *factor_memcpy(void *dst, void *src, size_t len) VM_C_API void* factor_memcpy(void* dst, void* src, size_t len) {
{ return memcpy(dst, src, len);
return memcpy(dst,src,len);
} }
} }

View File

@ -1,20 +1,16 @@
namespace factor namespace factor {
{
inline static void memset_2(void *dst, u16 pattern, size_t size) inline static void memset_2(void* dst, u16 pattern, size_t size) {
{
#ifdef __APPLE__ #ifdef __APPLE__
cell cell_pattern = (pattern | (pattern << 16)); cell cell_pattern = (pattern | (pattern << 16));
memset_pattern4(dst,&cell_pattern,size); memset_pattern4(dst, &cell_pattern, size);
#else #else
if(pattern == 0) if (pattern == 0)
memset(dst,0,size); memset(dst, 0, size);
else else {
{ u16* start = (u16*)dst;
u16 *start = (u16 *)dst; u16* end = (u16*)((cell) dst + size);
u16 *end = (u16 *)((cell)dst + size); while (start < end) {
while(start < end)
{
*start = pattern; *start = pattern;
start++; start++;
} }
@ -22,23 +18,20 @@ inline static void memset_2(void *dst, u16 pattern, size_t size)
#endif #endif
} }
inline static void memset_cell(void *dst, cell pattern, size_t size) inline static void memset_cell(void* dst, cell pattern, size_t size) {
{
#ifdef __APPLE__ #ifdef __APPLE__
#ifdef FACTOR_64 #ifdef FACTOR_64
memset_pattern8(dst,&pattern,size); memset_pattern8(dst, &pattern, size);
#else
memset_pattern4(dst,&pattern,size);
#endif
#else #else
if(pattern == 0) memset_pattern4(dst, &pattern, size);
memset(dst,0,size); #endif
else #else
{ if (pattern == 0)
cell *start = (cell *)dst; memset(dst, 0, size);
cell *end = (cell *)((cell)dst + size); else {
while(start < end) cell* start = (cell*)dst;
{ cell* end = (cell*)((cell) dst + size);
while (start < end) {
*start = pattern; *start = pattern;
start++; start++;
} }
@ -46,11 +39,11 @@ inline static void memset_cell(void *dst, cell pattern, size_t size)
#endif #endif
} }
void *fill_function_descriptor(void *ptr, void *code); void* fill_function_descriptor(void* ptr, void* code);
void *function_descriptor_field(void *ptr, size_t idx); void* function_descriptor_field(void* ptr, size_t idx);
vm_char *safe_strdup(const vm_char *str); vm_char* safe_strdup(const vm_char* str);
cell read_cell_hex(); cell read_cell_hex();
VM_C_API void *factor_memcpy(void *dst, void *src, size_t len); VM_C_API void* factor_memcpy(void* dst, void* src, size_t len);
} }