[FFmpeg-devel] [PATCH 1/3] libavcodec/mips: Fix specification of instruction name

yinshiyou-hf at loongson.cn yinshiyou-hf at loongson.cn
Fri May 28 12:21:39 EEST 2021




> -----原始邮件-----
> 发件人: "Jin Bo" <jinbo at loongson.cn>
> 发送时间: 2021-05-28 10:04:39 (星期五)
> 收件人: ffmpeg-devel at ffmpeg.org
> 抄送: "Jin Bo" <jinbo at loongson.cn>
> 主题: [FFmpeg-devel] [PATCH 1/3] libavcodec/mips: Fix specification of instruction name
> 
> 1.'xor,or,and' to 'pxor,por,pand'. In the case of operating FPR,
>   gcc supports both of them, clang only supports the second type.
> 2.'dsrl,srl' to 'ssrld,ssrlw'. In the case of operating FPR, gcc
>   supports both of them, clang only supports the second type.
> 
> Signed-off-by: Jin Bo <jinbo at loongson.cn>
> ---
>  libavcodec/mips/blockdsp_mmi.c    |   8 +-
>  libavcodec/mips/h264chroma_mmi.c  |  20 +--
>  libavcodec/mips/h264dsp_mmi.c     | 288 +++++++++++++++++++-------------------
>  libavcodec/mips/h264pred_mmi.c    |  18 +--
>  libavcodec/mips/h264qpel_mmi.c    |  26 ++--
>  libavcodec/mips/hevcdsp_mmi.c     |  32 ++---
>  libavcodec/mips/hpeldsp_mmi.c     |  26 ++--
>  libavcodec/mips/idctdsp_mmi.c     |   2 +-
>  libavcodec/mips/mpegvideo_mmi.c   |  94 ++++++-------
>  libavcodec/mips/pixblockdsp_mmi.c |   8 +-
>  libavcodec/mips/simple_idct_mmi.c |  14 +-
>  libavcodec/mips/vc1dsp_mmi.c      |  34 ++---
>  libavcodec/mips/vp3dsp_idct_mmi.c | 132 ++++++++---------
>  libavcodec/mips/vp8dsp_mmi.c      |  80 +++++------
>  libavcodec/mips/vp9_mc_mmi.c      |  10 +-
>  libavcodec/mips/wmv2dsp_mmi.c     |   2 +-
>  16 files changed, 397 insertions(+), 397 deletions(-)
> 
> diff --git a/libavcodec/mips/blockdsp_mmi.c b/libavcodec/mips/blockdsp_mmi.c
> index 68641e2..8b5c7e9 100644
> --- a/libavcodec/mips/blockdsp_mmi.c
> +++ b/libavcodec/mips/blockdsp_mmi.c
> @@ -76,8 +76,8 @@ void ff_clear_block_mmi(int16_t *block)
>      double ftmp[2];
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00)
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10)
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20)
> @@ -97,8 +97,8 @@ void ff_clear_blocks_mmi(int16_t *block)
>      double ftmp[2];
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp1]                \n\t"
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x00)
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x10)
>          MMI_SQC1(%[ftmp0], %[ftmp1], %[block], 0x20)
> diff --git a/libavcodec/mips/h264chroma_mmi.c b/libavcodec/mips/h264chroma_mmi.c
> index 739dd7d..dbcba10 100644
> --- a/libavcodec/mips/h264chroma_mmi.c
> +++ b/libavcodec/mips/h264chroma_mmi.c
> @@ -72,7 +72,7 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          A = 64 - D - B - C;
>  
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
>              "dli        %[tmp0],    0x06                               \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]           \n\t"
>              "pshufh     %[B],       %[B],           %[ftmp0]           \n\t"
> @@ -172,7 +172,7 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          A = 64 - E;
>  
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
>              "dli        %[tmp0],    0x06                               \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]           \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]           \n\t"
> @@ -221,7 +221,7 @@ void ff_put_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          A = 64 - E;
>  
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]           \n\t"
>              "dli        %[tmp0],    0x06                               \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]           \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]           \n\t"
> @@ -328,7 +328,7 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          C = (y << 3) - D;
>          A = 64 - D - B - C;
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
>              "dli        %[tmp0],    0x06                           \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]       \n\t"
>              "pshufh     %[B],       %[B],           %[ftmp0]       \n\t"
> @@ -396,7 +396,7 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          E = x << 3;
>          A = 64 - E;
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
>              "dli        %[tmp0],    0x06                           \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]       \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]       \n\t"
> @@ -446,7 +446,7 @@ void ff_avg_h264_chroma_mc8_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>          E = y << 3;
>          A = 64 - E;
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]       \n\t"
>              "dli        %[tmp0],    0x06                           \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]       \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]       \n\t"
> @@ -509,7 +509,7 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>  
>      if (D) {
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              "dli        %[tmp0],    0x06                                \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]            \n\t"
>              "pshufh     %[B],       %[B],           %[ftmp0]            \n\t"
> @@ -559,7 +559,7 @@ void ff_put_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>      } else if (E) {
>          const int step = C ? stride : 1;
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              "dli        %[tmp0],    0x06                                \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]            \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]            \n\t"
> @@ -633,7 +633,7 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>  
>      if (D) {
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              "dli        %[tmp0],    0x06                                \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]            \n\t"
>              "pshufh     %[B],       %[B],           %[ftmp0]            \n\t"
> @@ -685,7 +685,7 @@ void ff_avg_h264_chroma_mc4_mmi(uint8_t *dst, uint8_t *src, ptrdiff_t stride,
>      } else if (E) {
>          const int step = C ? stride : 1;
>          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              "dli        %[tmp0],    0x06                                \n\t"
>              "pshufh     %[A],       %[A],           %[ftmp0]            \n\t"
>              "pshufh     %[E],       %[E],           %[ftmp0]            \n\t"
> diff --git a/libavcodec/mips/h264dsp_mmi.c b/libavcodec/mips/h264dsp_mmi.c
> index d4fcef0..fe12b28 100644
> --- a/libavcodec/mips/h264dsp_mmi.c
> +++ b/libavcodec/mips/h264dsp_mmi.c
> @@ -34,7 +34,7 @@ void ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride)
>      DECLARE_VAR_LOW32;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          MMI_LDC1(%[ftmp1], %[src], 0x00)
>          MMI_LDC1(%[ftmp2], %[src], 0x08)
>          MMI_LDC1(%[ftmp3], %[src], 0x10)
> @@ -89,7 +89,7 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>          MMI_LDC1(%[ftmp2], %[block], 0x10)
>          MMI_LDC1(%[ftmp3], %[block], 0x18)
>          /* memset(block, 0, 32) */
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          "gssqc1     %[ftmp4],   %[ftmp4],       0x00(%[block])          \n\t"
>          "gssqc1     %[ftmp4],   %[ftmp4],       0x10(%[block])          \n\t"
>          "dli        %[tmp0],    0x01                                    \n\t"
> @@ -127,7 +127,7 @@ void ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>          "psubh      %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
>          MMI_ULWC1(%[ftmp2], %[dst], 0x00)
>          MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00)
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "psrah      %[ftmp3],   %[ftmp10],      %[ftmp9]                \n\t"
>          "psrah      %[ftmp4],   %[ftmp11],      %[ftmp9]                \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
> @@ -419,7 +419,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>          "psubh      %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
>          MMI_SDC1(%[ftmp0], $sp, 0x10)
>          "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
>          MMI_SDC1(%[ftmp2], %[block], 0x00)
>          MMI_SDC1(%[ftmp2], %[block], 0x08)
>          MMI_SDC1(%[ftmp2], %[block], 0x10)
> @@ -555,7 +555,7 @@ void ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          MMI_SDC1(%[ftmp7], $sp, 0x18)
>          "dmfc1      %[tmp2],    %[ftmp0]                                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          MMI_ULWC1(%[ftmp6], %[addr0], 0x00)
>          MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00)
>          "psrah      %[ftmp2],   %[ftmp2],       %[ftmp10]               \n\t"
> @@ -646,7 +646,7 @@ void ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>  
>      __asm__ volatile (
>          "mtc1       %[dc],      %[ftmp5]                                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
>          MMI_ULWC1(%[ftmp1], %[dst0], 0x00)
>          MMI_ULWC1(%[ftmp2], %[dst1], 0x00)
> @@ -690,7 +690,7 @@ void ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride)
>  
>      __asm__ volatile (
>          "mtc1       %[dc],      %[ftmp5]                                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
>          MMI_LDC1(%[ftmp1], %[dst0], 0x00)
>          MMI_LDC1(%[ftmp2], %[dst1], 0x00)
> @@ -929,7 +929,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "packsswh   %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
>          "packsswh   %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
>          "dmfc1      %[tmp1],    %[ftmp0]                                \n\t"
> -        "dsrl       %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp0]                                \n\t"
>          "sh         %[tmp1],    0x00(%[output])                         \n\t"
>          "sh         %[input],   0x80(%[output])                         \n\t"
> @@ -938,7 +938,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "sh         %[tmp1],    0x20(%[output])                         \n\t"
>          "sh         %[input],   0xa0(%[output])                         \n\t"
>          "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
> -        "dsrl       %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp2]                                \n\t"
>          "sh         %[tmp1],    0x40(%[output])                         \n\t"
>          "sh         %[input],   0xc0(%[output])                         \n\t"
> @@ -963,7 +963,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "packsswh   %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
>          "packsswh   %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
>          "dmfc1      %[tmp1],    %[ftmp3]                                \n\t"
> -        "dsrl       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp3]                                \n\t"
>          "sh         %[tmp1],    0x100(%[output])                        \n\t"
>          "sh         %[input],   0x180(%[output])                        \n\t"
> @@ -972,7 +972,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "sh         %[tmp1],    0x120(%[output])                        \n\t"
>          "sh         %[input],   0x1a0(%[output])                        \n\t"
>          "dmfc1      %[tmp1],    %[ftmp4]                                \n\t"
> -        "dsrl       %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp4]                                \n\t"
>          "sh         %[tmp1],    0x140(%[output])                        \n\t"
>          "sh         %[input],   0x1c0(%[output])                        \n\t"
> @@ -1016,7 +1016,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "packsswh   %[ftmp0],   %[ftmp0],       %[ftmp1]                \n\t"
>          "packsswh   %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
>          "dmfc1      %[tmp1],    %[ftmp0]                                \n\t"
> -        "dsrl       %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp0],   %[ftmp0],       %[ftmp9]                \n\t"
>          "sh         %[tmp1],    0x00(%[output])                         \n\t"
>          "mfc1       %[input],   %[ftmp0]                                \n\t"
>          "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
> @@ -1025,7 +1025,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          PTR_SRL    "%[input],   %[input],       0x10                    \n\t"
>          "dmfc1      %[tmp1],    %[ftmp2]                                \n\t"
>          "sh         %[input],   0xa0(%[output])                         \n\t"
> -        "dsrl       %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp2],   %[ftmp2],       %[ftmp9]                \n\t"
>          "sh         %[tmp1],    0x40(%[output])                         \n\t"
>          "mfc1       %[input],   %[ftmp2]                                \n\t"
>          "dsrl       %[tmp1],    %[tmp1],        0x10                    \n\t"
> @@ -1050,7 +1050,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "packsswh   %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
>          "packsswh   %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
>          "dmfc1      %[tmp1],    %[ftmp3]                                \n\t"
> -        "dsrl       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp3]                                \n\t"
>          "sh         %[tmp1],    0x100(%[output])                        \n\t"
>          "sh         %[input],   0x180(%[output])                        \n\t"
> @@ -1059,7 +1059,7 @@ void ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input,
>          "sh         %[tmp1],    0x120(%[output])                        \n\t"
>          "sh         %[input],   0x1a0(%[output])                        \n\t"
>          "dmfc1      %[tmp1],    %[ftmp4]                                \n\t"
> -        "dsrl       %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
> +        "ssrld      %[ftmp4],   %[ftmp4],       %[ftmp9]                \n\t"
>          "mfc1       %[input],   %[ftmp4]                                \n\t"
>          "sh         %[tmp1],    0x140(%[output])                        \n\t"
>          "sh         %[input],   0x1c0(%[output])                        \n\t"
> @@ -1144,7 +1144,7 @@ void ff_h264_weight_pixels16_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
>  
>      for (y=0; y<height; y++,="" block+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_LDC1(%[ftmp1], %[block0], 0x00)
>              MMI_LDC1(%[ftmp2], %[block1], 0x00)
>              "mtc1       %[weight],  %[ftmp3]                            \n\t"
> @@ -1198,7 +1198,7 @@ void ff_h264_biweight_pixels16_8_mmi(uint8_t *dst, uint8_t *src,
>  
>      for (y=0; y<height; y++,="" dst+="stride," src+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_LDC1(%[ftmp1], %[src0], 0x00)
>              MMI_LDC1(%[ftmp2], %[dst0], 0x00)
>              "mtc1       %[weights], %[ftmp3]                            \n\t"
> @@ -1271,7 +1271,7 @@ void ff_h264_weight_pixels8_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
>  
>      for (y=0; y<height; y++,="" block+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_LDC1(%[ftmp1], %[block], 0x00)
>              "mtc1       %[weight],  %[ftmp2]                            \n\t"
>              "mtc1       %[offset],  %[ftmp3]                            \n\t"
> @@ -1312,7 +1312,7 @@ void ff_h264_biweight_pixels8_8_mmi(uint8_t *dst, uint8_t *src,
>  
>      for (y=0; y<height; y++,="" dst+="stride," src+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_LDC1(%[ftmp1], %[src], 0x00)
>              MMI_LDC1(%[ftmp2], %[dst], 0x00)
>              "mtc1       %[weights], %[ftmp3]                            \n\t"
> @@ -1366,7 +1366,7 @@ void ff_h264_weight_pixels4_8_mmi(uint8_t *block, ptrdiff_t stride, int height,
>  
>      for (y=0; y<height; y++,="" block+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_ULWC1(%[ftmp1], %[block], 0x00)
>              "mtc1       %[weight],  %[ftmp2]                            \n\t"
>              "mtc1       %[offset],  %[ftmp3]                            \n\t"
> @@ -1402,7 +1402,7 @@ void ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src,
>  
>      for (y=0; y<height; y++,="" dst+="stride," src+="stride)" {="">          __asm__ volatile (
> -            "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +            "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>              MMI_ULWC1(%[ftmp1], %[src], 0x00)
>              MMI_ULWC1(%[ftmp2], %[dst], 0x00)
>              "mtc1       %[weight],  %[ftmp3]                            \n\t"
> @@ -1445,7 +1445,7 @@ void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int bet
>  
>      __asm__ volatile (
>          PTR_ADDU   "%[addr0],   %[stride],      %[stride]               \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          PTR_ADDU   "%[addr1],   %[stride],      %[addr0]                \n\t"
>          "addi       %[alpha],   %[alpha],       -0x01                   \n\t"
>          PTR_SUBU   "%[addr1],   $0,             %[addr1]                \n\t"
> @@ -1463,18 +1463,18 @@ void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int bet
>          "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
>          "pcmpeqb    %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          MMI_ULWC1(%[ftmp5], %[tc0], 0x00)
> @@ -1482,21 +1482,21 @@ void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int bet
>          "punpcklbh  %[ftmp9],   %[ftmp5],       %[ftmp5]                \n\t"
>          "pcmpgtb    %[ftmp5],   %[ftmp9],       %[ftmp4]                \n\t"
>          MMI_LDC1(%[ftmp4], %[addr1], 0x00)
> -        "and        %[ftmp10],  %[ftmp5],       %[ftmp8]                \n\t"
> +        "pand       %[ftmp10],  %[ftmp5],       %[ftmp8]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp4],       %[ftmp2]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> -        "and        %[ftmp5],   %[ftmp10],      %[ftmp9]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp5],   %[ftmp10],      %[ftmp9]                \n\t"
>          "psubb      %[ftmp8],   %[ftmp5],       %[ftmp7]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
>          "pavgb      %[ftmp5],   %[ftmp2],       %[ftmp3]                \n\t"
>          MMI_LDC1(%[ftmp11], %[addr1], 0x00)
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp11]               \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp11]               \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp7]                \n\t"
>          "paddusb    %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
> @@ -1509,26 +1509,26 @@ void ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int bet
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> -        "and        %[ftmp6],   %[ftmp9],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp6],   %[ftmp9],       %[ftmp7]                \n\t"
>          MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
>          "pavgb      %[ftmp7],   %[ftmp2],       %[ftmp3]                \n\t"
>          MMI_LDXC1(%[ftmp11], %[pix], %[addr0], 0x00)
>          "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ff_pb_1]              \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp4],       %[ftmp6]                \n\t"
>          "paddusb    %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
>          "pmaxub     %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "pminub     %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
>          MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00)
> -        "xor        %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
>          "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ff_pb_3]              \n\t"
>          "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
> @@ -1574,12 +1574,12 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>  
>      __asm__ volatile (
>          "ori        %[tmp0],    $0,             0x01                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
>          PTR_SLL    "%[addr0],   %[stride],      0x02                    \n\t"
>          PTR_ADDU   "%[addr2],   %[stride],      %[stride]               \n\t"
>          PTR_ADDIU  "%[alpha],   %[alpha],       -0x01                   \n\t"
> -        PTR_SLL    "%[ftmp11],  %[ftmp9],       %[ftmp9]                \n\t"
> +        "sslld      %[ftmp11],  %[ftmp9],       %[ftmp9]                \n\t"
>          "bltz       %[alpha],   1f                                      \n\t"
>          PTR_ADDU   "%[addr1],   %[addr2],       %[stride]               \n\t"
>          PTR_ADDIU  "%[beta],    %[beta],        -0x01                   \n\t"
> @@ -1598,20 +1598,20 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
>          "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          MMI_SDC1(%[ftmp5], %[stack], 0x10)
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          MMI_LDC1(%[ftmp5], %[stack], 0x10)
>          "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "ldc1       %[ftmp10],  %[ff_pb_1]                              \n\t"
> @@ -1624,14 +1624,14 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
>          MMI_LDC1(%[ftmp15], %[stack], 0x20)
>          "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp15]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp15]               \n\t"
>          MMI_LDXC1(%[ftmp15], %[addr0], %[stride], 0x00)
>          "psubusb    %[ftmp8],   %[ftmp15],      %[ftmp2]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp2],       %[ftmp15]               \n\t"
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          MMI_LDXC1(%[ftmp14], %[pix], %[addr2], 0x00)
>          MMI_SDC1(%[ftmp5], %[stack], 0x30)
>          "psubusb    %[ftmp8],   %[ftmp14],      %[ftmp3]                \n\t"
> @@ -1639,7 +1639,7 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp8]                \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          MMI_SDC1(%[ftmp5], %[stack], 0x40)
>          "pavgb      %[ftmp5],   %[ftmp15],      %[ftmp1]                \n\t"
>          "pavgb      %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
> @@ -1652,36 +1652,36 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          MMI_SDC1(%[ftmp7], %[stack], 0x00)
>          "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "pavgb      %[ftmp6],   %[ftmp15],      %[ftmp4]                \n\t"
>          "psubb      %[ftmp7],   %[ftmp15],      %[ftmp4]                \n\t"
>          "paddb      %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
>          "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
>          MMI_LDC1(%[ftmp13], %[stack], 0x10)
>          "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
>          "psrlh      %[ftmp8],   %[ftmp8],       %[ftmp11]               \n\t"
>          "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp13]               \n\t"
>          "pavgb      %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
> -        "and        %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
> +        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp2],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp7],   %[ftmp2],       %[ftmp4]                \n\t"
> -        "and        %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
>          MMI_LDC1(%[ftmp13], %[stack], 0x30)
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
>          MMI_LDC1(%[ftmp12], %[stack], 0x20)
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ftmp13]               \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp2]                \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ftmp13]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
>          MMI_SDXC1(%[ftmp6], %[addr0], %[addr1], 0x00)
>          MMI_LDC1(%[ftmp6], %[addr0], 0x00)
>          "paddb      %[ftmp7],   %[ftmp15],      %[ftmp6]                \n\t"
> @@ -1692,16 +1692,16 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          "paddb      %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
>          "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          MMI_LDC1(%[ftmp12], %[stack], 0x30)
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp15]               \n\t"
>          MMI_SDXC1(%[ftmp5], %[addr0], %[addr2], 0x00)
>          MMI_SDXC1(%[ftmp6], %[addr0], %[stride], 0x00)
>          "pavgb      %[ftmp5],   %[ftmp14],      %[ftmp4]                \n\t"
> @@ -1715,36 +1715,36 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          MMI_SDC1(%[ftmp7], %[stack], 0x00)
>          "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp9]                \n\t"
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "pavgb      %[ftmp6],   %[ftmp14],      %[ftmp1]                \n\t"
>          "paddb      %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
>          "psubb      %[ftmp7],   %[ftmp14],      %[ftmp1]                \n\t"
>          "psubb      %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
>          MMI_LDC1(%[ftmp12], %[stack], 0x10)
>          "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
>          "psrlh      %[ftmp8],   %[ftmp8],       %[ftmp11]               \n\t"
>          "pavgb      %[ftmp8],   %[ftmp8],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
> -        "and        %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp6]                \n\t"
> +        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp3],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp3],       %[ftmp1]                \n\t"
>          "pavgb      %[ftmp7],   %[ftmp3],       %[ftmp1]                \n\t"
> -        "and        %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
> +        "pand       %[ftmp8],   %[ftmp8],       %[ftmp10]               \n\t"
>          MMI_LDC1(%[ftmp12], %[stack], 0x40)
>          "psubb      %[ftmp7],   %[ftmp7],       %[ftmp8]                \n\t"
>          MMI_LDC1(%[ftmp13], %[stack], 0x20)
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp13]               \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp3]                \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp13]               \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp3]                \n\t"
>          MMI_SDC1(%[ftmp6], %[pix], 0x00)
>          MMI_LDXC1(%[ftmp6], %[pix], %[addr1], 0x00)
>          "paddb      %[ftmp7],   %[ftmp14],      %[ftmp6]                \n\t"
> @@ -1755,16 +1755,16 @@ static void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alph
>          "paddb      %[ftmp7],   %[ftmp7],       %[ftmp12]               \n\t"
>          "psrlh      %[ftmp7],   %[ftmp7],       %[ftmp11]               \n\t"
>          "pavgb      %[ftmp7],   %[ftmp7],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp10]               \n\t"
>          MMI_LDC1(%[ftmp12], %[stack], 0x40)
>          "psubb      %[ftmp6],   %[ftmp6],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ftmp12]               \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ftmp12]               \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp14]               \n\t"
>          MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00)
>          MMI_SDXC1(%[ftmp6], %[pix], %[addr2], 0x00)
>          "1:                                                             \n\t"
> @@ -1808,7 +1808,7 @@ void ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          MMI_LDC1(%[ftmp3], %[pix], 0x00)
>          MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
>  
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "mtc1       %[alpha],   %[ftmp5]                                \n\t"
>          "mtc1       %[beta],    %[ftmp6]                                \n\t"
>          "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
> @@ -1817,29 +1817,29 @@ void ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          MMI_ULWC1(%[ftmp7], %[tc0], 0x00)
>          "punpcklbh  %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> -        "and        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "pcmpeqb    %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "and        %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> +        "pand       %[ftmp6],   %[ftmp6],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp2]                \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ff_pb_3]              \n\t"
>          "pavgb      %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
> @@ -1891,7 +1891,7 @@ void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          MMI_LDC1(%[ftmp3], %[pix], 0x00)
>          MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00)
>  
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "mtc1       %[alpha],   %[ftmp5]                                \n\t"
>          "mtc1       %[beta],    %[ftmp6]                                \n\t"
>          "pshufh     %[ftmp5],   %[ftmp5],       %[ftmp0]                \n\t"
> @@ -1900,36 +1900,36 @@ void ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          "packushb   %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp2]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp2],       %[ftmp3]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp4],       %[ftmp3]                \n\t"
> -        "or         %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
> +        "por        %[ftmp5],   %[ftmp5],       %[ftmp7]                \n\t"
>          "psubusb    %[ftmp5],   %[ftmp5],       %[ftmp6]                \n\t"
> -        "or         %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "por        %[ftmp8],   %[ftmp8],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "pcmpeqb    %[ftmp8],   %[ftmp8],       %[ftmp7]                \n\t"
>          "mov.d      %[ftmp6],   %[ftmp2]                                \n\t"
>          "mov.d      %[ftmp7],   %[ftmp3]                                \n\t"
> -        "xor        %[ftmp5],   %[ftmp2],       %[ftmp4]                \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp5],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp5]                \n\t"
>          "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp3],       %[ftmp1]                \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp5],   %[ftmp3],       %[ftmp1]                \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
>          "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>          "psubb      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
> -        "and        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> -        "and        %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
> +        "pand       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pand       %[ftmp3],   %[ftmp3],       %[ftmp8]                \n\t"
>          "paddb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>          "paddb      %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
>  
> @@ -1996,7 +1996,7 @@ void ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int be
>          "mov.d      %[ftmp9],   %[ftmp0]                                \n\t"
>          "mov.d      %[ftmp10],  %[ftmp3]                                \n\t"
>  
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
>          "mtc1       %[alpha],   %[ftmp4]                                \n\t"
>          "mtc1       %[beta],    %[ftmp5]                                \n\t"
>          "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
> @@ -2005,29 +2005,29 @@ void ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int be
>          "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp0],       %[ftmp1]                \n\t"
> -        "or         %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
> +        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp3],       %[ftmp2]                \n\t"
> -        "or         %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
> +        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          MMI_ULWC1(%[ftmp6], %[tc0], 0x00)
>          "punpcklbh  %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> -        "and        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> +        "pand       %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> -        "and        %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp5],   %[ftmp1],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> +        "pand       %[ftmp5],   %[ftmp5],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp1]                \n\t"
>          "pavgb      %[ftmp3],   %[ftmp3],       %[ff_pb_3]              \n\t"
>          "pavgb      %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
>          "pavgb      %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
> @@ -2134,7 +2134,7 @@ void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
>          "punpcklwd  %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>  
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
>          "mtc1       %[alpha],   %[ftmp4]                                \n\t"
>          "mtc1       %[beta],    %[ftmp5]                                \n\t"
>          "pshufh     %[ftmp4],   %[ftmp4],       %[ftmp8]                \n\t"
> @@ -2143,36 +2143,36 @@ void ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha,
>          "packushb   %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp1]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp1],       %[ftmp0]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp0],       %[ftmp1]                \n\t"
> -        "or         %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
> +        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
>          "psubusb    %[ftmp6],   %[ftmp2],       %[ftmp3]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp3],       %[ftmp2]                \n\t"
> -        "or         %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
> +        "por        %[ftmp4],   %[ftmp4],       %[ftmp6]                \n\t"
>          "psubusb    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "or         %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> +        "por        %[ftmp7],   %[ftmp7],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "pcmpeqb    %[ftmp7],   %[ftmp7],       %[ftmp6]                \n\t"
>          "mov.d      %[ftmp5],   %[ftmp1]                                \n\t"
>          "mov.d      %[ftmp6],   %[ftmp2]                                \n\t"
> -        "xor        %[ftmp4],   %[ftmp1],       %[ftmp3]                \n\t"
> -        "and        %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp4],   %[ftmp1],       %[ftmp3]                \n\t"
> +        "pand       %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
>          "psubusb    %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp2],       %[ftmp0]                \n\t"
> -        "and        %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
> +        "pxor       %[ftmp4],   %[ftmp2],       %[ftmp0]                \n\t"
> +        "pand       %[ftmp4],   %[ftmp4],       %[ff_pb_1]              \n\t"
>          "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
>          "psubusb    %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
>          "psubb      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
>          "psubb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
> -        "and        %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> -        "and        %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> +        "pand       %[ftmp2],   %[ftmp2],       %[ftmp7]                \n\t"
>          "paddb      %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
>          "paddb      %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>  
> diff --git a/libavcodec/mips/h264pred_mmi.c b/libavcodec/mips/h264pred_mmi.c
> index 0209c2e..f8947a0 100644
> --- a/libavcodec/mips/h264pred_mmi.c
> +++ b/libavcodec/mips/h264pred_mmi.c
> @@ -162,7 +162,7 @@ void ff_pred8x8l_top_dc_8_mmi(uint8_t *src, int has_topleft,
>      DECLARE_VAR_ADDRT;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          MMI_ULDC1(%[ftmp10], %[srcA], 0x00)
>          MMI_ULDC1(%[ftmp9], %[src0], 0x00)
>          MMI_ULDC1(%[ftmp8], %[src1], 0x00)
> @@ -266,7 +266,7 @@ void ff_pred8x8l_dc_8_mmi(uint8_t *src, int has_topleft, int has_topright,
>          MMI_ULDC1(%[ftmp4], %[srcA], 0x00)
>          MMI_ULDC1(%[ftmp5], %[src0], 0x00)
>          MMI_ULDC1(%[ftmp6], %[src1], 0x00)
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x03                                    \n\t"
>          "punpcklbh  %[ftmp7],   %[ftmp4],       %[ftmp0]                \n\t"
>          "punpckhbh  %[ftmp8],   %[ftmp4],       %[ftmp0]                \n\t"
> @@ -357,7 +357,7 @@ void ff_pred8x8l_vertical_8_mmi(uint8_t *src, int has_topleft,
>      DECLARE_VAR_ALL64;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          MMI_LDC1(%[ftmp3], %[srcA], 0x00)
>          MMI_LDC1(%[ftmp4], %[src0], 0x00)
>          MMI_LDC1(%[ftmp5], %[src1], 0x00)
> @@ -530,7 +530,7 @@ void ff_pred8x8_top_dc_8_mmi(uint8_t *src, ptrdiff_t stride)
>  
>      __asm__ volatile (
>          "dli        %[tmp0],    0x02                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          PTR_SUBU   "%[addr0],   %[src],         %[stride]               \n\t"
>          MMI_LDC1(%[ftmp1], %[addr0], 0x00)
>          "punpcklbh  %[ftmp2],   %[ftmp1],       %[ftmp0]                \n\t"
> @@ -640,7 +640,7 @@ void ff_pred8x8_dc_8_mmi(uint8_t *src, ptrdiff_t stride)
>          PTR_SRL    "%[addr4],   0x02                                    \n\t"
>          PTR_SRL    "%[addr1],   0x02                                    \n\t"
>          PTR_SRL    "%[addr2],   0x03                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dmtc1      %[addr3],   %[ftmp1]                                \n\t"
>          "pshufh     %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
>          "dmtc1      %[addr4],   %[ftmp2]                                \n\t"
> @@ -757,9 +757,9 @@ static inline void pred16x16_plane_compat_mmi(uint8_t *src, int stride,
>          "dmtc1      %[tmp0],    %[ftmp4]                                \n\t"
>          MMI_ULDC1(%[ftmp0], %[addr0], -0x01)
>          MMI_ULDC1(%[ftmp2], %[addr0],  0x08)
> -        "dsrl       %[ftmp1],   %[ftmp0],       %[ftmp4]                \n\t"
> -        "dsrl       %[ftmp3],   %[ftmp2],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> +        "ssrld      %[ftmp1],   %[ftmp0],       %[ftmp4]                \n\t"
> +        "ssrld      %[ftmp3],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
>          "punpcklbh  %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> @@ -915,7 +915,7 @@ static inline void pred16x16_plane_compat_mmi(uint8_t *src, int stride,
>          "dmul       %[tmp3],    %[tmp3],        %[tmp2]                 \n\t"
>          "dsubu      %[tmp5],    %[tmp5],        %[tmp3]                 \n\t"
>  
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          "dmtc1      %[tmp0],    %[ftmp0]                                \n\t"
>          "pshufh     %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
>          "dmtc1      %[tmp1],    %[ftmp5]                                \n\t"
> diff --git a/libavcodec/mips/h264qpel_mmi.c b/libavcodec/mips/h264qpel_mmi.c
> index 13fbebf..72362d3 100644
> --- a/libavcodec/mips/h264qpel_mmi.c
> +++ b/libavcodec/mips/h264qpel_mmi.c
> @@ -114,7 +114,7 @@ static void put_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      DECLARE_VAR_LOW32;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x04                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULWC1(%[ftmp1], %[src], -0x02)
> @@ -169,7 +169,7 @@ static void put_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      DECLARE_VAR_ALL64;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x08                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULDC1(%[ftmp1], %[src], -0x02)
> @@ -250,7 +250,7 @@ static void avg_h264_qpel4_h_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      DECLARE_VAR_LOW32;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x04                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULWC1(%[ftmp1], %[src], -0x02)
> @@ -307,7 +307,7 @@ static void avg_h264_qpel8_h_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      DECLARE_VAR_ALL64;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x08                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULDC1(%[ftmp1], %[src], -0x02)
> @@ -394,7 +394,7 @@ static void put_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      __asm__ volatile (
>          ".set       push                                                \n\t"
>          ".set       noreorder                                           \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x02                                    \n\t"
>          MMI_LWC1(%[ftmp1], %[src], 0x00)
>          "mtc1       %[tmp0],    %[ftmp10]                               \n\t"
> @@ -516,7 +516,7 @@ static void put_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>              PTR_ADDU   "%[src],     %[src],         %[srcStride]        \n\t"
>              MMI_LWC1(%[ftmp2], %[src], 0x00)
>              PTR_ADDU   "%[src],     %[src],         %[srcStride]        \n\t"
> -            "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
> +            "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
>              MMI_LWC1(%[ftmp3], %[src], 0x00)
>              PTR_ADDU   "%[src],     %[src],         %[srcStride]        \n\t"
>              MMI_LWC1(%[ftmp4], %[src], 0x00)
> @@ -812,7 +812,7 @@ static void avg_h264_qpel4_v_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>          ".set       push                                                \n\t"
>          ".set       noreorder                                           \n\t"
>          "dli        %[tmp0],    0x02                                    \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
>          "dli        %[tmp0],    0x05                                    \n\t"
>          MMI_LWC1(%[ftmp0], %[src], 0x00)
> @@ -930,7 +930,7 @@ static void avg_h264_qpel8_v_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>              ".set       push                                            \n\t"
>              ".set       noreorder                                       \n\t"
>              "dli        %[tmp0],    0x02                                \n\t"
> -            "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
> +            "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
>              "mtc1       %[tmp0],    %[ftmp9]                            \n\t"
>              "dli        %[tmp0],    0x05                                \n\t"
>              MMI_LWC1(%[ftmp0], %[src], 0x00)
> @@ -1269,7 +1269,7 @@ static void put_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      src -= 2*srcStride;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x09                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULWC1(%[ftmp1], %[src], -0x02)
> @@ -1347,7 +1347,7 @@ static void put_h264_qpel8or16_hv1_lowpass_mmi(int16_t *tmp,
>              MMI_ULWC1(%[ftmp0], %[src], 0x00)
>              "mtc1       %[tmp0],    %[ftmp10]                           \n\t"
>              PTR_ADDU   "%[src],     %[src],         %[srcStride]        \n\t"
> -            "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
> +            "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"
>              MMI_ULWC1(%[ftmp1], %[src], 0x00)
>              PTR_ADDU   "%[src],     %[src],         %[srcStride]        \n\t"
>              MMI_ULWC1(%[ftmp2], %[src], 0x00)
> @@ -1684,7 +1684,7 @@ static void put_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src,
>          "dli        %[tmp0],    0x02                                    \n\t"
>          "mtc1       %[tmp0],    %[ftmp7]                                \n\t"
>          "dli        %[tmp0],    0x05                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "mtc1       %[tmp0],    %[ftmp8]                                \n\t"
>          "1:                                                             \n\t"
>          MMI_ULDC1(%[ftmp1], %[src], 0x00)
> @@ -1833,7 +1833,7 @@ static void avg_h264_qpel4_hv_lowpass_mmi(uint8_t *dst, const uint8_t *src,
>      src -= 2*srcStride;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "dli        %[tmp0],    0x09                                    \n\t"
>          "1:                                                             \n\t"
>          MMI_ULWC1(%[ftmp1], %[src], -0x02)
> @@ -2005,7 +2005,7 @@ static void avg_h264_qpel8_h_lowpass_l2_mmi(uint8_t *dst, const uint8_t *src,
>          "ori        %[tmp0],    $0,             0x8                     \n\t"
>          "mtc1       %[tmp1],    %[ftmp7]                                \n\t"
>          "dli        %[tmp1],    0x05                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "mtc1       %[tmp1],    %[ftmp8]                                \n\t"
>          "1:                                                             \n\t"
>          MMI_ULDC1(%[ftmp1], %[src], 0x00)
> diff --git a/libavcodec/mips/hevcdsp_mmi.c b/libavcodec/mips/hevcdsp_mmi.c
> index aa83e1f..e89d37e 100644
> --- a/libavcodec/mips/hevcdsp_mmi.c
> +++ b/libavcodec/mips/hevcdsp_mmi.c
> @@ -46,7 +46,7 @@ void ff_hevc_put_hevc_qpel_h##w##_8_mmi(int16_t *dst, uint8_t *_src,     \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"    \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"    \
>          "psrah        %[ftmp2],      %[ftmp2],      %[ftmp0]    \n\t"    \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"    \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"    \
>                                                                           \
>          "1:                                                     \n\t"    \
>          "2:                                                     \n\t"    \
> @@ -147,7 +147,7 @@ void ff_hevc_put_hevc_qpel_hv##w##_8_mmi(int16_t *dst, uint8_t *_src,    \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"    \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"    \
>          "psrah        %[ftmp2],      %[ftmp2],      %[ftmp0]    \n\t"    \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"    \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"    \
>                                                                           \
>          "1:                                                     \n\t"    \
>          "2:                                                     \n\t"    \
> @@ -344,7 +344,7 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst,               \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"   \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"   \
>          "psrah        %[ftmp2],      %[ftmp2],      %[ftmp0]    \n\t"   \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
>          "punpcklhw    %[offset],     %[offset],     %[offset]   \n\t"   \
>          "punpcklwd    %[offset],     %[offset],     %[offset]   \n\t"   \
>                                                                          \
> @@ -403,7 +403,7 @@ void ff_hevc_put_hevc_qpel_bi_h##w##_8_mmi(uint8_t *_dst,               \
>          "psraw        %[ftmp6],      %[ftmp6],      %[shift]    \n\t"   \
>          "packsswh     %[ftmp5],      %[ftmp5],      %[ftmp6]    \n\t"   \
>          "pcmpgth      %[ftmp7],      %[ftmp5],      %[ftmp0]    \n\t"   \
> -        "and          %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
> +        "pand         %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
>          "packushb     %[ftmp3],      %[ftmp3],      %[ftmp3]    \n\t"   \
>          "gsswlc1      %[ftmp3],      0x03(%[dst])               \n\t"   \
>          "gsswrc1      %[ftmp3],      0x00(%[dst])               \n\t"   \
> @@ -480,7 +480,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"   \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"   \
>          "psrah        %[ftmp2],      %[ftmp2],      %[ftmp0]    \n\t"   \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
>                                                                          \
>          "1:                                                     \n\t"   \
>          "2:                                                     \n\t"   \
> @@ -612,7 +612,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "packsswh     %[ftmp3],      %[ftmp3],      %[ftmp5]    \n\t"   \
>          "gsldlc1      %[ftmp4],      0x07(%[src2])              \n\t"   \
>          "gsldrc1      %[ftmp4],      0x00(%[src2])              \n\t"   \
> -        "xor          %[ftmp7],      %[ftmp7],      %[ftmp7]    \n\t"   \
> +        "pxor         %[ftmp7],      %[ftmp7],      %[ftmp7]    \n\t"   \
>          "li           %[rtmp0],      0x10                       \n\t"   \
>          "dmtc1        %[rtmp0],      %[ftmp8]                   \n\t"   \
>          "punpcklhw    %[ftmp5],      %[ftmp7],      %[ftmp3]    \n\t"   \
> @@ -631,7 +631,7 @@ void ff_hevc_put_hevc_qpel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "psraw        %[ftmp6],      %[ftmp6],      %[shift]    \n\t"   \
>          "packsswh     %[ftmp5],      %[ftmp5],      %[ftmp6]    \n\t"   \
>          "pcmpgth      %[ftmp7],      %[ftmp5],      %[ftmp7]    \n\t"   \
> -        "and          %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
> +        "pand         %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
>          "packushb     %[ftmp3],      %[ftmp3],      %[ftmp3]    \n\t"   \
>          "gsswlc1      %[ftmp3],      0x03(%[dst])               \n\t"   \
>          "gsswrc1      %[ftmp3],      0x00(%[dst])               \n\t"   \
> @@ -706,7 +706,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "dmtc1        %[rtmp0],      %[ftmp0]                   \n\t"   \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"   \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"   \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
>                                                                          \
>          "1:                                                     \n\t"   \
>          "2:                                                     \n\t"   \
> @@ -771,7 +771,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "li           %[rtmp0],      0x06                       \n\t"   \
>          "dmtc1        %[rtmp0],      %[ftmp0]                   \n\t"   \
>          "punpcklwd    %[offset],     %[offset],     %[offset]   \n\t"   \
> -        "xor          %[ftmp2],      %[ftmp2],      %[ftmp2]    \n\t"   \
> +        "pxor         %[ftmp2],      %[ftmp2],      %[ftmp2]    \n\t"   \
>                                                                          \
>          "1:                                                     \n\t"   \
>          "li           %[x],        " #x_step "                  \n\t"   \
> @@ -821,7 +821,7 @@ void ff_hevc_put_hevc_epel_bi_hv##w##_8_mmi(uint8_t *_dst,              \
>          "psraw        %[ftmp6],      %[ftmp6],      %[shift]    \n\t"   \
>          "packsswh     %[ftmp5],      %[ftmp5],      %[ftmp6]    \n\t"   \
>          "pcmpgth      %[ftmp7],      %[ftmp5],      %[ftmp2]    \n\t"   \
> -        "and          %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
> +        "pand         %[ftmp3],      %[ftmp5],      %[ftmp7]    \n\t"   \
>          "packushb     %[ftmp3],      %[ftmp3],      %[ftmp3]    \n\t"   \
>          "gsswlc1      %[ftmp3],      0x03(%[dst])               \n\t"   \
>          "gsswrc1      %[ftmp3],      0x00(%[dst])               \n\t"   \
> @@ -882,7 +882,7 @@ void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst,             \
>      y = height;                                                           \
>      x = width >> 3;                                                       \
>      __asm__ volatile(                                                     \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"     \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"     \
>          "li           %[rtmp0],      0x06                       \n\t"     \
>          "dmtc1        %[rtmp0],      %[ftmp1]                   \n\t"     \
>          "li           %[rtmp0],      0x10                       \n\t"     \
> @@ -930,8 +930,8 @@ void ff_hevc_put_hevc_pel_bi_pixels##w##_8_mmi(uint8_t *_dst,             \
>          "packsswh     %[ftmp4],      %[ftmp4],      %[ftmp5]    \n\t"     \
>          "pcmpgth      %[ftmp3],      %[ftmp2],      %[ftmp0]    \n\t"     \
>          "pcmpgth      %[ftmp5],      %[ftmp4],      %[ftmp0]    \n\t"     \
> -        "and          %[ftmp2],      %[ftmp2],      %[ftmp3]    \n\t"     \
> -        "and          %[ftmp4],      %[ftmp4],      %[ftmp5]    \n\t"     \
> +        "pand         %[ftmp2],      %[ftmp2],      %[ftmp3]    \n\t"     \
> +        "pand         %[ftmp4],      %[ftmp4],      %[ftmp5]    \n\t"     \
>          "packushb     %[ftmp2],      %[ftmp2],      %[ftmp4]    \n\t"     \
>          "gssdlc1      %[ftmp2],      0x07(%[dst])               \n\t"     \
>          "gssdrc1      %[ftmp2],      0x00(%[dst])               \n\t"     \
> @@ -1006,7 +1006,7 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst,             \
>          "punpcklbh    %[ftmp1],      %[ftmp0],      %[ftmp1]    \n\t"   \
>          "psrah        %[ftmp1],      %[ftmp1],      %[ftmp0]    \n\t"   \
>          "psrah        %[ftmp2],      %[ftmp2],      %[ftmp0]    \n\t"   \
> -        "xor          %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
> +        "pxor         %[ftmp0],      %[ftmp0],      %[ftmp0]    \n\t"   \
>                                                                          \
>          "1:                                                     \n\t"   \
>          "2:                                                     \n\t"   \
> @@ -1139,9 +1139,9 @@ void ff_hevc_put_hevc_qpel_uni_hv##w##_8_mmi(uint8_t *_dst,             \
>          "packsswh     %[ftmp3],      %[ftmp3],      %[ftmp5]    \n\t"   \
>          "paddh        %[ftmp3],      %[ftmp3],      %[offset]   \n\t"   \
>          "psrah        %[ftmp3],      %[ftmp3],      %[shift]    \n\t"   \
> -        "xor          %[ftmp7],      %[ftmp7],      %[ftmp7]    \n\t"   \
> +        "pxor         %[ftmp7],      %[ftmp7],      %[ftmp7]    \n\t"   \
>          "pcmpgth      %[ftmp7],      %[ftmp3],      %[ftmp7]    \n\t"   \
> -        "and          %[ftmp3],      %[ftmp3],      %[ftmp7]    \n\t"   \
> +        "pand         %[ftmp3],      %[ftmp3],      %[ftmp7]    \n\t"   \
>          "packushb     %[ftmp3],      %[ftmp3],      %[ftmp3]    \n\t"   \
>          "gsswlc1      %[ftmp3],      0x03(%[dst])               \n\t"   \
>          "gsswrc1      %[ftmp3],      0x00(%[dst])               \n\t"   \
> diff --git a/libavcodec/mips/hpeldsp_mmi.c b/libavcodec/mips/hpeldsp_mmi.c
> index e69b2bd..bf3e463 100644
> --- a/libavcodec/mips/hpeldsp_mmi.c
> +++ b/libavcodec/mips/hpeldsp_mmi.c
> @@ -676,14 +676,14 @@ inline void ff_put_no_rnd_pixels8_l2_8_mmi(uint8_t *dst, const uint8_t *src1,
>          PTR_ADDU   "%[addr1],   %[src2],        %[src_stride2]          \n\t"
>          MMI_ULDC1(%[ftmp3], %[addr1], 0x00)
>          PTR_ADDU   "%[src1],    %[src1],        %[addr2]                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
>          "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
>          MMI_SDC1(%[ftmp0], %[dst], 0x00)
>          MMI_SDXC1(%[ftmp1], %[dst], %[dst_stride], 0x00)
>          PTR_ADDU   "%[src2],    %[src2],        %[addr3]                \n\t"
> @@ -696,14 +696,14 @@ inline void ff_put_no_rnd_pixels8_l2_8_mmi(uint8_t *dst, const uint8_t *src1,
>          PTR_ADDU   "%[addr1],   %[src2],        %[src_stride2]          \n\t"
>          MMI_ULDC1(%[ftmp3], %[addr1], 0x00)
>          PTR_ADDU   "%[src1],    %[src1],        %[addr2]                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "pavgb      %[ftmp0],   %[ftmp0],       %[ftmp2]                \n\t"
>          "pavgb      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
>          MMI_SDC1(%[ftmp0], %[dst], 0x00)
>          MMI_SDXC1(%[ftmp1], %[dst], %[dst_stride], 0x00)
>          PTR_ADDU   "%[src2],    %[src2],        %[addr3]                \n\t"
> @@ -846,7 +846,7 @@ void ff_put_pixels8_xy2_8_mmi(uint8_t *block, const uint8_t *pixels,
>      DECLARE_VAR_ADDRT;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "dli        %[addr0],   0x0f                                    \n\t"
>          "pcmpeqw    %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "dmtc1      %[addr0],   %[ftmp8]                                \n\t"
> diff --git a/libavcodec/mips/idctdsp_mmi.c b/libavcodec/mips/idctdsp_mmi.c
> index a96dac4..0047aef 100644
> --- a/libavcodec/mips/idctdsp_mmi.c
> +++ b/libavcodec/mips/idctdsp_mmi.c
> @@ -154,7 +154,7 @@ void ff_add_pixels_clamped_mmi(const int16_t *block,
>      uint64_t tmp[1];
>      __asm__ volatile (
>          "li         %[tmp0],    0x04                           \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]           \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]           \n\t"
>          "1:                                                    \n\t"
>          MMI_LDC1(%[ftmp5], %[pixels], 0x00)
>          PTR_ADDU   "%[pixels],  %[pixels],  %[line_size]       \n\t"
> diff --git a/libavcodec/mips/mpegvideo_mmi.c b/libavcodec/mips/mpegvideo_mmi.c
> index e4aba08..edaa839 100644
> --- a/libavcodec/mips/mpegvideo_mmi.c
> +++ b/libavcodec/mips/mpegvideo_mmi.c
> @@ -53,13 +53,13 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block,
>          nCoeffs = s->inter_scantable.raster_end[s->block_last_index[n]];
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "packsswh   %[qmul],    %[qmul],        %[qmul]                 \n\t"
>          "packsswh   %[qmul],    %[qmul],        %[qmul]                 \n\t"
>          "packsswh   %[qadd],    %[qadd],        %[qadd]                 \n\t"
>          "packsswh   %[qadd],    %[qadd],        %[qadd]                 \n\t"
>          "psubh      %[ftmp0],   %[ftmp0],       %[qadd]                 \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
>          ".p2align   4                                                   \n\t"
>  
>          "1:                                                             \n\t"
> @@ -72,12 +72,12 @@ void ff_dct_unquantize_h263_intra_mmi(MpegEncContext *s, int16_t *block,
>          "pmullh     %[ftmp2],   %[ftmp2],       %[qmul]                 \n\t"
>          "pcmpgth    %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
>          "pcmpgth    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
>          "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
>          "paddh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
>          "pcmpeqh    %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
>          "pcmpeqh    %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
>          "pandn      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> @@ -116,11 +116,11 @@ void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block,
>      __asm__ volatile (
>          "packsswh   %[qmul],    %[qmul],        %[qmul]                 \n\t"
>          "packsswh   %[qmul],    %[qmul],        %[qmul]                 \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "packsswh   %[qadd],    %[qadd],        %[qadd]                 \n\t"
>          "packsswh   %[qadd],    %[qadd],        %[qadd]                 \n\t"
>          "psubh      %[ftmp0],   %[ftmp0],       %[qadd]                 \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
>          ".p2align   4                                                   \n\t"
>          "1:                                                             \n\t"
>          PTR_ADDU   "%[addr0],   %[block],       %[nCoeffs]              \n\t"
> @@ -132,12 +132,12 @@ void ff_dct_unquantize_h263_inter_mmi(MpegEncContext *s, int16_t *block,
>          "pmullh     %[ftmp2],   %[ftmp2],       %[qmul]                 \n\t"
>          "pcmpgth    %[ftmp3],   %[ftmp3],       %[ftmp5]                \n\t"
>          "pcmpgth    %[ftmp4],   %[ftmp4],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
>          "paddh      %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
>          "paddh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp1]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp2]                \n\t"
>          "pcmpeqh    %[ftmp1],   %[ftmp1],       %[ftmp0]                \n\t"
>          "pcmpeqh    %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
>          "pandn      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
> @@ -201,18 +201,18 @@ void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block,
>          MMI_LDXC1(%[ftmp7], %[addr0], %[quant], 0x08)
>          "pmullh     %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
>          "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp9],   %[ftmp9],       %[ftmp9]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp9],   %[ftmp9],       %[ftmp9]                \n\t"
>          "pcmpgth    %[ftmp8],   %[ftmp8],       %[ftmp2]                \n\t"
>          "pcmpgth    %[ftmp9],   %[ftmp9],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>          "pmullh     %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "pcmpeqh    %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
>          "dli        %[tmp0],    0x03                                    \n\t"
>          "pcmpeqh    %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> @@ -221,10 +221,10 @@ void ff_dct_unquantize_mpeg1_intra_mmi(MpegEncContext *s, int16_t *block,
>          "psrah      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> -        "or         %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> -        "or         %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "por        %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> +        "por        %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "pandn      %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
> @@ -287,12 +287,12 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block,
>          MMI_LDXC1(%[ftmp7], %[addr0], %[quant], 0x08)
>          "pmullh     %[ftmp6],   %[ftmp6],       %[ftmp1]                \n\t"
>          "pmullh     %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp9],   %[ftmp9],       %[ftmp9]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp9],   %[ftmp9],       %[ftmp9]                \n\t"
>          "pcmpgth    %[ftmp8],   %[ftmp8],       %[ftmp2]                \n\t"
>          "pcmpgth    %[ftmp9],   %[ftmp9],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "paddh      %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
> @@ -301,8 +301,8 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block,
>          "paddh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
>          "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
>          "pmullh     %[ftmp3],   %[ftmp3],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
>          "pcmpeqh    %[ftmp6],   %[ftmp6],       %[ftmp4]                \n\t"
>          "dli        %[tmp0],    0x04                                    \n\t"
>          "pcmpeqh    %[ftmp7],   %[ftmp7],       %[ftmp5]                \n\t"
> @@ -311,10 +311,10 @@ void ff_dct_unquantize_mpeg1_inter_mmi(MpegEncContext *s, int16_t *block,
>          "psrah      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> -        "or         %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> -        "or         %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
> +        "por        %[ftmp2],   %[ftmp2],       %[ftmp0]                \n\t"
> +        "por        %[ftmp3],   %[ftmp3],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp9]                \n\t"
>          "pandn      %[ftmp6],   %[ftmp6],       %[ftmp2]                \n\t"
> @@ -386,26 +386,26 @@ void ff_dct_unquantize_mpeg2_intra_mmi(MpegEncContext *s, int16_t *block,
>          MMI_LDXC1(%[ftmp6], %[addr0], %[quant], 0x08)
>          "pmullh     %[ftmp5],   %[ftmp5],       %[ftmp9]                \n\t"
>          "pmullh     %[ftmp6],   %[ftmp6],       %[ftmp9]                \n\t"
> -        "xor        %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp7],   %[ftmp7],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp8],   %[ftmp8],       %[ftmp8]                \n\t"
>          "pcmpgth    %[ftmp7],   %[ftmp7],       %[ftmp1]                \n\t"
>          "pcmpgth    %[ftmp8],   %[ftmp8],       %[ftmp2]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "pmullh     %[ftmp1],   %[ftmp1],       %[ftmp5]                \n\t"
>          "pmullh     %[ftmp2],   %[ftmp2],       %[ftmp6]                \n\t"
> -        "xor        %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> -        "xor        %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
> +        "pxor       %[ftmp5],   %[ftmp5],       %[ftmp5]                \n\t"
> +        "pxor       %[ftmp6],   %[ftmp6],       %[ftmp6]                \n\t"
>          "pcmpeqh    %[ftmp5],   %[ftmp5],       %[ftmp3]                \n\t"
>          "dli        %[tmp0],    0x03                                    \n\t"
>          "pcmpeqh    %[ftmp6] ,  %[ftmp6],       %[ftmp4]                \n\t"
>          "mtc1       %[tmp0],    %[ftmp3]                                \n\t"
>          "psrah      %[ftmp1],   %[ftmp1],       %[ftmp3]                \n\t"
>          "psrah      %[ftmp2],   %[ftmp2],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "psubh      %[ftmp1],   %[ftmp1],       %[ftmp7]                \n\t"
>          "psubh      %[ftmp2],   %[ftmp2],       %[ftmp8]                \n\t"
>          "pandn      %[ftmp5],   %[ftmp5],       %[ftmp1]                \n\t"
> @@ -445,16 +445,16 @@ void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block)
>      s->dct_count[intra]++;
>  
>      __asm__ volatile(
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "1:                                                             \n\t"
>          MMI_LDC1(%[ftmp1], %[block], 0x00)
> -        "xor        %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp2],   %[ftmp2],       %[ftmp2]                \n\t"
>          MMI_LDC1(%[ftmp3], %[block], 0x08)
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          "pcmpgth    %[ftmp2],   %[ftmp2],       %[ftmp1]                \n\t"
>          "pcmpgth    %[ftmp4],   %[ftmp4],       %[ftmp3]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubh      %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          MMI_LDC1(%[ftmp6], %[offset], 0x00)
> @@ -463,8 +463,8 @@ void ff_denoise_dct_mmi(MpegEncContext *s, int16_t *block)
>          MMI_LDC1(%[ftmp6], %[offset], 0x08)
>          "mov.d      %[ftmp7],   %[ftmp3]                                \n\t"
>          "psubush    %[ftmp3],   %[ftmp3],       %[ftmp6]                \n\t"
> -        "xor        %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
> -        "xor        %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
> +        "pxor       %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          "psubh      %[ftmp1],   %[ftmp1],       %[ftmp2]                \n\t"
>          "psubh      %[ftmp3],   %[ftmp3],       %[ftmp4]                \n\t"
>          MMI_SDC1(%[ftmp1], %[block], 0x00)
> diff --git a/libavcodec/mips/pixblockdsp_mmi.c b/libavcodec/mips/pixblockdsp_mmi.c
> index a915a3c..1230f5d 100644
> --- a/libavcodec/mips/pixblockdsp_mmi.c
> +++ b/libavcodec/mips/pixblockdsp_mmi.c
> @@ -33,7 +33,7 @@ void ff_get_pixels_8_mmi(int16_t *av_restrict block, const uint8_t *pixels,
>      DECLARE_VAR_ADDRT;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>  
>          MMI_LDC1(%[ftmp1], %[pixels], 0x00)
>          MMI_LDXC1(%[ftmp2], %[pixels], %[stride], 0x00)
> @@ -103,12 +103,12 @@ void ff_diff_pixels_mmi(int16_t *av_restrict block, const uint8_t *src1,
>  
>      __asm__ volatile (
>          "li         %[tmp0],    0x08                                    \n\t"
> -        "xor        %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
> +        "pxor       %[ftmp4],   %[ftmp4],       %[ftmp4]                \n\t"
>          "1:                                                             \n\t"
>          MMI_LDC1(%[ftmp0], %[src1], 0x00)
> -        "or         %[ftmp1],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "por        %[ftmp1],   %[ftmp0],       %[ftmp0]                \n\t"
>          MMI_LDC1(%[ftmp2], %[src2], 0x00)
> -        "or         %[ftmp3],   %[ftmp2],       %[ftmp2]                \n\t"
> +        "por        %[ftmp3],   %[ftmp2],       %[ftmp2]                \n\t"
>          "punpcklbh  %[ftmp0],   %[ftmp0],       %[ftmp4]                \n\t"
>          "punpckhbh  %[ftmp1],   %[ftmp1],       %[ftmp4]                \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],       %[ftmp4]                \n\t"
> diff --git a/libavcodec/mips/simple_idct_mmi.c b/libavcodec/mips/simple_idct_mmi.c
> index e4b58dc..ad068a8 100644
> --- a/libavcodec/mips/simple_idct_mmi.c
> +++ b/libavcodec/mips/simple_idct_mmi.c
> @@ -133,7 +133,7 @@ void ff_simple_idct_8_mmi(int16_t *block)
>          "psllh        $f28,     "#src1",    $f30                \n\t" \
>          "dmtc1        $9,        $f31                           \n\t" \
>          "punpcklhw    $f29,      $f28,      $f28                \n\t" \
> -        "and          $f29,      $f29,      $f31                \n\t" \
> +        "pand         $f29,      $f29,      $f31                \n\t" \
>          "paddw        $f28,      $f28,      $f29                \n\t" \
>          "punpcklwd   "#src1",    $f28,      $f28                \n\t" \
>          "punpcklwd   "#src2",    $f28,      $f28                \n\t" \
> @@ -268,9 +268,9 @@ void ff_simple_idct_8_mmi(int16_t *block)
>          "punpcklwd    $f8,       $f27,      $f29                \n\t"
>          "punpckhwd    $f12,      $f27,      $f29                \n\t"
>  
> -        "or           $f26,      $f2,       $f6                 \n\t"
> -        "or           $f26,      $f26,      $f10                \n\t"
> -        "or           $f26,      $f26,      $f14                \n\t"
> +        "por          $f26,      $f2,       $f6                 \n\t"
> +        "por          $f26,      $f26,      $f10                \n\t"
> +        "por          $f26,      $f26,      $f14                \n\t"
>          "dmfc1        $10,       $f26                           \n\t"
>          "bnez         $10,       1f                             \n\t"
>          /* case1: In this case, row[1,3,5,7] are all zero */
> @@ -338,9 +338,9 @@ void ff_simple_idct_8_mmi(int16_t *block)
>          "punpcklwd    $f9,       $f27,      $f29                \n\t"
>          "punpckhwd    $f13,      $f27,      $f29                \n\t"
>  
> -        "or           $f26,      $f3,       $f7                 \n\t"
> -        "or           $f26,      $f26,      $f11                \n\t"
> -        "or           $f26,      $f26,      $f15                \n\t"
> +        "por          $f26,      $f3,       $f7                 \n\t"
> +        "por          $f26,      $f26,      $f11                \n\t"
> +        "por          $f26,      $f26,      $f15                \n\t"
>          "dmfc1        $10,       $f26                           \n\t"
>          "bnez         $10,       1f                             \n\t"
>          /* case1: In this case, row[1,3,5,7] are all zero */
> diff --git a/libavcodec/mips/vc1dsp_mmi.c b/libavcodec/mips/vc1dsp_mmi.c
> index 348ecd2..a8ab3f6 100644
> --- a/libavcodec/mips/vc1dsp_mmi.c
> +++ b/libavcodec/mips/vc1dsp_mmi.c
> @@ -134,7 +134,7 @@ void ff_vc1_inv_trans_8x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo
>      dc = (3 * dc + 16) >> 5;
>  
>      __asm__ volatile(
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[dc],      %[dc],          %[ftmp0]                \n\t"
>          "li         %[count],   0x02                                    \n\t"
>  
> @@ -425,7 +425,7 @@ void ff_vc1_inv_trans_8x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo
>      dc = (17 * dc + 64) >> 7;
>  
>      __asm__ volatile(
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[dc],      %[dc],          %[ftmp0]                \n\t"
>  
>          MMI_LDC1(%[ftmp1], %[dest0], 0x00)
> @@ -705,7 +705,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block)
>          MMI_LWC1(%[ftmp3], %[tmp0], 0x00)
>          PTR_ADDU    "%[tmp0],   %[tmp0],    %[linesize]                 \n\t"
>          MMI_LWC1(%[ftmp4], %[tmp0], 0x00)
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp1],   %[ftmp1],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp3],   %[ftmp3],   %[ftmp0]                    \n\t"
> @@ -829,7 +829,7 @@ void ff_vc1_inv_trans_8x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block)
>          MMI_LWC1(%[ftmp3], %[tmp0], 0x04)
>          PTR_ADDU    "%[tmp0],   %[tmp0],    %[linesize]                 \n\t"
>          MMI_LWC1(%[ftmp4], %[tmp0], 0x04)
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp1],   %[ftmp1],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp3],   %[ftmp3],   %[ftmp0]                    \n\t"
> @@ -877,7 +877,7 @@ void ff_vc1_inv_trans_4x8_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo
>      dc = (12 * dc + 64) >> 7;
>  
>      __asm__ volatile(
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[dc],      %[dc],          %[ftmp0]                \n\t"
>  
>          MMI_LWC1(%[ftmp1], %[dest0], 0x00)
> @@ -1058,7 +1058,7 @@ void ff_vc1_inv_trans_4x8_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block)
>          MMI_LWC1(%[ftmp7], %[tmp0], 0x00)
>          PTR_ADDU  "%[tmp0],   %[tmp0],    %[linesize]                 \n\t"
>          MMI_LWC1(%[ftmp8], %[tmp0], 0x00)
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp1],   %[ftmp1],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp3],   %[ftmp3],   %[ftmp0]                    \n\t"
> @@ -1133,7 +1133,7 @@ void ff_vc1_inv_trans_4x4_dc_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *blo
>      dc = (17 * dc + 64) >> 7;
>  
>      __asm__ volatile(
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]                \n\t"
>          "pshufh     %[dc],      %[dc],          %[ftmp0]                \n\t"
>  
>          MMI_LWC1(%[ftmp1], %[dest0], 0x00)
> @@ -1339,7 +1339,7 @@ void ff_vc1_inv_trans_4x4_mmi(uint8_t *dest, ptrdiff_t linesize, int16_t *block)
>          MMI_LWC1(%[ftmp3], %[tmp0], 0x00)
>          PTR_ADDU    "%[tmp0],   %[tmp0],    %[linesize]                 \n\t"
>          MMI_LWC1(%[ftmp4], %[tmp0], 0x00)
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp1],   %[ftmp1],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp2],   %[ftmp2],   %[ftmp0]                    \n\t"
>          "punpcklbh  %[ftmp3],   %[ftmp3],   %[ftmp0]                    \n\t"
> @@ -1664,7 +1664,7 @@ static void vc1_put_ver_16b_shift2_mmi(int16_t *dst,
>      DECLARE_VAR_ADDRT;
>  
>      __asm__ volatile(
> -        "xor        $f0,    $f0,    $f0             \n\t"
> +        "pxor       $f0,    $f0,    $f0             \n\t"
>          "li         $8,     0x03                    \n\t"
>          LOAD_ROUNDER_MMI("%[rnd]")
>          "ldc1       $f12,   %[ff_pw_9]              \n\t"
> @@ -1771,7 +1771,7 @@ static void OPNAME ## vc1_shift2_mmi(uint8_t *dst, const uint8_t *src,      \
>      rnd = 8 - rnd;                                                          \
>                                                                              \
>      __asm__ volatile(                                                       \
> -        "xor        $f0,    $f0,    $f0             \n\t"                   \
> +        "pxor       $f0,    $f0,    $f0             \n\t"                   \
>          "li         $10,    0x08                    \n\t"                   \
>          LOAD_ROUNDER_MMI("%[rnd]")                                          \
>          "ldc1       $f12,   %[ff_pw_9]              \n\t"                   \
> @@ -1898,7 +1898,7 @@ vc1_put_ver_16b_ ## NAME ## _mmi(int16_t *dst, const uint8_t *src,          \
>      src -= src_stride;                                                      \
>                                                                              \
>      __asm__ volatile(                                                       \
> -        "xor        $f0,    $f0,    $f0             \n\t"                   \
> +        "pxor       $f0,    $f0,    $f0             \n\t"                   \
>          LOAD_ROUNDER_MMI("%[rnd]")                                          \
>          "ldc1       $f10,   %[ff_pw_53]             \n\t"                   \
>          "ldc1       $f12,   %[ff_pw_18]             \n\t"                   \
> @@ -1973,7 +1973,7 @@ OPNAME ## vc1_hor_16b_ ## NAME ## _mmi(uint8_t *dst, mips_reg stride,       \
>      rnd -= (-4+58+13-3)*256; /* Add -256 bias */                            \
>                                                                              \
>      __asm__ volatile(                                                       \
> -        "xor        $f0,    $f0,    $f0             \n\t"                   \
> +        "pxor       $f0,    $f0,    $f0             \n\t"                   \
>          LOAD_ROUNDER_MMI("%[rnd]")                                          \
>          "ldc1       $f10,   %[ff_pw_53]             \n\t"                   \
>          "ldc1       $f12,   %[ff_pw_18]             \n\t"                   \
> @@ -2023,7 +2023,7 @@ OPNAME ## vc1_## NAME ## _mmi(uint8_t *dst, const uint8_t *src,             \
>      rnd = 32-rnd;                                                           \
>                                                                              \
>      __asm__ volatile (                                                      \
> -        "xor        $f0,    $f0,    $f0             \n\t"                   \
> +        "pxor       $f0,    $f0,    $f0             \n\t"                   \
>          LOAD_ROUNDER_MMI("%[rnd]")                                          \
>          "ldc1       $f10,   %[ff_pw_53]             \n\t"                   \
>          "ldc1       $f12,   %[ff_pw_18]             \n\t"                   \
> @@ -2259,7 +2259,7 @@ void ff_put_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
>  
>      __asm__ volatile(
>          "li         %[tmp0],    0x06                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
>          "pshufh     %[A],       %[A],       %[ftmp0]                    \n\t"
>          "pshufh     %[B],       %[B],       %[ftmp0]                    \n\t"
> @@ -2314,7 +2314,7 @@ void ff_put_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
>  
>      __asm__ volatile(
>          "li         %[tmp0],    0x06                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "mtc1       %[tmp0],    %[ftmp5]                                \n\t"
>          "pshufh     %[A],       %[A],       %[ftmp0]                    \n\t"
>          "pshufh     %[B],       %[B],       %[ftmp0]                    \n\t"
> @@ -2367,7 +2367,7 @@ void ff_avg_no_rnd_vc1_chroma_mc8_mmi(uint8_t *dst /* align 8 */,
>  
>      __asm__ volatile(
>          "li         %[tmp0],    0x06                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "mtc1       %[tmp0],    %[ftmp9]                                \n\t"
>          "pshufh     %[A],       %[A],       %[ftmp0]                    \n\t"
>          "pshufh     %[B],       %[B],       %[ftmp0]                    \n\t"
> @@ -2425,7 +2425,7 @@ void ff_avg_no_rnd_vc1_chroma_mc4_mmi(uint8_t *dst /* align 8 */,
>  
>      __asm__ volatile(
>          "li         %[tmp0],    0x06                                    \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>          "mtc1       %[tmp0],    %[ftmp5]                                \n\t"
>          "pshufh     %[A],       %[A],       %[ftmp0]                    \n\t"
>          "pshufh     %[B],       %[B],       %[ftmp0]                    \n\t"
> diff --git a/libavcodec/mips/vp3dsp_idct_mmi.c b/libavcodec/mips/vp3dsp_idct_mmi.c
> index c5c4cf3..0d4cba1 100644
> --- a/libavcodec/mips/vp3dsp_idct_mmi.c
> +++ b/libavcodec/mips/vp3dsp_idct_mmi.c
> @@ -34,7 +34,7 @@ static void idct_row_mmi(int16_t *input)
>      double ftmp[23];
>      uint64_t tmp[2];
>      __asm__ volatile (
> -        "xor        %[ftmp10],      %[ftmp10],        %[ftmp10] \n\t"
> +        "pxor       %[ftmp10],      %[ftmp10],        %[ftmp10] \n\t"
>          LOAD_CONST(%[csth_1], 1)
>          "li         %[tmp0],        0x02                        \n\t"
>          "1:                                                     \n\t"
> @@ -51,14 +51,14 @@ static void idct_row_mmi(int16_t *input)
>          LOAD_CONST(%[ftmp9], 12785)
>          "pmulhh     %[A],           %[ftmp9],         %[ftmp7]  \n\t"
>          "pcmpgth    %[C],           %[ftmp10],        %[ftmp1]  \n\t"
> -        "or         %[mask],        %[C],             %[csth_1] \n\t"
> +        "por        %[mask],        %[C],             %[csth_1] \n\t"
>          "pmullh     %[B],           %[ftmp1],         %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],         %[B]      \n\t"
>          "pmullh     %[B],           %[B],             %[mask]   \n\t"
>          "paddh      %[A],           %[A],             %[B]      \n\t"
>          "paddh      %[A],           %[A],             %[C]      \n\t"
>          "pcmpgth    %[D],           %[ftmp10],        %[ftmp7]  \n\t"
> -        "or         %[mask],        %[D],             %[csth_1] \n\t"
> +        "por        %[mask],        %[D],             %[csth_1] \n\t"
>          "pmullh     %[ftmp7],       %[ftmp7],         %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],         %[ftmp7]  \n\t"
>          "pmullh     %[B],           %[B],             %[mask]   \n\t"
> @@ -69,12 +69,12 @@ static void idct_row_mmi(int16_t *input)
>          LOAD_CONST(%[ftmp8], 54491)
>          LOAD_CONST(%[ftmp9], 36410)
>          "pcmpgth    %[Ad],          %[ftmp10],        %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ad],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Ad],            %[csth_1] \n\t"
>          "pmullh     %[ftmp1],       %[ftmp5],         %[mask]   \n\t"
>          "pmulhuh    %[C],           %[ftmp9],         %[ftmp1]  \n\t"
>          "pmullh     %[C],           %[C],             %[mask]   \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],        %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Bd],            %[csth_1] \n\t"
>          "pmullh     %[D],           %[ftmp3],         %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp8],         %[D]      \n\t"
>          "pmullh     %[D],           %[D],             %[mask]   \n\t"
> @@ -82,12 +82,12 @@ static void idct_row_mmi(int16_t *input)
>          "paddh      %[C],           %[C],             %[Ad]     \n\t"
>          "paddh      %[C],           %[C],             %[Bd]     \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],        %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Bd],            %[csth_1] \n\t"
>          "pmullh     %[ftmp1],       %[ftmp3],         %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp9],         %[ftmp1]  \n\t"
>          "pmullh     %[D],           %[D],             %[mask]   \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],        %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ed],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Ed],            %[csth_1] \n\t"
>          "pmullh     %[Ad],          %[ftmp5],         %[mask]   \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],         %[Ad]     \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]   \n\t"
> @@ -98,14 +98,14 @@ static void idct_row_mmi(int16_t *input)
>          LOAD_CONST(%[ftmp8], 46341)
>          "psubh      %[Ad],          %[A],             %[C]      \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],        %[Ad]     \n\t"
> -        "or         %[mask],        %[Bd],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Bd],            %[csth_1] \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]   \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],         %[Ad]     \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]   \n\t"
>          "paddh      %[Ad],          %[Ad],            %[Bd]     \n\t"
>          "psubh      %[Bd],          %[B],             %[D]      \n\t"
>          "pcmpgth    %[Cd],          %[ftmp10],        %[Bd]     \n\t"
> -        "or         %[mask],        %[Cd],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Cd],            %[csth_1] \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]   \n\t"
>          "pmulhuh    %[Bd],          %[ftmp8],         %[Bd]     \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]   \n\t"
> @@ -114,14 +114,14 @@ static void idct_row_mmi(int16_t *input)
>          "paddh      %[Dd],          %[B],             %[D]      \n\t"
>          "paddh      %[A],           %[ftmp0],         %[ftmp4]  \n\t"
>          "pcmpgth    %[B],           %[ftmp10],        %[A]      \n\t"
> -        "or         %[mask],        %[B],             %[csth_1] \n\t"
> +        "por        %[mask],        %[B],             %[csth_1] \n\t"
>          "pmullh     %[A],           %[A],             %[mask]   \n\t"
>          "pmulhuh    %[A],           %[ftmp8],         %[A]      \n\t"
>          "pmullh     %[A],           %[A],             %[mask]   \n\t"
>          "paddh      %[A],           %[A],             %[B]      \n\t"
>          "psubh      %[B],           %[ftmp0],         %[ftmp4]  \n\t"
>          "pcmpgth    %[C],           %[ftmp10],        %[B]      \n\t"
> -        "or         %[mask],        %[C],             %[csth_1] \n\t"
> +        "por        %[mask],        %[C],             %[csth_1] \n\t"
>          "pmullh     %[B],           %[B],             %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],         %[B]      \n\t"
>          "pmullh     %[B],           %[B],             %[mask]   \n\t"
> @@ -131,14 +131,14 @@ static void idct_row_mmi(int16_t *input)
>          LOAD_CONST(%[ftmp9], 25080)
>          "pmulhh     %[C],           %[ftmp9],         %[ftmp6]  \n\t"
>          "pcmpgth    %[D],           %[ftmp10],        %[ftmp2]  \n\t"
> -        "or         %[mask],        %[D],             %[csth_1] \n\t"
> +        "por        %[mask],        %[D],             %[csth_1] \n\t"
>          "pmullh     %[Ed],          %[ftmp2],         %[mask]   \n\t"
>          "pmulhuh    %[Ed],          %[ftmp8],         %[Ed]     \n\t"
>          "pmullh     %[Ed],          %[Ed],            %[mask]   \n\t"
>          "paddh      %[C],           %[C],             %[Ed]     \n\t"
>          "paddh      %[C],           %[C],             %[D]      \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],        %[ftmp6]  \n\t"
> -        "or         %[mask],        %[Ed],            %[csth_1] \n\t"
> +        "por        %[mask],        %[Ed],            %[csth_1] \n\t"
>          "pmullh     %[ftmp6],       %[ftmp6],         %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp8],         %[ftmp6]  \n\t"
>          "pmullh     %[D],           %[D],             %[mask]   \n\t"
> @@ -193,7 +193,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>      for (int i = 0; i < 8; ++i)
>          temp_value[i] = av_clip_uint8(128 + ((46341 * input[i << 3] + (8 << 16)) >> 20));
>      __asm__ volatile (
> -        "xor        %[ftmp10],      %[ftmp10],          %[ftmp10] \n\t"
> +        "pxor       %[ftmp10],      %[ftmp10],          %[ftmp10] \n\t"
>          "li         %[tmp0],        0x02                          \n\t"
>          "1:                                                       \n\t"
>          "ldc1       %[ftmp0],       0x00(%[input])                \n\t"
> @@ -213,14 +213,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[Gd], 1)
>          "pmulhh     %[A],           %[ftmp9],           %[ftmp7]  \n\t"
>          "pcmpgth    %[C],           %[ftmp10],          %[ftmp1]  \n\t"
> -        "or         %[mask],        %[C],               %[Gd]     \n\t"
> +        "por        %[mask],        %[C],               %[Gd]     \n\t"
>          "pmullh     %[B],           %[ftmp1],           %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],           %[B]      \n\t"
>          "pmullh     %[B],           %[B],               %[mask]   \n\t"
>          "paddh      %[A],           %[A],               %[B]      \n\t"
>          "paddh      %[A],           %[A],               %[C]      \n\t"
>          "pcmpgth    %[D],           %[ftmp10],          %[ftmp7]  \n\t"
> -        "or         %[mask],        %[D],               %[Gd]     \n\t"
> +        "por        %[mask],        %[D],               %[Gd]     \n\t"
>          "pmullh     %[Ad],          %[ftmp7],           %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],           %[Ad]     \n\t"
>          "pmullh     %[B],           %[B],               %[mask]   \n\t"
> @@ -231,12 +231,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp8], 54491)
>          LOAD_CONST(%[ftmp9], 36410)
>          "pcmpgth    %[Ad],          %[ftmp10],          %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ad],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Ad],              %[Gd]     \n\t"
>          "pmullh     %[Cd],          %[ftmp5],           %[mask]   \n\t"
>          "pmulhuh    %[C],           %[ftmp9],           %[Cd]     \n\t"
>          "pmullh     %[C],           %[C],               %[mask]   \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],          %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Bd],              %[Gd]     \n\t"
>          "pmullh     %[D],           %[ftmp3],           %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp8],           %[D]      \n\t"
>          "pmullh     %[D],           %[D],               %[mask]   \n\t"
> @@ -244,12 +244,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          "paddh      %[C],           %[C],               %[Ad]     \n\t"
>          "paddh      %[C],           %[C],               %[Bd]     \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],          %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Bd],              %[Gd]     \n\t"
>          "pmullh     %[Cd],          %[ftmp3],           %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp9],           %[Cd]     \n\t"
>          "pmullh     %[D],           %[D],               %[mask]   \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],          %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ed],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Ed],              %[Gd]     \n\t"
>          "pmullh     %[Ad],          %[ftmp5],           %[mask]   \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],           %[Ad]     \n\t"
>          "pmullh     %[Ad],          %[Ad],              %[mask]   \n\t"
> @@ -260,14 +260,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp8], 46341)
>          "psubh      %[Ad],          %[A],             %[C]        \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],        %[Ad]       \n\t"
> -        "or         %[mask],        %[Bd],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Bd],            %[Gd]       \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]     \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],         %[Ad]       \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]     \n\t"
>          "paddh      %[Ad],          %[Ad],            %[Bd]       \n\t"
>          "psubh      %[Bd],          %[B],             %[D]        \n\t"
>          "pcmpgth    %[Cd],          %[ftmp10],        %[Bd]       \n\t"
> -        "or         %[mask],        %[Cd],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Cd],            %[Gd]       \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]     \n\t"
>          "pmulhuh    %[Bd],          %[ftmp8],         %[Bd]       \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]     \n\t"
> @@ -278,7 +278,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[Ed], 2056)
>          "paddh      %[A],           %[ftmp0],         %[ftmp4]    \n\t"
>          "pcmpgth    %[B],           %[ftmp10],        %[A]        \n\t"
> -        "or         %[mask],        %[B],             %[Gd]       \n\t"
> +        "por        %[mask],        %[B],             %[Gd]       \n\t"
>          "pmullh     %[A],           %[A],             %[mask]     \n\t"
>          "pmulhuh    %[A],           %[ftmp8],         %[A]        \n\t"
>          "pmullh     %[A],           %[A],             %[mask]     \n\t"
> @@ -286,7 +286,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          "paddh      %[A],           %[A],             %[Ed]       \n\t"
>          "psubh      %[B],           %[ftmp0],         %[ftmp4]    \n\t"
>          "pcmpgth    %[C],           %[ftmp10],        %[B]        \n\t"
> -        "or         %[mask],        %[C],             %[Gd]       \n\t"
> +        "por        %[mask],        %[C],             %[Gd]       \n\t"
>          "pmullh     %[B],           %[B],             %[mask]     \n\t"
>          "pmulhuh    %[B],           %[ftmp8],         %[B]        \n\t"
>          "pmullh     %[B],           %[B],             %[mask]     \n\t"
> @@ -297,14 +297,14 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp9], 25080)
>          "pmulhh     %[C],           %[ftmp9],         %[ftmp6]    \n\t"
>          "pcmpgth    %[D],           %[ftmp10],        %[ftmp2]    \n\t"
> -        "or         %[mask],        %[D],             %[Gd]       \n\t"
> +        "por        %[mask],        %[D],             %[Gd]       \n\t"
>          "pmullh     %[Ed],          %[ftmp2],         %[mask]     \n\t"
>          "pmulhuh    %[Ed],          %[ftmp8],         %[Ed]       \n\t"
>          "pmullh     %[Ed],          %[Ed],            %[mask]     \n\t"
>          "paddh      %[C],           %[C],             %[Ed]       \n\t"
>          "paddh      %[C],           %[C],             %[D]        \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],        %[ftmp6]    \n\t"
> -        "or         %[mask],        %[Ed],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Ed],            %[Gd]       \n\t"
>          "pmullh     %[D],           %[ftmp6],         %[mask]     \n\t"
>          "pmulhuh    %[D],           %[ftmp8],         %[D]        \n\t"
>          "pmullh     %[D],           %[D],             %[mask]     \n\t"
> @@ -317,12 +317,12 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          "psubh      %[C],           %[B],             %[Ad]       \n\t"
>          "psubh      %[B],           %[Bd],            %[D]        \n\t"
>          "paddh      %[D],           %[Bd],            %[D]        \n\t"
> -        "or         %[mask],        %[ftmp1],         %[ftmp2]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp3]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp4]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp5]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp6]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp7]    \n\t"
> +        "por        %[mask],        %[ftmp1],         %[ftmp2]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp3]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp4]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp5]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp6]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp7]    \n\t"
>          "pcmpeqh    %[mask],        %[mask],          %[ftmp10]   \n\t"
>          "packushb   %[mask],        %[mask],          %[ftmp10]   \n\t"
>          "li         %[tmp1],        0x04                          \n\t"
> @@ -361,7 +361,7 @@ static void idct_column_true_mmi(uint8_t *dst, int stride, int16_t *input)
>          "packushb   %[ftmp7],       %[ftmp7],         %[ftmp10]   \n\t"
>  
>          "lwc1       %[Ed],          0x00(%[temp_value])           \n\t"
> -        "and        %[Ed],          %[Ed],            %[mask]     \n\t"
> +        "pand       %[Ed],          %[Ed],            %[mask]     \n\t"
>          "paddb      %[ftmp0],       %[ftmp0],         %[Ed]       \n\t"
>          "paddb      %[ftmp1],       %[ftmp1],         %[Ed]       \n\t"
>          "paddb      %[ftmp2],       %[ftmp2],         %[Ed]       \n\t"
> @@ -412,7 +412,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>      for (int i = 0; i < 8; ++i)
>          temp_value[i] = (46341 * input[i << 3] + (8 << 16)) >> 20;
>      __asm__ volatile (
> -        "xor        %[ftmp10],      %[ftmp10],          %[ftmp10] \n\t"
> +        "pxor       %[ftmp10],      %[ftmp10],          %[ftmp10] \n\t"
>          "li         %[tmp0],        0x02                          \n\t"
>          "1:                                                       \n\t"
>          "ldc1       %[ftmp0],       0x00(%[input])                \n\t"
> @@ -432,14 +432,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[Gd], 1)
>          "pmulhh     %[A],           %[ftmp9],           %[ftmp7]  \n\t"
>          "pcmpgth    %[C],           %[ftmp10],          %[ftmp1]  \n\t"
> -        "or         %[mask],        %[C],               %[Gd]     \n\t"
> +        "por        %[mask],        %[C],               %[Gd]     \n\t"
>          "pmullh     %[B],           %[ftmp1],           %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],           %[B]      \n\t"
>          "pmullh     %[B],           %[B],               %[mask]   \n\t"
>          "paddh      %[A],           %[A],               %[B]      \n\t"
>          "paddh      %[A],           %[A],               %[C]      \n\t"
>          "pcmpgth    %[D],           %[ftmp10],          %[ftmp7]  \n\t"
> -        "or         %[mask],        %[D],               %[Gd]     \n\t"
> +        "por        %[mask],        %[D],               %[Gd]     \n\t"
>          "pmullh     %[Ad],          %[ftmp7],           %[mask]   \n\t"
>          "pmulhuh    %[B],           %[ftmp8],           %[Ad]     \n\t"
>          "pmullh     %[B],           %[B],               %[mask]   \n\t"
> @@ -450,12 +450,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp8], 54491)
>          LOAD_CONST(%[ftmp9], 36410)
>          "pcmpgth    %[Ad],          %[ftmp10],          %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ad],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Ad],              %[Gd]     \n\t"
>          "pmullh     %[Cd],          %[ftmp5],           %[mask]   \n\t"
>          "pmulhuh    %[C],           %[ftmp9],           %[Cd]     \n\t"
>          "pmullh     %[C],           %[C],               %[mask]   \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],          %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Bd],              %[Gd]     \n\t"
>          "pmullh     %[D],           %[ftmp3],           %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp8],           %[D]      \n\t"
>          "pmullh     %[D],           %[D],               %[mask]   \n\t"
> @@ -463,12 +463,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          "paddh      %[C],           %[C],               %[Ad]     \n\t"
>          "paddh      %[C],           %[C],               %[Bd]     \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],          %[ftmp3]  \n\t"
> -        "or         %[mask],        %[Bd],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Bd],              %[Gd]     \n\t"
>          "pmullh     %[Cd],          %[ftmp3],           %[mask]   \n\t"
>          "pmulhuh    %[D],           %[ftmp9],           %[Cd]     \n\t"
>          "pmullh     %[D],           %[D],               %[mask]   \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],          %[ftmp5]  \n\t"
> -        "or         %[mask],        %[Ed],              %[Gd]     \n\t"
> +        "por        %[mask],        %[Ed],              %[Gd]     \n\t"
>          "pmullh     %[Ad],          %[ftmp5],           %[mask]   \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],           %[Ad]     \n\t"
>          "pmullh     %[Ad],          %[Ad],              %[mask]   \n\t"
> @@ -479,14 +479,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp8], 46341)
>          "psubh      %[Ad],          %[A],             %[C]        \n\t"
>          "pcmpgth    %[Bd],          %[ftmp10],        %[Ad]       \n\t"
> -        "or         %[mask],        %[Bd],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Bd],            %[Gd]       \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]     \n\t"
>          "pmulhuh    %[Ad],          %[ftmp8],         %[Ad]       \n\t"
>          "pmullh     %[Ad],          %[Ad],            %[mask]     \n\t"
>          "paddh      %[Ad],          %[Ad],            %[Bd]       \n\t"
>          "psubh      %[Bd],          %[B],             %[D]        \n\t"
>          "pcmpgth    %[Cd],          %[ftmp10],        %[Bd]       \n\t"
> -        "or         %[mask],        %[Cd],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Cd],            %[Gd]       \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]     \n\t"
>          "pmulhuh    %[Bd],          %[ftmp8],         %[Bd]       \n\t"
>          "pmullh     %[Bd],          %[Bd],            %[mask]     \n\t"
> @@ -497,7 +497,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[Ed], 8)
>          "paddh      %[A],           %[ftmp0],         %[ftmp4]    \n\t"
>          "pcmpgth    %[B],           %[ftmp10],        %[A]        \n\t"
> -        "or         %[mask],        %[B],             %[Gd]       \n\t"
> +        "por        %[mask],        %[B],             %[Gd]       \n\t"
>          "pmullh     %[A],           %[A],             %[mask]     \n\t"
>          "pmulhuh    %[A],           %[ftmp8],         %[A]        \n\t"
>          "pmullh     %[A],           %[A],             %[mask]     \n\t"
> @@ -505,7 +505,7 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          "paddh      %[A],           %[A],             %[Ed]       \n\t"
>          "psubh      %[B],           %[ftmp0],         %[ftmp4]    \n\t"
>          "pcmpgth    %[C],           %[ftmp10],        %[B]        \n\t"
> -        "or         %[mask],        %[C],             %[Gd]       \n\t"
> +        "por        %[mask],        %[C],             %[Gd]       \n\t"
>          "pmullh     %[B],           %[B],             %[mask]     \n\t"
>          "pmulhuh    %[B],           %[ftmp8],         %[B]        \n\t"
>          "pmullh     %[B],           %[B],             %[mask]     \n\t"
> @@ -516,14 +516,14 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          LOAD_CONST(%[ftmp9], 25080)
>          "pmulhh     %[C],           %[ftmp9],         %[ftmp6]    \n\t"
>          "pcmpgth    %[D],           %[ftmp10],        %[ftmp2]    \n\t"
> -        "or         %[mask],        %[D],             %[Gd]       \n\t"
> +        "por        %[mask],        %[D],             %[Gd]       \n\t"
>          "pmullh     %[Ed],          %[ftmp2],         %[mask]     \n\t"
>          "pmulhuh    %[Ed],          %[ftmp8],         %[Ed]       \n\t"
>          "pmullh     %[Ed],          %[Ed],            %[mask]     \n\t"
>          "paddh      %[C],           %[C],             %[Ed]       \n\t"
>          "paddh      %[C],           %[C],             %[D]        \n\t"
>          "pcmpgth    %[Ed],          %[ftmp10],        %[ftmp6]    \n\t"
> -        "or         %[mask],        %[Ed],            %[Gd]       \n\t"
> +        "por        %[mask],        %[Ed],            %[Gd]       \n\t"
>          "pmullh     %[D],           %[ftmp6],         %[mask]     \n\t"
>          "pmulhuh    %[D],           %[ftmp8],         %[D]        \n\t"
>          "pmullh     %[D],           %[D],             %[mask]     \n\t"
> @@ -536,12 +536,12 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          "psubh      %[C],           %[B],             %[Ad]       \n\t"
>          "psubh      %[B],           %[Bd],            %[D]        \n\t"
>          "paddh      %[D],           %[Bd],            %[D]        \n\t"
> -        "or         %[mask],        %[ftmp1],         %[ftmp2]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp3]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp4]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp5]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp6]    \n\t"
> -        "or         %[mask],        %[mask],          %[ftmp7]    \n\t"
> +        "por        %[mask],        %[ftmp1],         %[ftmp2]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp3]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp4]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp5]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp6]    \n\t"
> +        "por        %[mask],        %[mask],          %[ftmp7]    \n\t"
>          "pcmpeqh    %[mask],        %[mask],          %[ftmp10]   \n\t"
>          "li         %[tmp1],        0x04                          \n\t"
>          "dmtc1      %[tmp1],        %[ftmp8]                      \n\t"
> @@ -587,16 +587,16 @@ static void idct_column_false_mmi(uint8_t *dst, int stride, int16_t *input)
>          "punpcklbh  %[Cd],          %[Cd],            %[ftmp10]   \n\t"
>          "punpcklbh  %[Dd],          %[Dd],            %[ftmp10]   \n\t"
>          "ldc1       %[Ed],          0x00(%[temp_value])           \n\t"
> -        "and        %[Ed],          %[Ed],            %[mask]     \n\t"
> -        "nor        %[mask],        %[mask],          %[mask]     \n\t"
> -        "and        %[ftmp0],       %[ftmp0],         %[mask]     \n\t"
> -        "and        %[ftmp1],       %[ftmp1],         %[mask]     \n\t"
> -        "and        %[ftmp2],       %[ftmp2],         %[mask]     \n\t"
> -        "and        %[ftmp3],       %[ftmp3],         %[mask]     \n\t"
> -        "and        %[ftmp4],       %[ftmp4],         %[mask]     \n\t"
> -        "and        %[ftmp5],       %[ftmp5],         %[mask]     \n\t"
> -        "and        %[ftmp6],       %[ftmp6],         %[mask]     \n\t"
> -        "and        %[ftmp7],       %[ftmp7],         %[mask]     \n\t"
> +        "pand       %[Ed],          %[Ed],            %[mask]     \n\t"
> +        "pnor       %[mask],        %[mask],          %[mask]     \n\t"
> +        "pand       %[ftmp0],       %[ftmp0],         %[mask]     \n\t"
> +        "pand       %[ftmp1],       %[ftmp1],         %[mask]     \n\t"
> +        "pand       %[ftmp2],       %[ftmp2],         %[mask]     \n\t"
> +        "pand       %[ftmp3],       %[ftmp3],         %[mask]     \n\t"
> +        "pand       %[ftmp4],       %[ftmp4],         %[mask]     \n\t"
> +        "pand       %[ftmp5],       %[ftmp5],         %[mask]     \n\t"
> +        "pand       %[ftmp6],       %[ftmp6],         %[mask]     \n\t"
> +        "pand       %[ftmp7],       %[ftmp7],         %[mask]     \n\t"
>          "paddh      %[ftmp0],       %[ftmp0],         %[A]        \n\t"
>          "paddh      %[ftmp1],       %[ftmp1],         %[B]        \n\t"
>          "paddh      %[ftmp2],       %[ftmp2],         %[C]        \n\t"
> @@ -689,7 +689,7 @@ void ff_vp3_idct_dc_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
>      double ftmp[7];
>      uint64_t tmp;
>      __asm__ volatile (
> -        "xor        %[ftmp0],     %[ftmp0],           %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],     %[ftmp0],           %[ftmp0]      \n\t"
>          "mtc1       %[dc],        %[ftmp5]                          \n\t"
>          "pshufh     %[ftmp5],     %[ftmp5],           %[ftmp0]      \n\t"
>          "li         %[tmp0],      0x08                              \n\t"
> @@ -734,10 +734,10 @@ void ff_put_no_rnd_pixels_l2_mmi(uint8_t *dst, const uint8_t *src1,
>              "gsldrc1     %[ftmp1],       0x00(%[src1])                   \n\t"
>              "gsldlc1     %[ftmp2],       0x07(%[src2])                   \n\t"
>              "gsldrc1     %[ftmp2],       0x00(%[src2])                   \n\t"
> -            "xor         %[ftmp3],       %[ftmp1],             %[ftmp2]  \n\t"
> -            "and         %[ftmp3],       %[ftmp3],             %[ftmp4]  \n\t"
> +            "pxor        %[ftmp3],       %[ftmp1],             %[ftmp2]  \n\t"
> +            "pand        %[ftmp3],       %[ftmp3],             %[ftmp4]  \n\t"
>              "psrlw       %[ftmp3],       %[ftmp3],             %[ftmp5]  \n\t"
> -            "and         %[ftmp6],       %[ftmp1],             %[ftmp2]  \n\t"
> +            "pand        %[ftmp6],       %[ftmp1],             %[ftmp2]  \n\t"
>              "paddw       %[ftmp3],       %[ftmp3],             %[ftmp6]  \n\t"
>              "sdc1        %[ftmp3],       0x00(%[dst])                    \n\t"
>              PTR_ADDU    "%[src1],        %[src1],              %[stride] \n\t"
> diff --git a/libavcodec/mips/vp8dsp_mmi.c b/libavcodec/mips/vp8dsp_mmi.c
> index ae0b555..b352906 100644
> --- a/libavcodec/mips/vp8dsp_mmi.c
> +++ b/libavcodec/mips/vp8dsp_mmi.c
> @@ -38,10 +38,10 @@
>          "pcmpeqb    %[db_1],    "#src1",        "#src2"             \n\t"   \
>          "pmaxub     %[db_2],    "#src1",        "#src2"             \n\t"   \
>          "pcmpeqb    %[db_2],    %[db_2],        "#src1"             \n\t"   \
> -        "xor        "#dst",     %[db_2],        %[db_1]             \n\t"
> +        "pxor       "#dst",     %[db_2],        %[db_1]             \n\t"
>  
>  #define MMI_BTOH(dst_l, dst_r, src)                                         \
> -        "xor        %[db_1],    %[db_1],        %[db_1]             \n\t"   \
> +        "pxor       %[db_1],    %[db_1],        %[db_1]             \n\t"   \
>          "pcmpgtb    %[db_2],    %[db_1],        "#src"              \n\t"   \
>          "punpcklbh  "#dst_r",   "#src",         %[db_2]             \n\t"   \
>          "punpckhbh  "#dst_l",   "#src",         %[db_2]             \n\t"
> @@ -84,17 +84,17 @@
>          "punpcklwd  %[ftmp3],   %[ftmp3],       %[ftmp3]            \n\t"   \
>          MMI_PCMPGTUB(%[mask], %[mask], %[ftmp3])                            \
>          "pcmpeqw    %[ftmp3],   %[ftmp3],       %[ftmp3]            \n\t"   \
> -        "xor        %[mask],    %[mask],        %[ftmp3]            \n\t"   \
> +        "pxor       %[mask],    %[mask],        %[ftmp3]            \n\t"   \
>          /* VP8_MBFILTER */                                                  \
>          "li         %[tmp0],    0x80808080                          \n\t"   \
>          "dmtc1      %[tmp0],    %[ftmp7]                            \n\t"   \
>          "punpcklwd  %[ftmp7],   %[ftmp7],       %[ftmp7]            \n\t"   \
> -        "xor        %[p2],      %[p2],          %[ftmp7]            \n\t"   \
> -        "xor        %[p1],      %[p1],          %[ftmp7]            \n\t"   \
> -        "xor        %[p0],      %[p0],          %[ftmp7]            \n\t"   \
> -        "xor        %[q0],      %[q0],          %[ftmp7]            \n\t"   \
> -        "xor        %[q1],      %[q1],          %[ftmp7]            \n\t"   \
> -        "xor        %[q2],      %[q2],          %[ftmp7]            \n\t"   \
> +        "pxor       %[p2],      %[p2],          %[ftmp7]            \n\t"   \
> +        "pxor       %[p1],      %[p1],          %[ftmp7]            \n\t"   \
> +        "pxor       %[p0],      %[p0],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q0],      %[q0],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q1],      %[q1],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q2],      %[q2],          %[ftmp7]            \n\t"   \
>          "psubsb     %[ftmp4],   %[p1],          %[q1]               \n\t"   \
>          "psubb      %[ftmp5],   %[q0],          %[p0]               \n\t"   \
>          MMI_BTOH(%[ftmp1],  %[ftmp0],  %[ftmp5])                            \
> @@ -109,8 +109,8 @@
>          "paddh      %[ftmp1],   %[ftmp3],       %[ftmp1]            \n\t"   \
>          /* Combine left and right part */                                   \
>          "packsshb   %[ftmp1],   %[ftmp0],       %[ftmp1]            \n\t"   \
> -        "and        %[ftmp1],   %[ftmp1],       %[mask]             \n\t"   \
> -        "and        %[ftmp2],   %[ftmp1],       %[hev]              \n\t"   \
> +        "pand       %[ftmp1],   %[ftmp1],       %[mask]             \n\t"   \
> +        "pand       %[ftmp2],   %[ftmp1],       %[hev]              \n\t"   \
>          "li         %[tmp0],    0x04040404                          \n\t"   \
>          "dmtc1      %[tmp0],    %[ftmp0]                            \n\t"   \
>          "punpcklwd  %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"   \
> @@ -129,8 +129,8 @@
>          "paddsb     %[p0],      %[p0],          %[ftmp4]            \n\t"   \
>          /* filt_val &= ~hev */                                              \
>          "pcmpeqw    %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"   \
> -        "xor        %[hev],     %[hev],         %[ftmp0]            \n\t"   \
> -        "and        %[ftmp1],   %[ftmp1],       %[hev]              \n\t"   \
> +        "pxor       %[hev],     %[hev],         %[ftmp0]            \n\t"   \
> +        "pand       %[ftmp1],   %[ftmp1],       %[hev]              \n\t"   \
>          MMI_BTOH(%[ftmp5],  %[ftmp6],  %[ftmp1])                            \
>          "li         %[tmp0],    0x07                                \n\t"   \
>          "dmtc1      %[tmp0],    %[ftmp2]                            \n\t"   \
> @@ -151,9 +151,9 @@
>          /* Combine left and right part */                                   \
>          "packsshb   %[ftmp4],   %[ftmp3],       %[ftmp4]            \n\t"   \
>          "psubsb     %[q0],      %[q0],          %[ftmp4]            \n\t"   \
> -        "xor        %[q0],      %[q0],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q0],      %[q0],          %[ftmp7]            \n\t"   \
>          "paddsb     %[p0],      %[p0],          %[ftmp4]            \n\t"   \
> -        "xor        %[p0],      %[p0],          %[ftmp7]            \n\t"   \
> +        "pxor       %[p0],      %[p0],          %[ftmp7]            \n\t"   \
>          "li         %[tmp0],    0x00120012                          \n\t"   \
>          "dmtc1      %[tmp0],    %[ftmp1]                            \n\t"   \
>          "punpcklwd  %[ftmp1],   %[ftmp1],       %[ftmp1]            \n\t"   \
> @@ -168,9 +168,9 @@
>          /* Combine left and right part */                                   \
>          "packsshb   %[ftmp4],   %[ftmp3],       %[ftmp4]            \n\t"   \
>          "psubsb     %[q1],      %[q1],          %[ftmp4]            \n\t"   \
> -        "xor        %[q1],      %[q1],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q1],      %[q1],          %[ftmp7]            \n\t"   \
>          "paddsb     %[p1],      %[p1],          %[ftmp4]            \n\t"   \
> -        "xor        %[p1],      %[p1],          %[ftmp7]            \n\t"   \
> +        "pxor       %[p1],      %[p1],          %[ftmp7]            \n\t"   \
>          "li         %[tmp0],    0x03                                \n\t"   \
>          "dmtc1      %[tmp0],    %[ftmp1]                            \n\t"   \
>          /* Right part */                                                    \
> @@ -186,9 +186,9 @@
>          /* Combine left and right part */                                   \
>          "packsshb   %[ftmp4],   %[ftmp3],       %[ftmp4]            \n\t"   \
>          "psubsb     %[q2],      %[q2],          %[ftmp4]            \n\t"   \
> -        "xor        %[q2],      %[q2],          %[ftmp7]            \n\t"   \
> +        "pxor       %[q2],      %[q2],          %[ftmp7]            \n\t"   \
>          "paddsb     %[p2],      %[p2],          %[ftmp4]            \n\t"   \
> -        "xor        %[p2],      %[p2],          %[ftmp7]            \n\t"
> +        "pxor       %[p2],      %[p2],          %[ftmp7]            \n\t"
>  
>  #define PUT_VP8_EPEL4_H6_MMI(src, dst)                                      \
>          MMI_ULWC1(%[ftmp1], src, 0x00)                                      \
> @@ -1021,7 +1021,7 @@ void ff_vp8_luma_dc_wht_mmi(int16_t block[4][4][16], int16_t dc[16])
>      block[3][3][0] = (dc[12] - dc[15] + 3 - dc[13] + dc[14]) >> 3;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          MMI_SDC1(%[ftmp0], %[dc], 0x00)
>          MMI_SDC1(%[ftmp0], %[dc], 0x08)
>          MMI_SDC1(%[ftmp0], %[dc], 0x10)
> @@ -1136,7 +1136,7 @@ void ff_vp8_idct_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
>      DECLARE_VAR_ALL64;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          MMI_LDC1(%[ftmp1], %[block], 0x00)
>          MMI_LDC1(%[ftmp2], %[block], 0x08)
>          MMI_LDC1(%[ftmp3], %[block], 0x10)
> @@ -1302,7 +1302,7 @@ void ff_vp8_idct_dc_add_mmi(uint8_t *dst, int16_t block[16], ptrdiff_t stride)
>      block[0] = 0;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "mtc1       %[dc],      %[ftmp5]                            \n\t"
>          MMI_LWC1(%[ftmp1], %[dst0], 0x00)
>          MMI_LWC1(%[ftmp2], %[dst1], 0x00)
> @@ -1618,7 +1618,7 @@ void ff_put_vp8_epel16_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[15] = cm[(filter[2] * src[15] - filter[1] * src[14] + filter[3] * src[16] - filter[4] * src[17] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -1685,7 +1685,7 @@ void ff_put_vp8_epel8_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[7] = cm[(filter[2] * src[7] - filter[1] * src[ 6] + filter[3] * src[8] - filter[4] * src[9] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -1742,7 +1742,7 @@ void ff_put_vp8_epel4_h4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[3] = cm[(filter[2] * src[3] - filter[1] * src[ 2] + filter[3] * src[4] - filter[4] * src[5] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -1811,7 +1811,7 @@ void ff_put_vp8_epel16_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[15] = cm[(filter[2]*src[15] - filter[1]*src[14] + filter[0]*src[13] + filter[3]*src[16] - filter[4]*src[17] + filter[5]*src[18] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -1879,7 +1879,7 @@ void ff_put_vp8_epel8_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[7] = cm[(filter[2]*src[7] - filter[1]*src[ 6] + filter[0]*src[ 5] + filter[3]*src[8] - filter[4]*src[9] + filter[5]*src[10] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -1937,7 +1937,7 @@ void ff_put_vp8_epel4_h6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[3] = cm[(filter[2]*src[3] - filter[1]*src[ 2] + filter[0]*src[ 1] + filter[3]*src[4] - filter[4]*src[5] + filter[5]*src[ 6] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2007,7 +2007,7 @@ void ff_put_vp8_epel16_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[15] = cm[(filter[2] * src[15] - filter[1] * src[15-srcstride] + filter[3] * src[15+srcstride] - filter[4] * src[15+2*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2076,7 +2076,7 @@ void ff_put_vp8_epel8_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[7] = cm[(filter[2] * src[7] - filter[1] * src[7-srcstride] + filter[3] * src[7+srcstride] - filter[4] * src[7+2*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2135,7 +2135,7 @@ void ff_put_vp8_epel4_v4_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[3] = cm[(filter[2] * src[3] - filter[1] * src[3-srcstride] + filter[3] * src[3+srcstride] - filter[4] * src[3+2*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2205,7 +2205,7 @@ void ff_put_vp8_epel16_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[15] = cm[(filter[2]*src[15] - filter[1]*src[15-srcstride] + filter[0]*src[15-2*srcstride] + filter[3]*src[15+srcstride] - filter[4]*src[15+2*srcstride] + filter[5]*src[15+3*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2275,7 +2275,7 @@ void ff_put_vp8_epel8_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[7] = cm[(filter[2]*src[7] - filter[1]*src[7-srcstride] + filter[0]*src[7-2*srcstride] + filter[3]*src[7+srcstride] - filter[4]*src[7+2*srcstride] + filter[5]*src[7+3*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2335,7 +2335,7 @@ void ff_put_vp8_epel4_v6_mmi(uint8_t *dst, ptrdiff_t dststride, uint8_t *src,
>      dst[3] = cm[(filter[2]*src[3] - filter[1]*src[3-srcstride] + filter[0]*src[3-2*srcstride] + filter[3]*src[3+srcstride] - filter[4]*src[3+2*srcstride] + filter[5]*src[3+3*srcstride] + 64) >> 7];
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x07                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>  
> @@ -2873,7 +2873,7 @@ void ff_put_vp8_bilinear16_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[15] = (a * src[15] + b * src[16] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[a],       %[a],           %[ftmp0]            \n\t"
> @@ -2940,7 +2940,7 @@ void ff_put_vp8_bilinear16_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[7] = (c * src[7] + d * src[7 + sstride] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[c],       %[c],           %[ftmp0]            \n\t"
> @@ -3041,7 +3041,7 @@ void ff_put_vp8_bilinear8_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[7] = (a * src[7] + b * src[8] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[a],       %[a],           %[ftmp0]            \n\t"
> @@ -3102,7 +3102,7 @@ void ff_put_vp8_bilinear8_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[7] = (c * src[7] + d * src[7 + sstride] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[c],       %[c],           %[ftmp0]            \n\t"
> @@ -3194,7 +3194,7 @@ void ff_put_vp8_bilinear4_h_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[3] = (a * src[3] + b * src[4] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[a],       %[a],           %[ftmp0]            \n\t"
> @@ -3252,7 +3252,7 @@ void ff_put_vp8_bilinear4_v_mmi(uint8_t *dst, ptrdiff_t dstride, uint8_t *src,
>      dst[3] = (c * src[3] + d * src[3 + sstride] + 4) >> 3;
>      */
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],       %[ftmp0]            \n\t"
>          "li         %[tmp0],    0x03                                \n\t"
>          "mtc1       %[tmp0],    %[ftmp4]                            \n\t"
>          "pshufh     %[c],       %[c],           %[ftmp0]            \n\t"
> diff --git a/libavcodec/mips/vp9_mc_mmi.c b/libavcodec/mips/vp9_mc_mmi.c
> index e7a8387..fa65ff5 100644
> --- a/libavcodec/mips/vp9_mc_mmi.c
> +++ b/libavcodec/mips/vp9_mc_mmi.c
> @@ -82,7 +82,7 @@ static void convolve_horiz_mmi(const uint8_t *src, int32_t src_stride,
>      dst_stride -= w;
>      __asm__ volatile (
>          "move       %[tmp1],    %[width]                   \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],    %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],    %[ftmp0]      \n\t"
>          "gsldlc1    %[filter1], 0x03(%[filter])            \n\t"
>          "gsldrc1    %[filter1], 0x00(%[filter])            \n\t"
>          "gsldlc1    %[filter2], 0x0b(%[filter])            \n\t"
> @@ -157,7 +157,7 @@ static void convolve_vert_mmi(const uint8_t *src, int32_t src_stride,
>      dst_stride -= w;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],    %[ftmp0],   %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],    %[ftmp0],   %[ftmp0]      \n\t"
>          "gsldlc1    %[ftmp4],    0x03(%[filter])           \n\t"
>          "gsldrc1    %[ftmp4],    0x00(%[filter])           \n\t"
>          "gsldlc1    %[ftmp5],    0x0b(%[filter])           \n\t"
> @@ -253,7 +253,7 @@ static void convolve_avg_horiz_mmi(const uint8_t *src, int32_t src_stride,
>  
>      __asm__ volatile (
>          "move       %[tmp1],    %[width]                   \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],    %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],    %[ftmp0]      \n\t"
>          "gsldlc1    %[filter1], 0x03(%[filter])            \n\t"
>          "gsldrc1    %[filter1], 0x00(%[filter])            \n\t"
>          "gsldlc1    %[filter2], 0x0b(%[filter])            \n\t"
> @@ -339,7 +339,7 @@ static void convolve_avg_vert_mmi(const uint8_t *src, int32_t src_stride,
>      dst_stride -= w;
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],    %[ftmp0],   %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],    %[ftmp0],   %[ftmp0]      \n\t"
>          "gsldlc1    %[ftmp4],    0x03(%[filter])           \n\t"
>          "gsldrc1    %[ftmp4],    0x00(%[filter])           \n\t"
>          "gsldlc1    %[ftmp5],    0x0b(%[filter])           \n\t"
> @@ -444,7 +444,7 @@ static void convolve_avg_mmi(const uint8_t *src, int32_t src_stride,
>  
>      __asm__ volatile (
>          "move       %[tmp1],    %[width]                  \n\t"
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]      \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]      \n\t"
>          "li         %[tmp0],    0x10001                   \n\t"
>          "dmtc1      %[tmp0],    %[ftmp3]                  \n\t"
>          "punpcklhw  %[ftmp3],   %[ftmp3],   %[ftmp3]      \n\t"
> diff --git a/libavcodec/mips/wmv2dsp_mmi.c b/libavcodec/mips/wmv2dsp_mmi.c
> index 82e16f9..1a6781a 100644
> --- a/libavcodec/mips/wmv2dsp_mmi.c
> +++ b/libavcodec/mips/wmv2dsp_mmi.c
> @@ -106,7 +106,7 @@ void ff_wmv2_idct_add_mmi(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
>          wmv2_idct_col_mmi(block + i);
>  
>      __asm__ volatile (
> -        "xor        %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
> +        "pxor       %[ftmp0],   %[ftmp0],   %[ftmp0]                    \n\t"
>  
>          // low 4 loop
>          MMI_LDC1(%[ftmp1], %[block], 0x00)
> -- 
> 2.1.0
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".

LGTM.</height;></height;></height;></height;></height;></height;></jinbo at loongson.cn></jinbo at loongson.cn></jinbo at loongson.cn>


More information about the ffmpeg-devel mailing list