summaryrefslogtreecommitdiff
path: root/src/regexp/syntax/prog.go
diff options
context:
space:
mode:
authorKeith Randall <khr@golang.org>2017-04-24 13:48:35 -0700
committerKeith Randall <khr@golang.org>2017-04-27 16:45:01 +0000
commit14f3ca56eda1120cb9f25f05f7fbf705d2bb0dc3 (patch)
treed7740115a87500cb3c748e55353c4122ea8ff11d /src/regexp/syntax/prog.go
parentc120e449fbc618f9510387d718de0cef5f73af3a (diff)
downloadgo-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