blob: 1adb26b4524e04817bfaf5faf5f1b5eb4a302128 [file] [log] [blame]
Keith Randallda7cf0b2014-02-06 17:43:22 -08001// Copyright 2014 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
Anthony Martin8303a132014-03-12 18:12:25 -07005// +build !plan9
6
Russ Coxcb040d52014-09-04 23:05:18 -04007#include "textflag.h"
Keith Randallda7cf0b2014-02-06 17:43:22 -08008
Russ Coxee6c6d92014-09-09 17:12:05 -04009// NOTE: Windows externalthreadhandler expects memclr to preserve DX.
10
Austin Clements87e48c52016-10-17 18:41:56 -040011// void runtime·memclrNoHeapPointers(void*, uintptr)
12TEXT runtime·memclrNoHeapPointers(SB), NOSPLIT, $0-8
Keith Randallda7cf0b2014-02-06 17:43:22 -080013 MOVL ptr+0(FP), DI
14 MOVL n+4(FP), BX
15 XORL AX, AX
16
17 // MOVOU seems always faster than REP STOSL.
Russ Coxb55791e2014-10-28 21:50:16 -040018tail:
Keith Randallda7cf0b2014-02-06 17:43:22 -080019 TESTL BX, BX
Russ Coxb55791e2014-10-28 21:50:16 -040020 JEQ _0
Keith Randallda7cf0b2014-02-06 17:43:22 -080021 CMPL BX, $2
Russ Coxb55791e2014-10-28 21:50:16 -040022 JBE _1or2
Keith Randallda7cf0b2014-02-06 17:43:22 -080023 CMPL BX, $4
Keith Randall4b7d5f02015-11-05 12:39:56 -080024 JB _3
25 JE _4
Keith Randallda7cf0b2014-02-06 17:43:22 -080026 CMPL BX, $8
Russ Coxb55791e2014-10-28 21:50:16 -040027 JBE _5through8
Keith Randallda7cf0b2014-02-06 17:43:22 -080028 CMPL BX, $16
Russ Coxb55791e2014-10-28 21:50:16 -040029 JBE _9through16
Martin Möhrmann5a6c5802017-04-27 08:30:27 +020030 CMPB runtime·support_sse2(SB), $1
31 JNE nosse2
Keith Randallda7cf0b2014-02-06 17:43:22 -080032 PXOR X0, X0
33 CMPL BX, $32
Russ Coxb55791e2014-10-28 21:50:16 -040034 JBE _17through32
Keith Randallda7cf0b2014-02-06 17:43:22 -080035 CMPL BX, $64
Russ Coxb55791e2014-10-28 21:50:16 -040036 JBE _33through64
Keith Randallda7cf0b2014-02-06 17:43:22 -080037 CMPL BX, $128
Russ Coxb55791e2014-10-28 21:50:16 -040038 JBE _65through128
Keith Randallda7cf0b2014-02-06 17:43:22 -080039 CMPL BX, $256
Russ Coxb55791e2014-10-28 21:50:16 -040040 JBE _129through256
Keith Randallda7cf0b2014-02-06 17:43:22 -080041 // TODO: use branch table and BSR to make this just a single dispatch
42
Russ Coxb55791e2014-10-28 21:50:16 -040043loop:
Keith Randallda7cf0b2014-02-06 17:43:22 -080044 MOVOU X0, 0(DI)
45 MOVOU X0, 16(DI)
46 MOVOU X0, 32(DI)
47 MOVOU X0, 48(DI)
48 MOVOU X0, 64(DI)
49 MOVOU X0, 80(DI)
50 MOVOU X0, 96(DI)
51 MOVOU X0, 112(DI)
52 MOVOU X0, 128(DI)
53 MOVOU X0, 144(DI)
54 MOVOU X0, 160(DI)
55 MOVOU X0, 176(DI)
56 MOVOU X0, 192(DI)
57 MOVOU X0, 208(DI)
58 MOVOU X0, 224(DI)
59 MOVOU X0, 240(DI)
60 SUBL $256, BX
61 ADDL $256, DI
62 CMPL BX, $256
Russ Coxb55791e2014-10-28 21:50:16 -040063 JAE loop
64 JMP tail
Keith Randallda7cf0b2014-02-06 17:43:22 -080065
Russ Coxb55791e2014-10-28 21:50:16 -040066_1or2:
Keith Randallda7cf0b2014-02-06 17:43:22 -080067 MOVB AX, (DI)
68 MOVB AX, -1(DI)(BX*1)
Josh Bleecher Snyderbc9e1602014-08-01 06:21:08 -070069 RET
Russ Coxb55791e2014-10-28 21:50:16 -040070_0:
Keith Randallda7cf0b2014-02-06 17:43:22 -080071 RET
Keith Randall4b7d5f02015-11-05 12:39:56 -080072_3:
Keith Randallda7cf0b2014-02-06 17:43:22 -080073 MOVW AX, (DI)
Keith Randall4b7d5f02015-11-05 12:39:56 -080074 MOVB AX, 2(DI)
75 RET
76_4:
77 // We need a separate case for 4 to make sure we clear pointers atomically.
78 MOVL AX, (DI)
Keith Randallda7cf0b2014-02-06 17:43:22 -080079 RET
Russ Coxb55791e2014-10-28 21:50:16 -040080_5through8:
Keith Randallda7cf0b2014-02-06 17:43:22 -080081 MOVL AX, (DI)
82 MOVL AX, -4(DI)(BX*1)
83 RET
Russ Coxb55791e2014-10-28 21:50:16 -040084_9through16:
Keith Randallda7cf0b2014-02-06 17:43:22 -080085 MOVL AX, (DI)
86 MOVL AX, 4(DI)
87 MOVL AX, -8(DI)(BX*1)
88 MOVL AX, -4(DI)(BX*1)
89 RET
Russ Coxb55791e2014-10-28 21:50:16 -040090_17through32:
Keith Randallda7cf0b2014-02-06 17:43:22 -080091 MOVOU X0, (DI)
92 MOVOU X0, -16(DI)(BX*1)
93 RET
Russ Coxb55791e2014-10-28 21:50:16 -040094_33through64:
Keith Randallda7cf0b2014-02-06 17:43:22 -080095 MOVOU X0, (DI)
96 MOVOU X0, 16(DI)
97 MOVOU X0, -32(DI)(BX*1)
98 MOVOU X0, -16(DI)(BX*1)
99 RET
Russ Coxb55791e2014-10-28 21:50:16 -0400100_65through128:
Keith Randallda7cf0b2014-02-06 17:43:22 -0800101 MOVOU X0, (DI)
102 MOVOU X0, 16(DI)
103 MOVOU X0, 32(DI)
104 MOVOU X0, 48(DI)
105 MOVOU X0, -64(DI)(BX*1)
106 MOVOU X0, -48(DI)(BX*1)
107 MOVOU X0, -32(DI)(BX*1)
108 MOVOU X0, -16(DI)(BX*1)
109 RET
Russ Coxb55791e2014-10-28 21:50:16 -0400110_129through256:
Keith Randallda7cf0b2014-02-06 17:43:22 -0800111 MOVOU X0, (DI)
112 MOVOU X0, 16(DI)
113 MOVOU X0, 32(DI)
114 MOVOU X0, 48(DI)
115 MOVOU X0, 64(DI)
116 MOVOU X0, 80(DI)
117 MOVOU X0, 96(DI)
118 MOVOU X0, 112(DI)
119 MOVOU X0, -128(DI)(BX*1)
120 MOVOU X0, -112(DI)(BX*1)
121 MOVOU X0, -96(DI)(BX*1)
122 MOVOU X0, -80(DI)(BX*1)
123 MOVOU X0, -64(DI)(BX*1)
124 MOVOU X0, -48(DI)(BX*1)
125 MOVOU X0, -32(DI)(BX*1)
126 MOVOU X0, -16(DI)(BX*1)
127 RET
128nosse2:
129 MOVL BX, CX
130 SHRL $2, CX
131 REP
132 STOSL
133 ANDL $3, BX
Russ Coxb55791e2014-10-28 21:50:16 -0400134 JNE tail
Keith Randallda7cf0b2014-02-06 17:43:22 -0800135 RET