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:
Evan Shaw 2010-04-20 21:41:58 -07:00 committed by Russ Cox
parent 4f445d2744
commit e4136fe91c
1 changed files with 11 additions and 5 deletions

View File

@ -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
}