diff options
author | Jiaxun Yang <jiaxun.yang@flygoat.com> | 2021-07-23 13:53:44 +0800 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2021-07-28 23:31:48 +0200 |
commit | 2323d3a92376f34c4499ba9851a52e7ca9031d46 (patch) | |
tree | de6696a65f41b1c8b87e43d0417f5f6aec40b836 /libavcodec | |
parent | a1cd62883f84072b7c9fa13e9a2512e13618399e (diff) | |
download | ffmpeg-2323d3a92376f34c4499ba9851a52e7ca9031d46.tar.gz |
avcodec/mips: cabac.h provide fallback for wsbh instruction
wsbh is only avilable for MIPS R2+.
Provide a fallback for older processors.
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
Reviewed-by: Shiyou Yin <yinshiyou-hf@loongson.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/mips/cabac.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/libavcodec/mips/cabac.h b/libavcodec/mips/cabac.h index f1e953dabe..39c308c7e0 100644 --- a/libavcodec/mips/cabac.h +++ b/libavcodec/mips/cabac.h @@ -77,7 +77,15 @@ static av_always_inline int get_cabac_inline_mips(CABACContext *c, "lhu %[tmp0], 0(%[c_bytestream]) \n\t" #else "lhu %[tmp0], 0(%[c_bytestream]) \n\t" +#if HAVE_MIPS32R2 || HAVE_MIPS64R2 "wsbh %[tmp0], %[tmp0] \n\t" +#else + "and %[tmp1], %[tmp0], 0xff00ff00 \n\t" + "srl %[tmp1], %[tmp1], 8 \n\t" + "and %[tmp0], %[tmp0], 0x00ff00ff \n\t" + "sll %[tmp0], %[tmp0], 8 \n\t" + "or %[tmp0], %[tmp0], %[tmp1] \n\t" +#endif #endif PTR_SLL "%[tmp0], %[tmp0], 0x01 \n\t" PTR_SUBU "%[tmp0], %[tmp0], %[cabac_mask] \n\t" @@ -125,7 +133,15 @@ static av_always_inline int get_cabac_bypass_mips(CABACContext *c) "lhu %[tmp1], 0(%[c_bytestream]) \n\t" #else "lhu %[tmp1], 0(%[c_bytestream]) \n\t" +#if HAVE_MIPS32R2 || HAVE_MIPS64R2 "wsbh %[tmp1], %[tmp1] \n\t" +#else + "and %[tmp0], %[tmp1], 0xff00ff00 \n\t" + "srl %[tmp0], %[tmp0], 8 \n\t" + "and %[tmp1], %[tmp1], 0x00ff00ff \n\t" + "sll %[tmp1], %[tmp1], 8 \n\t" + "or %[tmp1], %[tmp1], %[tmp0] \n\t" +#endif #endif PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t" PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t" @@ -169,7 +185,15 @@ static av_always_inline int get_cabac_bypass_sign_mips(CABACContext *c, int val) "lhu %[tmp1], 0(%[c_bytestream]) \n\t" #else "lhu %[tmp1], 0(%[c_bytestream]) \n\t" +#if HAVE_MIPS32R2 || HAVE_MIPS64R2 "wsbh %[tmp1], %[tmp1] \n\t" +#else + "and %[tmp0], %[tmp1], 0xff00ff00 \n\t" + "srl %[tmp0], %[tmp0], 8 \n\t" + "and %[tmp1], %[tmp1], 0x00ff00ff \n\t" + "sll %[tmp1], %[tmp1], 8 \n\t" + "or %[tmp1], %[tmp1], %[tmp0] \n\t" +#endif #endif PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t" PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t" |