1
0
mirror of https://github.com/golang/go synced 2024-11-20 11:24:47 -07:00

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
This commit is contained in:
Russ Cox 2012-05-30 16:26:38 -04:00
parent b91cf50585
commit 8820ab5da9
4 changed files with 8 additions and 3 deletions

View File

@ -36,7 +36,8 @@
enum enum
{ {
thechar = '5', thechar = '5',
PtrSize = 4 PtrSize = 4,
FuncAlign = 4 // single-instruction alignment
}; };
#ifndef EXTERN #ifndef EXTERN

View File

@ -40,7 +40,8 @@
enum enum
{ {
thechar = '6', thechar = '6',
PtrSize = 8 PtrSize = 8,
FuncAlign = 16
}; };
#define P ((Prog*)0) #define P ((Prog*)0)

View File

@ -40,7 +40,8 @@
enum enum
{ {
thechar = '8', thechar = '8',
PtrSize = 4 PtrSize = 4,
FuncAlign = 16
}; };
#define P ((Prog*)0) #define P ((Prog*)0)

View File

@ -1012,6 +1012,8 @@ textaddress(void)
continue; continue;
if(sym->align != 0) if(sym->align != 0)
va = rnd(va, sym->align); va = rnd(va, sym->align);
else if(sym->text != P)
va = rnd(va, FuncAlign);
sym->value = 0; sym->value = 0;
for(sub = sym; sub != S; sub = sub->sub) { for(sub = sym; sub != S; sub = sub->sub) {
sub->value += va; sub->value += va;