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