yading@10: /* yading@10: * Simple IDCT yading@10: * yading@10: * Copyright (c) 2001 Michael Niedermayer yading@10: * Copyright (c) 2006 Mans Rullgard yading@10: * yading@10: * This file is part of FFmpeg. yading@10: * yading@10: * FFmpeg is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * FFmpeg is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with FFmpeg; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: #include "libavutil/arm/asm.S" yading@10: yading@10: #define W1 22725 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W2 21407 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W3 19266 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W4 16383 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W5 12873 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W6 8867 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define W7 4520 /* cos(i*M_PI/16)*sqrt(2)*(1<<14) + 0.5 */ yading@10: #define ROW_SHIFT 11 yading@10: #define COL_SHIFT 20 yading@10: yading@10: #define W13 (W1 | (W3 << 16)) yading@10: #define W26 (W2 | (W6 << 16)) yading@10: #define W57 (W5 | (W7 << 16)) yading@10: yading@10: function idct_row_armv5te yading@10: str lr, [sp, #-4]! yading@10: yading@10: ldrd v1, v2, [a1, #8] yading@10: ldrd a3, a4, [a1] /* a3 = row[1:0], a4 = row[3:2] */ yading@10: orrs v1, v1, v2 yading@10: itt eq yading@10: cmpeq v1, a4 yading@10: cmpeq v1, a3, lsr #16 yading@10: beq row_dc_only yading@10: yading@10: mov v1, #(1<<(ROW_SHIFT-1)) yading@10: mov ip, #16384 yading@10: sub ip, ip, #1 /* ip = W4 */ yading@10: smlabb v1, ip, a3, v1 /* v1 = W4*row[0]+(1<<(RS-1)) */ yading@10: ldr ip, =W26 /* ip = W2 | (W6 << 16) */ yading@10: smultb a2, ip, a4 yading@10: smulbb lr, ip, a4 yading@10: add v2, v1, a2 yading@10: sub v3, v1, a2 yading@10: sub v4, v1, lr yading@10: add v1, v1, lr yading@10: yading@10: ldr ip, =W13 /* ip = W1 | (W3 << 16) */ yading@10: ldr lr, =W57 /* lr = W5 | (W7 << 16) */ yading@10: smulbt v5, ip, a3 yading@10: smultt v6, lr, a4 yading@10: smlatt v5, ip, a4, v5 yading@10: smultt a2, ip, a3 yading@10: smulbt v7, lr, a3 yading@10: sub v6, v6, a2 yading@10: smulbt a2, ip, a4 yading@10: smultt fp, lr, a3 yading@10: sub v7, v7, a2 yading@10: smulbt a2, lr, a4 yading@10: ldrd a3, a4, [a1, #8] /* a3=row[5:4] a4=row[7:6] */ yading@10: sub fp, fp, a2 yading@10: yading@10: orrs a2, a3, a4 yading@10: beq 1f yading@10: yading@10: smlabt v5, lr, a3, v5 yading@10: smlabt v6, ip, a3, v6 yading@10: smlatt v5, lr, a4, v5 yading@10: smlabt v6, lr, a4, v6 yading@10: smlatt v7, lr, a3, v7 yading@10: smlatt fp, ip, a3, fp yading@10: smulbt a2, ip, a4 yading@10: smlatt v7, ip, a4, v7 yading@10: sub fp, fp, a2 yading@10: yading@10: ldr ip, =W26 /* ip = W2 | (W6 << 16) */ yading@10: mov a2, #16384 yading@10: sub a2, a2, #1 /* a2 = W4 */ yading@10: smulbb a2, a2, a3 /* a2 = W4*row[4] */ yading@10: smultb lr, ip, a4 /* lr = W6*row[6] */ yading@10: add v1, v1, a2 /* v1 += W4*row[4] */ yading@10: add v1, v1, lr /* v1 += W6*row[6] */ yading@10: add v4, v4, a2 /* v4 += W4*row[4] */ yading@10: sub v4, v4, lr /* v4 -= W6*row[6] */ yading@10: smulbb lr, ip, a4 /* lr = W2*row[6] */ yading@10: sub v2, v2, a2 /* v2 -= W4*row[4] */ yading@10: sub v2, v2, lr /* v2 -= W2*row[6] */ yading@10: sub v3, v3, a2 /* v3 -= W4*row[4] */ yading@10: add v3, v3, lr /* v3 += W2*row[6] */ yading@10: yading@10: 1: add a2, v1, v5 yading@10: mov a3, a2, lsr #11 yading@10: bic a3, a3, #0x1f0000 yading@10: sub a2, v2, v6 yading@10: mov a2, a2, lsr #11 yading@10: add a3, a3, a2, lsl #16 yading@10: add a2, v3, v7 yading@10: mov a4, a2, lsr #11 yading@10: bic a4, a4, #0x1f0000 yading@10: add a2, v4, fp yading@10: mov a2, a2, lsr #11 yading@10: add a4, a4, a2, lsl #16 yading@10: strd a3, a4, [a1] yading@10: yading@10: sub a2, v4, fp yading@10: mov a3, a2, lsr #11 yading@10: bic a3, a3, #0x1f0000 yading@10: sub a2, v3, v7 yading@10: mov a2, a2, lsr #11 yading@10: add a3, a3, a2, lsl #16 yading@10: add a2, v2, v6 yading@10: mov a4, a2, lsr #11 yading@10: bic a4, a4, #0x1f0000 yading@10: sub a2, v1, v5 yading@10: mov a2, a2, lsr #11 yading@10: add a4, a4, a2, lsl #16 yading@10: strd a3, a4, [a1, #8] yading@10: yading@10: ldr pc, [sp], #4 yading@10: yading@10: row_dc_only: yading@10: orr a3, a3, a3, lsl #16 yading@10: bic a3, a3, #0xe000 yading@10: mov a3, a3, lsl #3 yading@10: mov a4, a3 yading@10: strd a3, a4, [a1] yading@10: strd a3, a4, [a1, #8] yading@10: yading@10: ldr pc, [sp], #4 yading@10: endfunc yading@10: yading@10: .macro idct_col yading@10: ldr a4, [a1] /* a4 = col[1:0] */ yading@10: mov ip, #16384 yading@10: sub ip, ip, #1 /* ip = W4 */ yading@10: #if 0 yading@10: mov v1, #(1<<(COL_SHIFT-1)) yading@10: smlabt v2, ip, a4, v1 /* v2 = W4*col[1] + (1<<(COL_SHIFT-1)) */ yading@10: smlabb v1, ip, a4, v1 /* v1 = W4*col[0] + (1<<(COL_SHIFT-1)) */ yading@10: ldr a4, [a1, #(16*4)] yading@10: #else yading@10: mov v1, #((1<<(COL_SHIFT-1))/W4) /* this matches the C version */ yading@10: add v2, v1, a4, asr #16 yading@10: rsb v2, v2, v2, lsl #14 yading@10: mov a4, a4, lsl #16 yading@10: add v1, v1, a4, asr #16 yading@10: ldr a4, [a1, #(16*4)] yading@10: rsb v1, v1, v1, lsl #14 yading@10: #endif yading@10: yading@10: smulbb lr, ip, a4 yading@10: smulbt a3, ip, a4 yading@10: sub v3, v1, lr yading@10: sub v5, v1, lr yading@10: add v7, v1, lr yading@10: add v1, v1, lr yading@10: sub v4, v2, a3 yading@10: sub v6, v2, a3 yading@10: add fp, v2, a3 yading@10: ldr ip, =W26 yading@10: ldr a4, [a1, #(16*2)] yading@10: add v2, v2, a3 yading@10: yading@10: smulbb lr, ip, a4 yading@10: smultb a3, ip, a4 yading@10: add v1, v1, lr yading@10: sub v7, v7, lr yading@10: add v3, v3, a3 yading@10: sub v5, v5, a3 yading@10: smulbt lr, ip, a4 yading@10: smultt a3, ip, a4 yading@10: add v2, v2, lr yading@10: sub fp, fp, lr yading@10: add v4, v4, a3 yading@10: ldr a4, [a1, #(16*6)] yading@10: sub v6, v6, a3 yading@10: yading@10: smultb lr, ip, a4 yading@10: smulbb a3, ip, a4 yading@10: add v1, v1, lr yading@10: sub v7, v7, lr yading@10: sub v3, v3, a3 yading@10: add v5, v5, a3 yading@10: smultt lr, ip, a4 yading@10: smulbt a3, ip, a4 yading@10: add v2, v2, lr yading@10: sub fp, fp, lr yading@10: sub v4, v4, a3 yading@10: add v6, v6, a3 yading@10: yading@10: stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp} yading@10: yading@10: ldr ip, =W13 yading@10: ldr a4, [a1, #(16*1)] yading@10: ldr lr, =W57 yading@10: smulbb v1, ip, a4 yading@10: smultb v3, ip, a4 yading@10: smulbb v5, lr, a4 yading@10: smultb v7, lr, a4 yading@10: smulbt v2, ip, a4 yading@10: smultt v4, ip, a4 yading@10: smulbt v6, lr, a4 yading@10: smultt fp, lr, a4 yading@10: rsb v4, v4, #0 yading@10: ldr a4, [a1, #(16*3)] yading@10: rsb v3, v3, #0 yading@10: yading@10: smlatb v1, ip, a4, v1 yading@10: smlatb v3, lr, a4, v3 yading@10: smulbb a3, ip, a4 yading@10: smulbb a2, lr, a4 yading@10: sub v5, v5, a3 yading@10: sub v7, v7, a2 yading@10: smlatt v2, ip, a4, v2 yading@10: smlatt v4, lr, a4, v4 yading@10: smulbt a3, ip, a4 yading@10: smulbt a2, lr, a4 yading@10: sub v6, v6, a3 yading@10: ldr a4, [a1, #(16*5)] yading@10: sub fp, fp, a2 yading@10: yading@10: smlabb v1, lr, a4, v1 yading@10: smlabb v3, ip, a4, v3 yading@10: smlatb v5, lr, a4, v5 yading@10: smlatb v7, ip, a4, v7 yading@10: smlabt v2, lr, a4, v2 yading@10: smlabt v4, ip, a4, v4 yading@10: smlatt v6, lr, a4, v6 yading@10: ldr a3, [a1, #(16*7)] yading@10: smlatt fp, ip, a4, fp yading@10: yading@10: smlatb v1, lr, a3, v1 yading@10: smlabb v3, lr, a3, v3 yading@10: smlatb v5, ip, a3, v5 yading@10: smulbb a4, ip, a3 yading@10: smlatt v2, lr, a3, v2 yading@10: sub v7, v7, a4 yading@10: smlabt v4, lr, a3, v4 yading@10: smulbt a4, ip, a3 yading@10: smlatt v6, ip, a3, v6 yading@10: sub fp, fp, a4 yading@10: .endm yading@10: yading@10: function idct_col_armv5te yading@10: str lr, [sp, #-4]! yading@10: yading@10: idct_col yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: adds a2, a3, v1 yading@10: mov a2, a2, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: add ip, a4, v2 yading@10: mov ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #16 yading@10: str a2, [a1] yading@10: subs a3, a3, v1 yading@10: mov a2, a3, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: sub a4, a4, v2 yading@10: mov a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #16 yading@10: ldmfd sp!, {a3, a4} yading@10: str a2, [a1, #(16*7)] yading@10: yading@10: subs a2, a3, v3 yading@10: mov a2, a2, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: sub ip, a4, v4 yading@10: mov ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #16 yading@10: str a2, [a1, #(16*1)] yading@10: adds a3, a3, v3 yading@10: mov a2, a3, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: add a4, a4, v4 yading@10: mov a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #16 yading@10: ldmfd sp!, {a3, a4} yading@10: str a2, [a1, #(16*6)] yading@10: yading@10: adds a2, a3, v5 yading@10: mov a2, a2, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: add ip, a4, v6 yading@10: mov ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #16 yading@10: str a2, [a1, #(16*2)] yading@10: subs a3, a3, v5 yading@10: mov a2, a3, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: sub a4, a4, v6 yading@10: mov a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #16 yading@10: ldmfd sp!, {a3, a4} yading@10: str a2, [a1, #(16*5)] yading@10: yading@10: adds a2, a3, v7 yading@10: mov a2, a2, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: add ip, a4, fp yading@10: mov ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #16 yading@10: str a2, [a1, #(16*3)] yading@10: subs a3, a3, v7 yading@10: mov a2, a3, lsr #20 yading@10: it mi yading@10: orrmi a2, a2, #0xf000 yading@10: sub a4, a4, fp yading@10: mov a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #16 yading@10: str a2, [a1, #(16*4)] yading@10: yading@10: ldr pc, [sp], #4 yading@10: endfunc yading@10: yading@10: .macro clip dst, src:vararg yading@10: movs \dst, \src yading@10: it mi yading@10: movmi \dst, #0 yading@10: cmp \dst, #255 yading@10: it gt yading@10: movgt \dst, #255 yading@10: .endm yading@10: yading@10: .macro aclip dst, src:vararg yading@10: adds \dst, \src yading@10: it mi yading@10: movmi \dst, #0 yading@10: cmp \dst, #255 yading@10: it gt yading@10: movgt \dst, #255 yading@10: .endm yading@10: yading@10: function idct_col_put_armv5te yading@10: str lr, [sp, #-4]! yading@10: yading@10: idct_col yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: ldr lr, [sp, #32] yading@10: add a2, a3, v1 yading@10: clip a2, a2, asr #20 yading@10: add ip, a4, v2 yading@10: clip ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #8 yading@10: sub a3, a3, v1 yading@10: clip a3, a3, asr #20 yading@10: sub a4, a4, v2 yading@10: clip a4, a4, asr #20 yading@10: ldr v1, [sp, #28] yading@10: strh a2, [v1] yading@10: add a2, v1, #2 yading@10: str a2, [sp, #28] yading@10: orr a2, a3, a4, lsl #8 yading@10: rsb v2, lr, lr, lsl #3 yading@10: ldmfd sp!, {a3, a4} yading@10: strh_pre a2, v2, v1 yading@10: yading@10: sub a2, a3, v3 yading@10: clip a2, a2, asr #20 yading@10: sub ip, a4, v4 yading@10: clip ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #8 yading@10: strh_pre a2, v1, lr yading@10: add a3, a3, v3 yading@10: clip a2, a3, asr #20 yading@10: add a4, a4, v4 yading@10: clip a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #8 yading@10: ldmfd sp!, {a3, a4} yading@10: strh_dpre a2, v2, lr yading@10: yading@10: add a2, a3, v5 yading@10: clip a2, a2, asr #20 yading@10: add ip, a4, v6 yading@10: clip ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #8 yading@10: strh_pre a2, v1, lr yading@10: sub a3, a3, v5 yading@10: clip a2, a3, asr #20 yading@10: sub a4, a4, v6 yading@10: clip a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #8 yading@10: ldmfd sp!, {a3, a4} yading@10: strh_dpre a2, v2, lr yading@10: yading@10: add a2, a3, v7 yading@10: clip a2, a2, asr #20 yading@10: add ip, a4, fp yading@10: clip ip, ip, asr #20 yading@10: orr a2, a2, ip, lsl #8 yading@10: strh a2, [v1, lr] yading@10: sub a3, a3, v7 yading@10: clip a2, a3, asr #20 yading@10: sub a4, a4, fp yading@10: clip a4, a4, asr #20 yading@10: orr a2, a2, a4, lsl #8 yading@10: strh_dpre a2, v2, lr yading@10: yading@10: ldr pc, [sp], #4 yading@10: endfunc yading@10: yading@10: function idct_col_add_armv5te yading@10: str lr, [sp, #-4]! yading@10: yading@10: idct_col yading@10: yading@10: ldr lr, [sp, #36] yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: ldrh ip, [lr] yading@10: add a2, a3, v1 yading@10: sub a3, a3, v1 yading@10: and v1, ip, #255 yading@10: aclip a2, v1, a2, asr #20 yading@10: add v1, a4, v2 yading@10: mov v1, v1, asr #20 yading@10: aclip v1, v1, ip, lsr #8 yading@10: orr a2, a2, v1, lsl #8 yading@10: ldr v1, [sp, #32] yading@10: sub a4, a4, v2 yading@10: rsb v2, v1, v1, lsl #3 yading@10: ldrh_pre ip, v2, lr yading@10: strh a2, [lr] yading@10: and a2, ip, #255 yading@10: aclip a3, a2, a3, asr #20 yading@10: mov a4, a4, asr #20 yading@10: aclip a4, a4, ip, lsr #8 yading@10: add a2, lr, #2 yading@10: str a2, [sp, #28] yading@10: orr a2, a3, a4, lsl #8 yading@10: strh a2, [v2] yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: ldrh_pre ip, lr, v1 yading@10: sub a2, a3, v3 yading@10: add a3, a3, v3 yading@10: and v3, ip, #255 yading@10: aclip a2, v3, a2, asr #20 yading@10: sub v3, a4, v4 yading@10: mov v3, v3, asr #20 yading@10: aclip v3, v3, ip, lsr #8 yading@10: orr a2, a2, v3, lsl #8 yading@10: add a4, a4, v4 yading@10: ldrh_dpre ip, v2, v1 yading@10: strh a2, [lr] yading@10: and a2, ip, #255 yading@10: aclip a3, a2, a3, asr #20 yading@10: mov a4, a4, asr #20 yading@10: aclip a4, a4, ip, lsr #8 yading@10: orr a2, a3, a4, lsl #8 yading@10: strh a2, [v2] yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: ldrh_pre ip, lr, v1 yading@10: add a2, a3, v5 yading@10: sub a3, a3, v5 yading@10: and v3, ip, #255 yading@10: aclip a2, v3, a2, asr #20 yading@10: add v3, a4, v6 yading@10: mov v3, v3, asr #20 yading@10: aclip v3, v3, ip, lsr #8 yading@10: orr a2, a2, v3, lsl #8 yading@10: sub a4, a4, v6 yading@10: ldrh_dpre ip, v2, v1 yading@10: strh a2, [lr] yading@10: and a2, ip, #255 yading@10: aclip a3, a2, a3, asr #20 yading@10: mov a4, a4, asr #20 yading@10: aclip a4, a4, ip, lsr #8 yading@10: orr a2, a3, a4, lsl #8 yading@10: strh a2, [v2] yading@10: yading@10: ldmfd sp!, {a3, a4} yading@10: ldrh_pre ip, lr, v1 yading@10: add a2, a3, v7 yading@10: sub a3, a3, v7 yading@10: and v3, ip, #255 yading@10: aclip a2, v3, a2, asr #20 yading@10: add v3, a4, fp yading@10: mov v3, v3, asr #20 yading@10: aclip v3, v3, ip, lsr #8 yading@10: orr a2, a2, v3, lsl #8 yading@10: sub a4, a4, fp yading@10: ldrh_dpre ip, v2, v1 yading@10: strh a2, [lr] yading@10: and a2, ip, #255 yading@10: aclip a3, a2, a3, asr #20 yading@10: mov a4, a4, asr #20 yading@10: aclip a4, a4, ip, lsr #8 yading@10: orr a2, a3, a4, lsl #8 yading@10: strh a2, [v2] yading@10: yading@10: ldr pc, [sp], #4 yading@10: endfunc yading@10: yading@10: function ff_simple_idct_armv5te, export=1 yading@10: stmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, lr} yading@10: yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: yading@10: sub a1, a1, #(16*7) yading@10: yading@10: bl idct_col_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_armv5te yading@10: yading@10: ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} yading@10: endfunc yading@10: yading@10: function ff_simple_idct_add_armv5te, export=1 yading@10: stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} yading@10: yading@10: mov a1, a3 yading@10: yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: yading@10: sub a1, a1, #(16*7) yading@10: yading@10: bl idct_col_add_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_add_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_add_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_add_armv5te yading@10: yading@10: add sp, sp, #8 yading@10: ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} yading@10: endfunc yading@10: yading@10: function ff_simple_idct_put_armv5te, export=1 yading@10: stmfd sp!, {a1, a2, v1, v2, v3, v4, v5, v6, v7, fp, lr} yading@10: yading@10: mov a1, a3 yading@10: yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: add a1, a1, #16 yading@10: bl idct_row_armv5te yading@10: yading@10: sub a1, a1, #(16*7) yading@10: yading@10: bl idct_col_put_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_put_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_put_armv5te yading@10: add a1, a1, #4 yading@10: bl idct_col_put_armv5te yading@10: yading@10: add sp, sp, #8 yading@10: ldmfd sp!, {v1, v2, v3, v4, v5, v6, v7, fp, pc} yading@10: endfunc