# HG changeset patch # User cslag # Date 1465674278 -7200 # Node ID 9e677d4c0b6b281fa28510c2a08084dd012ed972 # Parent bf8aef29221692144050073e02db66573c0b6c62 - mips comment cleanups - mips callback args prep for non-o32 diff -r bf8aef292216 -r 9e677d4c0b6b dyncall/dyncall_call_mips_eabi_gas.s --- a/dyncall/dyncall_call_mips_eabi_gas.s Sat Jun 11 21:38:46 2016 +0200 +++ b/dyncall/dyncall_call_mips_eabi_gas.s Sat Jun 11 21:44:38 2016 +0200 @@ -89,7 +89,7 @@ lw $10,24($13) lw $11,28($13) - /* load single-precise floating pointer parameter registers */ + /* load single-precision floating pointer parameter registers */ lwc1 $f12, 32($13) lwc1 $f13, 36($13) diff -r bf8aef292216 -r 9e677d4c0b6b dyncallback/dyncall_args_mips.c --- a/dyncallback/dyncall_args_mips.c Sat Jun 11 21:38:46 2016 +0200 +++ b/dyncallback/dyncall_args_mips.c Sat Jun 11 21:44:38 2016 +0200 @@ -3,7 +3,7 @@ Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_mips.c - Description: Callback's Arguments VM - Implementation for MIPS + Description: Callback's Arguments VM - Implementation for non-o32 MIPS License: Copyright (c) 2013-2015 Daniel Adler , @@ -29,11 +29,11 @@ DCint dcbArgInt(DCArgs* p) { DCint value; - if(p->reg_count.i < DCARGS_MIPS_PARAM_REGS) - value = p->reg_data.i[p->reg_count.i++]; + if(p->reg_count.i < DCARGS_MIPS_NUM_IREGS) + value = p->ireg_data[p->reg_count.i++]; else { - value = *((int*)p->stackptr); - p->stackptr += sizeof(int); + value = *((DCint*)p->stackptr); + p->stackptr += sizeof(DCint); } return value; } @@ -66,11 +66,11 @@ DCfloat dcbArgFloat(DCArgs* p) { DCfloat result; - if(p->reg_count.f < DCARGS_MIPS_PARAM_REGS) - result = (DCfloat)p->reg_data.f[p->reg_count.f++]; + if(p->reg_count.f < DCARGS_MIPS_NUM_FREGS) + result = (DCfloat)p->freg_data[p->reg_count.f++]; else { - result = *((float*)p->stackptr); - p->stackptr += sizeof(float); + result = *((DCfloat*)p->stackptr); + p->stackptr += sizeof(DCfloat); } return result; } @@ -78,7 +78,7 @@ { union { DCdouble result; - DCfloat f[2]; + DCfloat f[2]; } d; p->reg_count.f += (p->reg_count.f & 1); // Skip one reg if not aligned. #if defined(DC__Endian_LITTLE) diff -r bf8aef292216 -r 9e677d4c0b6b dyncallback/dyncall_args_mips.h --- a/dyncallback/dyncall_args_mips.h Sat Jun 11 21:38:46 2016 +0200 +++ b/dyncallback/dyncall_args_mips.h Sat Jun 11 21:44:38 2016 +0200 @@ -33,13 +33,15 @@ { /* Don't change order! */ #if defined(DC__ABI_MIPS_O32) - int freg_count; + DCint freg_count; #else -# define DCARGS_MIPS_PARAM_REGS 8 - struct { int i; float f; } reg_data[DCARGS_MIPS_PARAM_REGS]; - struct { int i; int f; } reg_count; +# define DCARGS_MIPS_NUM_IREGS 8 +# define DCARGS_MIPS_NUM_FREGS 8 + DCint ireg_data[DCARGS_MIPS_NUM_IREGS]; + DCfloat freg_data[DCARGS_MIPS_NUM_FREGS]; + struct { DCshort i; DCshort f; } reg_count; #endif - unsigned char* stackptr; + unsigned DCchar* stackptr; }; #endif /* DYNCALLBACK_ARGS_MIPS_H */ diff -r bf8aef292216 -r 9e677d4c0b6b dyncallback/dyncall_args_mips_o32.c --- a/dyncallback/dyncall_args_mips_o32.c Sat Jun 11 21:38:46 2016 +0200 +++ b/dyncallback/dyncall_args_mips_o32.c Sat Jun 11 21:44:38 2016 +0200 @@ -3,7 +3,7 @@ Package: dyncall Library: dyncallback File: dyncallback/dyncall_args_mips.c - Description: Callback's Arguments VM - Implementation for MIPS + Description: Callback's Arguments VM - Implementation for MIPS o32 License: Copyright (c) 2013-2015 Daniel Adler , diff -r bf8aef292216 -r 9e677d4c0b6b dyncallback/dyncall_callback_mips_o32_gas.s --- a/dyncallback/dyncall_callback_mips_o32_gas.s Sat Jun 11 21:38:46 2016 +0200 +++ b/dyncallback/dyncall_callback_mips_o32_gas.s Sat Jun 11 21:44:38 2016 +0200 @@ -43,7 +43,7 @@ .set noreorder /* Prolog. Just store the minimum, return address, spill area. */ - /* Frame size of 48b comes from following areas (each 8b aligned); */ + /* Frame size of 56b comes from following areas (each 8b aligned): */ /* local: fpregs:16 + retval:8 + DCArgs:8 */ /* save: ra:4 (+ pad:4) */ /* param: spill:16 */