#ifndef DEFUN
+#define mL3 .text
#ifndef mL1
+#ifdef __FDPIC__
#define mL1 .l1.text
+#else
+#define mL1 mL3
+#endif
#endif
-#define mL3 .text
#define DEFUN(fname,where,interface) \
.section where; \
#define DEFUN_END(fname) \
.size _ff_bfin_ ## fname, . - _ff_bfin_ ## fname
+#ifdef __FDPIC__
+#define RELOC(reg,got,obj) reg = [got + obj@GOT17M4]
+#else
+#define RELOC(reg,got,obj) reg.L = obj; reg.H = obj
+#endif
#endif
+ ff_bfin_z_sad16x16 (blk2,blk2+stride,stride<<1,stride<<1,h);
}
-static uint8_t vtmp_blk[256] __attribute__((l1_data_B));
+static uint8_t vtmp_blk[256] attribute_l1_data_b;
static int bfin_pix_abs16_x2 (void *c, uint8_t *blk1, uint8_t *blk2, int line_size, int h)
{
#ifndef FFMPEG_DSPUTIL_BFIN_H
#define FFMPEG_DSPUTIL_BFIN_H
+#ifdef __FDPIC__
#define attribute_l1_text __attribute__ ((l1_text))
+#define attribute_l1_data_b __attribute__((l1_data_B))
+#else
+#define attribute_l1_text
+#define attribute_l1_data_b
+#endif
#ifdef BFIN_PROFILE
#include "config_bfin.h"
+#ifdef __FDPIC__
.section .l1.data.B,"aw",@progbits
+#else
+.data
+#endif
.align 4;
dct_coeff:
.short 0x5a82, 0x2d41, 0x187e, 0x3b21, 0x0c7c, 0x3ec5, 0x238e, 0x3537;
+#ifdef __FDPIC__
.section .l1.data.A,"aw",@progbits
+#endif
.align 4
vtmp: .space 128
+.text
DEFUN(fdct,mL1,
(DCTELEM *block)):
[--SP] = (R7:4, P5:3); // Push the registers onto the stack.
b0 = r0;
- r0 = [P3+dct_coeff@GOT17M4];
+ RELOC(r0, P3, dct_coeff);
b3 = r0;
- r0 = [P3+vtmp@GOT17M4];
+ RELOC(r0, P3, vtmp);
b2 = r0;
L3 = 16; // L3 is set to 16 to make the coefficient
#include "config_bfin.h"
+#ifdef __FDPIC__
.section .l1.data.B,"aw",@progbits
+#else
+.data
+#endif
.align 4;
coefs:
.short 0x18F9; //cos(7pi/16)
.short 0x7D8A; //cos(pi/16)
-.section .l1.data.A
+#ifdef __FDPIC__
+.section .l1.data.A,"aw",@progbits
+#endif
vtmp: .space 256
#define TMP2 FP-16
+.text
DEFUN(idct,mL1,
(DCTELEM *block)):
link 16;
[--SP] = (R7:4, P5:3); // Push the registers onto the stack.
B0 = R0; // Pointer to Input matrix
- R1 = [P3+coefs@GOT17M4]; // Pointer to Coefficients
- R2 = [P3+vtmp@GOT17M4]; // Pointer to Temporary matrix
+ RELOC(R1, P3, coefs); // Pointer to Coefficients
+ RELOC(R2, P3, vtmp); // Pointer to Temporary matrix
B3 = R1;
B2 = R2;
L3 = 20; // L3 is used for making the coefficient array
#include "config_bfin.h"
+#ifdef __FDPIC__
.section .l1.data.B,"aw",@progbits
+#else
+.data
+#endif
.align 4;
coefs:
.short 0x18F9; //cos(7pi/16)
.short 0x7D8A; //cos(pi/16)
+#ifdef __FDPIC__
.section .l1.data.A
+#endif
vtmp: .space 256
#define TMP2 FP-16
+.text
DEFUN(vp3_idct,mL1,
(DCTELEM *block)):
link 16;
[--SP] = (R7:4, P5:3); // Push the registers onto the stack.
B0 = R0; // Pointer to Input matrix
- R1 = [P3+coefs@GOT17M4]; // Pointer to Coefficients
- R2 = [P3+vtmp@GOT17M4]; // Pointer to Temporary matrix
+ RELOC(R1, P3, coefs); // Pointer to Coefficients
+ RELOC(R2, P3, vtmp); // Pointer to Temporary matrix
B3 = R1;
B2 = R2;
L3 = 20; // L3 is used for making the coefficient array