mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
a1cd62883f
commit
2323d3a923
|
@ -77,7 +77,15 @@ static av_always_inline int get_cabac_inline_mips(CABACContext *c,
|
||||||
"lhu %[tmp0], 0(%[c_bytestream]) \n\t"
|
"lhu %[tmp0], 0(%[c_bytestream]) \n\t"
|
||||||
#else
|
#else
|
||||||
"lhu %[tmp0], 0(%[c_bytestream]) \n\t"
|
"lhu %[tmp0], 0(%[c_bytestream]) \n\t"
|
||||||
|
#if HAVE_MIPS32R2 || HAVE_MIPS64R2
|
||||||
"wsbh %[tmp0], %[tmp0] \n\t"
|
"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
|
#endif
|
||||||
PTR_SLL "%[tmp0], %[tmp0], 0x01 \n\t"
|
PTR_SLL "%[tmp0], %[tmp0], 0x01 \n\t"
|
||||||
PTR_SUBU "%[tmp0], %[tmp0], %[cabac_mask] \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"
|
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
||||||
#else
|
#else
|
||||||
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
||||||
|
#if HAVE_MIPS32R2 || HAVE_MIPS64R2
|
||||||
"wsbh %[tmp1], %[tmp1] \n\t"
|
"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
|
#endif
|
||||||
PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t"
|
PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t"
|
||||||
PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \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"
|
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
||||||
#else
|
#else
|
||||||
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
"lhu %[tmp1], 0(%[c_bytestream]) \n\t"
|
||||||
|
#if HAVE_MIPS32R2 || HAVE_MIPS64R2
|
||||||
"wsbh %[tmp1], %[tmp1] \n\t"
|
"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
|
#endif
|
||||||
PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t"
|
PTR_SLL "%[tmp1], %[tmp1], 0x01 \n\t"
|
||||||
PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t"
|
PTR_SUBU "%[tmp1], %[tmp1], %[cabac_mask] \n\t"
|
||||||
|
|
Loading…
Reference in New Issue