Some Runtime.PPCEABI.H files

This commit is contained in:
Noah McQueen
2023-10-12 14:47:18 -06:00
parent dcf916f84f
commit 7779a34215
5 changed files with 105 additions and 4 deletions
+2 -2
View File
@@ -1066,9 +1066,9 @@ config.libs = [
"host": False,
"objects": [
Object(NonMatching, "Runtime.PPCEABI.H/__mem.c"),
Object(NonMatching, "Runtime.PPCEABI.H/__va_arg.c"),
Object(Matching, "Runtime.PPCEABI.H/__va_arg.c"),
Object(Matching, "Runtime.PPCEABI.H/global_destructor_chain.c"),
Object(NonMatching, "Runtime.PPCEABI.H/CPlusLibPPC.cp"),
Object(Matching, "Runtime.PPCEABI.H/CPlusLibPPC.cp"),
Object(NonMatching, "Runtime.PPCEABI.H/NMWException.cp"),
Object(NonMatching, "Runtime.PPCEABI.H/ptmf.c"),
Object(NonMatching, "Runtime.PPCEABI.H/runtime.c"),
+2 -2
View File
@@ -28,9 +28,9 @@ void* __va_arg(_va_list_struct*, int);
// __builtin_va_info: initialize the __va_list_struct
// _var_arg_typeof: convert type to integer for __va_arg
#define __va_start(list, fmt) __builtin_va_info(&list)
#define __va_arg(list, type) (*((type*)__va_arg(ap, _var_arg_typeof(type))))
// #define __va_arg(list, type) (*((type*)__va_arg(ap, _var_arg_typeof(type))))
#define va_start __va_start
#define va_arg __va_arg
// #define va_arg __va_arg
#define va_end __va_end
#define va_list __va_list
#define __va_end(list) ((void)0)
+26
View File
@@ -0,0 +1,26 @@
#include "dolphin/types.h"
#ifdef __cplusplus
extern "C" {
#endif
extern void* __copy(char*, char*, size_t);
#ifdef __cplusplus
}
#endif
void* __copy(char* dest, char* src, size_t size) {
char* p;
if (dest && size) {
p = dest;
do {
*p = *src;
++p;
++src;
--size;
} while (size);
}
return dest;
}
+33
View File
@@ -0,0 +1,33 @@
#include "Runtime.PPCEABI.H/GCN_mem_alloc.h"
#include "dolphin/os/OS.h"
inline static void InitDefaultHeap() {
void* arenaLo;
void* arenaHi;
/* NONMATCH: OSReport strings should be two separate rodata entries with padding */
OSReport("GCN_Mem_Alloc.c : InitDefaultHeap. No Heap Available\n");
OSReport("Metrowerks CW runtime library initializing default heap\n");
arenaLo = OSGetArenaLo();
arenaHi = OSGetArenaHi();
arenaLo = OSInitAlloc(arenaLo, arenaHi, 1);
OSSetArenaLo(arenaLo);
arenaLo = (void*)OSRoundUp32B(arenaLo);
arenaHi = (void*)OSRoundDown32B(arenaHi);
OSSetCurrentHeap(OSCreateHeap(arenaLo, arenaHi));
OSSetArenaLo(arenaLo = arenaHi);
}
void __sys_free(void* ptr) {
if (__OSCurrHeap == -1) {
InitDefaultHeap();
}
OSFreeToHeap(__OSCurrHeap, ptr);
return;
}
+42
View File
@@ -0,0 +1,42 @@
#include "Runtime.PPCEABI.H/__va_arg.h"
void* __va_arg(va_list v_list, int type) {
char* addr;
char* reg = &(v_list->gpr);
s32 g_reg = v_list->gpr;
s32 maxsize = 8;
s32 size = 4;
s32 increment = 1;
s32 even = 0;
s32 fpr_offset = 0;
s32 regsize = 4;
if (type == 3) {
reg = &(v_list->fpr);
g_reg = v_list->fpr;
size = 8;
fpr_offset = 32;
regsize = 8;
}
if (type == 2) {
size = 8;
maxsize--;
if (g_reg & 1)
even = 1;
increment = 2;
}
if (g_reg < maxsize) {
g_reg += even;
addr = v_list->reg_save_area + fpr_offset + (g_reg * regsize);
*reg = g_reg + increment;
} else {
*reg = 8;
addr = v_list->input_arg_area;
addr = (char*)(((u32)(addr) + ((size)-1)) & ~((size)-1));
v_list->input_arg_area = addr + size;
}
if (type == 0)
addr = *((char**)addr);
return addr;
}