From c1205952ab7e3be09cd1a0a9a4d4ee9ddeefe1ea Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Fri, 20 Mar 2015 16:51:55 +0100 Subject: Support va_arg for vararg arguments of composite (struct/union) types. Now for IA32 and PowerPC as well. --- runtime/ia32/vararg.S | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'runtime/ia32/vararg.S') diff --git a/runtime/ia32/vararg.S b/runtime/ia32/vararg.S index ec55a454..78666c70 100644 --- a/runtime/ia32/vararg.S +++ b/runtime/ia32/vararg.S @@ -67,3 +67,15 @@ FUNCTION(__compcert_va_float64) movl %edx, 0(%ecx) ret ENDFUNCTION(__compcert_va_float64) + +FUNCTION(__compcert_va_composite) + movl 4(%esp), %ecx // %ecx = ap parameter + movl 8(%esp), %edx // %edx = size of composite in bytes + movl 0(%ecx), %eax // %eax = current argument pointer + leal 3(%eax, %edx), %edx // advance by size + andl $0xfffffffc, %edx // and round up to multiple of 4 + movl %edx, 0(%ecx) // update argument pointer + ret +ENDFUNCTION(__compcert_va_composite) + + -- cgit