0
|
1 /*
|
|
2
|
|
3 Package: dyncall
|
|
4 Library: dyncall
|
|
5 File: dyncall/dyncall_callvm.h
|
|
6 Description: Common call vm binary interface.
|
|
7 License:
|
|
8
|
|
9 Copyright (c) 2007-2015 Daniel Adler <dadler@uni-goettingen.de>,
|
|
10 Tassilo Philipp <tphilipp@potion-studios.com>
|
|
11
|
|
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
|
|
14 copyright notice and this permission notice appear in all copies.
|
|
15
|
|
16 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
17 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
18 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
19 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
23
|
|
24 */
|
|
25
|
|
26
|
|
27
|
|
28 #ifndef DYNCALL_CALLVM_H
|
|
29 #define DYNCALL_CALLVM_H
|
|
30
|
|
31 #include "dyncall.h"
|
|
32
|
|
33 /* --- callvm virtual function table --------------------------------------- */
|
|
34
|
|
35 /* NOTE: if something changes in DCCallVM_, update offset marks in dyncall_call_sparc.S */
|
|
36
|
|
37 typedef struct DCCallVM_vt_ DCCallVM_vt;
|
|
38
|
|
39 struct DCCallVM_
|
|
40 {
|
|
41 DCCallVM_vt* mVTpointer;
|
|
42 DCint mError;
|
|
43 };
|
|
44
|
|
45 struct DCCallVM_vt_
|
|
46 {
|
|
47 void (*free) (DCCallVM* vm);
|
|
48 void (*reset) (DCCallVM* vm);
|
|
49 void (*mode) (DCCallVM* vm,DCint mode);
|
|
50 void (*argBool) (DCCallVM* vm,DCbool B);
|
|
51 void (*argChar) (DCCallVM* vm,DCchar c);
|
|
52 void (*argShort) (DCCallVM* vm,DCshort s);
|
|
53 void (*argInt) (DCCallVM* vm,DCint i);
|
|
54 void (*argLong) (DCCallVM* vm,DClong l);
|
|
55 void (*argLongLong) (DCCallVM* vm,DClonglong L);
|
|
56 void (*argFloat) (DCCallVM* vm,DCfloat f);
|
|
57 void (*argDouble) (DCCallVM* vm,DCdouble d);
|
|
58 void (*argPointer) (DCCallVM* vm,DCpointer p);
|
|
59 void (*argStruct) (DCCallVM* vm,DCstruct* s, DCpointer p);
|
|
60 void (*callVoid) (DCCallVM* vm,DCpointer funcptr);
|
|
61 DCbool (*callBool) (DCCallVM* vm,DCpointer funcptr);
|
|
62 DCchar (*callChar) (DCCallVM* vm,DCpointer funcptr);
|
|
63 DCshort (*callShort) (DCCallVM* vm,DCpointer funcptr);
|
|
64 DCint (*callInt) (DCCallVM* vm,DCpointer funcptr);
|
|
65 DClong (*callLong) (DCCallVM* vm,DCpointer funcptr);
|
|
66 DClonglong (*callLongLong) (DCCallVM* vm,DCpointer funcptr);
|
|
67 DCfloat (*callFloat) (DCCallVM* vm,DCpointer funcptr);
|
|
68 DCdouble (*callDouble) (DCCallVM* vm,DCpointer funcptr);
|
|
69 DCpointer (*callPointer) (DCCallVM* vm,DCpointer funcptr);
|
|
70 void (*callStruct) (DCCallVM* vm,DCpointer funcptr,DCstruct* s, DCpointer returnValue);
|
|
71 };
|
|
72
|
|
73 typedef DCvoid (DCvoidvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
74 typedef DCbool (DCboolvmfunc) (DCCallVM* vn,DCpointer funcptr);
|
|
75 typedef DCchar (DCcharvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
76 typedef DCshort (DCshortvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
77 typedef DCint (DCintvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
78 typedef DClong (DClongvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
79 typedef DClonglong (DClonglongvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
80 typedef DCfloat (DCfloatvmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
81 typedef DCdouble (DCdoublevmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
82 typedef DCpointer (DCpointervmfunc) (DCCallVM* vm,DCpointer funcptr);
|
|
83
|
|
84 /* Common base functions for CallVM implementations. */
|
|
85
|
|
86 void dc_callvm_base_init(DCCallVM *pInstance, DCCallVM_vt* pVTable);
|
|
87
|
|
88 #endif /* DYNCALL_CALLVM_H */
|
|
89
|