From: Russ Cox Date: Mon, 18 Feb 2013 18:24:04 +0000 (-0500) Subject: cmd/6c, cmd/8c: cut stack frames by about half X-Git-Tag: go1.1rc2~981 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=139448fe95402d1b7ff0fa08c459a07de95ddbe4;p=gostls13.git cmd/6c, cmd/8c: cut stack frames by about half The routine that adds an automatic to the stack was adding ptrsize-1 to the size before rounding up. That addition would only make sense to turn a round down into a round up. Before a round up, it just wastes a word. The effect was that a 6c function with one local and one two-word function call used (8+8)+(16+8) = 40 bytes instead of 8+16 = 24 bytes. The wasted space mostly didn't matter, but one place where it does matter is when trying to stay within the 128-byte total frame constraint for #pragma textflag 7 functions. This only affects the C compilers, not the Go compilers. 5c already had correct code, which is now copied to 6c and 8c. R=ken2 CC=golang-dev https://golang.org/cl/7303099 --- diff --git a/src/cmd/6c/swt.c b/src/cmd/6c/swt.c index 2c5b3e604c..53b12d9941 100644 --- a/src/cmd/6c/swt.c +++ b/src/cmd/6c/swt.c @@ -626,8 +626,8 @@ align(int32 i, Type *t, int op, int32 *maxalign) int32 maxround(int32 max, int32 v) { - v += SZ_VLONG-1; + v = xround(v, SZ_LONG); if(v > max) - max = xround(v, SZ_VLONG); + return v; return max; } diff --git a/src/cmd/8c/swt.c b/src/cmd/8c/swt.c index 18611ea1e8..dc68b60354 100644 --- a/src/cmd/8c/swt.c +++ b/src/cmd/8c/swt.c @@ -632,8 +632,8 @@ align(int32 i, Type *t, int op, int32 *maxalign) int32 maxround(int32 max, int32 v) { - v += SZ_LONG-1; + v = xround(v, SZ_LONG); if(v > max) - max = xround(v, SZ_LONG); + return v; return max; }