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;