[FFmpeg-devel] [PATCH v3 4/4] avcodec/mips: cabac.h provide fallback for wsbh instruction
殷时友
yinshiyou-hf at loongson.cn
Wed Jul 28 04:53:07 EEST 2021
> 2021年7月23日 下午1:53,Jiaxun Yang <jiaxun.yang at flygoat.com> 写道:
>
> 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>
> ---
> 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"
> --
> 2.32.0
LGTM
More information about the ffmpeg-devel
mailing list