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