; ; 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. ; REQUIRE8 PRESERVE8 AREA |.text|, CODE EXPORT h264bsdFillRow7 ; Input / output registers ref RN 0 fill RN 1 left RN 2 tmp2 RN 2 center RN 3 right RN 4 tmp1 RN 5 ; -- NEON registers -- qTmp0 QN Q0.U8 qTmp1 QN Q1.U8 dTmp0 DN D0.U8 dTmp1 DN D1.U8 dTmp2 DN D2.U8 dTmp3 DN D3.U8 ;/*------------------------------------------------------------------------------ ; ; Function: h264bsdFillRow7 ; ; Functional description: ; ; Inputs: ; ; Outputs: ; ; Returns: ; ;------------------------------------------------------------------------------*/ h264bsdFillRow7 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 ; LDR tmp2, [ref], #4 ; SUB center, center, #4 ; STR tmp2, [fill], #4 ;case_7 ; LDR tmp2, [ref], #4 ; SUB center, center, #4 ; STR tmp2, [fill], #4 ;case_6 ; LDR tmp2, [ref], #4 ; SUB center, center, #4 ; STR tmp2, [fill],#4 ;case_5 ; LDR tmp2, [ref], #4 ; SUB center, center, #4 ; STR tmp2, [fill],#4 ;case_4 ; LDR tmp2, [ref],#4 ; SUB center, center, #4 ; STR tmp2, [fill], #4 ;case_3 ; LDR tmp2, [ref],#4 ; SUB center, center, #4 ; STR tmp2, [fill], #4 ;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 case_8 VLD1 {qTmp0, qTmp1}, [ref]! SUB center, center, #32 VST1 qTmp0, [fill]! VST1 qTmp1, [fill]! B loop_center case_7 VLD1 {dTmp0,dTmp1,dTmp2}, [ref]! SUB center, center, #28 LDR tmp2, [ref], #4 VST1 {dTmp0,dTmp1,dTmp2}, [fill]! STR tmp2, [fill],#4 B loop_center case_6 VLD1 {dTmp0,dTmp1,dTmp2}, [ref]! SUB center, center, #24 VST1 {dTmp0,dTmp1,dTmp2}, [fill]! B loop_center case_5 VLD1 qTmp0, [ref]! SUB center, center, #20 LDR tmp2, [ref], #4 VST1 qTmp0, [fill]! STR tmp2, [fill],#4 B loop_center case_4 VLD1 qTmp0, [ref]! SUB center, center, #16 VST1 qTmp0, [fill]! B loop_center case_3 VLD1 dTmp0, [ref]! SUB center, center, #12 LDR tmp2, [ref], #4 VST1 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 LDRBNE tmp2, [ref], #1 SUBNE center, center, #1 STRBNE tmp2, [fill], #1 BNE loop_center 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} END