X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=internal%2Fchacha20%2Fchacha_s390x.go;fp=internal%2Fchacha20%2Fchacha_s390x.go;h=aad645b44762d72752906a8b4aa9d013cdc74bd8;hb=4ca8b480da587d6e7b353158df61dff74dda14fb;hp=0000000000000000000000000000000000000000;hpb=688906139ffd4964719f575463d003b02f5bbe5b;p=govpn.git diff --git a/internal/chacha20/chacha_s390x.go b/internal/chacha20/chacha_s390x.go new file mode 100644 index 0000000..aad645b --- /dev/null +++ b/internal/chacha20/chacha_s390x.go @@ -0,0 +1,29 @@ +// Copyright 2018 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. + +// +build s390x,!gccgo,!appengine + +package chacha20 + +import ( + "golang.org/x/sys/cpu" +) + +var haveAsm = cpu.S390X.HasVX + +const bufSize = 256 + +// xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only +// be called when the vector facility is available. +// Implementation in asm_s390x.s. +//go:noescape +func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32, buf *[256]byte, len *int) + +func (c *Cipher) xorKeyStreamAsm(dst, src []byte) { + xorKeyStreamVX(dst, src, &c.key, &c.nonce, &c.counter, &c.buf, &c.len) +} + +// EXRL targets, DO NOT CALL! +func mvcSrcToBuf() +func mvcBufToDst()