From 4f579cc65bfedca93ad00f9c5eb138c4a785a4ad Mon Sep 17 00:00:00 2001 From: Ilya Tocar Date: Tue, 28 Mar 2017 14:09:28 -0500 Subject: [PATCH] math: speed up Log on amd64 MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 TryBot-Result: Gobot Gobot Reviewed-by: Keith Randall --- src/math/log_amd64.s | 1 + 1 file changed, 1 insertion(+) diff --git a/src/math/log_amd64.s b/src/math/log_amd64.s index bd2d06323c..3d7638979f 100644 --- a/src/math/log_amd64.s +++ b/src/math/log_amd64.s @@ -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 -- 2.48.1