@ This file was created from a .asm file
@  using the ads2gas.pl script.

    .equ WIDE_REFERENCE, 0
    .ifndef ARCHITECTURE
    .equ ARCHITECTURE, 5
    .endif
    .global horizontal_line_4_5_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type horizontal_line_4_5_scale_armv4, function
    .endif
    .global vertical_band_4_5_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type vertical_band_4_5_scale_armv4, function
    .endif
    .global horizontal_line_2_3_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type horizontal_line_2_3_scale_armv4, function
    .endif
    .global vertical_band_2_3_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type vertical_band_2_3_scale_armv4, function
    .endif
    .global horizontal_line_3_5_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type horizontal_line_3_5_scale_armv4, function
    .endif
    .global vertical_band_3_5_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type vertical_band_3_5_scale_armv4, function
    .endif
    .global horizontal_line_3_4_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type horizontal_line_3_4_scale_armv4, function
    .endif
    .global vertical_band_3_4_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type vertical_band_3_4_scale_armv4, function
    .endif
    .global horizontal_line_1_2_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type horizontal_line_1_2_scale_armv4, function
    .endif
    .global vertical_band_1_2_scale_armv4
    .ifndef NO_TYPE_PSEUDO_OP
    .type vertical_band_1_2_scale_armv4, function
    .endif

.text

src         .req    r0
srcw        .req    r1
dest        .req    r2
mask        .req    r12
c51_205     .req    r10
c102_154    .req    r11
@/****************************************************************************
@ *
@ *  ROUTINE       : horizontal_line_4_5_scale_armv4
@ *
@ *  INPUTS        : const unsigned char *source : Pointer to source data.
@ *                  unsigned int source_width    : Stride of source.
@ *                  unsigned char *dest         : Pointer to destination data.
@ *                  unsigned int dest_width      : Stride of destination (NOT USED).
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Copies horizontal line of pixels from source to
@ *                  destination scaling up by 4 to 5.
@ *
@ *  SPECIAL NOTES : None.
@ *
@ ****************************************************************************/
@void horizontal_line_4_5_scale_armv4
@(
@   r0 = UINT8 *source
@   r1 = UINT32 source_width
@   r2 = UINT8 *dest
@   r3 = UINT32 dest_width
@)
_HorizontalLine_4_5_Scale_ARMv4:
    horizontal_line_4_5_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    mov     mask, #255              @ mask for selection
    ldr     c51_205, =0x3300cd
    ldr     c102_154, =0x66009a

    ldr     r3, [src], #4

hl45_loop:

    and     r4, r3, mask            @ a = src[0]
    and     r5, mask, r3, lsr #8    @ b = src[1]
    strb    r4, [dest], #1

    orr     r6, r4, r5, lsl #16     @ b | a
    and     r7, mask, r3, lsr #16   @ c = src[2]
    mul     r6, c51_205, r6         @ a * 51 + 205 * b

    orr     r5, r5, r7, lsl #16     @ c | b
    mul     r5, c102_154, r5        @ b * 102 + 154 * c
    add     r6, r6, #0x8000
    and     r8, mask, r3, lsr #24   @ d = src[3]
    mov     r6, r6, lsr #24
    strb    r6, [dest], #1

    orr     r7, r8, r7, lsl #16     @ c | d
    mul     r7, c102_154, r7        @ c * 154 + 102 * d
    add     r5, r5, #0x8000
    ldr     r3, [src], #4
    mov     r5, r5, lsr #24
    strb    r5, [dest], #1

    add     r7, r7, #0x8000
    and     r9, mask, r3            @ e = src[4]
    orr     r9, r9, r8, lsl #16     @ d | e
    mul     r9, c51_205, r9         @ d * 205 + 51 * e
    mov     r7, r7, lsr #24
    strb    r7, [dest], #1

    add     r9, r9, #0x8000
    subs    srcw, srcw, #4
    mov     r9, r9, lsr #24
    strb    r9, [dest], #1

    bne     hl45_loop

    and     r4, r3, mask
    and     r5, mask, r3, lsl #8
    strb    r4, [dest], #1

    orr     r6, r4, r5, lsl #16     @ b | a
    mul     r6, c51_205, r6

    and     r7, mask, r3, lsl #16
    orr     r5, r5, r7, lsl #16     @ c | b
    mul     r5, c102_154, r5
    add     r6, r6, #0x8000
    and     r8, mask, r3, lsl #24
    mov     r6, r6, lsr #24
    strb    r6, [dest], #1

    orr     r7, r8, r7, lsl #16     @ c | d
    mul     r7, c102_154, r7
    add     r5, r5, #0x8000
    mov     r5, r5, lsr #24
    strb    r5, [dest], #1

    add     r7, r7, #0x8000
    mov     r7, r7, lsr #24
    strb    r7, [dest], #1

    ldrb    r3, [src]
    strb    r3, [dest], #1

    ldmia   sp!, {r4 - r11, pc}
    @   @|vp8cx_horizontal_line_4_5_scale_c|

@/****************************************************************************
@ *
@ *  ROUTINE       : vertical_band_4_5_scale_armv4
@ *
@ *  INPUTS        : unsigned char *dest    : Pointer to destination data.
@ *                  unsigned int dest_pitch : Stride of destination data.
@ *                  unsigned int dest_width : Width of destination data.
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Scales vertical band of pixels by scale 4 to 5. The
@ *                  height of the band scaled is 4-pixels.
@ *
@ *  SPECIAL NOTES : The routine uses the first line of the band below
@ *                  the current band.
@ *
@ ****************************************************************************/
@void vertical_band_4_5_scale_armv4
@(
@   r0 = UINT8 *dest
@   r1 = UINT32 dest_pitch
@   r2 = UINT32 dest_width
@)
_VerticalBand_4_5_Scale_ARMv4:
    vertical_band_4_5_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    ldr     c51_205, =0x3300cd
    ldr     c102_154, =0x66009a

vl45_loop:
    mov     r3, src
    ldrb    r4, [r3], r1            @ a = des [0]
    ldrb    r5, [r3], r1            @ b = des [dest_pitch]
    ldrb    r7, [r3], r1            @ c = des[dest_pitch*2]
    add     lr, src, r1

    orr     r6, r4, r5, lsl #16     @ b | a
    mul     r6, c51_205, r6         @ a * 51 + 205 * b

    ldrb    r8, [r3], r1            @ d = des[dest_pitch*3]
    orr     r5, r5, r7, lsl #16     @ c | b
    mul     r5, c102_154, r5        @ b * 102 + 154 * c
    add     r6, r6, #0x8000
    orr     r7, r8, r7, lsl #16     @ c | d
    mov     r6, r6, lsr #24
    strb    r6, [lr], r1

    ldrb    r9, [r3, r1]            @ e = des [dest_pitch * 5]
    mul     r7, c102_154, r7        @ c * 154 + 102 * d
    add     r5, r5, #0x8000
    orr     r9, r9, r8, lsl #16     @ d | e
    mov     r5, r5, lsr #24
    strb    r5, [lr], r1

    mul     r9, c51_205, r9         @ d * 205 + 51 * e
    add     r7, r7, #0x8000
    add     src, src, #1
    mov     r7, r7, lsr #24
    strb    r7, [lr], r1

    add     r9, r9, #0x8000
    subs    r2, r2, #1
    mov     r9, r9, lsr #24
    strb    r9, [lr], r1

    bne     vl45_loop

    ldmia   sp!, {r4 - r11, pc}
    @   @|vertical_band_4_5_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : horizontal_line_2_3_scale_armv4
@ *
@ *  INPUTS        : const unsigned char *source : Pointer to source data.
@ *                  unsigned int source_width    : Stride of source.
@ *                  unsigned char *dest         : Pointer to destination data.
@ *                  unsigned int dest_width      : Stride of destination (NOT USED).
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Copies horizontal line of pixels from source to
@ *                  destination scaling up by 2 to 3.
@ *
@ *  SPECIAL NOTES : None.
@ *
@ *
@ ****************************************************************************/
@void horizontal_line_2_3_scale_armv4
@(
@   const unsigned char *source,
@   unsigned int source_width,
@   unsigned char *dest,
@   unsigned int dest_width
@)
_HorizontalLine_2_3_Scale_ARMv4:
    horizontal_line_2_3_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}
    ldr     lr,  =85
    ldr     r12, =171

hl23_loop:

    ldrb    r3, [src], #1           @ a
    ldrb    r4, [src], #1           @ b
    ldrb    r5, [src]               @ c

    strb    r3, [dest], #1
    mul     r4, r12, r4             @ b * 171
    mla     r6, lr, r3, r4          @ a * 85
    mla     r7, lr, r5, r4          @ c * 85

    add     r6, r6, #128
    mov     r6, r6, lsr #8
    strb    r6, [dest], #1

    add     r7, r7, #128
    mov     r7, r7, lsr #8
    strb    r7, [dest], #1

    subs    srcw, srcw, #2
    bne     hl23_loop

    ldrb    r4, [src, #1]           @ b
    strb    r5, [dest], #1
    strb    r4, [dest, #1]

    mul     r4, r12, r4             @ b * 171
    mla     r6, lr, r5, r4          @ a * 85 + b *171

    add     r6, r6, #128
    mov     r6, r6, lsr #8
    strb    r6, [dest]

    ldmia   sp!, {r4 - r11, pc}
    @   @|horizontal_line_2_3_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : vertical_band_2_3_scale_armv4
@ *
@ *  INPUTS        : unsigned char *dest    : Pointer to destination data.
@ *                  unsigned int dest_pitch : Stride of destination data.
@ *                  unsigned int dest_width : Width of destination data.
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Scales vertical band of pixels by scale 2 to 3. The
@ *                  height of the band scaled is 2-pixels.
@ *
@ *  SPECIAL NOTES : The routine uses the first line of the band below
@ *                  the current band.
@ *
@ ****************************************************************************/
@void vertical_band_2_3_scale_armv4
@(
@   r0 = UINT8 *dest
@   r1 = UINT32 dest_pitch
@   r2 = UINT32 dest_width
@)
_VerticalBand_2_3_Scale_ARMv4:
    vertical_band_2_3_scale_armv4: @
    stmdb   sp!, {r4 - r8, lr}
    ldr     lr,  =85
    ldr     r12, =171
    add     r3, r1, r1, lsl #1      @ 3 * dest_pitch

vl23_loop:
    ldrb    r4, [src]               @ a = des [0]
    ldrb    r5, [src, r1]           @ b = des [dest_pitch]
    ldrb    r7, [src, r3]           @ c = des [dest_pitch*3]
    subs    r2, r2, #1

    mul     r5, r12, r5             @ b * 171
    mla     r6, lr, r4, r5          @ a * 85
    mla     r8, lr, r7, r5          @ c * 85

    add     r6, r6, #128
    mov     r6, r6, lsr #8
    strb    r6, [src, r1]

    add     r8, r8, #128
    mov     r8, r8, lsr #8
    strb    r8, [src, r1, lsl #1]

    add     src, src, #1

    bne     vl23_loop

    ldmia   sp!, {r4 - r8, pc}
    @   @|vertical_band_2_3_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : vp8cx_horizontal_line_3_5_scale_c
@ *
@ *  INPUTS        : const unsigned char *source : Pointer to source data.
@ *                  unsigned int source_width    : Stride of source.
@ *                  unsigned char *dest         : Pointer to destination data.
@ *                  unsigned int dest_width      : Stride of destination (NOT USED).
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Copies horizontal line of pixels from source to
@ *                  destination scaling up by 3 to 5.
@ *
@ *  SPECIAL NOTES : None.
@ *
@ *
@ ****************************************************************************/
@void vp8cx_horizontal_line_3_5_scale_c
@(
@   const unsigned char *source,
@   unsigned int source_width,
@   unsigned char *dest,
@   unsigned int dest_width
@)
_HorizontalLine_3_5_Scale_ARMv4:
    horizontal_line_3_5_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    ldr     c51_205, =0x3300cd
    ldr     c102_154, =0x66009a

    ldrb    r4, [src], #1           @ a = src[0]

hl35_loop:

    ldrb    r8, [src], #1           @ b = src[1]
    strb    r4, [dest], #1

    orr     r6, r4, r8, lsl #16     @ b | a
    ldrb    r9, [src], #1           @ c = src[2]
    mul     r6, c102_154, r6        @ a * 102 + 154 * b

    orr     r5, r9, r8, lsl #16     @ b | c
    mul     r5, c51_205, r5         @ b * 205 + 51 * c
    add     r6, r6, #0x8000
    ldrb    r4, [src], #1           @ d = src[3]
    mov     r6, r6, lsr #24
    strb    r6, [dest], #1

    orr     r7, r8, r9, lsl #16     @ c | b
    mul     r7, c51_205, r7         @ c * 205 + 154 * b
    add     r5, r5, #0x8000
    mov     r5, r5, lsr #24
    strb    r5, [dest], #1

    orr     r9, r4, r9, lsl #16     @ c | d
    mul     r9, c102_154, r9        @ c * 154 + 102 * d
    add     r7, r7, #0x8000
    mov     r7, r7, lsr #24
    strb    r7, [dest], #1

    add     r9, r9, #0x8000
    subs    srcw, srcw, #3
    mov     r9, r9, lsr #24
    strb    r9, [dest], #1

    bpl     hl35_loop

    ldrb    r5, [src], #1           @ b = src[1]
    strb    r4, [dest], #1

    orr     r6, r4, r8, lsl #16     @ b | a
    ldrb    r9, [src], #1           @ c = src[2]
    mul     r6, c102_154, r6        @ a * 102 + 154 * b

    orr     r5, r9, r8, lsl #16     @ b | c
    mul     r5, c51_205, r5         @ b * 205 + 51 * c
    add     r6, r6, #0x8000
    mov     r6, r6, lsr #24
    strb    r6, [dest], #1

    orr     r7, r8, r9, lsl #16     @ c | b
    mul     r7, c51_205, r7         @ c * 205 + 154 * b
    add     r5, r5, #0x8000
    mov     r5, r5, lsr #24
    strb    r5, [dest], #1

    add     r7, r7, #0x8000
    mov     r7, r7, lsr #24
    strb    r7, [dest], #1
    strb    r9, [dest], #1

    ldmia   sp!, {r4 - r11, pc}
    @   @|vp8cx_horizontal_line_3_5_scale_c|


@/****************************************************************************
@ *
@ *  ROUTINE       : vp8cx_vertical_band_3_5_scale_c
@ *
@ *  INPUTS        : unsigned char *dest    : Pointer to destination data.
@ *                  unsigned int dest_pitch : Stride of destination data.
@ *                  unsigned int dest_width : Width of destination data.
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Scales vertical band of pixels by scale 3 to 5. The
@ *                  height of the band scaled is 3-pixels.
@ *
@ *  SPECIAL NOTES : The routine uses the first line of the band below
@ *                  the current band.
@ *
@ ****************************************************************************/
@void vertical_band_4_5_scale_armv4
@(
@   r0 = UINT8 *dest
@   r1 = UINT32 dest_pitch
@   r2 = UINT32 dest_width
@)
_VerticalBand_3_5_Scale_ARMv4:
    vertical_band_3_5_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    ldr     c51_205, =0x3300cd
    ldr     c102_154, =0x66009a

vl35_loop:
    mov     r3, src
    ldrb    r4, [r3], r1            @ a = des [0]
    ldrb    r5, [r3], r1            @ b = des [dest_pitch]
    ldrb    r7, [r3], r1            @ c = des[dest_pitch*2]
    add     lr, src, r1

    orr     r8, r4, r5, lsl #16     @ b | a
    mul     r6, c102_154, r8        @ a * 102 + 154 * b

    ldrb    r8, [r3, r1, lsl #1]    @ d = des[dest_pitch*5]
    orr     r3, r7, r5, lsl #16     @ b | c
    mul     r9, c51_205, r3         @ b * 205 + 51 * c
    add     r6, r6, #0x8000
    orr     r3, r5, r7, lsl #16     @ c | b
    mov     r6, r6, lsr #24
    strb    r6, [lr], r1

    mul     r5, c51_205, r3         @ c * 205 + 154 * b
    add     r9, r9, #0x8000
    orr     r3, r8, r7, lsl #16     @ c | d
    mov     r9, r9, lsr #24
    strb    r9, [lr], r1

    mul     r7, c102_154, r3        @ c * 154 + 102 * d
    add     r5, r5, #0x8000
    add     src, src, #1
    mov     r5, r5, lsr #24
    strb    r5, [lr], r1

    add     r7, r7, #0x8000
    subs    r2, r2, #1
    mov     r7, r7, lsr #24
    strb    r7, [lr], r1


    bne     vl35_loop

    ldmia   sp!, {r4 - r11, pc}
    @   @|vertical_band_3_5_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : horizontal_line_3_4_scale_armv4
@ *
@ *  INPUTS        : const unsigned char *source : Pointer to source data.
@ *                  unsigned int source_width    : Stride of source.
@ *                  unsigned char *dest         : Pointer to destination data.
@ *                  unsigned int dest_width      : Stride of destination (NOT USED).
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Copies horizontal line of pixels from source to
@ *                  destination scaling up by 3 to 4.
@ *
@ *  SPECIAL NOTES : None.
@ *
@ *
@ ****************************************************************************/
@void horizontal_line_3_4_scale_armv4
@(
@   const unsigned char *source,
@   unsigned int source_width,
@   unsigned char *dest,
@   unsigned int dest_width
@)
_HorizontalLine_3_4_Scale_ARMv4:
    horizontal_line_3_4_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    ldr     r10, =64
    ldr     r11, =192
    mov     r9, #128

    ldrb    r4, [src], #1           @ a = src[0]

hl34_loop:

    ldrb    r8, [src], #1           @ b = src[1]
    ldrb    r7, [src], #1           @ c = src[2]
    strb    r4, [dest], #1

    mla     r4, r10, r4, r9         @ a*64 + 128
    mla     r4, r11, r8, r4         @ a*64 + b*192 + 1

    add     r8, r8, #1              @ b + 1
    add     r8, r8, r7              @ b + c + 1
    mov     r8, r8, asr #1          @ (b + c + 1) >> 1

    mov     r4, r4, asr #8          @ (a*64 + b*192 + 1) >> 8
    strb    r4, [dest], #1

    strb    r8, [dest], #1

    ldrb    r4, [src], #1           @ [a+1]

    mla     r7, r11, r7, r9         @ c*192 + 128
    mla     r7, r4, r10, r7         @ a*64 + b*192 + 128

    subs    srcw, srcw, #3

    mov     r7, r7, asr #8          @ (a*64 + b*192 + 128) >> 8
    strb    r7, [dest], #1

    bpl     hl34_loop

    ldrb    r8, [src], #1           @ b = src[1]
    ldrb    r7, [src], #1           @ c = src[2]
    strb    r4, [dest], #1

    mla     r4, r10, r4, r9         @ a*64 + 128
    mla     r4, r11, r8, r4         @ a*64 + b*192 + 1
    mov     r4, r4, asr #8          @ (a*64 + b*192 + 1) >> 8
    strb    r4, [dest], #1

    add     r8, r8, #1              @ b + 1
    add     r8, r8, r7              @ b + c + 1
    mov     r8, r8, asr #1          @ (b + c + 1) >> 1
    strb    r8, [dest], #1
    strb    r7, [dest], #1

    ldmia   sp!, {r4 - r11, pc}
    @   @|vp8cx_horizontal_line_3_4_scale_c|


@/****************************************************************************
@ *
@ *  ROUTINE       : vertical_band_3_4_scale_armv4
@ *
@ *  INPUTS        : unsigned char *dest    : Pointer to destination data.
@ *                  unsigned int dest_pitch : Stride of destination data.
@ *                  unsigned int dest_width : Width of destination data.
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Scales vertical band of pixels by scale 3 to 4. The
@ *                  height of the band scaled is 3-pixels.
@ *
@ *  SPECIAL NOTES : The routine uses the first line of the band below
@ *                  the current band.
@ *
@ ****************************************************************************/
@void vertical_band_3_4_scale_armv4
@(
@   r0 = UINT8 *dest
@   r1 = UINT32 dest_pitch
@   r2 = UINT32 dest_width
@)
_VerticalBand_3_4_Scale_ARMv4:
    vertical_band_3_4_scale_armv4: @
    stmdb   sp!, {r4 - r11, lr}

    ldr     r10, =64
    ldr     r11, =192
    mov     r9, #128

@   ldr     r1,[r1]
vl34_loop:
    mov     r3, src
    ldrb    r4, [r3], r1            @ a = des [0]
    ldrb    r5, [r3], r1            @ b = des [dest_pitch]
    ldrb    r7, [r3], r1            @ c = des [dest_pitch*2]
    add     lr, src, r1

    mla     r4, r10, r4, r9         @ a*64 + 128
    mla     r4, r11, r5, r4         @ a*64 + b*192 + 1

    add     r5, r5, #1              @ b + 1
    add     r5, r5, r7              @ b + c + 1
    mov     r5, r5, asr #1          @ (b + c + 1) >> 1

    mov     r4, r4, asr #8          @ (a*64 + b*192 + 1) >> 8
    strb    r4, [lr], r1

    ldrb    r4, [r3, r1]            @ a = des [dest_pitch*4]

    strb    r5, [lr], r1

    mla     r7, r11, r7, r9         @ c*192 + 128
    mla     r7, r4, r10, r7         @ a*64 + b*192 + 128
    mov     r7, r7, asr #8          @ (a*64 + b*192 + 128) >> 8

    add     src, src, #1
    subs    r2, r2, #1

    strb    r7, [lr]

    bne     vl34_loop

    ldmia   sp!, {r4 - r11, pc}
    @   @|vertical_band_3_4_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : vp8cx_horizontal_line_1_2_scale_c
@ *
@ *  INPUTS        : const unsigned char *source : Pointer to source data.
@ *                  unsigned int source_width    : Stride of source.
@ *                  unsigned char *dest         : Pointer to destination data.
@ *                  unsigned int dest_width      : Stride of destination (NOT USED).
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Copies horizontal line of pixels from source to
@ *                  destination scaling up by 1 to 2.
@ *
@ *  SPECIAL NOTES : None.
@ *
@ ****************************************************************************/
@void vp8cx_horizontal_line_1_2_scale_c
@(
@   const unsigned char *source,
@   unsigned int source_width,
@   unsigned char *dest,
@   unsigned int dest_width
@)
_HorizontalLine_1_2_Scale_ARMv4:
    horizontal_line_1_2_scale_armv4: @
    stmdb   sp!, {r4 - r5, lr}

    sub     srcw, srcw, #1

    ldrb    r3, [src], #1
    ldrb    r4, [src], #1
hl12_loop:
    subs    srcw, srcw, #1

    add     r5, r3, r4
    add     r5, r5, #1
    mov     r5, r5, lsr #1

    orr     r5, r3, r5, lsl #8
    strh    r5, [dest], #2

    mov     r3, r4

    ldrneb  r4, [src], #1
    bne     hl12_loop

    orr     r5, r4, r4, lsl #8
    strh    r5, [dest]

    ldmia   sp!, {r4 - r5, pc}
    @   @|vertical_band_3_5_scale_armv4|

@/****************************************************************************
@ *
@ *  ROUTINE       : vp8cx_vertical_band_1_2_scale_c
@ *
@ *  INPUTS        : unsigned char *dest    : Pointer to destination data.
@ *                  unsigned int dest_pitch : Stride of destination data.
@ *                  unsigned int dest_width : Width of destination data.
@ *
@ *  OUTPUTS       : None.
@ *
@ *  RETU.req_s       : void
@ *
@ *  FUNCTION      : Scales vertical band of pixels by scale 1 to 2. The
@ *                  height of the band scaled is 1-pixel.
@ *
@ *  SPECIAL NOTES : The routine uses the first line of the band below
@ *                  the current band.
@ *
@ ****************************************************************************/
@void vp8cx_vertical_band_1_2_scale_c
@(
@   r0 = UINT8 *dest
@   r1 = UINT32 dest_pitch
@   r2 = UINT32 dest_width
@)
_VerticalBand_1_2_Scale_ARMv4:
    vertical_band_1_2_scale_armv4: @
    stmdb   sp!, {r4 - r7, lr}

    ldr     mask, =0xff00ff             @ mask for selection
    ldr     lr, = 0x010001

vl12_loop:
    mov     r3, src
    ldr     r4, [r3], r1
    ldr     r5, [r3, r1]

    add     src, src, #4
    subs    r2, r2, #4

    and     r6, r4, mask
    and     r7, r5, mask

    add     r6, r7, r6
    add     r6, r6, lr

    and     r4, mask, r4, lsr #8
    and     r5, mask, r5, lsr #8

    mov     r6, r6, lsr #1
    and     r6, r6, mask

    add     r4, r5, r4
    add     r4, r4, lr

    mov     r4, r4, lsr #1
    and     r4, r4, mask

    orr     r5, r6, r4, lsl #8

    str     r5, [r3]

    bpl     vl12_loop

    ldmia   sp!, {r4 - r7, pc}
    @   @|vertical_band_3_5_scale_armv4|
