Mercurial > pub > dyncall > dyncall
comparison dyncallback/dyncall_args_sparc64.c @ 196:95cf20c0d1de
- sparc64 callbacks:
* floating point support
* fixes for many arg calls
* this completes sparc64 callback support
author | Tassilo Philipp |
---|---|
date | Sun, 19 Mar 2017 19:34:34 +0100 |
parents | 2f7a7f3472cb |
children | f5577f6bf97a |
comparison
equal
deleted
inserted
replaced
195:be9cb092625f | 196:95cf20c0d1de |
---|---|
24 */ | 24 */ |
25 | 25 |
26 | 26 |
27 #include "dyncall_args_sparc64.h" | 27 #include "dyncall_args_sparc64.h" |
28 | 28 |
29 DCulonglong dcbArgULongLong(DCArgs* p) { return *(DCulonglong*) p->arg_ptr++; } | 29 DCulonglong dcbArgULongLong(DCArgs* p) { return p->arg_ptr[p->i++]; } |
30 DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); } | 30 DClonglong dcbArgLongLong (DCArgs* p) { return (DClonglong)dcbArgULongLong(p); } |
31 DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgULongLong(p); } | 31 DCulong dcbArgULong (DCArgs* p) { return (DCulong) dcbArgULongLong(p); } |
32 DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgULongLong(p); } | 32 DClong dcbArgLong (DCArgs* p) { return (DClong) dcbArgULongLong(p); } |
33 DCuint dcbArgUInt (DCArgs* p) { return (DCuint) dcbArgULongLong(p); } | 33 DCuint dcbArgUInt (DCArgs* p) { return (DCuint) dcbArgULongLong(p); } |
34 DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgULongLong(p); } | 34 DCint dcbArgInt (DCArgs* p) { return (DCint) dcbArgULongLong(p); } |
36 DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgULongLong(p); } | 36 DCchar dcbArgChar (DCArgs* p) { return (DCchar) dcbArgULongLong(p); } |
37 DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgULongLong(p); } | 37 DCushort dcbArgUShort (DCArgs* p) { return (DCushort) dcbArgULongLong(p); } |
38 DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgULongLong(p); } | 38 DCshort dcbArgShort (DCArgs* p) { return (DCshort) dcbArgULongLong(p); } |
39 DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgULongLong(p); } | 39 DCbool dcbArgBool (DCArgs* p) { return (DCbool) dcbArgULongLong(p); } |
40 DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgULongLong(p); } | 40 DCpointer dcbArgPointer (DCArgs* p) { return (DCpointer) dcbArgULongLong(p); } |
41 DCdouble dcbArgDouble (DCArgs* p) { return *(DCdouble*) p->arg_ptr++; } | |
42 DCfloat dcbArgFloat (DCArgs* p) { return *(DCfloat*) p->arg_ptr++; } | |
43 | 41 |
42 DCdouble dcbArgDouble(DCArgs* p) | |
43 { | |
44 return (p->i < DCARGS_SPARC64_NUM_DOUBLE_REGS) | |
45 ? p->dreg_data[p->i++] | |
46 : *(DCdouble*)(p->arg_ptr + p->i++); | |
47 } | |
48 | |
49 DCfloat dcbArgFloat(DCArgs* p) | |
50 { | |
51 return (p->i < DCARGS_SPARC64_NUM_DOUBLE_REGS) | |
52 ? *((DCfloat*)(p->dreg_data + p->i++)+1) /* +1 bc single-prec fp args are */ | |
53 : *((DCfloat*)(p->arg_ptr + p->i++)+1); /* right aligned in 64bit slot */ | |
54 } | |
55 |