Mercurial > pub > dyncall > dyncall
diff dyncallback/dyncall_args_sparc32.c @ 157:49549739228c
- sparc callback asm and args code (still some stack alignment issues, currently)
- doc improvements for sparc callconv
author | cslag |
---|---|
date | Wed, 28 Dec 2016 16:48:35 -0600 |
parents | 82a0eef83db0 |
children | 51b0a4544d9e |
line wrap: on
line diff
--- a/dyncallback/dyncall_args_sparc32.c Fri Nov 25 18:59:26 2016 +0000 +++ b/dyncallback/dyncall_args_sparc32.c Wed Dec 28 16:48:35 2016 -0600 @@ -6,7 +6,7 @@ Description: Callback's Arguments VM - Implementation for sparc32 - not yet License: - Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, + Copyright (c) 2007-2016 Daniel Adler <dadler@uni-goettingen.de>, Tassilo Philipp <tphilipp@potion-studios.com> Permission to use, copy, modify, and distribute this software for any @@ -26,10 +26,23 @@ #include "dyncall_args_sparc32.h" -DCint dcbArgInt (DCArgs* p) { return 0; } -DCuint dcbArgUInt (DCArgs* p) { return 0; } -DCulonglong dcbArgULongLong(DCArgs* p) { return 0; } +static void* sparc_word(DCArgs* args) +{ + return args->arg_ptr++; +} + +static void* sparc_dword(DCArgs* args) +{ + void *p = args->arg_ptr; + args->arg_ptr += 2; + return p; +} + +DCuint dcbArgUInt (DCArgs* p) { return *(DCuint*)sparc_word(p); } +DCulonglong dcbArgULongLong(DCArgs* p) { return *(DCulonglong*)sparc_dword(p); } + DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); } +DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgUInt(p); } DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); } DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); } DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); } @@ -38,5 +51,7 @@ DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); } DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); } DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgUInt(p); } -DCdouble dcbArgDouble (DCArgs* p) { return 0.0; } -DCfloat dcbArgFloat (DCArgs* p) { return 0.0f; } + +DCdouble dcbArgDouble (DCArgs* p) { return *(DCdouble*)sparc_dword(p); } +DCfloat dcbArgFloat (DCArgs* p) { return *(DCfloat*) sparc_word(p); } +