diff dyncall/dyncall_callvm_x64.h @ 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 ad5f9803f52f
children
line wrap: on
line diff
--- a/dyncall/dyncall_callvm_x64.h	Sat Apr 16 15:00:58 2022 +0200
+++ b/dyncall/dyncall_callvm_x64.h	Thu Apr 21 13:35:47 2022 +0200
@@ -97,11 +97,15 @@
 
 typedef struct
 {
-  DCCallVM       mInterface;  /* This CallVM interface.                                  */
-  DCpointer      mpCallFunc;  /* Function to call.                                       */
-  DCRegCount_x64 mRegCount;   /* Number of int/sse registers used for parameter passing. */
-  DCRegData_x64  mRegData;    /* Parameters to be passed via registers.                  */
-  DCVecHead      mVecHead;    /* Parameters to be pushed onto stack.                     */
+  DCCallVM       mInterface;       /* this CallVM interface                                        */
+  DCpointer      mpCallFunc;       /* function to call                                             */
+  DCint          mAggrReturnReg;   /* reg index for aggregate ret value (if hidden argument)       */
+#if defined(DC_WINDOWS)
+  DCpointer      mpAggrVecCopies;  /* ptr to copies of aggrs passed via hidden ptr (end of vector) */
+#endif
+  DCRegCount_x64 mRegCount;        /* number of int/sse registers used for parameter passing       */
+  DCRegData_x64  mRegData;         /* parameters to be passed via registers                        */
+  DCVecHead      mVecHead;         /* parameters to be pushed onto stack                           */
 } DCCallVM_x64;
 
 #endif /* DYNCALL_CALLVM_X64_H */