From 8dd112bcdc25174059e45e07517d9fc663123347 Mon Sep 17 00:00:00 2001 From: Michael Munday Date: Thu, 28 Feb 2019 04:13:53 -0500 Subject: [PATCH] internal/chacha20: use x/sys/cpu for s390x feature detection Use the recently added CPU feature detection API rather than custom assembly. This will need to be updated to use 'internal/cpu' when the package is revendored into std. Change-Id: Icf0f28236ca0c351c88035f36e5b9c29d4bc2ba7 Reviewed-on: https://go-review.googlesource.com/c/164383 Reviewed-by: Brad Fitzpatrick Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- internal/chacha20/chacha_s390x.go | 11 +++++------ internal/chacha20/chacha_s390x.s | 23 ----------------------- 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/internal/chacha20/chacha_s390x.go b/internal/chacha20/chacha_s390x.go index 0c1c671..aad645b 100644 --- a/internal/chacha20/chacha_s390x.go +++ b/internal/chacha20/chacha_s390x.go @@ -6,15 +6,14 @@ package chacha20 -var haveAsm = hasVectorFacility() +import ( + "golang.org/x/sys/cpu" +) + +var haveAsm = cpu.S390X.HasVX const bufSize = 256 -// hasVectorFacility reports whether the machine supports the vector -// facility (vx). -// Implementation in asm_s390x.s. -func hasVectorFacility() bool - // xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only // be called when the vector facility is available. // Implementation in asm_s390x.s. diff --git a/internal/chacha20/chacha_s390x.s b/internal/chacha20/chacha_s390x.s index 98427c5..57df404 100644 --- a/internal/chacha20/chacha_s390x.s +++ b/internal/chacha20/chacha_s390x.s @@ -258,26 +258,3 @@ tail: MOVD R8, R3 MOVD $0, R4 JMP continue - -// func hasVectorFacility() bool -TEXT ·hasVectorFacility(SB), NOSPLIT, $24-1 - MOVD $x-24(SP), R1 - XC $24, 0(R1), 0(R1) // clear the storage - MOVD $2, R0 // R0 is the number of double words stored -1 - WORD $0xB2B01000 // STFLE 0(R1) - XOR R0, R0 // reset the value of R0 - MOVBZ z-8(SP), R1 - AND $0x40, R1 - BEQ novector - -vectorinstalled: - // check if the vector instruction has been enabled - VLEIB $0, $0xF, V16 - VLGVB $0, V16, R1 - CMPBNE R1, $0xF, novector - MOVB $1, ret+0(FP) // have vx - RET - -novector: - MOVB $0, ret+0(FP) // no vx - RET