about summary refs log tree commit diff stats
path: root/src/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/include')
-rwxr-xr-xsrc/include/myalign.h25
1 files changed, 22 insertions, 3 deletions
diff --git a/src/include/myalign.h b/src/include/myalign.h
index 1d5a6b72..e6f3355f 100755
--- a/src/include/myalign.h
+++ b/src/include/myalign.h
@@ -2,6 +2,15 @@
 
 #ifdef __x86_64__
 // x86_64, 6 64bits general regs and 16 or 8? 128bits float regs
+/*
+For reference, here is the x86_64 va_list structure
+typedef struct {
+   unsigned int gp_offset;
+   unsigned int fp_offset;
+   void *overflow_arg_area;
+   void *reg_save_area;
+} va_list[1];
+*/
 #define CREATE_SYSV_VALIST(A) \
   va_list sysv_varargs; \
   sysv_varargs->gp_offset=(6*8); \
@@ -9,11 +18,21 @@
   sysv_varargs->overflow_arg_area=A;
 #elif defined(__aarch64__)
 // aarch64: 8 64bits general regs and 8 128bits float regs
+/*
+va_list declared as
+typedef struct  va_list {
+    void * stack; // next stack param
+    void * gr_top; // end of GP arg reg save area
+    void * vr_top; // end of FP/SIMD arg reg save area
+    int gr_offs; // offset from  gr_top to next GP register arg
+    int vr_offs; // offset from  vr_top to next FP/SIMD register arg
+} va_list;
+*/
 #define CREATE_SYSV_VALIST(A) \
   va_list sysv_varargs; \
-  sysv_varargs->gp_offset=(8*8); \
-  sysv_varargs->fp_offset=(8*8)+(8*16); \
-  sysv_varargs->overflow_arg_area=A;
+  sysv_varargs.gr_offs=(8*8); \
+  sysv_varargs.vr_offs=(8*16); \
+  sysv_varargs.stack=A;
 #elif defined(__powerpc64__)
 // TODO, is this correct?
 #define CREATE_SYSV_VALIST(A) \