Commit 6133b4ed authored by Andy Polyakov's avatar Andy Polyakov
Browse files

ARMv8 assembly pack: add OPENSSL_cleanse.

parent a7f9e0a4
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -245,7 +245,7 @@
    },
    aarch64_asm => {
	template	=> 1,
	cpuid_asm_src   => "armcap.c arm64cpuid.S mem_clr.c",
	cpuid_asm_src   => "armcap.c arm64cpuid.S",
	ec_asm_src      => "ecp_nistz256.c ecp_nistz256-armv8.S",
	bn_asm_src      => "bn_asm.c armv8-mont.S",
	aes_asm_src     => "aes_core.c aes_cbc.c aesv8-armx.S vpaes-armv8.S",
+31 −0
Original line number Diff line number Diff line
@@ -69,6 +69,37 @@ _armv8_pmull_probe:
	pmull	v0.1q, v0.1d, v0.1d
	ret
.size	_armv8_pmull_probe,.-_armv8_pmull_probe

.globl	OPENSSL_cleanse
.type	OPENSSL_cleanse,%function
.align	5
OPENSSL_cleanse:
	cbz	x1,.Lret	// len==0?
	cmp	x1,#15
	b.hi	.Lot		// len>15
	nop
.Little:
	strb	wzr,[x0],#1	// store byte-by-byte
	subs	x1,x1,#1
	b.ne	.Little
.Lret:	ret

.align	4
.Lot:	tst	x0,#7
	b.eq	.Laligned	// inp is aligned
	strb	wzr,[x0],#1	// store byte-by-byte
	sub	x1,x1,#1
	b	.Lot

.align	4
.Laligned:
	str	xzr,[x0],#8	// store word-by-word
	sub	x1,x1,#8
	tst	x1,#-8
	b.ne	.Laligned	// len>=8
	cbnz	x1,.Little	// len!=0?
	ret
.size	OPENSSL_cleanse,.-OPENSSL_cleanse
___

print $code;