comparison dyncall/dyncall_callvm_arm64_apple.c @ 533:71c884e610f0

- integration of patches from Raphael Luba, Thekla, Inc.: * integration of aggregate-by-value (struct, union) support patch for x64 (win and sysv) * windows/x64 asm additions to specify how stack unwinds (help for debuggers, exception handling, etc.) * see Changelog for details - new calling convention modes for thiscalls (platform agnostic, was specific before) * new signature character for platform agnostic thiscalls ('*' / DC_SIGCHAR_CC_THISCALL) - dcCallF(), dcVCallF(), dcArgF() and dcVArgF(): * added support for aggregates-by-value (wasn't part of patch) * change that those functions don't implicitly call dcReset() anymore, which was unflexible (breaking change) - added macros to feature test implementation for aggregate-by-value and syscall support - changed libdyncall_s.lib and libdyncallback_s.lib order in callback test makefiles, as some toolchains are picky about order - doc: * man page updates to describe aggregate interface * manual overview changes to highlight platforms with aggregate-by-value support - test/plain: replaced tests w/ old/stale sctruct interface with new aggregate one
author Tassilo Philipp
date Thu, 21 Apr 2022 13:35:47 +0200
parents ddfb9577a00e
children
comparison
equal deleted inserted replaced
532:d4bf63ab9164 533:71c884e610f0
188 , &a_long 188 , &a_long
189 , &a_i64 189 , &a_i64
190 , &a_float 190 , &a_float
191 , &a_double 191 , &a_double
192 , &a_pointer 192 , &a_pointer
193 , NULL /* argStruct */ 193 , NULL /* argAggr */
194 , (DCvoidvmfunc*) &call 194 , (DCvoidvmfunc*) &call
195 , (DCboolvmfunc*) &call 195 , (DCboolvmfunc*) &call
196 , (DCcharvmfunc*) &call 196 , (DCcharvmfunc*) &call
197 , (DCshortvmfunc*) &call 197 , (DCshortvmfunc*) &call
198 , (DCintvmfunc*) &call 198 , (DCintvmfunc*) &call
199 , (DClongvmfunc*) &call 199 , (DClongvmfunc*) &call
200 , (DClonglongvmfunc*) &call 200 , (DClonglongvmfunc*) &call
201 , (DCfloatvmfunc*) &call 201 , (DCfloatvmfunc*) &call
202 , (DCdoublevmfunc*) &call 202 , (DCdoublevmfunc*) &call
203 , (DCpointervmfunc*) &call 203 , (DCpointervmfunc*) &call
204 , NULL /* callStruct */ 204 , NULL /* callAggr */
205 , NULL /* beginAggr */
205 }; 206 };
206 207
207 DCCallVM_vt vt_arm64_variadic = 208 DCCallVM_vt vt_arm64_variadic =
208 { 209 {
209 &deinit 210 &deinit
216 , &var_long 217 , &var_long
217 , &var_i64 218 , &var_i64
218 , &var_float 219 , &var_float
219 , &var_double 220 , &var_double
220 , &var_pointer 221 , &var_pointer
221 , NULL /* argStruct */ 222 , NULL /* argAggr */
222 , (DCvoidvmfunc*) &call 223 , (DCvoidvmfunc*) &call
223 , (DCboolvmfunc*) &call 224 , (DCboolvmfunc*) &call
224 , (DCcharvmfunc*) &call 225 , (DCcharvmfunc*) &call
225 , (DCshortvmfunc*) &call 226 , (DCshortvmfunc*) &call
226 , (DCintvmfunc*) &call 227 , (DCintvmfunc*) &call
227 , (DClongvmfunc*) &call 228 , (DClongvmfunc*) &call
228 , (DClonglongvmfunc*) &call 229 , (DClonglongvmfunc*) &call
229 , (DCfloatvmfunc*) &call 230 , (DCfloatvmfunc*) &call
230 , (DCdoublevmfunc*) &call 231 , (DCdoublevmfunc*) &call
231 , (DCpointervmfunc*) &call 232 , (DCpointervmfunc*) &call
232 , NULL /* callStruct */ 233 , NULL /* callAggr */
234 , NULL /* beginAggr */
233 }; 235 };
234 236
235 static void mode(DCCallVM* in_self, DCint mode) 237 static void mode(DCCallVM* in_self, DCint mode)
236 { 238 {
237 DCCallVM_arm64* self = (DCCallVM_arm64*)in_self; 239 DCCallVM_arm64* self = (DCCallVM_arm64*)in_self;