blob: 6ed6227931e5c58919b029b7341dc1a031a7e259 [file] [log] [blame]
@
@ Copyright (C) 2009 The Android Open Source Project
@
@ Licensed under the Apache License, Version 2.0 (the "License");
@ you may not use this file except in compliance with the License.
@ You may obtain a copy of the License at
@
@ http://www.apache.org/licenses/LICENSE-2.0
@
@ Unless required by applicable law or agreed to in writing, software
@ distributed under the License is distributed on an "AS IS" BASIS,
@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ See the License for the specific language governing permissions and
@ limitations under the License.
@
#include "asm_common.S"
PRESERVE8
.fpu neon
.text
/* Input / output registers */
#define ref r0
#define fill r1
#define left r2
#define tmp2 r2
#define center r3
#define right r4
#define tmp1 r5
/* -- NEON registers -- */
#define qTmp0 Q0
#define qTmp1 Q1
#define dTmp0 D0
#define dTmp1 D1
#define dTmp2 D2
#define dTmp3 D3
/*
void h264bsdFillRow7(const u8 * ref, u8 * fill, i32 left, i32 center,
i32 right);
*/
function h264bsdFillRow7, export=1
PUSH {r4-r6,lr}
CMP left, #0
LDR right, [sp,#0x10]
BEQ switch_center
LDRB tmp1, [ref,#0]
loop_left:
SUBS left, left, #1
STRB tmp1, [fill], #1
BNE loop_left
switch_center:
ASR tmp2,center,#2
CMP tmp2,#9
ADDCC pc,pc,tmp2,LSL #2
B loop_center
B loop_center
B case_1
B case_2
B case_3
B case_4
B case_5
B case_6
B case_7
B case_8
case_8:
VLD1.8 {qTmp0, qTmp1}, [ref]!
SUB center, center, #32
VST1.8 {qTmp0}, [fill]!
VST1.8 {qTmp1}, [fill]!
B loop_center
case_7:
VLD1.8 {dTmp0,dTmp1,dTmp2}, [ref]!
SUB center, center, #28
LDR tmp2, [ref], #4
VST1.8 {dTmp0,dTmp1,dTmp2}, [fill]!
STR tmp2, [fill],#4
B loop_center
case_6:
VLD1.8 {dTmp0,dTmp1,dTmp2}, [ref]!
SUB center, center, #24
VST1.8 {dTmp0,dTmp1,dTmp2}, [fill]!
B loop_center
case_5:
VLD1.8 {qTmp0}, [ref]!
SUB center, center, #20
LDR tmp2, [ref], #4
VST1.8 {qTmp0}, [fill]!
STR tmp2, [fill],#4
B loop_center
case_4:
VLD1.8 {qTmp0}, [ref]!
SUB center, center, #16
VST1.8 {qTmp0}, [fill]!
B loop_center
case_3:
VLD1.8 {dTmp0}, [ref]!
SUB center, center, #12
LDR tmp2, [ref], #4
VST1.8 dTmp0, [fill]!
STR tmp2, [fill],#4
B loop_center
case_2:
LDR tmp2, [ref],#4
SUB center, center, #4
STR tmp2, [fill], #4
case_1:
LDR tmp2, [ref],#4
SUB center, center, #4
STR tmp2, [fill], #4
loop_center:
CMP center, #0
BEQ jump
LDRB tmp2, [ref], #1
SUB center, center, #1
STRB tmp2, [fill], #1
BNE loop_center
jump:
CMP right,#0
POPEQ {r4-r6,pc}
LDRB tmp2, [ref,#-1]
loop_right:
STRB tmp2, [fill], #1
SUBS right, right, #1
BNE loop_right
POP {r4-r6,pc}
endfunction