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 armVCM4P10_pSwitchTable4x4: 16 .word OMX_VC_4x4_VERT, OMX_VC_4x4_HOR 17 .word OMX_VC_4x4_DC, OMX_VC_4x4_DIAG_DL 18 .word OMX_VC_4x4_DIAG_DR, OMX_VC_4x4_VR 19 .word OMX_VC_4x4_HD, OMX_VC_4x4_VL 20 .word OMX_VC_4x4_HU 21 22 .text 23 24 .global omxVCM4P10_PredictIntra_4x4 25 .func omxVCM4P10_PredictIntra_4x4 26 omxVCM4P10_PredictIntra_4x4: 27 PUSH {r4-r12,lr} 28 VPUSH {d8-d12} 29 LDR r8, =armVCM4P10_pSwitchTable4x4 30 LDRD r6,r7,[sp,#0x58] 31 LDRD r4,r5,[sp,#0x50] 32 LDR pc,[r8,r6,LSL #2] 33 OMX_VC_4x4_HOR: 34 ADD r9,r0,r4 35 ADD r10,r4,r4 36 VLD1.8 {d0[]},[r0],r10 37 VLD1.8 {d1[]},[r9],r10 38 VLD1.8 {d2[]},[r0] 39 VLD1.8 {d3[]},[r9] 40 ADD r11,r3,r5 41 ADD r12,r5,r5 42 VST1.32 {d0[0]},[r3],r12 43 VST1.32 {d1[0]},[r11],r12 44 VST1.32 {d2[0]},[r3] 45 VST1.32 {d3[0]},[r11] 46 B L0x348 47 OMX_VC_4x4_VERT: 48 VLD1.32 {d0[0]},[r1] 49 ADD r11,r3,r5 50 ADD r12,r5,r5 51 L0x58: 52 VST1.32 {d0[0]},[r3],r12 53 VST1.32 {d0[0]},[r11],r12 54 VST1.32 {d0[0]},[r3] 55 VST1.32 {d0[0]},[r11] 56 B L0x348 57 OMX_VC_4x4_DC: 58 TST r7,#2 59 BEQ L0xdc 60 ADD r9,r0,r4 61 ADD r10,r4,r4 62 VLD1.8 {d0[0]},[r0],r10 63 VLD1.8 {d0[1]},[r9],r10 64 VLD1.8 {d0[2]},[r0] 65 VLD1.8 {d0[3]},[r9] 66 TST r7,#1 67 BEQ L0xbc 68 VLD1.32 {d0[1]},[r1] 69 MOV r0,#0 70 VPADDL.U8 d1,d0 71 VPADDL.U16 d1,d1 72 VPADDL.U32 d1,d1 73 VRSHR.U64 d1,d1,#3 74 ADD r11,r3,r5 75 ADD r12,r5,r5 76 VDUP.8 d0,d1[0] 77 B L0x58 78 L0xbc: 79 MOV r0,#0 80 VPADDL.U8 d1,d0 81 VPADDL.U16 d1,d1 82 VRSHR.U32 d1,d1,#2 83 ADD r11,r3,r5 84 ADD r12,r5,r5 85 VDUP.8 d0,d1[0] 86 B L0x58 87 L0xdc: 88 TST r7,#1 89 BEQ L0x108 90 VLD1.32 {d0[0]},[r1] 91 MOV r0,#0 92 VPADDL.U8 d1,d0 93 VPADDL.U16 d1,d1 94 VRSHR.U32 d1,d1,#2 95 ADD r11,r3,r5 96 ADD r12,r5,r5 97 VDUP.8 d0,d1[0] 98 B L0x58 99 L0x108: 100 VMOV.I8 d0,#0x80 101 MOV r0,#0 102 ADD r11,r3,r5 103 ADD r12,r5,r5 104 B L0x58 105 OMX_VC_4x4_DIAG_DL: 106 TST r7,#0x40 107 BEQ L0x138 108 VLD1.8 {d3},[r1] 109 VDUP.8 d2,d3[7] 110 VEXT.8 d4,d3,d2,#1 111 VEXT.8 d5,d3,d2,#2 112 B L0x14c 113 L0x138: 114 VLD1.32 {d0[1]},[r1] 115 VDUP.8 d2,d0[7] 116 VEXT.8 d3,d0,d2,#4 117 VEXT.8 d4,d0,d2,#5 118 VEXT.8 d5,d0,d2,#6 119 L0x14c: 120 VHADD.U8 d6,d3,d5 121 VRHADD.U8 d6,d6,d4 122 VST1.32 {d6[0]},[r3],r5 123 VEXT.8 d6,d6,d6,#1 124 VST1.32 {d6[0]},[r3],r5 125 VEXT.8 d6,d6,d6,#1 126 VST1.32 {d6[0]},[r3],r5 127 VEXT.8 d6,d6,d6,#1 128 VST1.32 {d6[0]},[r3] 129 B L0x348 130 OMX_VC_4x4_DIAG_DR: 131 VLD1.32 {d0[0]},[r1] 132 VLD1.8 {d1[7]},[r2] 133 ADD r9,r0,r4 134 ADD r10,r4,r4 135 ADD r1,r3,r5 136 VLD1.8 {d1[6]},[r0],r10 137 VLD1.8 {d1[5]},[r9],r10 138 VLD1.8 {d1[4]},[r0] 139 VLD1.8 {d1[3]},[r9] 140 VEXT.8 d3,d1,d0,#3 141 ADD r4,r1,r5 142 VEXT.8 d4,d1,d0,#4 143 ADD r6,r4,r5 144 VEXT.8 d5,d1,d0,#5 145 VHADD.U8 d6,d3,d5 146 VRHADD.U8 d6,d6,d4 147 VST1.32 {d6[0]},[r6] 148 VEXT.8 d6,d6,d6,#1 149 VST1.32 {d6[0]},[r4] 150 VEXT.8 d6,d6,d6,#1 151 VST1.32 {d6[0]},[r1] 152 VEXT.8 d6,d6,d6,#1 153 VST1.32 {d6[0]},[r3] 154 B L0x348 155 OMX_VC_4x4_VR: 156 VLD1.32 {d0[0]},[r1] 157 VLD1.8 {d0[7]},[r2] 158 VLD1.8 {d1[7]},[r0],r4 159 VLD1.8 {d2[7]},[r0],r4 160 VLD1.8 {d1[6]},[r0] 161 VEXT.8 d12,d0,d0,#7 162 VEXT.8 d3,d1,d12,#6 163 VEXT.8 d4,d2,d12,#7 164 VEXT.8 d5,d1,d0,#7 165 VEXT.8 d6,d2,d0,#7 166 VEXT.8 d11,d1,d12,#7 167 VHADD.U8 d8,d6,d12 168 VRHADD.U8 d8,d8,d11 169 VHADD.U8 d7,d3,d5 170 VRHADD.U8 d7,d7,d4 171 VEXT.8 d10,d8,d8,#1 172 ADD r11,r3,r5 173 ADD r12,r5,r5 174 VEXT.8 d9,d7,d7,#1 175 VST1.32 {d10[0]},[r3],r12 176 VST1.32 {d9[0]},[r11],r12 177 VST1.32 {d8[0]},[r3],r12 178 VST1.32 {d7[0]},[r11] 179 B L0x348 180 OMX_VC_4x4_HD: 181 VLD1.8 {d0},[r1] 182 VLD1.8 {d1[7]},[r2] 183 ADD r9,r0,r4 184 ADD r10,r4,r4 185 VLD1.8 {d1[6]},[r0],r10 186 VLD1.8 {d1[5]},[r9],r10 187 VLD1.8 {d1[4]},[r0] 188 VLD1.8 {d1[3]},[r9] 189 VEXT.8 d3,d1,d0,#3 190 VEXT.8 d4,d1,d0,#2 191 VEXT.8 d5,d1,d0,#1 192 VHADD.U8 d7,d3,d5 193 VRHADD.U8 d7,d7,d4 194 VRHADD.U8 d8,d4,d3 195 VSHL.I64 d8,d8,#24 196 VSHL.I64 d6,d7,#16 197 VZIP.8 d8,d6 198 VEXT.8 d7,d7,d7,#6 199 VEXT.8 d8,d6,d7,#2 200 ADD r11,r3,r5 201 ADD r12,r5,r5 202 VST1.32 {d8[1]},[r3],r12 203 VST1.32 {d6[1]},[r11],r12 204 VST1.32 {d8[0]},[r3] 205 VST1.32 {d6[0]},[r11] 206 B L0x348 207 OMX_VC_4x4_VL: 208 TST r7,#0x40 209 BEQ L0x2b4 210 VLD1.8 {d3},[r1] 211 VEXT.8 d4,d3,d3,#1 212 VEXT.8 d5,d4,d4,#1 213 B L0x2c8 214 L0x2b4: 215 VLD1.32 {d0[1]},[r1] 216 VDUP.8 d2,d0[7] 217 VEXT.8 d3,d0,d2,#4 218 VEXT.8 d4,d0,d2,#5 219 VEXT.8 d5,d0,d2,#6 220 L0x2c8: 221 VRHADD.U8 d7,d4,d3 222 VHADD.U8 d10,d3,d5 223 VRHADD.U8 d10,d10,d4 224 VEXT.8 d8,d7,d7,#1 225 ADD r11,r3,r5 226 ADD r12,r5,r5 227 VEXT.8 d9,d10,d8,#1 228 VST1.32 {d7[0]},[r3],r12 229 VST1.32 {d10[0]},[r11],r12 230 VST1.32 {d8[0]},[r3] 231 VST1.32 {d9[0]},[r11] 232 B L0x348 233 OMX_VC_4x4_HU: 234 ADD r9,r0,r4 235 ADD r10,r4,r4 236 VLD1.8 {d1[4]},[r0],r10 237 VLD1.8 {d1[5]},[r9],r10 238 VLD1.8 {d1[6]},[r0] 239 VLD1.8 {d1[7]},[r9] 240 VDUP.8 d2,d1[7] 241 VEXT.8 d3,d1,d2,#4 242 VEXT.8 d4,d1,d2,#5 243 VEXT.8 d5,d1,d2,#6 244 VHADD.U8 d7,d3,d5 245 VRHADD.U8 d7,d7,d4 246 VRHADD.U8 d8,d4,d3 247 VZIP.8 d8,d7 248 VST1.32 {d8[0]},[r3],r5 249 VEXT.8 d8,d8,d8,#2 250 VST1.32 {d8[0]},[r3],r5 251 VEXT.8 d8,d8,d8,#2 252 VST1.32 {d8[0]},[r3],r5 253 VST1.32 {d7[0]},[r3] 254 L0x348: 255 MOV r0,#0 256 VPOP {d8-d12} 257 POP {r4-r12,pc} 258 .endfunc 259 260 .end 261 262