809 lines
23 KiB
ArmAsm
809 lines
23 KiB
ArmAsm
@ 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|
|