# HG changeset patch # User cslag # Date 1468505124 -7200 # Node ID 59d7587606885fa3783de5e9cb09fafb5c372b55 # Parent 089df1eee6d0a0d50ccb7c95d367b535f87e3919 - mips o32 callback fixes for big endian platforms diff -r 089df1eee6d0 -r 59d758760688 dyncall/dyncall_value.h --- a/dyncall/dyncall_value.h Thu Jul 14 14:41:32 2016 +0200 +++ b/dyncall/dyncall_value.h Thu Jul 14 16:05:24 2016 +0200 @@ -50,7 +50,7 @@ { /* dyncallback assembly pulls value directly from DCValue structs, without */ /* knowledge about types used, so lay it out as needed at compile time, here */ -#if (defined(DC__Arch_PPC32) || defined(DC__Arch_MIPS)) && defined(DC__Endian_BIG) +#if defined(DC__Endian_BIG) && (defined(DC__Arch_PPC32) || defined(DC__Arch_MIPS)) DCbool B; struct { DCchar c_pad[3]; DCchar c; }; struct { DCuchar C_pad[3]; DCuchar C; }; @@ -58,7 +58,7 @@ struct { DCshort S_pad; DCshort S; }; DCint i; DCuint I; -#elif (defined(DC__Arch_PPC64) || defined(DC__Arch_MIPS64)) && defined(DC__Endian_BIG) +#elif defined(DC__Endian_BIG) && (defined(DC__Arch_PPC64) || defined(DC__Arch_MIPS64)) struct { DCbool B_pad; DCbool B; }; struct { DCchar c_pad[7]; DCchar c; }; struct { DCuchar C_pad[7]; DCuchar C; }; @@ -79,7 +79,8 @@ DCulong J; DClonglong l; DCulonglong L; -#if defined(DC__Arch_MIPS64) && defined(DC__Endian_BIG) +/* floats on mips are right justified in fp-registers on big endian targets, as they aren't promoted */ +#if defined(DC__Endian_BIG) && (defined(DC__Arch_MIPS) || defined(DC__Arch_MIPS64)) struct { DCfloat f_pad; DCfloat f; }; #else DCfloat f;