From: Russ Cox Date: Wed, 30 May 2012 20:26:38 +0000 (-0400) Subject: cmd/ld: align function entry on arch-specific boundary X-Git-Tag: go1.1rc2~3050 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=8820ab5da9da5528e256d3a519723fdf44ddc75f;p=gostls13.git cmd/ld: align function entry on arch-specific boundary 16 seems pretty standard on x86 for function entry. I don't know if ARM would benefit, so I used just 4 (single instruction alignment). This has a minor absolute effect on the current timings. The main hope is that it will make them more consistent from run to run. benchmark old ns/op new ns/op delta BenchmarkBinaryTree17 4222117400 4140739800 -1.93% BenchmarkFannkuch11 3462631800 3259914400 -5.85% BenchmarkGobDecode 20887622 20620222 -1.28% BenchmarkGobEncode 9548772 9384886 -1.72% BenchmarkGzip 151687 150333 -0.89% BenchmarkGunzip 8742 8741 -0.01% BenchmarkJSONEncode 62730560 65210990 +3.95% BenchmarkJSONDecode 252569180 249394860 -1.26% BenchmarkMandelbrot200 5267599 5273394 +0.11% BenchmarkRevcomp25M 980813500 996013800 +1.55% BenchmarkTemplate 361259100 360620840 -0.18% R=ken2 CC=golang-dev https://golang.org/cl/6244066 --- diff --git a/src/cmd/5l/l.h b/src/cmd/5l/l.h index 911f63e12f..9c0c4ff348 100644 --- a/src/cmd/5l/l.h +++ b/src/cmd/5l/l.h @@ -36,7 +36,8 @@ enum { thechar = '5', - PtrSize = 4 + PtrSize = 4, + FuncAlign = 4 // single-instruction alignment }; #ifndef EXTERN diff --git a/src/cmd/6l/l.h b/src/cmd/6l/l.h index 5f62239a1e..b1611e016a 100644 --- a/src/cmd/6l/l.h +++ b/src/cmd/6l/l.h @@ -40,7 +40,8 @@ enum { thechar = '6', - PtrSize = 8 + PtrSize = 8, + FuncAlign = 16 }; #define P ((Prog*)0) diff --git a/src/cmd/8l/l.h b/src/cmd/8l/l.h index b974f464bf..75f1c070ea 100644 --- a/src/cmd/8l/l.h +++ b/src/cmd/8l/l.h @@ -40,7 +40,8 @@ enum { thechar = '8', - PtrSize = 4 + PtrSize = 4, + FuncAlign = 16 }; #define P ((Prog*)0) diff --git a/src/cmd/ld/data.c b/src/cmd/ld/data.c index 1f64a84708..865f282114 100644 --- a/src/cmd/ld/data.c +++ b/src/cmd/ld/data.c @@ -1012,6 +1012,8 @@ textaddress(void) continue; if(sym->align != 0) va = rnd(va, sym->align); + else if(sym->text != P) + va = rnd(va, FuncAlign); sym->value = 0; for(sub = sym; sub != S; sub = sub->sub) { sub->value += va;