shithub: mc

Download patch

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);
--