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 .section .rodata 12 .align 4 13 14 armVCM4P10_pIndexTable8x8: 15 .word OMX_VC_CHROMA_DC, OMX_VC_CHROMA_HOR 16 .word OMX_VC_CHROMA_VERT, OMX_VC_CHROMA_PLANE 17 18 armVCM4P10_MultiplierTableChroma8x8: 19 .hword 3, 2, 1,4 20 .hword -3,-2,-1,0 21 .hword 1, 2, 3,4 22 23 24 .text 25 .global omxVCM4P10_PredictIntraChroma_8x8 26 .func omxVCM4P10_PredictIntraChroma_8x8 27 omxVCM4P10_PredictIntraChroma_8x8: 28 PUSH {r4-r10,lr} 29 VPUSH {d8-d15} 30 LDR r8, =armVCM4P10_pIndexTable8x8 31 LDR r6,[sp,#0x68] 32 LDR r4,[sp,#0x60] 33 LDR r5,[sp,#0x64] 34 LDR r7,[sp,#0x6c] 35 LDR pc,[r8,r6,LSL #2] 36 OMX_VC_CHROMA_DC: 37 TST r7,#2 38 BEQ L0xe8 39 ADD r9,r0,r4 40 ADD r10,r4,r4 41 VLD1.8 {d1[0]},[r0],r10 42 VLD1.8 {d1[1]},[r9],r10 43 VLD1.8 {d1[2]},[r0],r10 44 VLD1.8 {d1[3]},[r9],r10 45 VLD1.8 {d1[4]},[r0],r10 46 VLD1.8 {d1[5]},[r9],r10 47 VLD1.8 {d1[6]},[r0],r10 48 VLD1.8 {d1[7]},[r9] 49 TST r7,#1 50 BEQ L0xcc 51 VLD1.8 {d0},[r1] 52 MOV r0,#0 53 VPADDL.U8 d2,d0 54 VPADDL.U16 d3,d2 55 VPADDL.U8 d2,d1 56 VPADDL.U16 d1,d2 57 VADD.I32 d2,d3,d1 58 VRSHR.U32 d2,d2,#3 59 VRSHR.U32 d3,d3,#2 60 VRSHR.U32 d1,d1,#2 61 VMOV.I8 d5,#0xc 62 VMOV.I8 d6,#0x4 63 VSHL.I64 d5,d5,#32 64 VSHR.U64 d6,d6,#32 65 VADD.I8 d6,d6,d5 66 VTBL.8 d0,{d2-d3},d5 67 VTBL.8 d4,{d1-d2},d6 68 L0x9c: 69 ADD r9,r3,r5 70 ADD r10,r5,r5 71 VST1.8 {d0},[r3],r10 72 VST1.8 {d0},[r9],r10 73 VST1.8 {d0},[r3],r10 74 VST1.8 {d0},[r9],r10 75 VST1.8 {d4},[r3],r10 76 VST1.8 {d4},[r9],r10 77 VST1.8 {d4},[r3],r10 78 VST1.8 {d4},[r9] 79 VPOP {d8-d15} 80 POP {r4-r10,pc} 81 L0xcc: 82 MOV r0,#0 83 VPADDL.U8 d2,d1 84 VPADDL.U16 d1,d2 85 VRSHR.U32 d1,d1,#2 86 VDUP.8 d0,d1[0] 87 VDUP.8 d4,d1[4] 88 B L0x9c 89 L0xe8: 90 TST r7,#1 91 BEQ L0x114 92 VLD1.8 {d0},[r1] 93 MOV r0,#0 94 VPADDL.U8 d2,d0 95 VPADDL.U16 d3,d2 96 VRSHR.U32 d3,d3,#2 97 VMOV.I8 d5,#0x4 98 VSHL.I64 d5,d5,#32 99 VTBL.8 d0,{d3},d5 100 B L0x11c 101 L0x114: 102 VMOV.I8 d0,#0x80 103 MOV r0,#0 104 L0x11c: 105 ADD r9,r3,r5 106 ADD r10,r5,r5 107 VST1.8 {d0},[r3],r10 108 VST1.8 {d0},[r9],r10 109 VST1.8 {d0},[r3],r10 110 VST1.8 {d0},[r9],r10 111 VST1.8 {d0},[r3],r10 112 VST1.8 {d0},[r9],r10 113 VST1.8 {d0},[r3],r10 114 VST1.8 {d0},[r9] 115 VPOP {d8-d15} 116 POP {r4-r10,pc} 117 OMX_VC_CHROMA_VERT: 118 VLD1.8 {d0},[r1] 119 MOV r0,#0 120 B L0x11c 121 OMX_VC_CHROMA_HOR: 122 ADD r9,r0,r4 123 ADD r10,r4,r4 124 VLD1.8 {d0[]},[r0],r10 125 VLD1.8 {d1[]},[r9],r10 126 VLD1.8 {d2[]},[r0],r10 127 VLD1.8 {d3[]},[r9],r10 128 VLD1.8 {d4[]},[r0],r10 129 VLD1.8 {d5[]},[r9],r10 130 VLD1.8 {d6[]},[r0],r10 131 VLD1.8 {d7[]},[r9] 132 B L0x28c 133 OMX_VC_CHROMA_PLANE: 134 ADD r9,r0,r4 135 ADD r10,r4,r4 136 VLD1.8 {d0},[r1] 137 VLD1.8 {d2[0]},[r2] 138 VLD1.8 {d1[0]},[r0],r10 139 VLD1.8 {d1[1]},[r9],r10 140 VLD1.8 {d1[2]},[r0],r10 141 VLD1.8 {d1[3]},[r9],r10 142 VLD1.8 {d1[4]},[r0],r10 143 VLD1.8 {d1[5]},[r9],r10 144 VLD1.8 {d1[6]},[r0],r10 145 VLD1.8 {d1[7]},[r9] 146 VREV64.8 d3,d0 147 VSUBL.U8 q3,d3,d2 148 VSHR.U64 d3,d3,#8 149 VSUBL.U8 q2,d3,d0 150 VREV64.8 d3,d1 151 VSUBL.U8 q7,d3,d2 152 VSHR.U64 d3,d3,#8 153 VSUBL.U8 q6,d3,d1 154 LDR r2, =armVCM4P10_MultiplierTableChroma8x8 155 VSHL.I64 d4,d4,#16 156 VEXT.8 d9,d4,d6,#2 157 VLD1.16 {d10},[r2]! 158 VSHL.I64 d12,d12,#16 159 VEXT.8 d16,d12,d14,#2 160 VMUL.I16 d11,d9,d10 161 VMUL.I16 d3,d16,d10 162 VPADD.I16 d3,d11,d3 163 VPADDL.S16 d3,d3 164 VSHL.I32 d2,d3,#4 165 VADD.I32 d3,d3,d2 166 VLD1.16 {d10,d11},[r2] 167 VRSHR.S32 d3,d3,#5 168 VADDL.U8 q0,d0,d1 169 VDUP.16 q0,d1[3] 170 VSHL.I16 q0,q0,#4 171 VDUP.16 q2,d3[0] 172 VDUP.16 q3,d3[2] 173 VMUL.I16 q2,q2,q5 174 VMUL.I16 q3,q3,q5 175 VADD.I16 q2,q2,q0 176 VDUP.16 q0,d6[0] 177 VDUP.16 q1,d6[1] 178 VDUP.16 q4,d6[2] 179 VDUP.16 q5,d6[3] 180 VDUP.16 q6,d7[0] 181 VDUP.16 q7,d7[1] 182 VDUP.16 q8,d7[2] 183 VDUP.16 q9,d7[3] 184 VADD.I16 q0,q2,q0 185 VADD.I16 q1,q2,q1 186 VADD.I16 q4,q2,q4 187 VADD.I16 q5,q2,q5 188 VADD.I16 q6,q2,q6 189 VADD.I16 q7,q2,q7 190 VADD.I16 q8,q2,q8 191 VADD.I16 q9,q2,q9 192 VQRSHRUN.S16 d0,q0,#5 193 VQRSHRUN.S16 d1,q1,#5 194 VQRSHRUN.S16 d2,q4,#5 195 VQRSHRUN.S16 d3,q5,#5 196 VQRSHRUN.S16 d4,q6,#5 197 VQRSHRUN.S16 d5,q7,#5 198 VQRSHRUN.S16 d6,q8,#5 199 VQRSHRUN.S16 d7,q9,#5 200 L0x28c: 201 ADD r9,r3,r5 202 ADD r10,r5,r5 203 VST1.8 {d0},[r3],r10 204 VST1.8 {d1},[r9],r10 205 VST1.8 {d2},[r3],r10 206 VST1.8 {d3},[r9],r10 207 VST1.8 {d4},[r3],r10 208 VST1.8 {d5},[r9],r10 209 VST1.8 {d6},[r3],r10 210 VST1.8 {d7},[r9] 211 MOV r0,#0 212 VPOP {d8-d15} 213 POP {r4-r10,pc} 214 .endfunc 215 216 .end 217 218