[FFmpeg-cvslog] avcodec/mips: cabac.h provide fallback for wsbh instruction
Jiaxun Yang
git at videolan.org
Thu Jul 29 00:32:56 EEST 2021
ffmpeg | branch: master | Jiaxun Yang <jiaxun.yang at flygoat.com> | Fri Jul 23 13:53:44 2021 +0800| [2323d3a92376f34c4499ba9851a52e7ca9031d46] | committer: Michael Niedermayer
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 at flygoat.com>
Reviewed-by: Shiyou Yin <yinshiyou-hf at loongson.cn>
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2323d3a92376f34c4499ba9851a52e7ca9031d46
---
libavcodec/mips/cabac.h | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
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"
More information about the ffmpeg-cvslog
mailing list