1;// 2;// Copyright (C) 2007-2008 ARM Limited 3;// 4;// Licensed under the Apache License, Version 2.0 (the "License"); 5;// you may not use this file except in compliance with the License. 6;// You may obtain a copy of the License at 7;// 8;// http://www.apache.org/licenses/LICENSE-2.0 9;// 10;// Unless required by applicable law or agreed to in writing, software 11;// distributed under the License is distributed on an "AS IS" BASIS, 12;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13;// See the License for the specific language governing permissions and 14;// limitations under the License. 15;// 16/* 17 * 18 */ 19 20 .eabi_attribute 24, 1 21 .eabi_attribute 25, 1 22 23 .arm 24 .fpu neon 25 26 .text 27 .align 4 28;//------------------------------------------------------- 29;// This table for implementing switch case of C in asm by 30;// the mehtod of two levels of indexing. 31;//------------------------------------------------------- 32 33armVCM4P10_pIndexTable16x16: 34 .word OMX_VC_16X16_VERT-(P0+8), OMX_VC_16X16_HOR-(P0+8) 35 .word OMX_VC_16X16_DC-(P0+8), OMX_VC_16X16_PLANE-(P0+8) 36 37 38armVCM4P10_MultiplierTable16x16: 39 .hword 7, 6, 5, 4, 3, 2, 1, 8 40 .hword 0, 1, 2, 3, 4, 5, 6, 7 41 .hword 8, 9, 10, 11, 12, 13, 14, 15 42 43 44 .global omxVCM4P10_PredictIntra_16x16 45omxVCM4P10_PredictIntra_16x16: 46 PUSH {r4-r12,lr} 47 VPUSH {d8-d15} 48 ADR r9, armVCM4P10_pIndexTable16x16 49 LDR r6,[sp,#0x70] 50 LDR r4,[sp,#0x68] 51 LDR r5,[sp,#0x6c] 52 LDR r7,[sp,#0x74] 53 MOV r12,#0x10 54 LDR r9,[r9,r6,LSL #2] 55P0: ADD pc,r9 56OMX_VC_16X16_VERT: 57 VLD1.8 {d0,d1},[r1] 58 ADD r8,r3,r5 59 ADD r10,r5,r5 60 VST1.8 {d0,d1},[r3],r10 61 VST1.8 {d0,d1},[r8],r10 62 VST1.8 {d0,d1},[r3],r10 63 VST1.8 {d0,d1},[r8],r10 64 VST1.8 {d0,d1},[r3],r10 65 VST1.8 {d0,d1},[r8],r10 66 VST1.8 {d0,d1},[r3],r10 67 VST1.8 {d0,d1},[r8],r10 68 VST1.8 {d0,d1},[r3],r10 69 VST1.8 {d0,d1},[r8],r10 70 VST1.8 {d0,d1},[r3],r10 71 VST1.8 {d0,d1},[r8],r10 72 VST1.8 {d0,d1},[r3],r10 73 VST1.8 {d0,d1},[r8],r10 74 VST1.8 {d0,d1},[r3] 75 VST1.8 {d0,d1},[r8] 76 MOV r0,#0 77 VPOP {d8-d15} 78 POP {r4-r12,pc} 79OMX_VC_16X16_HOR: 80 ADD r8,r0,r4 81 ADD r4,r4,r4 82 ADD r11,r3,r5 83 ADD r5,r5,r5 84L0x8c: 85 VLD1.8 {d2[],d3[]},[r0],r4 86 VLD1.8 {d0[],d1[]},[r8],r4 87 SUBS r12,r12,#8 88 VST1.8 {d2,d3},[r3],r5 89 VST1.8 {d0,d1},[r11],r5 90 VLD1.8 {d2[],d3[]},[r0],r4 91 VLD1.8 {d0[],d1[]},[r8],r4 92 VST1.8 {d2,d3},[r3],r5 93 VST1.8 {d0,d1},[r11],r5 94 VLD1.8 {d2[],d3[]},[r0],r4 95 VLD1.8 {d0[],d1[]},[r8],r4 96 VST1.8 {d2,d3},[r3],r5 97 VST1.8 {d0,d1},[r11],r5 98 VLD1.8 {d2[],d3[]},[r0],r4 99 VLD1.8 {d0[],d1[]},[r8],r4 100 VST1.8 {d2,d3},[r3],r5 101 VST1.8 {d0,d1},[r11],r5 102 BNE L0x8c 103 MOV r0,#0 104 VPOP {d8-d15} 105 POP {r4-r12,pc} 106OMX_VC_16X16_DC: 107 MOV r11,#0 108 TST r7,#2 109 BEQ L0x14c 110 ADD r8,r0,r4 111 ADD r10,r4,r4 112 VLD1.8 {d2[0]},[r0],r10 113 VLD1.8 {d2[1]},[r8],r10 114 VLD1.8 {d2[2]},[r0],r10 115 VLD1.8 {d2[3]},[r8],r10 116 VLD1.8 {d2[4]},[r0],r10 117 VLD1.8 {d2[5]},[r8],r10 118 VLD1.8 {d2[6]},[r0],r10 119 VLD1.8 {d2[7]},[r8],r10 120 VLD1.8 {d3[0]},[r0],r10 121 VLD1.8 {d3[1]},[r8],r10 122 VLD1.8 {d3[2]},[r0],r10 123 VLD1.8 {d3[3]},[r8],r10 124 VLD1.8 {d3[4]},[r0],r10 125 VLD1.8 {d3[5]},[r8],r10 126 VLD1.8 {d3[6]},[r0],r10 127 VLD1.8 {d3[7]},[r8] 128 VPADDL.U8 q0,q1 129 ADD r11,r11,#1 130 VPADD.I16 d0,d0,d1 131 VPADDL.U16 d0,d0 132 VPADDL.U32 d6,d0 133 VRSHR.U64 d8,d6,#4 134L0x14c: 135 TST r7,#1 136 BEQ L0x170 137 VLD1.8 {d0,d1},[r1] 138 ADD r11,r11,#1 139 VPADDL.U8 q0,q0 140 VPADD.I16 d0,d0,d1 141 VPADDL.U16 d0,d0 142 VPADDL.U32 d7,d0 143 VRSHR.U64 d8,d7,#4 144L0x170: 145 CMP r11,#2 146 BNE L0x180 147 VADD.I64 d8,d7,d6 148 VRSHR.U64 d8,d8,#5 149L0x180: 150 VDUP.8 q3,d8[0] 151 CMP r11,#0 152 ADD r8,r3,r5 153 ADD r10,r5,r5 154 BNE L0x198 155 VMOV.I8 q3,#0x80 156L0x198: 157 VST1.8 {d6,d7},[r3],r10 158 VST1.8 {d6,d7},[r8],r10 159 VST1.8 {d6,d7},[r3],r10 160 VST1.8 {d6,d7},[r8],r10 161 VST1.8 {d6,d7},[r3],r10 162 VST1.8 {d6,d7},[r8],r10 163 VST1.8 {d6,d7},[r3],r10 164 VST1.8 {d6,d7},[r8],r10 165 VST1.8 {d6,d7},[r3],r10 166 VST1.8 {d6,d7},[r8],r10 167 VST1.8 {d6,d7},[r3],r10 168 VST1.8 {d6,d7},[r8],r10 169 VST1.8 {d6,d7},[r3],r10 170 VST1.8 {d6,d7},[r8],r10 171 VST1.8 {d6,d7},[r3],r10 172 VST1.8 {d6,d7},[r8],r10 173 MOV r0,#0 174 VPOP {d8-d15} 175 POP {r4-r12,pc} 176OMX_VC_16X16_PLANE: 177 ADR r9, armVCM4P10_MultiplierTable16x16 178 VLD1.8 {d0,d1},[r1] 179 VLD1.8 {d4[0]},[r2] 180 ADD r8,r0,r4 181 ADD r10,r4,r4 182 VLD1.8 {d2[0]},[r0],r10 183 VLD1.8 {d2[1]},[r8],r10 184 VLD1.8 {d2[2]},[r0],r10 185 VLD1.8 {d2[3]},[r8],r10 186 VLD1.8 {d2[4]},[r0],r10 187 VLD1.8 {d2[5]},[r8],r10 188 VLD1.8 {d2[6]},[r0],r10 189 VLD1.8 {d2[7]},[r8],r10 190 VLD1.8 {d3[0]},[r0],r10 191 VLD1.8 {d3[1]},[r8],r10 192 VLD1.8 {d3[2]},[r0],r10 193 VLD1.8 {d3[3]},[r8],r10 194 VLD1.8 {d3[4]},[r0],r10 195 VLD1.8 {d3[5]},[r8],r10 196 VLD1.8 {d3[6]},[r0],r10 197 VLD1.8 {d3[7]},[r8] 198 VREV64.8 d5,d1 199 VSUBL.U8 q3,d5,d4 200 VSHR.U64 d5,d5,#8 201 VSUBL.U8 q4,d5,d0 202 VSHL.I64 d9,d9,#16 203 VEXT.8 d9,d9,d6,#2 204 VREV64.8 d12,d3 205 VSUBL.U8 q7,d12,d4 206 VSHR.U64 d12,d12,#8 207 VSUBL.U8 q8,d12,d2 208 VLD1.16 {d20,d21},[r9]! 209 VSHL.I64 d17,d17,#16 210 VEXT.8 d17,d17,d14,#2 211 VMULL.S16 q11,d8,d20 212 VMULL.S16 q12,d16,d20 213 VMLAL.S16 q11,d9,d21 214 VMLAL.S16 q12,d17,d21 215 VPADD.I32 d22,d23,d22 216 VPADD.I32 d23,d25,d24 217 VPADDL.S32 q11,q11 218 VSHL.I64 q12,q11,#2 219 VADD.I64 q11,q11,q12 220 VRSHR.S64 q11,q11,#6 221 VSHL.I64 q12,q11,#3 222 VSUB.I64 q12,q12,q11 223 VLD1.16 {d20,d21},[r9]! 224 VDUP.16 q6,d22[0] 225 VDUP.16 q7,d23[0] 226 VADDL.U8 q11,d1,d3 227 VSHL.I16 q11,q11,#4 228 VDUP.16 q11,d23[3] 229 VADD.I64 d1,d24,d25 230 VLD1.16 {d24,d25},[r9] 231 VDUP.16 q13,d1[0] 232 VSUB.I16 q13,q11,q13 233 VMUL.I16 q5,q6,q10 234 VMUL.I16 q6,q6,q12 235 VADD.I16 q0,q5,q13 236 VADD.I16 q1,q6,q13 237L0x2d4: 238 VQRSHRUN.S16 d6,q0,#5 239 VQRSHRUN.S16 d7,q1,#5 240 SUBS r12,r12,#1 241 VST1.8 {d6,d7},[r3],r5 242 VADD.I16 q0,q0,q7 243 VADD.I16 q1,q1,q7 244 BNE L0x2d4 245 MOV r0,#0 246 VPOP {d8-d15} 247 POP {r4-r12,pc} 248 249 .end 250 251