Mercurial > pub > dyncall > dyncall
comparison dyncall/dyncall_api.c @ 466:ddfb9577a00e
introduced platform-native thiscall mode (DC_CALL_C_DEFAULT_THIS), as needed
for upcoming aggregate support (until now only x86 platforms allowed for
specifically selecting thiscall mode, given the different conventions on
the same platform); also added respective DC_SIGCHAR_CC_THISCALL ('*')
author | Tassilo Philipp |
---|---|
date | Wed, 02 Feb 2022 18:30:44 +0100 |
parents | 2fb084f98439 |
children | 71c884e610f0 |
comparison
equal
deleted
inserted
replaced
465:e2899b4ff713 | 466:ddfb9577a00e |
---|---|
4 Library: dyncall | 4 Library: dyncall |
5 File: dyncall/dyncall_api.c | 5 File: dyncall/dyncall_api.c |
6 Description: C interface to call vm | 6 Description: C interface to call vm |
7 License: | 7 License: |
8 | 8 |
9 Copyright (c) 2007-2020 Daniel Adler <dadler@uni-goettingen.de>, | 9 Copyright (c) 2007-2022 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. |
27 | 27 |
28 #include "dyncall.h" | 28 #include "dyncall.h" |
29 #include "dyncall_callvm.h" | 29 #include "dyncall_callvm.h" |
30 | 30 |
31 void dcReset(DCCallVM* vm) | 31 void dcReset(DCCallVM* vm) |
32 { | 32 { |
33 vm->mVTpointer->reset(vm); | 33 vm->mVTpointer->reset(vm); |
34 } | 34 } |
35 | 35 |
36 void dcFree(DCCallVM* vm) | 36 void dcFree(DCCallVM* vm) |
37 { | 37 { |
38 vm->mVTpointer->free(vm); | 38 vm->mVTpointer->free(vm); |
39 } | 39 } |
40 | 40 |
41 void dcMode(DCCallVM* vm,DCint mode) | 41 void dcMode(DCCallVM* vm,DCint mode) |
42 { | 42 { |
43 vm->mVTpointer->mode(vm,mode); | 43 vm->mVTpointer->mode(vm,mode); |
44 } | 44 } |
45 | 45 |
46 void dcArgBool(DCCallVM* vm,DCbool x) | 46 void dcArgBool(DCCallVM* vm,DCbool x) |
47 { | 47 { |
48 vm->mVTpointer->argBool(vm, x); | 48 vm->mVTpointer->argBool(vm, x); |
49 } | 49 } |
50 | 50 |
51 void dcArgChar(DCCallVM* vm,DCchar x) | 51 void dcArgChar(DCCallVM* vm,DCchar x) |
52 { | 52 { |
53 vm->mVTpointer->argChar(vm, x); | 53 vm->mVTpointer->argChar(vm, x); |
54 } | 54 } |
55 | 55 |
56 void dcArgShort(DCCallVM* vm,DCshort x) | 56 void dcArgShort(DCCallVM* vm,DCshort x) |
57 { | 57 { |
58 vm->mVTpointer->argShort(vm, x); | 58 vm->mVTpointer->argShort(vm, x); |
59 } | 59 } |
60 | 60 |
61 void dcArgInt(DCCallVM* vm,DCint x) | 61 void dcArgInt(DCCallVM* vm,DCint x) |
62 { | 62 { |
63 vm->mVTpointer->argInt(vm, x); | 63 vm->mVTpointer->argInt(vm, x); |
64 } | 64 } |
65 | 65 |
66 void dcArgLong(DCCallVM* vm,DClong x) | 66 void dcArgLong(DCCallVM* vm,DClong x) |
67 { | 67 { |
68 vm->mVTpointer->argLong(vm, x); | 68 vm->mVTpointer->argLong(vm, x); |
69 } | 69 } |
70 | 70 |
71 void dcArgLongLong(DCCallVM* vm, DClonglong x) | 71 void dcArgLongLong(DCCallVM* vm, DClonglong x) |
72 { | 72 { |
73 vm->mVTpointer->argLongLong(vm, x); | 73 vm->mVTpointer->argLongLong(vm, x); |
74 } | 74 } |
75 | 75 |
76 void dcArgFloat(DCCallVM* vm, DCfloat x) | 76 void dcArgFloat(DCCallVM* vm, DCfloat x) |
77 { | 77 { |
78 vm->mVTpointer->argFloat(vm, x); | 78 vm->mVTpointer->argFloat(vm, x); |
79 } | 79 } |
80 | 80 |
81 void dcArgDouble(DCCallVM* vm, DCdouble x) | 81 void dcArgDouble(DCCallVM* vm, DCdouble x) |
82 { | 82 { |
83 vm->mVTpointer->argDouble(vm, x); | 83 vm->mVTpointer->argDouble(vm, x); |
84 } | 84 } |
85 | 85 |
86 void dcArgPointer(DCCallVM* vm, DCpointer x) | 86 void dcArgPointer(DCCallVM* vm, DCpointer x) |
87 { | 87 { |
88 vm->mVTpointer->argPointer(vm, x); | 88 vm->mVTpointer->argPointer(vm, x); |
89 } | 89 } |
90 | 90 |
91 void dcArgStruct(DCCallVM* vm, DCstruct* s, DCpointer x) | 91 void dcArgStruct(DCCallVM* vm, DCstruct* s, DCpointer x) |
92 { | 92 { |
93 vm->mVTpointer->argStruct(vm, s, x); | 93 vm->mVTpointer->argStruct(vm, s, x); |
94 } | 94 } |
95 | 95 |
96 | 96 |
97 void dcCallVoid(DCCallVM* vm, DCpointer funcptr) | 97 void dcCallVoid(DCCallVM* vm, DCpointer funcptr) |
98 { | 98 { |
99 vm->mVTpointer->callVoid(vm, funcptr); | 99 vm->mVTpointer->callVoid(vm, funcptr); |
100 } | 100 } |
101 | 101 |
102 DCchar dcCallChar(DCCallVM* vm, DCpointer funcptr) | 102 DCchar dcCallChar(DCCallVM* vm, DCpointer funcptr) |
103 { | 103 { |
104 return vm->mVTpointer->callChar(vm, funcptr); | 104 return vm->mVTpointer->callChar(vm, funcptr); |
105 } | 105 } |
106 | 106 |
107 DCbool dcCallBool(DCCallVM* vm, DCpointer funcptr) | 107 DCbool dcCallBool(DCCallVM* vm, DCpointer funcptr) |
108 { | 108 { |
109 return vm->mVTpointer->callBool(vm, funcptr); | 109 return vm->mVTpointer->callBool(vm, funcptr); |
110 } | 110 } |
111 | 111 |
112 DCshort dcCallShort(DCCallVM* vm, DCpointer funcptr) | 112 DCshort dcCallShort(DCCallVM* vm, DCpointer funcptr) |
113 { | 113 { |
114 return vm->mVTpointer->callShort(vm, funcptr); | 114 return vm->mVTpointer->callShort(vm, funcptr); |
115 } | 115 } |
116 | 116 |
117 DCint dcCallInt(DCCallVM* vm, DCpointer funcptr) | 117 DCint dcCallInt(DCCallVM* vm, DCpointer funcptr) |
118 { | 118 { |
119 return vm->mVTpointer->callInt(vm, funcptr); | 119 return vm->mVTpointer->callInt(vm, funcptr); |
120 } | 120 } |
121 | 121 |
122 DClong dcCallLong(DCCallVM* vm, DCpointer funcptr) | 122 DClong dcCallLong(DCCallVM* vm, DCpointer funcptr) |
123 { | 123 { |
124 return vm->mVTpointer->callLong(vm, funcptr); | 124 return vm->mVTpointer->callLong(vm, funcptr); |
125 } | 125 } |
126 | 126 |
127 DClonglong dcCallLongLong(DCCallVM* vm, DCpointer funcptr) | 127 DClonglong dcCallLongLong(DCCallVM* vm, DCpointer funcptr) |
128 { | 128 { |
129 return vm->mVTpointer->callLongLong(vm, funcptr); | 129 return vm->mVTpointer->callLongLong(vm, funcptr); |
130 } | 130 } |
131 | 131 |
132 DCfloat dcCallFloat(DCCallVM* vm, DCpointer funcptr) | 132 DCfloat dcCallFloat(DCCallVM* vm, DCpointer funcptr) |
133 { | 133 { |
134 return vm->mVTpointer->callFloat(vm, funcptr); | 134 return vm->mVTpointer->callFloat(vm, funcptr); |
135 } | 135 } |
136 | 136 |
137 DCdouble dcCallDouble(DCCallVM* vm, DCpointer funcptr) | 137 DCdouble dcCallDouble(DCCallVM* vm, DCpointer funcptr) |
138 { | 138 { |
139 return vm->mVTpointer->callDouble(vm, funcptr); | 139 return vm->mVTpointer->callDouble(vm, funcptr); |
140 } | 140 } |
141 | 141 |
142 DCpointer dcCallPointer(DCCallVM* vm, DCpointer funcptr) | 142 DCpointer dcCallPointer(DCCallVM* vm, DCpointer funcptr) |
143 { | 143 { |
144 return vm->mVTpointer->callPointer(vm, funcptr); | 144 return vm->mVTpointer->callPointer(vm, funcptr); |
145 } | 145 } |
146 | 146 |
147 void dcCallStruct(DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer x) | 147 void dcCallStruct(DCCallVM* vm, DCpointer funcptr, DCstruct* s, DCpointer x) |
148 { | 148 { |
149 vm->mVTpointer->callStruct(vm, funcptr, s, x); | 149 vm->mVTpointer->callStruct(vm, funcptr, s, x); |
150 } | 150 } |
151 | 151 |
152 DCint dcGetError(DCCallVM *vm) | 152 DCint dcGetError(DCCallVM *vm) |
153 { | 153 { |
154 return vm->mError; | 154 return vm->mError; |
157 DCint dcGetModeFromCCSigChar(DCsigchar sig_char) | 157 DCint dcGetModeFromCCSigChar(DCsigchar sig_char) |
158 { | 158 { |
159 switch(sig_char) | 159 switch(sig_char) |
160 { | 160 { |
161 case DC_SIGCHAR_CC_DEFAULT: return DC_CALL_C_DEFAULT; | 161 case DC_SIGCHAR_CC_DEFAULT: return DC_CALL_C_DEFAULT; |
162 case DC_SIGCHAR_CC_THISCALL: return DC_CALL_C_DEFAULT_THIS; | |
162 case DC_SIGCHAR_CC_ELLIPSIS: return DC_CALL_C_ELLIPSIS; | 163 case DC_SIGCHAR_CC_ELLIPSIS: return DC_CALL_C_ELLIPSIS; |
163 case DC_SIGCHAR_CC_ELLIPSIS_VARARGS: return DC_CALL_C_ELLIPSIS_VARARGS; | 164 case DC_SIGCHAR_CC_ELLIPSIS_VARARGS: return DC_CALL_C_ELLIPSIS_VARARGS; |
164 case DC_SIGCHAR_CC_CDECL: return DC_CALL_C_X86_CDECL; | 165 case DC_SIGCHAR_CC_CDECL: return DC_CALL_C_X86_CDECL; |
165 case DC_SIGCHAR_CC_STDCALL: return DC_CALL_C_X86_WIN32_STD; | 166 case DC_SIGCHAR_CC_STDCALL: return DC_CALL_C_X86_WIN32_STD; |
166 case DC_SIGCHAR_CC_FASTCALL_MS: return DC_CALL_C_X86_WIN32_FAST_MS; | 167 case DC_SIGCHAR_CC_FASTCALL_MS: return DC_CALL_C_X86_WIN32_FAST_MS; |