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