mirror of https://github.com/golang/go.git
big: eliminate redundant array lookups
This gives about a 6% performance improvement to pidigits. Thanks to Russ for the suggestion. R=rsc, gri CC=golang-dev https://golang.org/cl/957041
This commit is contained in:
parent
4f445d2744
commit
e4136fe91c
|
|
@ -544,13 +544,16 @@ func shiftLeft(dst, src []Word, n uint) {
|
|||
}
|
||||
|
||||
ñ := _W - n
|
||||
x := src[len(src)-1]
|
||||
if len(dst) > len(src) {
|
||||
dst[len(src)] |= src[len(src)-1] >> ñ
|
||||
dst[len(src)] = x >> ñ
|
||||
}
|
||||
for i := len(src) - 1; i >= 1; i-- {
|
||||
dst[i] = src[i]<<n | src[i-1]>>ñ
|
||||
y := src[i-1]
|
||||
dst[i] = x<<n | y>>ñ
|
||||
x = y
|
||||
}
|
||||
dst[0] = src[0] << n
|
||||
dst[0] = x << n
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -560,10 +563,13 @@ func shiftRight(dst, src []Word, n uint) {
|
|||
}
|
||||
|
||||
ñ := _W - n
|
||||
x := src[0]
|
||||
for i := 0; i < len(src)-1; i++ {
|
||||
dst[i] = src[i]>>n | src[i+1]<<ñ
|
||||
y := src[i+1]
|
||||
dst[i] = x>>n | y<<ñ
|
||||
x = y
|
||||
}
|
||||
dst[len(src)-1] = src[len(src)-1] >> n
|
||||
dst[len(src)-1] = x >> n
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue