chacha20poly1305: remove usages of BYTE instr
We have had VBROADCASTI128 since at least Go 1.11, so no need to use BYTE instructions. Change-Id: I297bbc636320ae830f6e8f83eb174efe8251a9a3 Reviewed-on: https://go-review.googlesource.com/c/crypto/+/672838 Reviewed-by: Daniel McCarney <daniel@binaryparadox.net> Auto-Submit: Roland Shoemaker <roland@golang.org> LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
committed by
Gopher Robot
parent
7ee59707ff
commit
a749d17980
@@ -88,11 +88,6 @@ func main() {
|
||||
removePeskyUnicodeDot(internalFunctions, "../chacha20poly1305_amd64.s")
|
||||
}
|
||||
|
||||
// Utility function to emit BYTE instruction
|
||||
func BYTE(u8 U8) {
|
||||
Instruction(&ir.Instruction{Opcode: "BYTE", Operands: []Op{u8}})
|
||||
}
|
||||
|
||||
func chachaQR_AVX2(A, B, C, D, T VecPhysical) {
|
||||
VPADDD(B, A, A)
|
||||
VPXOR(A, D, D)
|
||||
@@ -373,38 +368,6 @@ func openSSETail16Store() {
|
||||
JMP(LabelRef("openSSEFinalize"))
|
||||
}
|
||||
|
||||
// Functions to emit AVX instructions via BYTE directive
|
||||
|
||||
// broadcasti128 16(r8), ymm14
|
||||
func VBROADCASTI128_16_R8_YMM14() {
|
||||
BYTE(U8(0xc4))
|
||||
BYTE(U8(0x42))
|
||||
BYTE(U8(0x7d))
|
||||
BYTE(U8(0x5a))
|
||||
BYTE(U8(0x70))
|
||||
BYTE(U8(0x10))
|
||||
}
|
||||
|
||||
// broadcasti128 32(r8), ymm12
|
||||
func VBROADCASTI128_32_R8_YMM12() {
|
||||
BYTE(U8(0xc4))
|
||||
BYTE(U8(0x42))
|
||||
BYTE(U8(0x7d))
|
||||
BYTE(U8(0x5a))
|
||||
BYTE(U8(0x60))
|
||||
BYTE(U8(0x20))
|
||||
}
|
||||
|
||||
// broadcasti128 48(r8), ymm4
|
||||
func VBROADCASTI128_48_R8_YMM4() {
|
||||
BYTE(U8(0xc4))
|
||||
BYTE(U8(0xc2))
|
||||
BYTE(U8(0x7d))
|
||||
BYTE(U8(0x5a))
|
||||
BYTE(U8(0x60))
|
||||
BYTE(U8(0x30))
|
||||
}
|
||||
|
||||
// Implements the following function signature:
|
||||
//
|
||||
// func chacha20Poly1305Open(dst []byte, key []uint32, src []byte, ad []byte) bool
|
||||
@@ -427,9 +390,9 @@ func chacha20Poly1305Open() {
|
||||
VZEROUPPER()
|
||||
chacha20Constants := chacha20Constants_DATA()
|
||||
VMOVDQU(chacha20Constants, AA0)
|
||||
VBROADCASTI128_16_R8_YMM14()
|
||||
VBROADCASTI128_32_R8_YMM12()
|
||||
VBROADCASTI128_48_R8_YMM4()
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(16), BB0)
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(32), CC0)
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(48), DD0)
|
||||
avx2InitMask := avx2InitMask_DATA()
|
||||
VPADDD(avx2InitMask, DD0, DD0)
|
||||
|
||||
@@ -1853,9 +1816,9 @@ func chacha20Poly1305Seal() {
|
||||
VZEROUPPER()
|
||||
chacha20Constants := chacha20Constants_DATA()
|
||||
VMOVDQU(chacha20Constants, AA0)
|
||||
VBROADCASTI128_16_R8_YMM14()
|
||||
VBROADCASTI128_32_R8_YMM12()
|
||||
VBROADCASTI128_48_R8_YMM4()
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(16), BB0)
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(32), CC0)
|
||||
VBROADCASTI128(Mem{Base: R8}.Offset(48), DD0)
|
||||
avx2InitMask := avx2InitMask_DATA()
|
||||
VPADDD(avx2InitMask, DD0, DD0)
|
||||
|
||||
|
||||
@@ -171,35 +171,20 @@ hashADDone:
|
||||
// Requires: AVX, AVX2, BMI2, CMOV, SSE2
|
||||
TEXT ·chacha20Poly1305Open(SB), $288-97
|
||||
// For aligned stack access
|
||||
MOVQ SP, BP
|
||||
ADDQ $0x20, BP
|
||||
ANDQ $-32, BP
|
||||
MOVQ dst_base+0(FP), DI
|
||||
MOVQ key_base+24(FP), R8
|
||||
MOVQ src_base+48(FP), SI
|
||||
MOVQ src_len+56(FP), BX
|
||||
MOVQ ad_base+72(FP), CX
|
||||
MOVQ SP, BP
|
||||
ADDQ $0x20, BP
|
||||
ANDQ $-32, BP
|
||||
MOVQ dst_base+0(FP), DI
|
||||
MOVQ key_base+24(FP), R8
|
||||
MOVQ src_base+48(FP), SI
|
||||
MOVQ src_len+56(FP), BX
|
||||
MOVQ ad_base+72(FP), CX
|
||||
VZEROUPPER
|
||||
VMOVDQU ·chacha20Constants<>+0(SB), Y0
|
||||
BYTE $0xc4
|
||||
BYTE $0x42
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x70
|
||||
BYTE $0x10
|
||||
BYTE $0xc4
|
||||
BYTE $0x42
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x60
|
||||
BYTE $0x20
|
||||
BYTE $0xc4
|
||||
BYTE $0xc2
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x60
|
||||
BYTE $0x30
|
||||
VPADDD ·avx2InitMask<>+0(SB), Y4, Y4
|
||||
VMOVDQU ·chacha20Constants<>+0(SB), Y0
|
||||
VBROADCASTI128 16(R8), Y14
|
||||
VBROADCASTI128 32(R8), Y12
|
||||
VBROADCASTI128 48(R8), Y4
|
||||
VPADDD ·avx2InitMask<>+0(SB), Y4, Y4
|
||||
|
||||
// Special optimization, for very short buffers
|
||||
CMPQ BX, $0xc0
|
||||
@@ -2488,35 +2473,20 @@ GLOBL ·andMask<>(SB), RODATA|NOPTR, $240
|
||||
// func chacha20Poly1305Seal(dst []byte, key []uint32, src []byte, ad []byte)
|
||||
// Requires: AVX, AVX2, BMI2, CMOV, SSE2
|
||||
TEXT ·chacha20Poly1305Seal(SB), $288-96
|
||||
MOVQ SP, BP
|
||||
ADDQ $0x20, BP
|
||||
ANDQ $-32, BP
|
||||
MOVQ dst_base+0(FP), DI
|
||||
MOVQ key_base+24(FP), R8
|
||||
MOVQ src_base+48(FP), SI
|
||||
MOVQ src_len+56(FP), BX
|
||||
MOVQ ad_base+72(FP), CX
|
||||
MOVQ SP, BP
|
||||
ADDQ $0x20, BP
|
||||
ANDQ $-32, BP
|
||||
MOVQ dst_base+0(FP), DI
|
||||
MOVQ key_base+24(FP), R8
|
||||
MOVQ src_base+48(FP), SI
|
||||
MOVQ src_len+56(FP), BX
|
||||
MOVQ ad_base+72(FP), CX
|
||||
VZEROUPPER
|
||||
VMOVDQU ·chacha20Constants<>+0(SB), Y0
|
||||
BYTE $0xc4
|
||||
BYTE $0x42
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x70
|
||||
BYTE $0x10
|
||||
BYTE $0xc4
|
||||
BYTE $0x42
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x60
|
||||
BYTE $0x20
|
||||
BYTE $0xc4
|
||||
BYTE $0xc2
|
||||
BYTE $0x7d
|
||||
BYTE $0x5a
|
||||
BYTE $0x60
|
||||
BYTE $0x30
|
||||
VPADDD ·avx2InitMask<>+0(SB), Y4, Y4
|
||||
VMOVDQU ·chacha20Constants<>+0(SB), Y0
|
||||
VBROADCASTI128 16(R8), Y14
|
||||
VBROADCASTI128 32(R8), Y12
|
||||
VBROADCASTI128 48(R8), Y4
|
||||
VPADDD ·avx2InitMask<>+0(SB), Y4, Y4
|
||||
|
||||
// Special optimizations, for very short buffers
|
||||
CMPQ BX, $0x000000c0
|
||||
|
||||
Reference in New Issue
Block a user