1 @ This file was created from a .asm file 2 @ using the ads2gas.pl script. 3 4 .equ WIDE_REFERENCE, 0 5 .ifndef ARCHITECTURE 6 .equ ARCHITECTURE, 5 7 .endif 8 .global horizontal_line_4_5_scale_armv4 9 .ifndef NO_TYPE_PSEUDO_OP 10 .type horizontal_line_4_5_scale_armv4, function 11 .endif 12 .global vertical_band_4_5_scale_armv4 13 .ifndef NO_TYPE_PSEUDO_OP 14 .type vertical_band_4_5_scale_armv4, function 15 .endif 16 .global horizontal_line_2_3_scale_armv4 17 .ifndef NO_TYPE_PSEUDO_OP 18 .type horizontal_line_2_3_scale_armv4, function 19 .endif 20 .global vertical_band_2_3_scale_armv4 21 .ifndef NO_TYPE_PSEUDO_OP 22 .type vertical_band_2_3_scale_armv4, function 23 .endif 24 .global horizontal_line_3_5_scale_armv4 25 .ifndef NO_TYPE_PSEUDO_OP 26 .type horizontal_line_3_5_scale_armv4, function 27 .endif 28 .global vertical_band_3_5_scale_armv4 29 .ifndef NO_TYPE_PSEUDO_OP 30 .type vertical_band_3_5_scale_armv4, function 31 .endif 32 .global horizontal_line_3_4_scale_armv4 33 .ifndef NO_TYPE_PSEUDO_OP 34 .type horizontal_line_3_4_scale_armv4, function 35 .endif 36 .global vertical_band_3_4_scale_armv4 37 .ifndef NO_TYPE_PSEUDO_OP 38 .type vertical_band_3_4_scale_armv4, function 39 .endif 40 .global horizontal_line_1_2_scale_armv4 41 .ifndef NO_TYPE_PSEUDO_OP 42 .type horizontal_line_1_2_scale_armv4, function 43 .endif 44 .global vertical_band_1_2_scale_armv4 45 .ifndef NO_TYPE_PSEUDO_OP 46 .type vertical_band_1_2_scale_armv4, function 47 .endif 48 49 .text 50 51 src .req r0 52 srcw .req r1 53 dest .req r2 54 mask .req r12 55 c51_205 .req r10 56 c102_154 .req r11 57 @/**************************************************************************** 58 @ * 59 @ * ROUTINE : horizontal_line_4_5_scale_armv4 60 @ * 61 @ * INPUTS : const unsigned char *source : Pointer to source data. 62 @ * unsigned int source_width : Stride of source. 63 @ * unsigned char *dest : Pointer to destination data. 64 @ * unsigned int dest_width : Stride of destination (NOT USED). 65 @ * 66 @ * OUTPUTS : None. 67 @ * 68 @ * RETU.req_s : void 69 @ * 70 @ * FUNCTION : Copies horizontal line of pixels from source to 71 @ * destination scaling up by 4 to 5. 72 @ * 73 @ * SPECIAL NOTES : None. 74 @ * 75 @ ****************************************************************************/ 76 @void horizontal_line_4_5_scale_armv4 77 @( 78 @ r0 = UINT8 *source 79 @ r1 = UINT32 source_width 80 @ r2 = UINT8 *dest 81 @ r3 = UINT32 dest_width 82 @) 83 _HorizontalLine_4_5_Scale_ARMv4: 84 horizontal_line_4_5_scale_armv4: @ 85 stmdb sp!, {r4 - r11, lr} 86 87 mov mask, #255 @ mask for selection 88 ldr c51_205, =0x3300cd 89 ldr c102_154, =0x66009a 90 91 ldr r3, [src], #4 92 93 hl45_loop: 94 95 and r4, r3, mask @ a = src[0] 96 and r5, mask, r3, lsr #8 @ b = src[1] 97 strb r4, [dest], #1 98 99 orr r6, r4, r5, lsl #16 @ b | a 100 and r7, mask, r3, lsr #16 @ c = src[2] 101 mul r6, c51_205, r6 @ a * 51 + 205 * b 102 103 orr r5, r5, r7, lsl #16 @ c | b 104 mul r5, c102_154, r5 @ b * 102 + 154 * c 105 add r6, r6, #0x8000 106 and r8, mask, r3, lsr #24 @ d = src[3] 107 mov r6, r6, lsr #24 108 strb r6, [dest], #1 109 110 orr r7, r8, r7, lsl #16 @ c | d 111 mul r7, c102_154, r7 @ c * 154 + 102 * d 112 add r5, r5, #0x8000 113 ldr r3, [src], #4 114 mov r5, r5, lsr #24 115 strb r5, [dest], #1 116 117 add r7, r7, #0x8000 118 and r9, mask, r3 @ e = src[4] 119 orr r9, r9, r8, lsl #16 @ d | e 120 mul r9, c51_205, r9 @ d * 205 + 51 * e 121 mov r7, r7, lsr #24 122 strb r7, [dest], #1 123 124 add r9, r9, #0x8000 125 subs srcw, srcw, #4 126 mov r9, r9, lsr #24 127 strb r9, [dest], #1 128 129 bne hl45_loop 130 131 and r4, r3, mask 132 and r5, mask, r3, lsl #8 133 strb r4, [dest], #1 134 135 orr r6, r4, r5, lsl #16 @ b | a 136 mul r6, c51_205, r6 137 138 and r7, mask, r3, lsl #16 139 orr r5, r5, r7, lsl #16 @ c | b 140 mul r5, c102_154, r5 141 add r6, r6, #0x8000 142 and r8, mask, r3, lsl #24 143 mov r6, r6, lsr #24 144 strb r6, [dest], #1 145 146 orr r7, r8, r7, lsl #16 @ c | d 147 mul r7, c102_154, r7 148 add r5, r5, #0x8000 149 mov r5, r5, lsr #24 150 strb r5, [dest], #1 151 152 add r7, r7, #0x8000 153 mov r7, r7, lsr #24 154 strb r7, [dest], #1 155 156 ldrb r3, [src] 157 strb r3, [dest], #1 158 159 ldmia sp!, {r4 - r11, pc} 160 @ @|vp8cx_horizontal_line_4_5_scale_c| 161 162 @/**************************************************************************** 163 @ * 164 @ * ROUTINE : vertical_band_4_5_scale_armv4 165 @ * 166 @ * INPUTS : unsigned char *dest : Pointer to destination data. 167 @ * unsigned int dest_pitch : Stride of destination data. 168 @ * unsigned int dest_width : Width of destination data. 169 @ * 170 @ * OUTPUTS : None. 171 @ * 172 @ * RETU.req_s : void 173 @ * 174 @ * FUNCTION : Scales vertical band of pixels by scale 4 to 5. The 175 @ * height of the band scaled is 4-pixels. 176 @ * 177 @ * SPECIAL NOTES : The routine uses the first line of the band below 178 @ * the current band. 179 @ * 180 @ ****************************************************************************/ 181 @void vertical_band_4_5_scale_armv4 182 @( 183 @ r0 = UINT8 *dest 184 @ r1 = UINT32 dest_pitch 185 @ r2 = UINT32 dest_width 186 @) 187 _VerticalBand_4_5_Scale_ARMv4: 188 vertical_band_4_5_scale_armv4: @ 189 stmdb sp!, {r4 - r11, lr} 190 191 ldr c51_205, =0x3300cd 192 ldr c102_154, =0x66009a 193 194 vl45_loop: 195 mov r3, src 196 ldrb r4, [r3], r1 @ a = des [0] 197 ldrb r5, [r3], r1 @ b = des [dest_pitch] 198 ldrb r7, [r3], r1 @ c = des[dest_pitch*2] 199 add lr, src, r1 200 201 orr r6, r4, r5, lsl #16 @ b | a 202 mul r6, c51_205, r6 @ a * 51 + 205 * b 203 204 ldrb r8, [r3], r1 @ d = des[dest_pitch*3] 205 orr r5, r5, r7, lsl #16 @ c | b 206 mul r5, c102_154, r5 @ b * 102 + 154 * c 207 add r6, r6, #0x8000 208 orr r7, r8, r7, lsl #16 @ c | d 209 mov r6, r6, lsr #24 210 strb r6, [lr], r1 211 212 ldrb r9, [r3, r1] @ e = des [dest_pitch * 5] 213 mul r7, c102_154, r7 @ c * 154 + 102 * d 214 add r5, r5, #0x8000 215 orr r9, r9, r8, lsl #16 @ d | e 216 mov r5, r5, lsr #24 217 strb r5, [lr], r1 218 219 mul r9, c51_205, r9 @ d * 205 + 51 * e 220 add r7, r7, #0x8000 221 add src, src, #1 222 mov r7, r7, lsr #24 223 strb r7, [lr], r1 224 225 add r9, r9, #0x8000 226 subs r2, r2, #1 227 mov r9, r9, lsr #24 228 strb r9, [lr], r1 229 230 bne vl45_loop 231 232 ldmia sp!, {r4 - r11, pc} 233 @ @|vertical_band_4_5_scale_armv4| 234 235 @/**************************************************************************** 236 @ * 237 @ * ROUTINE : horizontal_line_2_3_scale_armv4 238 @ * 239 @ * INPUTS : const unsigned char *source : Pointer to source data. 240 @ * unsigned int source_width : Stride of source. 241 @ * unsigned char *dest : Pointer to destination data. 242 @ * unsigned int dest_width : Stride of destination (NOT USED). 243 @ * 244 @ * OUTPUTS : None. 245 @ * 246 @ * RETU.req_s : void 247 @ * 248 @ * FUNCTION : Copies horizontal line of pixels from source to 249 @ * destination scaling up by 2 to 3. 250 @ * 251 @ * SPECIAL NOTES : None. 252 @ * 253 @ * 254 @ ****************************************************************************/ 255 @void horizontal_line_2_3_scale_armv4 256 @( 257 @ const unsigned char *source, 258 @ unsigned int source_width, 259 @ unsigned char *dest, 260 @ unsigned int dest_width 261 @) 262 _HorizontalLine_2_3_Scale_ARMv4: 263 horizontal_line_2_3_scale_armv4: @ 264 stmdb sp!, {r4 - r11, lr} 265 ldr lr, =85 266 ldr r12, =171 267 268 hl23_loop: 269 270 ldrb r3, [src], #1 @ a 271 ldrb r4, [src], #1 @ b 272 ldrb r5, [src] @ c 273 274 strb r3, [dest], #1 275 mul r4, r12, r4 @ b * 171 276 mla r6, lr, r3, r4 @ a * 85 277 mla r7, lr, r5, r4 @ c * 85 278 279 add r6, r6, #128 280 mov r6, r6, lsr #8 281 strb r6, [dest], #1 282 283 add r7, r7, #128 284 mov r7, r7, lsr #8 285 strb r7, [dest], #1 286 287 subs srcw, srcw, #2 288 bne hl23_loop 289 290 ldrb r4, [src, #1] @ b 291 strb r5, [dest], #1 292 strb r4, [dest, #1] 293 294 mul r4, r12, r4 @ b * 171 295 mla r6, lr, r5, r4 @ a * 85 + b *171 296 297 add r6, r6, #128 298 mov r6, r6, lsr #8 299 strb r6, [dest] 300 301 ldmia sp!, {r4 - r11, pc} 302 @ @|horizontal_line_2_3_scale_armv4| 303 304 @/**************************************************************************** 305 @ * 306 @ * ROUTINE : vertical_band_2_3_scale_armv4 307 @ * 308 @ * INPUTS : unsigned char *dest : Pointer to destination data. 309 @ * unsigned int dest_pitch : Stride of destination data. 310 @ * unsigned int dest_width : Width of destination data. 311 @ * 312 @ * OUTPUTS : None. 313 @ * 314 @ * RETU.req_s : void 315 @ * 316 @ * FUNCTION : Scales vertical band of pixels by scale 2 to 3. The 317 @ * height of the band scaled is 2-pixels. 318 @ * 319 @ * SPECIAL NOTES : The routine uses the first line of the band below 320 @ * the current band. 321 @ * 322 @ ****************************************************************************/ 323 @void vertical_band_2_3_scale_armv4 324 @( 325 @ r0 = UINT8 *dest 326 @ r1 = UINT32 dest_pitch 327 @ r2 = UINT32 dest_width 328 @) 329 _VerticalBand_2_3_Scale_ARMv4: 330 vertical_band_2_3_scale_armv4: @ 331 stmdb sp!, {r4 - r8, lr} 332 ldr lr, =85 333 ldr r12, =171 334 add r3, r1, r1, lsl #1 @ 3 * dest_pitch 335 336 vl23_loop: 337 ldrb r4, [src] @ a = des [0] 338 ldrb r5, [src, r1] @ b = des [dest_pitch] 339 ldrb r7, [src, r3] @ c = des [dest_pitch*3] 340 subs r2, r2, #1 341 342 mul r5, r12, r5 @ b * 171 343 mla r6, lr, r4, r5 @ a * 85 344 mla r8, lr, r7, r5 @ c * 85 345 346 add r6, r6, #128 347 mov r6, r6, lsr #8 348 strb r6, [src, r1] 349 350 add r8, r8, #128 351 mov r8, r8, lsr #8 352 strb r8, [src, r1, lsl #1] 353 354 add src, src, #1 355 356 bne vl23_loop 357 358 ldmia sp!, {r4 - r8, pc} 359 @ @|vertical_band_2_3_scale_armv4| 360 361 @/**************************************************************************** 362 @ * 363 @ * ROUTINE : vp8cx_horizontal_line_3_5_scale_c 364 @ * 365 @ * INPUTS : const unsigned char *source : Pointer to source data. 366 @ * unsigned int source_width : Stride of source. 367 @ * unsigned char *dest : Pointer to destination data. 368 @ * unsigned int dest_width : Stride of destination (NOT USED). 369 @ * 370 @ * OUTPUTS : None. 371 @ * 372 @ * RETU.req_s : void 373 @ * 374 @ * FUNCTION : Copies horizontal line of pixels from source to 375 @ * destination scaling up by 3 to 5. 376 @ * 377 @ * SPECIAL NOTES : None. 378 @ * 379 @ * 380 @ ****************************************************************************/ 381 @void vp8cx_horizontal_line_3_5_scale_c 382 @( 383 @ const unsigned char *source, 384 @ unsigned int source_width, 385 @ unsigned char *dest, 386 @ unsigned int dest_width 387 @) 388 _HorizontalLine_3_5_Scale_ARMv4: 389 horizontal_line_3_5_scale_armv4: @ 390 stmdb sp!, {r4 - r11, lr} 391 392 ldr c51_205, =0x3300cd 393 ldr c102_154, =0x66009a 394 395 ldrb r4, [src], #1 @ a = src[0] 396 397 hl35_loop: 398 399 ldrb r8, [src], #1 @ b = src[1] 400 strb r4, [dest], #1 401 402 orr r6, r4, r8, lsl #16 @ b | a 403 ldrb r9, [src], #1 @ c = src[2] 404 mul r6, c102_154, r6 @ a * 102 + 154 * b 405 406 orr r5, r9, r8, lsl #16 @ b | c 407 mul r5, c51_205, r5 @ b * 205 + 51 * c 408 add r6, r6, #0x8000 409 ldrb r4, [src], #1 @ d = src[3] 410 mov r6, r6, lsr #24 411 strb r6, [dest], #1 412 413 orr r7, r8, r9, lsl #16 @ c | b 414 mul r7, c51_205, r7 @ c * 205 + 154 * b 415 add r5, r5, #0x8000 416 mov r5, r5, lsr #24 417 strb r5, [dest], #1 418 419 orr r9, r4, r9, lsl #16 @ c | d 420 mul r9, c102_154, r9 @ c * 154 + 102 * d 421 add r7, r7, #0x8000 422 mov r7, r7, lsr #24 423 strb r7, [dest], #1 424 425 add r9, r9, #0x8000 426 subs srcw, srcw, #3 427 mov r9, r9, lsr #24 428 strb r9, [dest], #1 429 430 bpl hl35_loop 431 432 ldrb r5, [src], #1 @ b = src[1] 433 strb r4, [dest], #1 434 435 orr r6, r4, r8, lsl #16 @ b | a 436 ldrb r9, [src], #1 @ c = src[2] 437 mul r6, c102_154, r6 @ a * 102 + 154 * b 438 439 orr r5, r9, r8, lsl #16 @ b | c 440 mul r5, c51_205, r5 @ b * 205 + 51 * c 441 add r6, r6, #0x8000 442 mov r6, r6, lsr #24 443 strb r6, [dest], #1 444 445 orr r7, r8, r9, lsl #16 @ c | b 446 mul r7, c51_205, r7 @ c * 205 + 154 * b 447 add r5, r5, #0x8000 448 mov r5, r5, lsr #24 449 strb r5, [dest], #1 450 451 add r7, r7, #0x8000 452 mov r7, r7, lsr #24 453 strb r7, [dest], #1 454 strb r9, [dest], #1 455 456 ldmia sp!, {r4 - r11, pc} 457 @ @|vp8cx_horizontal_line_3_5_scale_c| 458 459 460 @/**************************************************************************** 461 @ * 462 @ * ROUTINE : vp8cx_vertical_band_3_5_scale_c 463 @ * 464 @ * INPUTS : unsigned char *dest : Pointer to destination data. 465 @ * unsigned int dest_pitch : Stride of destination data. 466 @ * unsigned int dest_width : Width of destination data. 467 @ * 468 @ * OUTPUTS : None. 469 @ * 470 @ * RETU.req_s : void 471 @ * 472 @ * FUNCTION : Scales vertical band of pixels by scale 3 to 5. The 473 @ * height of the band scaled is 3-pixels. 474 @ * 475 @ * SPECIAL NOTES : The routine uses the first line of the band below 476 @ * the current band. 477 @ * 478 @ ****************************************************************************/ 479 @void vertical_band_4_5_scale_armv4 480 @( 481 @ r0 = UINT8 *dest 482 @ r1 = UINT32 dest_pitch 483 @ r2 = UINT32 dest_width 484 @) 485 _VerticalBand_3_5_Scale_ARMv4: 486 vertical_band_3_5_scale_armv4: @ 487 stmdb sp!, {r4 - r11, lr} 488 489 ldr c51_205, =0x3300cd 490 ldr c102_154, =0x66009a 491 492 vl35_loop: 493 mov r3, src 494 ldrb r4, [r3], r1 @ a = des [0] 495 ldrb r5, [r3], r1 @ b = des [dest_pitch] 496 ldrb r7, [r3], r1 @ c = des[dest_pitch*2] 497 add lr, src, r1 498 499 orr r8, r4, r5, lsl #16 @ b | a 500 mul r6, c102_154, r8 @ a * 102 + 154 * b 501 502 ldrb r8, [r3, r1, lsl #1] @ d = des[dest_pitch*5] 503 orr r3, r7, r5, lsl #16 @ b | c 504 mul r9, c51_205, r3 @ b * 205 + 51 * c 505 add r6, r6, #0x8000 506 orr r3, r5, r7, lsl #16 @ c | b 507 mov r6, r6, lsr #24 508 strb r6, [lr], r1 509 510 mul r5, c51_205, r3 @ c * 205 + 154 * b 511 add r9, r9, #0x8000 512 orr r3, r8, r7, lsl #16 @ c | d 513 mov r9, r9, lsr #24 514 strb r9, [lr], r1 515 516 mul r7, c102_154, r3 @ c * 154 + 102 * d 517 add r5, r5, #0x8000 518 add src, src, #1 519 mov r5, r5, lsr #24 520 strb r5, [lr], r1 521 522 add r7, r7, #0x8000 523 subs r2, r2, #1 524 mov r7, r7, lsr #24 525 strb r7, [lr], r1 526 527 528 bne vl35_loop 529 530 ldmia sp!, {r4 - r11, pc} 531 @ @|vertical_band_3_5_scale_armv4| 532 533 @/**************************************************************************** 534 @ * 535 @ * ROUTINE : horizontal_line_3_4_scale_armv4 536 @ * 537 @ * INPUTS : const unsigned char *source : Pointer to source data. 538 @ * unsigned int source_width : Stride of source. 539 @ * unsigned char *dest : Pointer to destination data. 540 @ * unsigned int dest_width : Stride of destination (NOT USED). 541 @ * 542 @ * OUTPUTS : None. 543 @ * 544 @ * RETU.req_s : void 545 @ * 546 @ * FUNCTION : Copies horizontal line of pixels from source to 547 @ * destination scaling up by 3 to 4. 548 @ * 549 @ * SPECIAL NOTES : None. 550 @ * 551 @ * 552 @ ****************************************************************************/ 553 @void horizontal_line_3_4_scale_armv4 554 @( 555 @ const unsigned char *source, 556 @ unsigned int source_width, 557 @ unsigned char *dest, 558 @ unsigned int dest_width 559 @) 560 _HorizontalLine_3_4_Scale_ARMv4: 561 horizontal_line_3_4_scale_armv4: @ 562 stmdb sp!, {r4 - r11, lr} 563 564 ldr r10, =64 565 ldr r11, =192 566 mov r9, #128 567 568 ldrb r4, [src], #1 @ a = src[0] 569 570 hl34_loop: 571 572 ldrb r8, [src], #1 @ b = src[1] 573 ldrb r7, [src], #1 @ c = src[2] 574 strb r4, [dest], #1 575 576 mla r4, r10, r4, r9 @ a*64 + 128 577 mla r4, r11, r8, r4 @ a*64 + b*192 + 1 578 579 add r8, r8, #1 @ b + 1 580 add r8, r8, r7 @ b + c + 1 581 mov r8, r8, asr #1 @ (b + c + 1) >> 1 582 583 mov r4, r4, asr #8 @ (a*64 + b*192 + 1) >> 8 584 strb r4, [dest], #1 585 586 strb r8, [dest], #1 587 588 ldrb r4, [src], #1 @ [a+1] 589 590 mla r7, r11, r7, r9 @ c*192 + 128 591 mla r7, r4, r10, r7 @ a*64 + b*192 + 128 592 593 subs srcw, srcw, #3 594 595 mov r7, r7, asr #8 @ (a*64 + b*192 + 128) >> 8 596 strb r7, [dest], #1 597 598 bpl hl34_loop 599 600 ldrb r8, [src], #1 @ b = src[1] 601 ldrb r7, [src], #1 @ c = src[2] 602 strb r4, [dest], #1 603 604 mla r4, r10, r4, r9 @ a*64 + 128 605 mla r4, r11, r8, r4 @ a*64 + b*192 + 1 606 mov r4, r4, asr #8 @ (a*64 + b*192 + 1) >> 8 607 strb r4, [dest], #1 608 609 add r8, r8, #1 @ b + 1 610 add r8, r8, r7 @ b + c + 1 611 mov r8, r8, asr #1 @ (b + c + 1) >> 1 612 strb r8, [dest], #1 613 strb r7, [dest], #1 614 615 ldmia sp!, {r4 - r11, pc} 616 @ @|vp8cx_horizontal_line_3_4_scale_c| 617 618 619 @/**************************************************************************** 620 @ * 621 @ * ROUTINE : vertical_band_3_4_scale_armv4 622 @ * 623 @ * INPUTS : unsigned char *dest : Pointer to destination data. 624 @ * unsigned int dest_pitch : Stride of destination data. 625 @ * unsigned int dest_width : Width of destination data. 626 @ * 627 @ * OUTPUTS : None. 628 @ * 629 @ * RETU.req_s : void 630 @ * 631 @ * FUNCTION : Scales vertical band of pixels by scale 3 to 4. The 632 @ * height of the band scaled is 3-pixels. 633 @ * 634 @ * SPECIAL NOTES : The routine uses the first line of the band below 635 @ * the current band. 636 @ * 637 @ ****************************************************************************/ 638 @void vertical_band_3_4_scale_armv4 639 @( 640 @ r0 = UINT8 *dest 641 @ r1 = UINT32 dest_pitch 642 @ r2 = UINT32 dest_width 643 @) 644 _VerticalBand_3_4_Scale_ARMv4: 645 vertical_band_3_4_scale_armv4: @ 646 stmdb sp!, {r4 - r11, lr} 647 648 ldr r10, =64 649 ldr r11, =192 650 mov r9, #128 651 652 @ ldr r1,[r1] 653 vl34_loop: 654 mov r3, src 655 ldrb r4, [r3], r1 @ a = des [0] 656 ldrb r5, [r3], r1 @ b = des [dest_pitch] 657 ldrb r7, [r3], r1 @ c = des [dest_pitch*2] 658 add lr, src, r1 659 660 mla r4, r10, r4, r9 @ a*64 + 128 661 mla r4, r11, r5, r4 @ a*64 + b*192 + 1 662 663 add r5, r5, #1 @ b + 1 664 add r5, r5, r7 @ b + c + 1 665 mov r5, r5, asr #1 @ (b + c + 1) >> 1 666 667 mov r4, r4, asr #8 @ (a*64 + b*192 + 1) >> 8 668 strb r4, [lr], r1 669 670 ldrb r4, [r3, r1] @ a = des [dest_pitch*4] 671 672 strb r5, [lr], r1 673 674 mla r7, r11, r7, r9 @ c*192 + 128 675 mla r7, r4, r10, r7 @ a*64 + b*192 + 128 676 mov r7, r7, asr #8 @ (a*64 + b*192 + 128) >> 8 677 678 add src, src, #1 679 subs r2, r2, #1 680 681 strb r7, [lr] 682 683 bne vl34_loop 684 685 ldmia sp!, {r4 - r11, pc} 686 @ @|vertical_band_3_4_scale_armv4| 687 688 @/**************************************************************************** 689 @ * 690 @ * ROUTINE : vp8cx_horizontal_line_1_2_scale_c 691 @ * 692 @ * INPUTS : const unsigned char *source : Pointer to source data. 693 @ * unsigned int source_width : Stride of source. 694 @ * unsigned char *dest : Pointer to destination data. 695 @ * unsigned int dest_width : Stride of destination (NOT USED). 696 @ * 697 @ * OUTPUTS : None. 698 @ * 699 @ * RETU.req_s : void 700 @ * 701 @ * FUNCTION : Copies horizontal line of pixels from source to 702 @ * destination scaling up by 1 to 2. 703 @ * 704 @ * SPECIAL NOTES : None. 705 @ * 706 @ ****************************************************************************/ 707 @void vp8cx_horizontal_line_1_2_scale_c 708 @( 709 @ const unsigned char *source, 710 @ unsigned int source_width, 711 @ unsigned char *dest, 712 @ unsigned int dest_width 713 @) 714 _HorizontalLine_1_2_Scale_ARMv4: 715 horizontal_line_1_2_scale_armv4: @ 716 stmdb sp!, {r4 - r5, lr} 717 718 sub srcw, srcw, #1 719 720 ldrb r3, [src], #1 721 ldrb r4, [src], #1 722 hl12_loop: 723 subs srcw, srcw, #1 724 725 add r5, r3, r4 726 add r5, r5, #1 727 mov r5, r5, lsr #1 728 729 orr r5, r3, r5, lsl #8 730 strh r5, [dest], #2 731 732 mov r3, r4 733 734 ldrneb r4, [src], #1 735 bne hl12_loop 736 737 orr r5, r4, r4, lsl #8 738 strh r5, [dest] 739 740 ldmia sp!, {r4 - r5, pc} 741 @ @|vertical_band_3_5_scale_armv4| 742 743 @/**************************************************************************** 744 @ * 745 @ * ROUTINE : vp8cx_vertical_band_1_2_scale_c 746 @ * 747 @ * INPUTS : unsigned char *dest : Pointer to destination data. 748 @ * unsigned int dest_pitch : Stride of destination data. 749 @ * unsigned int dest_width : Width of destination data. 750 @ * 751 @ * OUTPUTS : None. 752 @ * 753 @ * RETU.req_s : void 754 @ * 755 @ * FUNCTION : Scales vertical band of pixels by scale 1 to 2. The 756 @ * height of the band scaled is 1-pixel. 757 @ * 758 @ * SPECIAL NOTES : The routine uses the first line of the band below 759 @ * the current band. 760 @ * 761 @ ****************************************************************************/ 762 @void vp8cx_vertical_band_1_2_scale_c 763 @( 764 @ r0 = UINT8 *dest 765 @ r1 = UINT32 dest_pitch 766 @ r2 = UINT32 dest_width 767 @) 768 _VerticalBand_1_2_Scale_ARMv4: 769 vertical_band_1_2_scale_armv4: @ 770 stmdb sp!, {r4 - r7, lr} 771 772 ldr mask, =0xff00ff @ mask for selection 773 ldr lr, = 0x010001 774 775 vl12_loop: 776 mov r3, src 777 ldr r4, [r3], r1 778 ldr r5, [r3, r1] 779 780 add src, src, #4 781 subs r2, r2, #4 782 783 and r6, r4, mask 784 and r7, r5, mask 785 786 add r6, r7, r6 787 add r6, r6, lr 788 789 and r4, mask, r4, lsr #8 790 and r5, mask, r5, lsr #8 791 792 mov r6, r6, lsr #1 793 and r6, r6, mask 794 795 add r4, r5, r4 796 add r4, r4, lr 797 798 mov r4, r4, lsr #1 799 and r4, r4, mask 800 801 orr r5, r6, r4, lsl #8 802 803 str r5, [r3] 804 805 bpl vl12_loop 806 807 ldmia sp!, {r4 - r7, pc} 808 @ @|vertical_band_3_5_scale_armv4| 809