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