diff options
author | Keith Randall <khr@golang.org> | 2017-04-24 13:48:35 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2017-04-27 16:45:01 +0000 |
commit | 14f3ca56eda1120cb9f25f05f7fbf705d2bb0dc3 (patch) | |
tree | d7740115a87500cb3c748e55353c4122ea8ff11d /src/regexp/syntax/prog.go | |
parent | c120e449fbc618f9510387d718de0cef5f73af3a (diff) | |
download | go-git-14f3ca56eda1120cb9f25f05f7fbf705d2bb0dc3.tar.gz |
cmd/internal/obj: ARM, use immediates instead of constant pool entries
When a constant doesn't fit in a single instruction, use two
paired instructions instead of the constant pool. For example
ADD $0xaa00bb, R0, R1
Used to rewrite to:
MOV ?(IP), R11
ADD R11, R0, R1
Instead, do:
ADD $0xaa0000, R0, R1
ADD $0xbb, R1, R1
Same number of instructions.
Good:
4 less bytes (no constant pool entry)
One less load.
Bad:
Critical path is one instruction longer.
It's probably worth it to avoid the loads, they are expensive.
Dave Cheney got us some performance numbers: https://perf.golang.org/search?q=upload:20170426.1
TL;DR mean 1.37% improvement.
Change-Id: Ib206836161fdc94a3962db6f9caa635c87d57cf1
Reviewed-on: https://go-review.googlesource.com/41612
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
Diffstat (limited to 'src/regexp/syntax/prog.go')
0 files changed, 0 insertions, 0 deletions