mirror of
https://github.com/golang/go
synced 2024-11-20 09:04:44 -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:
parent
b91cf50585
commit
8820ab5da9
@ -36,7 +36,8 @@
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
thechar = '5',
|
thechar = '5',
|
||||||
PtrSize = 4
|
PtrSize = 4,
|
||||||
|
FuncAlign = 4 // single-instruction alignment
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef EXTERN
|
#ifndef EXTERN
|
||||||
|
@ -40,7 +40,8 @@
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
thechar = '6',
|
thechar = '6',
|
||||||
PtrSize = 8
|
PtrSize = 8,
|
||||||
|
FuncAlign = 16
|
||||||
};
|
};
|
||||||
|
|
||||||
#define P ((Prog*)0)
|
#define P ((Prog*)0)
|
||||||
|
@ -40,7 +40,8 @@
|
|||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
thechar = '8',
|
thechar = '8',
|
||||||
PtrSize = 4
|
PtrSize = 4,
|
||||||
|
FuncAlign = 16
|
||||||
};
|
};
|
||||||
|
|
||||||
#define P ((Prog*)0)
|
#define P ((Prog*)0)
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user