summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libavcodec/bfin/config_bfin.h11
-rw-r--r--libavcodec/bfin/dsputil_bfin.c2
-rw-r--r--libavcodec/bfin/dsputil_bfin.h6
-rw-r--r--libavcodec/bfin/fdct_bfin.S11
-rw-r--r--libavcodec/bfin/idct_bfin.S13
-rw-r--r--libavcodec/bfin/vp3_idct_bfin.S11
6 files changed, 45 insertions, 9 deletions
diff --git a/libavcodec/bfin/config_bfin.h b/libavcodec/bfin/config_bfin.h
index 85b478fb08..0f0eab6bef 100644
--- a/libavcodec/bfin/config_bfin.h
+++ b/libavcodec/bfin/config_bfin.h
@@ -35,10 +35,14 @@ DEFUN(put_pixels_clamped,mL1,
#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; \
@@ -50,6 +54,11 @@ DEFUN(put_pixels_clamped,mL1,
#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
diff --git a/libavcodec/bfin/dsputil_bfin.c b/libavcodec/bfin/dsputil_bfin.c
index 93b324cfd2..a72459948c 100644
--- a/libavcodec/bfin/dsputil_bfin.c
+++ b/libavcodec/bfin/dsputil_bfin.c
@@ -173,7 +173,7 @@ static int bfin_vsad (void *c, uint8_t *blk1, uint8_t *blk2, int stride, int h)
+ 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)
{
diff --git a/libavcodec/bfin/dsputil_bfin.h b/libavcodec/bfin/dsputil_bfin.h
index 5731f4f53c..411c8ea73c 100644
--- a/libavcodec/bfin/dsputil_bfin.h
+++ b/libavcodec/bfin/dsputil_bfin.h
@@ -24,7 +24,13 @@
#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
diff --git a/libavcodec/bfin/fdct_bfin.S b/libavcodec/bfin/fdct_bfin.S
index 9f3ef1fa8a..03f2709e3c 100644
--- a/libavcodec/bfin/fdct_bfin.S
+++ b/libavcodec/bfin/fdct_bfin.S
@@ -129,23 +129,30 @@ root:/u/ffmpeg/bhead/libavcodec>
#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
diff --git a/libavcodec/bfin/idct_bfin.S b/libavcodec/bfin/idct_bfin.S
index e40e5e0085..7bb104038d 100644
--- a/libavcodec/bfin/idct_bfin.S
+++ b/libavcodec/bfin/idct_bfin.S
@@ -57,7 +57,11 @@ IDCT BFINidct: 88.3 kdct/s
#include "config_bfin.h"
+#ifdef __FDPIC__
.section .l1.data.B,"aw",@progbits
+#else
+.data
+#endif
.align 4;
coefs:
@@ -72,7 +76,9 @@ 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
@@ -81,6 +87,7 @@ vtmp: .space 256
#define TMP2 FP-16
+.text
DEFUN(idct,mL1,
(DCTELEM *block)):
@@ -88,8 +95,8 @@ DEFUN(idct,mL1,
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
diff --git a/libavcodec/bfin/vp3_idct_bfin.S b/libavcodec/bfin/vp3_idct_bfin.S
index 1ed9209cdd..ec8c1bee77 100644
--- a/libavcodec/bfin/vp3_idct_bfin.S
+++ b/libavcodec/bfin/vp3_idct_bfin.S
@@ -30,7 +30,11 @@ Registers Used : A0, A1, R0-R7, I0-I3, B0, B2, B3, M0-M2, L0-L3, P0-P5, LC0.
#include "config_bfin.h"
+#ifdef __FDPIC__
.section .l1.data.B,"aw",@progbits
+#else
+.data
+#endif
.align 4;
coefs:
@@ -45,7 +49,9 @@ coefs:
.short 0x18F9; //cos(7pi/16)
.short 0x7D8A; //cos(pi/16)
+#ifdef __FDPIC__
.section .l1.data.A
+#endif
vtmp: .space 256
@@ -54,6 +60,7 @@ vtmp: .space 256
#define TMP2 FP-16
+.text
DEFUN(vp3_idct,mL1,
(DCTELEM *block)):
@@ -61,8 +68,8 @@ DEFUN(vp3_idct,mL1,
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