42 lines
		
	
	
		
			940 B
		
	
	
	
		
			C++
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			940 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);
 | |
| }
 | |
| 
 | |
| }
 |