aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/duff_amd64.s
diff options
context:
space:
mode:
authorIlya Tocar <ilya.tocar@intel.com>2015-09-09 14:10:12 +0300
committerKeith Randall <khr@golang.org>2015-09-16 16:07:44 +0000
commit2421c6e3df9d593e9cb9bce24df9132fc9cf83b7 (patch)
treecaffc05c8a186525f57a4236eee0391206e6e058 /src/runtime/duff_amd64.s
parent2027b00e63d9128eaba4a0164072380561c0fc9c (diff)
downloadgo-2421c6e3df9d593e9cb9bce24df9132fc9cf83b7.tar.gz
go-2421c6e3df9d593e9cb9bce24df9132fc9cf83b7.zip
runtime: optimize duffzero for amd64.
Use MOVUPS to zero 16 bytes at a time. results (haswell): name old time/op new time/op delta ClearFat8-48 0.62ns ± 2% 0.62ns ± 1% ~ (p=0.085 n=20+15) ClearFat12-48 0.93ns ± 2% 0.93ns ± 2% ~ (p=0.757 n=19+19) ClearFat16-48 1.23ns ± 1% 1.23ns ± 1% ~ (p=0.896 n=19+17) ClearFat24-48 1.85ns ± 2% 1.84ns ± 0% -0.51% (p=0.023 n=20+15) ClearFat32-48 2.45ns ± 0% 2.46ns ± 2% ~ (p=0.053 n=17+18) ClearFat40-48 1.99ns ± 0% 0.92ns ± 2% -53.54% (p=0.000 n=19+20) ClearFat48-48 2.15ns ± 1% 0.92ns ± 2% -56.93% (p=0.000 n=19+20) ClearFat56-48 2.46ns ± 1% 1.23ns ± 0% -49.98% (p=0.000 n=19+14) ClearFat64-48 2.76ns ± 0% 2.14ns ± 1% -22.21% (p=0.000 n=17+17) ClearFat128-48 5.21ns ± 0% 3.99ns ± 0% -23.46% (p=0.000 n=17+19) ClearFat256-48 10.3ns ± 4% 7.7ns ± 0% -25.37% (p=0.000 n=20+17) ClearFat512-48 20.2ns ± 4% 15.0ns ± 1% -25.58% (p=0.000 n=20+17) ClearFat1024-48 39.7ns ± 2% 29.7ns ± 0% -25.05% (p=0.000 n=19+19) Change-Id: I200401eec971b2dd2450c0651c51e378bd982405 Reviewed-on: https://go-review.googlesource.com/14408 Reviewed-by: Keith Randall <khr@golang.org> Run-TryBot: Keith Randall <khr@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/duff_amd64.s')
-rw-r--r--src/runtime/duff_amd64.s286
1 files changed, 96 insertions, 190 deletions
diff --git a/src/runtime/duff_amd64.s b/src/runtime/duff_amd64.s
index 0b51228f0a..e20ab96b60 100644
--- a/src/runtime/duff_amd64.s
+++ b/src/runtime/duff_amd64.s
@@ -5,196 +5,102 @@
#include "textflag.h"
TEXT runtime·duffzero(SB), NOSPLIT, $0-0
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- MOVQ AX,(DI)
- MOVQ AX,8(DI)
- MOVQ AX,16(DI)
- MOVQ AX,24(DI)
- ADDQ $32,DI
-
- STOSQ
- STOSQ
- STOSQ
- STOSQ
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
+ MOVUPS X0,(DI)
+ MOVUPS X0,16(DI)
+ MOVUPS X0,32(DI)
+ MOVUPS X0,48(DI)
+ ADDQ $64,DI
+
RET
TEXT runtime·duffcopy(SB), NOSPLIT, $0-0