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