go.image/vp8: use branch-free abs
This change seems to restore performance to the level before CL 108140045. benchmark old ns/op new ns/op delta BenchmarkDecodeVP8SimpleFilter 796416 784394 -1.51% BenchmarkDecodeVP8NormalFilter 4931138 4693078 -4.83% BenchmarkDecodeVP8L 7820030 7821796 +0.02% LGTM=nigeltao, r R=nigeltao, r CC=golang-codereviews https://golang.org/cl/107340047
This commit is contained in:
parent
f8a86727c2
commit
dc115882f1
|
@ -227,11 +227,19 @@ func (d *Decoder) computeFilterParams() {
|
|||
}
|
||||
}
|
||||
|
||||
// intSize is either 32 or 64.
|
||||
const intSize = 32 << (^uint(0) >> 63)
|
||||
|
||||
func abs(x int) int {
|
||||
if x < 0 {
|
||||
return -x
|
||||
}
|
||||
return x
|
||||
// m := -1 if x < 0. m := 0 otherwise.
|
||||
m := x >> (intSize - 1)
|
||||
|
||||
// In two's complement representation, the negative number
|
||||
// of any number (except the smallest one) can be computed
|
||||
// by flipping all the bits and add 1. This is faster than
|
||||
// code with a branch.
|
||||
// See Hacker's Delight, section 2-4.
|
||||
return (x ^ m) - m
|
||||
}
|
||||
|
||||
func clamp15(x int) int {
|
||||
|
|
Loading…
Reference in New Issue
Block a user