aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/memclr_s390x.s
diff options
context:
space:
mode:
authorMichael Munday <munday@ca.ibm.com>2016-03-18 19:09:39 -0400
committerBrad Fitzpatrick <bradfitz@golang.org>2016-04-07 18:56:54 +0000
commite6f36f0cd5b45b9ce7809a34c45aeb66a5ca64a4 (patch)
tree7c1bdb2891026c7593505d248a7a509e4ab05bc7 /src/runtime/memclr_s390x.s
parent9658b7ef83ae9c34f4a52680e7102d958577d5bb (diff)
downloadgo-e6f36f0cd5b45b9ce7809a34c45aeb66a5ca64a4.tar.gz
go-e6f36f0cd5b45b9ce7809a34c45aeb66a5ca64a4.zip
runtime: add s390x support (new files and lfstack_64bit.go modifications)
Change-Id: I51c0a332e3cbdab348564e5dcd27583e75e4b881 Reviewed-on: https://go-review.googlesource.com/20946 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/runtime/memclr_s390x.s')
-rw-r--r--src/runtime/memclr_s390x.s122
1 files changed, 122 insertions, 0 deletions
diff --git a/src/runtime/memclr_s390x.s b/src/runtime/memclr_s390x.s
new file mode 100644
index 0000000000..86eafec0a9
--- /dev/null
+++ b/src/runtime/memclr_s390x.s
@@ -0,0 +1,122 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+#include "textflag.h"
+
+// void runtime·memclr(void*, uintptr)
+TEXT runtime·memclr(SB),NOSPLIT|NOFRAME,$0-16
+ MOVD ptr+0(FP), R4
+ MOVD n+8(FP), R5
+
+start:
+ CMPBLE R5, $3, clear0to3
+ CMPBLE R5, $7, clear4to7
+ CMPBLE R5, $11, clear8to11
+ CMPBLE R5, $15, clear12to15
+ CMP R5, $32
+ BGE clearmt32
+ MOVD R0, 0(R4)
+ MOVD R0, 8(R4)
+ ADD $16, R4
+ SUB $16, R5
+ BR start
+
+clear0to3:
+ CMPBEQ R5, $0, done
+ CMPBNE R5, $1, clear2
+ MOVB R0, 0(R4)
+ RET
+clear2:
+ CMPBNE R5, $2, clear3
+ MOVH R0, 0(R4)
+ RET
+clear3:
+ MOVH R0, 0(R4)
+ MOVB R0, 2(R4)
+ RET
+
+clear4to7:
+ CMPBNE R5, $4, clear5
+ MOVW R0, 0(R4)
+ RET
+clear5:
+ CMPBNE R5, $5, clear6
+ MOVW R0, 0(R4)
+ MOVB R0, 4(R4)
+ RET
+clear6:
+ CMPBNE R5, $6, clear7
+ MOVW R0, 0(R4)
+ MOVH R0, 4(R4)
+ RET
+clear7:
+ MOVW R0, 0(R4)
+ MOVH R0, 4(R4)
+ MOVB R0, 6(R4)
+ RET
+
+clear8to11:
+ CMPBNE R5, $8, clear9
+ MOVD R0, 0(R4)
+ RET
+clear9:
+ CMPBNE R5, $9, clear10
+ MOVD R0, 0(R4)
+ MOVB R0, 8(R4)
+ RET
+clear10:
+ CMPBNE R5, $10, clear11
+ MOVD R0, 0(R4)
+ MOVH R0, 8(R4)
+ RET
+clear11:
+ MOVD R0, 0(R4)
+ MOVH R0, 8(R4)
+ MOVB R0, 10(R4)
+ RET
+
+clear12to15:
+ CMPBNE R5, $12, clear13
+ MOVD R0, 0(R4)
+ MOVW R0, 8(R4)
+ RET
+clear13:
+ CMPBNE R5, $13, clear14
+ MOVD R0, 0(R4)
+ MOVW R0, 8(R4)
+ MOVB R0, 12(R4)
+ RET
+clear14:
+ CMPBNE R5, $14, clear15
+ MOVD R0, 0(R4)
+ MOVW R0, 8(R4)
+ MOVH R0, 12(R4)
+ RET
+clear15:
+ MOVD R0, 0(R4)
+ MOVW R0, 8(R4)
+ MOVH R0, 12(R4)
+ MOVB R0, 14(R4)
+ RET
+
+clearmt32:
+ CMP R5, $256
+ BLT clearlt256
+ XC $256, 0(R4), 0(R4)
+ ADD $256, R4
+ ADD $-256, R5
+ BR clearmt32
+clearlt256:
+ CMPBEQ R5, $0, done
+ ADD $-1, R5
+ EXRL $runtime·memclr_s390x_exrl_xc(SB), R5
+done:
+ RET
+
+// DO NOT CALL - target for exrl (execute relative long) instruction.
+TEXT runtime·memclr_s390x_exrl_xc(SB),NOSPLIT|NOFRAME,$0-0
+ XC $1, 0(R4), 0(R4)
+ MOVD R0, 0(R0)
+ RET
+