diff options
author | Michael Munday <munday@ca.ibm.com> | 2016-03-18 19:09:39 -0400 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@golang.org> | 2016-04-07 18:56:54 +0000 |
commit | e6f36f0cd5b45b9ce7809a34c45aeb66a5ca64a4 (patch) | |
tree | 7c1bdb2891026c7593505d248a7a509e4ab05bc7 /src/runtime/memclr_s390x.s | |
parent | 9658b7ef83ae9c34f4a52680e7102d958577d5bb (diff) | |
download | go-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.s | 122 |
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 + |