From a90ffe0a21a3a813df4eb9a4dc23b06f50699cde Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Fri, 20 Mar 2015 16:43:14 +0100 Subject: Support va_arg for vararg arguments of composite (struct/union) types. ARM is done, IA32 and PowerPC remain to be updated. --- runtime/arm/vararg.S | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'runtime/arm') diff --git a/runtime/arm/vararg.S b/runtime/arm/vararg.S index ae06e361..5e319b8b 100644 --- a/runtime/arm/vararg.S +++ b/runtime/arm/vararg.S @@ -75,3 +75,15 @@ FUNCTION(__compcert_va_float64) #endif bx lr ENDFUNCTION(__compcert_va_float64) + +FUNCTION(__compcert_va_composite) + @ r0 = ap parameter + @ r1 = size of the composite, in bytes + ldr r2, [r0, #0] @ r2 = pointer to next argument + ADD r3, r2, r1 @ advance by size + ADD r3, r3, #3 @ 4-align + BIC r3, r3, #3 + str r3, [r0, #0] @ update ap + mov r0, r2 @ result is pointer to composite in stack + bx lr +ENDFUNCTION(__compcert_va_composite) -- cgit