From 7cd1ae7710aefad30e2f9893fbf6d3db29f8ae01 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Sat, 27 May 2017 22:42:18 +0200 Subject: x86-64: Fix psABI stdarg prologue If there were more than 6 integer arguments before the ellipsis, or there were used more than 8 slots used until the ellipsis (e.g. by a large intermediate struct) we generated wrong code. See testcase. --- x86_64-gen.c | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'x86_64-gen.c') diff --git a/x86_64-gen.c b/x86_64-gen.c index 0067fdc..19d5dd7 100644 --- a/x86_64-gen.c +++ b/x86_64-gen.c @@ -1423,21 +1423,15 @@ void gfunc_prolog(CType *func_type) break; case x86_64_mode_integer: - if (seen_reg_num + reg_count <= 8) { - seen_reg_num += reg_count; - } else { - seen_reg_num = 8; - goto stack_arg; - } + if (seen_reg_num + reg_count > REGN) + goto stack_arg; + seen_reg_num += reg_count; break; case x86_64_mode_sse: - if (seen_sse_num + reg_count <= 8) { - seen_sse_num += reg_count; - } else { - seen_sse_num = 8; - goto stack_arg; - } + if (seen_sse_num + reg_count > 8) + goto stack_arg; + seen_sse_num += reg_count; break; } } -- cgit v1.3.1