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