comparison 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
comparison
equal deleted inserted replaced
156:9e4f1355a388 157:49549739228c
4 Library: dyncallback 4 Library: dyncallback
5 File: dyncallback/dyncall_args_sparc32.c 5 File: dyncallback/dyncall_args_sparc32.c
6 Description: Callback's Arguments VM - Implementation for sparc32 - not yet 6 Description: Callback's Arguments VM - Implementation for sparc32 - not yet
7 License: 7 License:
8 8
9 Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>, 9 Copyright (c) 2007-2016 Daniel Adler <dadler@uni-goettingen.de>,
10 Tassilo Philipp <tphilipp@potion-studios.com> 10 Tassilo Philipp <tphilipp@potion-studios.com>
11 11
12 Permission to use, copy, modify, and distribute this software for any 12 Permission to use, copy, modify, and distribute this software for any
13 purpose with or without fee is hereby granted, provided that the above 13 purpose with or without fee is hereby granted, provided that the above
14 copyright notice and this permission notice appear in all copies. 14 copyright notice and this permission notice appear in all copies.
24 */ 24 */
25 25
26 26
27 #include "dyncall_args_sparc32.h" 27 #include "dyncall_args_sparc32.h"
28 28
29 DCint dcbArgInt (DCArgs* p) { return 0; } 29 static void* sparc_word(DCArgs* args)
30 DCuint dcbArgUInt (DCArgs* p) { return 0; } 30 {
31 DCulonglong dcbArgULongLong(DCArgs* p) { return 0; } 31 return args->arg_ptr++;
32 }
33
34 static void* sparc_dword(DCArgs* args)
35 {
36 void *p = args->arg_ptr;
37 args->arg_ptr += 2;
38 return p;
39 }
40
41 DCuint dcbArgUInt (DCArgs* p) { return *(DCuint*)sparc_word(p); }
42 DCulonglong dcbArgULongLong(DCArgs* p) { return *(DCulonglong*)sparc_dword(p); }
43
32 DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); } 44 DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); }
45 DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgUInt(p); }
33 DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); } 46 DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgUInt(p); }
34 DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); } 47 DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgUInt(p); }
35 DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); } 48 DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgUInt(p); }
36 DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgUInt(p); } 49 DCuchar dcbArgUChar (DCArgs* p) { return (DCuchar) dcbArgUInt(p); }
37 DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgUInt(p); } 50 DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgUInt(p); }
38 DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); } 51 DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgUInt(p); }
39 DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); } 52 DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgUInt(p); }
40 DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgUInt(p); } 53 DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgUInt(p); }
41 DCdouble dcbArgDouble (DCArgs* p) { return 0.0; } 54
42 DCfloat dcbArgFloat (DCArgs* p) { return 0.0f; } 55 DCdouble dcbArgDouble (DCArgs* p) { return *(DCdouble*)sparc_dword(p); }
56 DCfloat dcbArgFloat (DCArgs* p) { return *(DCfloat*) sparc_word(p); }
57