Mercurial > pub > dyncall > dyncall
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; |