140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger/***************************************************************************
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright (c) 2009,2010, Code Aurora Forum. All rights reserved.
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger ***************************************************************************/
740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.code 32
940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.fpu neon
1040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.align 4
1140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.globl	memset32_neon
1240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.func
1340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
1440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	/* r0 = buffer, r1 = value, r2 = times to write */
1540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_neon:
1640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #1
1740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	streq		r1, [r0], #4
1840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bxeq		lr
1940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
2040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #4
2140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bgt		memset32_neon_start
2240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #0
2340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bxeq		lr
2440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_neon_small:
2540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0], #4
2640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	subs		r2, r2, #1
2740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bne		memset32_neon_small
2840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bx		lr
2940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_neon_start:
3040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #16
3140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	blt		memset32_dropthru
3240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vdup.32		q0, r1
3340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vmov		q1, q0
3440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #32
3540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	blt		memset32_16
3640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #64
3740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	blt		memset32_32
3840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	cmp		r2, #128
3940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	blt		memset32_64
4040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_128:
4140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	movs		r12, r2, lsr #7
4240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_loop128:
4340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	subs		r12, r12, #1
4440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
4540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
4640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
4740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
4840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
4940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
5940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
6040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bne		memset32_loop128
6140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	ands		r2, r2, #0x7f
6240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bxeq		lr
6340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_64:
6440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	movs		r12, r2, lsr #6
6540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	beq		memset32_32
6640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
6740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
6840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
6940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
7040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
7140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
7240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
7340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
7440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	ands		r2, r2, #0x3f
7540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bxeq		lr
7640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_32:
7740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	movs		r12, r2, lsr #5
7840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	beq		memset32_16
7940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
8040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
8140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
8240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
8340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	ands		r2, r2, #0x1f
8440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bxeq		lr
8540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_16:
8640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	movs		r12, r2, lsr #4
8740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	beq		memset32_dropthru
8840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	and		r2, r2, #0xf
8940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
9040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	vst1.64		{q0, q1}, [r0]!
9140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenbergermemset32_dropthru:
9240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	rsb		r2, r2, #15
9340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	add		pc, pc, r2, lsl #2
9440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	nop
9540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #56]
9640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #52]
9740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #48]
9840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #44]
9940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #40]
10040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #36]
10140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #32]
10240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #28]
10340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #24]
10440528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #20]
10540528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #16]
10640528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #12]
10740528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #8]
10840528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #4]
10940528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	str		r1, [r0, #0]
11040528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	bx		lr
11140528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger
11240528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.endfunc
11340528743dbb9ce7f39f093e0cdc47849ac8887cfDerek Sollenberger	.end
114