summaryrefslogtreecommitdiff
path: root/libavcodec/mips/vp8dsp_mmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavcodec/mips/vp8dsp_mmi.c')
-rw-r--r--libavcodec/mips/vp8dsp_mmi.c263
1 files changed, 199 insertions, 64 deletions
diff --git a/libavcodec/mips/vp8dsp_mmi.c b/libavcodec/mips/vp8dsp_mmi.c
index b352906f5b..327eaf561e 100644
--- a/libavcodec/mips/vp8dsp_mmi.c
+++ b/libavcodec/mips/vp8dsp_mmi.c
@@ -1128,12 +1128,14 @@ void ff_vp8_luma_dc_wht_dc_mmi(int16_t block[4][4][16], int16_t dc[16])
void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
{
#if 1
- DECLARE_ALIGNED(8, const uint64_t, ff_ph_4e7b) = {0x4e7b4e7b4e7b4e7bULL};
- DECLARE_ALIGNED(8, const uint64_t, ff_ph_22a3) = {0x22a322a322a322a3ULL};
double ftmp[12];
uint32_t tmp[1];
+ union av_intfloat64 ff_ph_4e7b_u;
+ union av_intfloat64 ff_ph_22a3_u;
DECLARE_VAR_LOW32;
DECLARE_VAR_ALL64;
+ ff_ph_4e7b_u.i = 0x4e7b4e7b4e7b4e7bULL;
+ ff_ph_22a3_u.i = 0x22a322a322a322a3ULL;
__asm__ volatile (
"pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t"
@@ -1253,8 +1255,8 @@ void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
[tmp0]"=&r"(tmp[0])
: [dst0]"r"(dst), [dst1]"r"(dst+stride),
[dst2]"r"(dst+2*stride), [dst3]"r"(dst+3*stride),
- [block]"r"(block), [ff_pw_4]"f"(ff_pw_4),
- [ff_ph_4e7b]"f"(ff_ph_4e7b), [ff_ph_22a3]"f"(ff_ph_22a3)
+ [block]"r"(block), [ff_pw_4]"f"(ff_pw_4.f),
+ [ff_ph_4e7b]"f"(ff_ph_4e7b_u.f), [ff_ph_22a3]"f"(ff_ph_22a3_u.f)
: "memory"
);
#else
@@ -1595,8 +1597,16 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
const uint64_t *filter = fourtap_subpel_filters[mx - 1];
double ftmp[9];
uint32_t tmp[1];
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
mips_reg src1, dst1;
DECLARE_VAR_ALL64;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7];
@@ -1644,11 +1654,11 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[dst1]"=&r"(dst1), [src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -1672,7 +1682,16 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
const uint64_t *filter = fourtap_subpel_filters[mx - 1];
double ftmp[9];
uint32_t tmp[1];
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
DECLARE_VAR_ALL64;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7];
@@ -1705,11 +1724,11 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
RESTRICT_ASM_ALL64
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -1733,7 +1752,15 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
const uint64_t *filter = fourtap_subpel_filters[mx - 1];
double ftmp[6];
uint32_t tmp[1];
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
DECLARE_VAR_LOW32;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[-1] + filter[3] * src[1] - filter[4] * src[2] + 64) >> 7];
@@ -1760,11 +1787,11 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
RESTRICT_ASM_LOW32
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -1789,7 +1816,19 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[9];
uint32_t tmp[1];
mips_reg src1, dst1;
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_ALL64;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[ 0] = cm[(filter[2]*src[ 0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[ 1] - filter[4]*src[ 2] + filter[5]*src[ 3] + 64) >> 7];
@@ -1837,12 +1876,12 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[dst1]"=&r"(dst1), [src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -1866,7 +1905,19 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
const uint64_t *filter = fourtap_subpel_filters[mx - 1];
double ftmp[9];
uint32_t tmp[1];
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_ALL64;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[0] = cm[(filter[2]*src[0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[1] - filter[4]*src[2] + filter[5]*src[ 3] + 64) >> 7];
@@ -1899,12 +1950,12 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
RESTRICT_ASM_ALL64
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -1928,7 +1979,19 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
const uint64_t *filter = fourtap_subpel_filters[mx - 1];
double ftmp[6];
uint32_t tmp[1];
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_LOW32;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[0] = cm[(filter[2]*src[0] - filter[1]*src[-1] + filter[0]*src[-2] + filter[3]*src[1] - filter[4]*src[2] + filter[5]*src[ 3] + 64) >> 7];
@@ -1955,12 +2018,12 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
RESTRICT_ASM_LOW32
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -1985,7 +2048,15 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[9];
uint32_t tmp[1];
mips_reg src0, src1, dst0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
DECLARE_VAR_ALL64;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7];
@@ -2034,11 +2105,11 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -2063,7 +2134,15 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[9];
uint32_t tmp[1];
mips_reg src1;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
DECLARE_VAR_ALL64;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7];
@@ -2097,11 +2176,11 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -2126,7 +2205,15 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[6];
uint32_t tmp[1];
mips_reg src1;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
DECLARE_VAR_LOW32;
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
/*
dst[0] = cm[(filter[2] * src[0] - filter[1] * src[ -srcstride] + filter[3] * src[ srcstride] - filter[4] * src[ 2*srcstride] + 64) >> 7];
@@ -2154,11 +2241,11 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter1]"f"(filter[1]), [filter2]"f"(filter[2]),
- [filter3]"f"(filter[3]), [filter4]"f"(filter[4])
+ [filter1]"f"(filter1.f), [filter2]"f"(filter2.f),
+ [filter3]"f"(filter3.f), [filter4]"f"(filter4.f)
: "memory"
);
#else
@@ -2183,7 +2270,19 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[9];
uint32_t tmp[1];
mips_reg src0, src1, dst0;
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_ALL64;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7];
@@ -2232,12 +2331,12 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -2262,7 +2361,19 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[9];
uint32_t tmp[1];
mips_reg src1;
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_ALL64;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7];
@@ -2296,12 +2407,12 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -2326,7 +2437,19 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
double ftmp[6];
uint32_t tmp[1];
mips_reg src1;
+ union av_intfloat64 filter0;
+ union av_intfloat64 filter1;
+ union av_intfloat64 filter2;
+ union av_intfloat64 filter3;
+ union av_intfloat64 filter4;
+ union av_intfloat64 filter5;
DECLARE_VAR_LOW32;
+ filter0.i = filter[0];
+ filter1.i = filter[1];
+ filter2.i = filter[2];
+ filter3.i = filter[3];
+ filter4.i = filter[4];
+ filter5.i = filter[5];
/*
dst[0] = cm[(filter[2]*src[0] - filter[1]*src[0-srcstride] + filter[0]*src[0-2*srcstride] + filter[3]*src[0+srcstride] - filter[4]*src[0+2*srcstride] + filter[5]*src[0+3*srcstride] + 64) >> 7];
@@ -2354,12 +2477,12 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src)
- : [ff_pw_64]"f"(ff_pw_64),
+ : [ff_pw_64]"f"(ff_pw_64.f),
[srcstride]"r"((mips_reg)srcstride),
[dststride]"r"((mips_reg)dststride),
- [filter0]"f"(filter[0]), [filter1]"f"(filter[1]),
- [filter2]"f"(filter[2]), [filter3]"f"(filter[3]),
- [filter4]"f"(filter[4]), [filter5]"f"(filter[5])
+ [filter0]"f"(filter0.f), [filter1]"f"(filter1.f),
+ [filter2]"f"(filter2.f), [filter3]"f"(filter3.f),
+ [filter4]"f"(filter4.f), [filter5]"f"(filter5.f)
: "memory"
);
#else
@@ -2847,11 +2970,13 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int a = 8 - mx, b = mx;
+ union mmi_intfloat64 a, b;
double ftmp[7];
uint32_t tmp[1];
mips_reg dst0, src0;
DECLARE_VAR_ALL64;
+ a.i = 8 - mx;
+ b.i = mx;
/*
dst[0] = (a * src[0] + b * src[1] + 4) >> 3;
@@ -2900,10 +3025,10 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
[dst0]"=&r"(dst0), [src0]"=&r"(src0),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [a]"+&f"(a), [b]"+&f"(b)
+ [a]"+&f"(a.f), [b]"+&f"(b.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else
@@ -2923,11 +3048,13 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int c = 8 - my, d = my;
+ union mmi_intfloat64 c, d;
double ftmp[7];
uint32_t tmp[1];
mips_reg src0, src1, dst0;
DECLARE_VAR_ALL64;
+ c.i = 8 - my;
+ d.i = my;
/*
dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3;
@@ -2968,10 +3095,10 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [c]"+&f"(c), [d]"+&f"(d)
+ [c]"+&f"(c.f), [d]"+&f"(d.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else
@@ -3025,10 +3152,12 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int a = 8 - mx, b = mx;
+ union mmi_intfloat64 a, b;
double ftmp[7];
uint32_t tmp[1];
DECLARE_VAR_ALL64;
+ a.i = 8 - mx;
+ b.i = mx;
/*
dst[0] = (a * src[0] + b * src[1] + 4) >> 3;
@@ -3062,10 +3191,10 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
RESTRICT_ASM_ALL64
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [a]"+&f"(a), [b]"+&f"(b)
+ [a]"+&f"(a.f), [b]"+&f"(b.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else
@@ -3085,11 +3214,13 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int c = 8 - my, d = my;
+ union mmi_intfloat64 c, d;
double ftmp[7];
uint32_t tmp[1];
mips_reg src1;
DECLARE_VAR_ALL64;
+ c.i = 8 - my;
+ d.i = my;
/*
dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3;
@@ -3124,10 +3255,10 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [c]"+&f"(c), [d]"+&f"(d)
+ [c]"+&f"(c.f), [d]"+&f"(d.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else
@@ -3181,11 +3312,13 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int a = 8 - mx, b = mx;
+ union mmi_intfloat64 a, b;
double ftmp[5];
uint32_t tmp[1];
DECLARE_VAR_LOW32;
DECLARE_VAR_ALL64;
+ a.i = 8 - mx;
+ b.i = mx;
/*
dst[0] = (a * src[0] + b * src[1] + 4) >> 3;
@@ -3215,10 +3348,10 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
RESTRICT_ASM_ALL64
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [a]"+&f"(a), [b]"+&f"(b)
+ [a]"+&f"(a.f), [b]"+&f"(b.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else
@@ -3238,12 +3371,14 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
ptrdiff_t sstride, int h, int mx, int my)
{
#if 1
- int c = 8 - my, d = my;
+ union mmi_intfloat64 c, d;
double ftmp[7];
uint32_t tmp[1];
mips_reg src1;
DECLARE_VAR_LOW32;
DECLARE_VAR_ALL64;
+ c.i = 8 - my;
+ d.i = my;
/*
dst[0] = (c * src[0] + d * src[ sstride] + 4) >> 3;
@@ -3274,10 +3409,10 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
[src1]"=&r"(src1),
[h]"+&r"(h),
[dst]"+&r"(dst), [src]"+&r"(src),
- [c]"+&f"(c), [d]"+&f"(d)
+ [c]"+&f"(c.f), [d]"+&f"(d.f)
: [sstride]"r"((mips_reg)sstride),
[dstride]"r"((mips_reg)dstride),
- [ff_pw_4]"f"(ff_pw_4)
+ [ff_pw_4]"f"(ff_pw_4.f)
: "memory"
);
#else