You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-08-10 06:10:52 +02:00
ARM: use push/pop pseudo-instructions in simple_idct_armv6.S
Originally committed as revision 16570 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
@@ -193,7 +193,7 @@ w57: .long W57
|
|||||||
r1 = dest
|
r1 = dest
|
||||||
*/
|
*/
|
||||||
function idct_row_armv6
|
function idct_row_armv6
|
||||||
str lr, [sp, #-4]!
|
push {lr}
|
||||||
|
|
||||||
ldr lr, [r0, #12] /* lr = row[7,5] */
|
ldr lr, [r0, #12] /* lr = row[7,5] */
|
||||||
ldr ip, [r0, #4] /* ip = row[6,4] */
|
ldr ip, [r0, #4] /* ip = row[6,4] */
|
||||||
@@ -203,7 +203,7 @@ function idct_row_armv6
|
|||||||
cmpeq lr, r3
|
cmpeq lr, r3
|
||||||
cmpeq lr, r2, lsr #16
|
cmpeq lr, r2, lsr #16
|
||||||
beq 1f
|
beq 1f
|
||||||
str r1, [sp, #-4]!
|
push {r1}
|
||||||
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
||||||
cmp lr, #0
|
cmp lr, #0
|
||||||
beq 2f
|
beq 2f
|
||||||
@@ -213,7 +213,7 @@ function idct_row_armv6
|
|||||||
|
|
||||||
2: idct_row4 ROW_SHIFT
|
2: idct_row4 ROW_SHIFT
|
||||||
|
|
||||||
3: ldr r1, [sp], #4
|
3: pop {r1}
|
||||||
idct_finish_shift ROW_SHIFT
|
idct_finish_shift ROW_SHIFT
|
||||||
|
|
||||||
strh r4, [r1]
|
strh r4, [r1]
|
||||||
@@ -225,7 +225,7 @@ function idct_row_armv6
|
|||||||
strh r9, [r1, #(16*5)]
|
strh r9, [r1, #(16*5)]
|
||||||
strh r8, [r1, #(16*7)]
|
strh r8, [r1, #(16*7)]
|
||||||
|
|
||||||
ldr pc, [sp], #4
|
pop {pc}
|
||||||
|
|
||||||
1: mov r2, r2, lsl #3
|
1: mov r2, r2, lsl #3
|
||||||
strh r2, [r1]
|
strh r2, [r1]
|
||||||
@@ -236,7 +236,7 @@ function idct_row_armv6
|
|||||||
strh r2, [r1, #(16*3)]
|
strh r2, [r1, #(16*3)]
|
||||||
strh r2, [r1, #(16*5)]
|
strh r2, [r1, #(16*5)]
|
||||||
strh r2, [r1, #(16*7)]
|
strh r2, [r1, #(16*7)]
|
||||||
ldr pc, [sp], #4
|
pop {pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -245,13 +245,13 @@ function idct_row_armv6
|
|||||||
r1 = dest
|
r1 = dest
|
||||||
*/
|
*/
|
||||||
function idct_col_armv6
|
function idct_col_armv6
|
||||||
stmfd sp!, {r1, lr}
|
push {r1, lr}
|
||||||
|
|
||||||
ldr r2, [r0] /* r2 = row[2,0] */
|
ldr r2, [r0] /* r2 = row[2,0] */
|
||||||
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
||||||
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
||||||
idct_row COL_SHIFT
|
idct_row COL_SHIFT
|
||||||
ldr r1, [sp], #4
|
pop {r1}
|
||||||
idct_finish_shift COL_SHIFT
|
idct_finish_shift COL_SHIFT
|
||||||
|
|
||||||
strh r4, [r1]
|
strh r4, [r1]
|
||||||
@@ -263,7 +263,7 @@ function idct_col_armv6
|
|||||||
strh r9, [r1, #(16*6)]
|
strh r9, [r1, #(16*6)]
|
||||||
strh r8, [r1, #(16*7)]
|
strh r8, [r1, #(16*7)]
|
||||||
|
|
||||||
ldr pc, [sp], #4
|
pop {pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -273,13 +273,13 @@ function idct_col_armv6
|
|||||||
r2 = line size
|
r2 = line size
|
||||||
*/
|
*/
|
||||||
function idct_col_put_armv6
|
function idct_col_put_armv6
|
||||||
stmfd sp!, {r1, r2, lr}
|
push {r1, r2, lr}
|
||||||
|
|
||||||
ldr r2, [r0] /* r2 = row[2,0] */
|
ldr r2, [r0] /* r2 = row[2,0] */
|
||||||
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
||||||
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
||||||
idct_row COL_SHIFT
|
idct_row COL_SHIFT
|
||||||
ldmfd sp!, {r1, r2}
|
pop {r1, r2}
|
||||||
idct_finish_shift_sat COL_SHIFT
|
idct_finish_shift_sat COL_SHIFT
|
||||||
|
|
||||||
strb r4, [r1], r2
|
strb r4, [r1], r2
|
||||||
@@ -293,7 +293,7 @@ function idct_col_put_armv6
|
|||||||
|
|
||||||
sub r1, r1, r2, lsl #3
|
sub r1, r1, r2, lsl #3
|
||||||
|
|
||||||
ldr pc, [sp], #4
|
pop {pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -303,13 +303,13 @@ function idct_col_put_armv6
|
|||||||
r2 = line size
|
r2 = line size
|
||||||
*/
|
*/
|
||||||
function idct_col_add_armv6
|
function idct_col_add_armv6
|
||||||
stmfd sp!, {r1, r2, lr}
|
push {r1, r2, lr}
|
||||||
|
|
||||||
ldr r2, [r0] /* r2 = row[2,0] */
|
ldr r2, [r0] /* r2 = row[2,0] */
|
||||||
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
ldr ip, w42 /* ip = W4 | (W2 << 16) */
|
||||||
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
ldr r3, [r0, #8] /* r3 = row[3,1] */
|
||||||
idct_row COL_SHIFT
|
idct_row COL_SHIFT
|
||||||
ldmfd sp!, {r1, r2}
|
pop {r1, r2}
|
||||||
idct_finish
|
idct_finish
|
||||||
|
|
||||||
ldrb r3, [r1]
|
ldrb r3, [r1]
|
||||||
@@ -348,7 +348,7 @@ function idct_col_add_armv6
|
|||||||
|
|
||||||
sub r1, r1, r2, lsl #3
|
sub r1, r1, r2, lsl #3
|
||||||
|
|
||||||
ldr pc, [sp], #4
|
pop {pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -385,7 +385,7 @@ function idct_col_add_armv6
|
|||||||
|
|
||||||
/* void ff_simple_idct_armv6(DCTELEM *data); */
|
/* void ff_simple_idct_armv6(DCTELEM *data); */
|
||||||
function ff_simple_idct_armv6, export=1
|
function ff_simple_idct_armv6, export=1
|
||||||
stmfd sp!, {r4-r11, lr}
|
push {r4-r11, lr}
|
||||||
sub sp, sp, #128
|
sub sp, sp, #128
|
||||||
|
|
||||||
mov r1, sp
|
mov r1, sp
|
||||||
@@ -395,12 +395,12 @@ function ff_simple_idct_armv6, export=1
|
|||||||
idct_rows idct_col_armv6, 2
|
idct_rows idct_col_armv6, 2
|
||||||
|
|
||||||
add sp, sp, #128
|
add sp, sp, #128
|
||||||
ldmfd sp!, {r4-r11, pc}
|
pop {r4-r11, pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/* ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
|
/* ff_simple_idct_add_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
|
||||||
function ff_simple_idct_add_armv6, export=1
|
function ff_simple_idct_add_armv6, export=1
|
||||||
stmfd sp!, {r0, r1, r4-r11, lr}
|
push {r0, r1, r4-r11, lr}
|
||||||
sub sp, sp, #128
|
sub sp, sp, #128
|
||||||
|
|
||||||
mov r0, r2
|
mov r0, r2
|
||||||
@@ -412,12 +412,12 @@ function ff_simple_idct_add_armv6, export=1
|
|||||||
idct_rows idct_col_add_armv6, 1
|
idct_rows idct_col_add_armv6, 1
|
||||||
|
|
||||||
add sp, sp, #(128+8)
|
add sp, sp, #(128+8)
|
||||||
ldmfd sp!, {r4-r11, pc}
|
pop {r4-r11, pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
|
||||||
/* ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
|
/* ff_simple_idct_put_armv6(uint8_t *dest, int line_size, DCTELEM *data); */
|
||||||
function ff_simple_idct_put_armv6, export=1
|
function ff_simple_idct_put_armv6, export=1
|
||||||
stmfd sp!, {r0, r1, r4-r11, lr}
|
push {r0, r1, r4-r11, lr}
|
||||||
sub sp, sp, #128
|
sub sp, sp, #128
|
||||||
|
|
||||||
mov r0, r2
|
mov r0, r2
|
||||||
@@ -429,5 +429,5 @@ function ff_simple_idct_put_armv6, export=1
|
|||||||
idct_rows idct_col_put_armv6, 1
|
idct_rows idct_col_put_armv6, 1
|
||||||
|
|
||||||
add sp, sp, #(128+8)
|
add sp, sp, #(128+8)
|
||||||
ldmfd sp!, {r4-r11, pc}
|
pop {r4-r11, pc}
|
||||||
.endfunc
|
.endfunc
|
||||||
|
Reference in New Issue
Block a user