














	.file "umac-nh.asm"
	.fpu	neon

















	.text
	.align	3
	
.globl _nettle_umac_nh_neon
.type _nettle_umac_nh_neon,%function
_nettle_umac_nh_neon: 
	
	ands	r3, r2, #7
	and	r2, r2, #-8
	vld1.8	{d16}, [r2 :64]
	addne	r2, r2, #8
	addeq	r3, r3, #8

	
	lsl	r3, r3, #3
	neg	r3, r3

	
	vmov.i32 d20[0], r3
	vmov.32	 d21, d20
	add	r3, r3, #64
	
	vmov.i32 d18[0], r3
	vmov.32	 d19, d18

	vmov.i64 q11, #0

	vshl.u64 d16, d16, d20
.Loop:
	
	vld1.8 {q0, q1}, [r2 :64]!
	vshl.u64 q12, q0, q10
	vshl.u64 q13, q1, q10
	vshl.u64 q0, q0, q9
	vshl.u64 q1, q1, q9
	veor	d0, d0, d16
	veor	d1, d1, d24
	veor	d2, d2, d25
	veor	d3, d3, d26
	vmov	d16, d27

	vld1.i32 {q14, q15}, [r0]!
	vadd.i32 q0, q0, q14
	vadd.i32 q1, q1, q15
	subs	r1, r1, #32
	vmlal.u32 q11, d0, d2
	vmlal.u32 q11, d1, d3
	bhi	.Loop

	vadd.i64 d22, d22, d23
	
	vmov	r0, r1, d22

	bx	lr
.size _nettle_umac_nh_neon, . - _nettle_umac_nh_neon



.section .note.GNU-stack,"",%progbits
