]> Cypherpunks repositories - gostls13.git/commitdiff
math: speed up Log on amd64
authorIlya Tocar <ilya.tocar@intel.com>
Tue, 28 Mar 2017 19:09:28 +0000 (14:09 -0500)
committerIlya Tocar <ilya.tocar@intel.com>
Wed, 29 Mar 2017 20:36:29 +0000 (20:36 +0000)
After https://golang.org/cl/31490 we break false
output dependency for CVTS.. in compiler generated code.
I've looked through asm code, which uses CVTS..
and added XOR to the only case where it affected performance.

Log-6                  21.6ns ± 0%  19.9ns ± 0%  -7.87%  (p=0.000 n=10+10)

Change-Id: I25d9b405e3041a3839b40f9f9a52e708034bb347
Reviewed-on: https://go-review.googlesource.com/38771
Run-TryBot: Ilya Tocar <ilya.tocar@intel.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
src/math/log_amd64.s

index bd2d06323c2b6d3659f4ae74c74524ee8d065084..3d7638979fc74c34ab6ee0b00b87cba5ea875301 100644 (file)
@@ -41,6 +41,7 @@ TEXT ·Log(SB),NOSPLIT,$0
        SHRQ    $52, BX
        ANDL    $0x7FF, BX
        SUBL    $0x3FE, BX
+       XORPS   X1, X1 // break dependency for CVTSL2SD
        CVTSL2SD BX, X1 // x1= k, x2= f1
        // if f1 < math.Sqrt2/2 { k -= 1; f1 *= 2 }
        MOVSD   $HSqrt2, X0 // x0= 0.7071, x1= k, x2= f1