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 .text 12 13 .global armVCM4P10_DecodeCoeffsToPair 14 .func armVCM4P10_DecodeCoeffsToPair 15 armVCM4P10_DecodeCoeffsToPair: 16 PUSH {r4-r12,lr} 17 SUB sp,sp,#0x40 18 LDR r10,[r0,#0] 19 LDR r12,[r1,#0] 20 LDR r6, .LarmVCM4P10_CAVLCCoeffTokenTables 21 P0: ADD r6, pc 22 LDR r4,[sp,#0x68] 23 LDRB r9,[r10,#2] 24 LDRB r8,[r10,#1] 25 LDRB r11,[r10],#3 26 ADD r12,r12,#8 27 LDR r6,[r6,r4,LSL #2] 28 ORR r9,r9,r8,LSL #8 29 ORR r11,r9,r11,LSL #16 30 LSLS r8,r11,r12 31 MOVS r7,#0x1e 32 AND r7,r7,r8,LSR #27 33 SUBS r12,r12,#8 34 L0x44: 35 BCC L1 36 LDRB r8,[r10],#1 37 L1: 38 LDRH r7,[r6,r7] 39 ADDCC r12,r12,#8 40 ADD r12,r12,#4 41 ORRCS r11,r8,r11,LSL #8 42 LSRS r8,r7,#1 43 BCS L0x74 44 LSLS r8,r11,r12 45 SUBS r12,r12,#0xa 46 ADD r7,r7,r8,LSR #29 47 BIC r7,r7,#1 48 B L0x44 49 L0x74: 50 SUB r12,r12,r7,LSR #13 51 BIC r7,r8,#0xf000 52 LSRS r5,r7,#2 53 STRB r5,[r2,#0] 54 BEQ L0x344 55 CMP r7,#0x44 56 BGE L0x33c 57 STR r0,[sp,#0] 58 STR r1,[sp,#4] 59 STR r3,[sp,#8] 60 ANDS r1,r7,#3 61 ADD r2,sp,#0xc 62 BEQ L0xd8 63 MOV r0,r1 64 L0xac: 65 LSLS r7,r11,r12 66 SUBS r12,r12,#7 67 BCC L2 68 LDRB r8,[r10],#1 69 L2: 70 ADDCC r12,r12,#8 71 LSR r7,r7,#31 72 ORRCS r11,r8,r11,LSL #8 73 SUBS r0,r0,#1 74 MOV r8,#1 75 SUB r8,r8,r7,LSL #1 76 STRH r8,[r2],#2 77 BGT L0xac 78 L0xd8: 79 SUBS r0,r5,r1 80 BEQ L0x1b8 81 MOV r4,#1 82 CMP r5,#0xa 83 MOVLE r4,#0 84 CMP r1,#3 85 MOVLT r1,#4 86 MOVGE r1,#2 87 MOVGE r4,#0 88 L0xfc: 89 LSLS r7,r11,r12 90 CLZ r7,r7 91 ADD r12,r12,r7 92 SUBS r12,r12,#7 93 BCC L3 94 LDRB r8,[r10],#1 95 ORR r11,r8,r11,LSL #8 96 SUBS r12,r12,#8 97 BCC L3 98 LDRB r8,[r10],#1 99 L3: 100 ADDCC r12,r12,#8 101 ORRCS r11,r8,r11,LSL #8 102 CMP r7,#0x10 103 BGE L0x33c 104 MOVS lr,r4 105 TEQEQ r7,#0xe 106 MOVEQ lr,#4 107 TEQ r7,#0xf 108 MOVEQ lr,#0xc 109 TEQEQ r4,#0 110 ADDEQ r7,r7,#0xf 111 TEQ lr,#0 112 BEQ L0x184 113 LSL r3,r11,r12 114 ADD r12,r12,lr 115 SUBS r12,r12,#8 116 RSB r9,lr,#0x20 117 BCC L4 118 LDRB r8,[r10],#1 119 ORR r11,r8,r11,LSL #8 120 SUBS r12,r12,#8 121 BCC L4 122 LDRB r8,[r10],#1 123 L4: 124 ADDCC r12,r12,#8 125 LSR r3,r3,r9 126 ORRCS r11,r8,r11,LSL #8 127 LSL r7,r7,r4 128 ADD r7,r3,r7 129 L0x184: 130 ADD r7,r7,r1 131 MOV r1,#2 132 LSRS r8,r7,#1 133 RSBCS r8,r8,#0 134 STRH r8,[r2],#2 135 LDR r9, .LarmVCM4P10_SuffixToLevel 136 P1: ADD r9, pc 137 LDRSB r8,[r9,r4] 138 TEQ r4,#0 139 MOVEQ r4,#1 140 CMP r7,r8 141 ADDCS r4,r4,#1 142 SUBS r0,r0,#1 143 BGT L0xfc 144 L0x1b8: 145 LDR r8,[sp,#0x6c] 146 SUB r0,r5,#1 147 SUBS r1,r8,r5 148 ADD r4,sp,#0x2c 149 MOV lr,r5 150 SUB lr,lr,#1 151 BEQ L0x2b0 152 TEQ r8,#4 153 LDREQ r6, .LarmVCM4P10_CAVLCTotalZeros2x2Tables 154 LDRNE r6, .LarmVCM4P10_CAVLCTotalZeroTables 155 P2: ADD r6, pc 156 LDR r6,[r6,r5,LSL #2] 157 LSLS r8,r11,r12 158 MOVS r7,#0x1e 159 AND r7,r7,r8,LSR #27 160 SUBS r12,r12,#8 161 L0x1f4: 162 BCC L5 163 LDRB r8,[r10],#1 164 L5: 165 LDRH r7,[r6,r7] 166 ADDCC r12,r12,#8 167 ADD r12,r12,#4 168 ORRCS r11,r8,r11,LSL #8 169 LSRS r8,r7,#1 170 BCS L0x224 171 LSLS r8,r11,r12 172 SUBS r12,r12,#0xa 173 ADD r7,r7,r8,LSR #29 174 BIC r7,r7,#1 175 B L0x1f4 176 L0x224: 177 SUB r12,r12,r7,LSR #13 178 BIC r7,r8,#0xf000 179 CMP r7,#0x10 180 BGE L0x33c 181 LDR r3, .LarmVCM4P10_CAVLCRunBeforeTables 182 P3: ADD r3, pc 183 ADD r4,sp,#0x2c 184 MOVS r1,r7 185 ADD lr,lr,r1 186 BEQ L0x2b0 187 L0x248: 188 SUBS r0,r0,#1 189 LDR r6,[r3,r1,LSL #2] 190 BLT L0x2bc 191 LSLS r8,r11,r12 192 MOVS r7,#0xe 193 AND r7,r7,r8,LSR #28 194 SUBS r12,r12,#8 195 L0x264: 196 BCC L6 197 LDRB r8,[r10],#1 198 L6: 199 LDRH r7,[r6,r7] 200 ADDCC r12,r12,#8 201 ADD r12,r12,#3 202 ORRCS r11,r8,r11,LSL #8 203 LSRS r8,r7,#1 204 BCS L0x294 205 LSLS r8,r11,r12 206 SUBS r12,r12,#9 207 ADD r7,r7,r8,LSR #29 208 BIC r7,r7,#1 209 B L0x264 210 L0x294: 211 SUB r12,r12,r7,LSR #13 212 BIC r7,r8,#0xf000 213 CMP r7,#0xf 214 BGE L0x33c 215 SUBS r1,r1,r7 216 STRB r7,[r4],#1 217 BGT L0x248 218 L0x2b0: 219 SUBS r0,r0,#1 220 BLT L7 221 STRB r1,[r4],#1 222 L7: 223 BGT L0x2b0 224 L0x2bc: 225 STRB r1,[r4],#1 226 LDR r8,[sp,#0x6c] 227 TEQ r8,#0xf 228 ADDEQ lr,lr,#1 229 SUB r4,r4,r5 230 SUB r2,r2,r5 231 SUB r2,r2,r5 232 LDR r3,[sp,#8] 233 LDR r0,[r3,#0] 234 TEQ r8,#4 235 LDREQ r6, .LarmVCM4P10_ZigZag_2x2 236 LDRNE r6, .LarmVCM4P10_ZigZag_4x4 237 P4: ADD r6, pc 238 L0x2ec: 239 LDRB r9,[r4],#1 240 LDRB r8,[r6,lr] 241 SUB lr,lr,#1 242 SUB lr,lr,r9 243 LDRSH r9,[r2],#2 244 SUBS r5,r5,#1 245 ORREQ r8,r8,#0x20 246 ADD r1,r9,#0x80 247 CMP r1,#0x100 248 ORRCS r8,r8,#0x10 249 TEQ r5,#0 250 STRB r8,[r0],#1 251 STRB r9,[r0],#1 252 LSR r9,r9,#8 253 BCC L8 254 STRB r9,[r0],#1 255 L8: 256 BNE L0x2ec 257 STR r0,[r3,#0] 258 LDR r0,[sp,#0] 259 LDR r1,[sp,#4] 260 B L0x344 261 L0x33c: 262 MVN r0,#1 263 B L0x35c 264 L0x344: 265 ADD r10,r10,r12,LSR #3 266 AND r12,r12,#7 267 SUB r10,r10,#4 268 STR r12,[r1,#0] 269 STR r10,[r0,#0] 270 MOV r0,#0 271 L0x35c: 272 ADD sp,sp,#0x40 273 POP {r4-r12,pc} 274 .endfunc 275 276 .LarmVCM4P10_CAVLCCoeffTokenTables: 277 .word armVCM4P10_CAVLCCoeffTokenTables-(P0+8) 278 .LarmVCM4P10_SuffixToLevel: 279 .word armVCM4P10_SuffixToLevel-(P1+8) 280 .LarmVCM4P10_CAVLCTotalZeros2x2Tables: 281 .word (armVCM4P10_CAVLCTotalZeros2x2Tables - 4)-(P2+8) 282 .LarmVCM4P10_CAVLCTotalZeroTables: 283 .word (armVCM4P10_CAVLCTotalZeroTables - 4)-(P2+8) 284 .LarmVCM4P10_CAVLCRunBeforeTables: 285 .word (armVCM4P10_CAVLCRunBeforeTables - 4)-(P3+8) 286 .LarmVCM4P10_ZigZag_2x2: 287 .word armVCM4P10_ZigZag_2x2-(P4+8) 288 .LarmVCM4P10_ZigZag_4x4: 289 .word armVCM4P10_ZigZag_4x4-(P4+8) 290 291 .end 292