ref: bdddb0fe46050fc184e0146819e9840611a0e44d
parent: c7606d65d33f37e853755930e5559c7c4aa4a554
author: Ori Bernstein <ori@eigenstate.org>
date: Thu Aug 2 21:23:07 EDT 2012
Align the function arguments properly in calls.
--- a/6/isel.c
+++ b/6/isel.c
@@ -382,8 +382,10 @@
* Not good.
*
* We skip the first operand, since it's the function itself */
- for (i = 1; i < n->expr.nargs; i++)
+ for (i = 1; i < n->expr.nargs; i++) {
+ argsz = align(argsz, min(size(n->expr.args[i]), Ptrsz));
argsz += size(n->expr.args[i]);
+ }
stkbump = loclit(argsz, ModeQ);
if (argsz)
g(s, Isub, stkbump, rsp, NULL);
@@ -392,6 +394,7 @@
argoff = 0;
for (i = 1; i < n->expr.nargs; i++) {
arg = selexpr(s, n->expr.args[i]);
+ argoff = align(argoff, min(size(n->expr.args[i]), Ptrsz));
if (stacknode(n->expr.args[i])) {
dst = locreg(ModeQ);
src = locreg(ModeQ);
--
⑨