From 7755a05209177e6f2d494a08a9b98b9b31d6ee8f Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Mon, 30 Jun 2025 16:14:39 -0700 Subject: [PATCH] Revert "crypto/internal/fips140/subtle: add assembly implementation of xorBytes for arm" This reverts commit de86d02c32f6690391ed79b99d0f763bb06606d5. Reason for revert: Causes unaligned access failures on some arm hardware Change-Id: Ie280d2c9441f584e2a621f929db5a2e1492bed09 Reviewed-on: https://go-review.googlesource.com/c/go/+/685137 Reviewed-by: Keith Randall LUCI-TryBot-Result: Go LUCI Reviewed-by: Julian Zhu Reviewed-by: David Chase --- src/crypto/internal/fips140/subtle/xor_arm.s | 149 ------------------ src/crypto/internal/fips140/subtle/xor_asm.go | 2 +- .../internal/fips140/subtle/xor_generic.go | 2 +- 3 files changed, 2 insertions(+), 151 deletions(-) delete mode 100644 src/crypto/internal/fips140/subtle/xor_arm.s diff --git a/src/crypto/internal/fips140/subtle/xor_arm.s b/src/crypto/internal/fips140/subtle/xor_arm.s deleted file mode 100644 index a9e4267a6b..0000000000 --- a/src/crypto/internal/fips140/subtle/xor_arm.s +++ /dev/null @@ -1,149 +0,0 @@ -// Copyright 2025 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. - -//go:build !purego - -#include "textflag.h" - -// func xorBytes(dst, a, b *byte, n int) -TEXT ·xorBytes(SB), NOSPLIT|NOFRAME, $0 - MOVW dst+0(FP), R0 - MOVW a+4(FP), R1 - MOVW b+8(FP), R2 - MOVW n+12(FP), R3 - -xor_32_check: - CMP $32, R3 - BLT xor_16_check -xor_32_loop: - MOVW (R1), R4 - MOVW 4(R1), R5 - MOVW 8(R1), R6 - MOVW (R2), R7 - MOVW 4(R2), R8 - MOVW 8(R2), R9 - EOR R4, R7 - EOR R5, R8 - EOR R6, R9 - MOVW R7, (R0) - MOVW R8, 4(R0) - MOVW R9, 8(R0) - - MOVW 12(R1), R4 - MOVW 16(R1), R5 - MOVW 20(R1), R6 - MOVW 12(R2), R7 - MOVW 16(R2), R8 - MOVW 20(R2), R9 - EOR R4, R7 - EOR R5, R8 - EOR R6, R9 - MOVW R7, 12(R0) - MOVW R8, 16(R0) - MOVW R9, 20(R0) - - MOVW 24(R1), R4 - MOVW 28(R1), R5 - MOVW 24(R2), R6 - MOVW 28(R2), R7 - EOR R4, R6 - EOR R5, R7 - MOVW R6, 24(R0) - MOVW R7, 28(R0) - - ADD $32, R1 - ADD $32, R2 - ADD $32, R0 - SUB $32, R3 - CMP $32, R3 - BGE xor_32_loop - CMP $0, R3 - BEQ end - -xor_16_check: - CMP $16, R3 - BLT xor_8_check -xor_16: - MOVW (R1), R4 - MOVW 4(R1), R5 - MOVW (R2), R6 - MOVW 4(R2), R7 - EOR R4, R6 - EOR R5, R7 - MOVW R6, (R0) - MOVW R7, 4(R0) - - MOVW 8(R1), R4 - MOVW 12(R1), R5 - MOVW 8(R2), R6 - MOVW 12(R2), R7 - EOR R4, R6 - EOR R5, R7 - MOVW R6, 8(R0) - MOVW R7, 12(R0) - ADD $16, R1 - ADD $16, R2 - ADD $16, R0 - SUB $16, R3 - CMP $0, R3 - BEQ end - -xor_8_check: - CMP $8, R3 - BLT xor_4_check -xor_8: - MOVW (R1), R4 - MOVW 4(R1), R5 - MOVW (R2), R6 - MOVW 4(R2), R7 - EOR R4, R6 - EOR R5, R7 - MOVW R6, (R0) - MOVW R7, 4(R0) - - ADD $8, R0 - ADD $8, R1 - ADD $8, R2 - SUB $8, R3 - CMP $0, R3 - BEQ end - -xor_4_check: - CMP $4, R3 - BLT xor_2_check -xor_4: - MOVW (R1), R4 - MOVW (R2), R5 - EOR R4, R5 - MOVW R5, (R0) - ADD $4, R1 - ADD $4, R2 - ADD $4, R0 - SUB $4, R3 - CMP $0, R3 - BEQ end - -xor_2_check: - CMP $2, R3 - BLT xor_1 -xor_2: - MOVH (R1), R4 - MOVH (R2), R5 - EOR R4, R5 - MOVH R5, (R0) - ADD $2, R1 - ADD $2, R2 - ADD $2, R0 - SUB $2, R3 - CMP $0, R3 - BEQ end - -xor_1: - MOVB (R1), R4 - MOVB (R2), R5 - EOR R4, R5 - MOVB R5, (R0) - -end: - RET diff --git a/src/crypto/internal/fips140/subtle/xor_asm.go b/src/crypto/internal/fips140/subtle/xor_asm.go index 00f3497a02..b07239da3e 100644 --- a/src/crypto/internal/fips140/subtle/xor_asm.go +++ b/src/crypto/internal/fips140/subtle/xor_asm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (amd64 || arm || arm64 || mips || mipsle || mips64 || mips64le || ppc64 || ppc64le || riscv64) && !purego +//go:build (amd64 || arm64 || mips || mipsle || mips64 || mips64le || ppc64 || ppc64le || riscv64) && !purego package subtle diff --git a/src/crypto/internal/fips140/subtle/xor_generic.go b/src/crypto/internal/fips140/subtle/xor_generic.go index 06d69ca91f..ed484bc630 100644 --- a/src/crypto/internal/fips140/subtle/xor_generic.go +++ b/src/crypto/internal/fips140/subtle/xor_generic.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!amd64 && !arm && !arm64 && !loong64 && !mips && !mipsle && !mips64 && !mips64le && !ppc64 && !ppc64le && !riscv64) || purego +//go:build (!amd64 && !arm64 && !loong64 && !mips && !mipsle && !mips64 && !mips64le && !ppc64 && !ppc64le && !riscv64) || purego package subtle -- 2.50.0