|
|
|
@ -887,11 +887,11 @@ M3Result m3_CallArgv (IM3Function i_function, uint32_t i_argc, const char * i_
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
u8 * AlignStackPointerTo64Bits (const u8 * i_stack)
|
|
|
|
|
{
|
|
|
|
|
uintptr_t ptr = (uintptr_t) i_stack;
|
|
|
|
|
return (u8 *) ((ptr + 7) & ~7);
|
|
|
|
|
}
|
|
|
|
|
//u8 * AlignStackPointerTo64Bits (const u8 * i_stack)
|
|
|
|
|
//{
|
|
|
|
|
// uintptr_t ptr = (uintptr_t) i_stack;
|
|
|
|
|
// return (u8 *) ((ptr + 7) & ~7);
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
M3Result m3_GetResults (IM3Function i_function, uint32_t i_retc, const void * o_retptrs[])
|
|
|
|
@ -911,10 +911,10 @@ M3Result m3_GetResults (IM3Function i_function, uint32_t i_retc, const void *
|
|
|
|
|
for (u32 i = 0; i < ftype->numRets; ++i)
|
|
|
|
|
{
|
|
|
|
|
switch (d_FuncRetType(ftype, i)) {
|
|
|
|
|
case c_m3Type_i32: *(i32*)o_retptrs[i] = *(i32*)(s); s += 4; break;
|
|
|
|
|
case c_m3Type_i64: s = AlignStackPointerTo64Bits (s); *(i64*)o_retptrs[i] = *(i64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_i32: *(i32*)o_retptrs[i] = *(i32*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_i64: *(i64*)o_retptrs[i] = *(i64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_f32: *(f32*)o_retptrs[i] = *(f32*)(s); s += 4; break;
|
|
|
|
|
case c_m3Type_f64: s = AlignStackPointerTo64Bits (s); *(f64*)o_retptrs[i] = *(f64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_f64: *(f64*)o_retptrs[i] = *(f64*)(s); s += 8; break;
|
|
|
|
|
default: return "unknown return type";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -943,10 +943,10 @@ M3Result m3_GetResultsVL (IM3Function i_function, va_list o_rets)
|
|
|
|
|
for (u32 i = 0; i < ftype->numRets; ++i)
|
|
|
|
|
{
|
|
|
|
|
switch (d_FuncRetType(ftype, i)) {
|
|
|
|
|
case c_m3Type_i32: *va_arg(o_rets, i32*) = *(i32*)(s); s += 4; break;
|
|
|
|
|
case c_m3Type_i64: s = AlignStackPointerTo64Bits (s); *va_arg(o_rets, i64*) = *(i64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_f32: *va_arg(o_rets, f32*) = *(f32*)(s); s += 4; break;
|
|
|
|
|
case c_m3Type_f64: s = AlignStackPointerTo64Bits (s); *va_arg(o_rets, f64*) = *(f64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_i32: *va_arg(o_rets, i32*) = *(i32*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_i64: *va_arg(o_rets, i64*) = *(i64*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_f32: *va_arg(o_rets, f32*) = *(f32*)(s); s += 8; break;
|
|
|
|
|
case c_m3Type_f64: *va_arg(o_rets, f64*) = *(f64*)(s); s += 8; break;
|
|
|
|
|
default: return "unknown argument type";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|