aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorAustin Clements <austin@google.com>2017-10-27 15:30:19 -0400
committerAustin Clements <austin@google.com>2017-10-30 18:12:51 +0000
commit6a5f1e58edfe55428d375be26c9c8eefbd67ad31 (patch)
tree1cd0042198f1e9a9367c4b008e5f442e13afc8e0 /src/encoding
parentf96b95bcd192c771d815d2699e3aae9bbb65f6b2 (diff)
downloadgo-6a5f1e58edfe55428d375be26c9c8eefbd67ad31.tar.xz
runtime: simplify and optimize typedslicecopy
Currently, typedslicecopy meticulously performs a typedmemmove on every element of the slice. This probably used to be necessary because we only had an individual element's type, but now we use the heap bitmap, so we only need to know whether the type has any pointers and how big it is. Hence, this CL rewrites typedslicecopy to simply perform one bulk barrier and one memmove. This also has a side-effect of eliminating two unnecessary write barriers per slice element that were coming from updates to dstp and srcp, which were stored in the parent stack frame. However, most of the win comes from eliminating the loops. name old time/op new time/op delta BulkWriteBarrier-12 7.83ns ±10% 7.33ns ± 6% -6.45% (p=0.000 n=20+20) Updates #22460. Change-Id: Id3450e9f36cc8e0892f268319b136f0d8f5464b8 Reviewed-on: https://go-review.googlesource.com/73831 Run-TryBot: Austin Clements <austin@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rick Hudson <rlh@golang.org>
Diffstat (limited to 'src/encoding')
0 files changed, 0 insertions, 0 deletions