]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/mips/hevcdsp_msa.c
avutil/mips: refactor msa SLDI_Bn_0 and SLDI_Bn macros.
[ffmpeg] / libavcodec / mips / hevcdsp_msa.c
index 81db62b876d9b171bd306eccb81449a3f3f4185d..2c57ec857a1edd1c5137b2ff647b45884443567f 100644 (file)
@@ -44,7 +44,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride,
         src0 = (v16i8) __msa_ilvr_w((v4i32) src1, (v4i32) src0);
         in0 = (v8i16) __msa_ilvr_b(zero, src0);
         in0 <<= 6;
-        ST8x2_UB(in0, dst, 2 * dst_stride);
+        ST_D2(in0, 0, 1, dst, dst_stride);
     } else if (4 == height) {
         v16i8 src0, src1, src2, src3;
         v8i16 in0, in1;
@@ -55,7 +55,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride,
         ILVR_B2_SH(zero, src0, zero, src1, in0, in1);
         in0 <<= 6;
         in1 <<= 6;
-        ST8x4_UB(in0, in1, dst, 2 * dst_stride);
+        ST_D4(in0, in1, 0, 1, 0, 1, dst, dst_stride);
     } else if (0 == height % 8) {
         v16i8 src0, src1, src2, src3, src4, src5, src6, src7;
         v8i16 in0, in1, in2, in3;
@@ -71,7 +71,7 @@ static void hevc_copy_4w_msa(uint8_t *src, int32_t src_stride,
             ILVR_B4_SH(zero, src0, zero, src1, zero, src2, zero, src3,
                        in0, in1, in2, in3);
             SLLI_4V(in0, in1, in2, in3, 6);
-            ST8x8_UB(in0, in1, in2, in3, dst, 2 * dst_stride);
+            ST_D8(in0, in1, in2, in3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
             dst += (8 * dst_stride);
         }
     }
@@ -183,7 +183,7 @@ static void hevc_copy_12w_msa(uint8_t *src, int32_t src_stride,
         in0 <<= 6;
         in1 <<= 6;
         ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
-        ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride);
+        ST_D4(in0, in1, 0, 1, 0, 1, dst + 8, dst_stride);
         dst += (4 * dst_stride);
 
         ILVR_B4_SH(zero, src4, zero, src5, zero, src6, zero, src7,
@@ -194,7 +194,7 @@ static void hevc_copy_12w_msa(uint8_t *src, int32_t src_stride,
         in0 <<= 6;
         in1 <<= 6;
         ST_SH4(in0_r, in1_r, in2_r, in3_r, dst, dst_stride);
-        ST8x4_UB(in0, in1, dst + 8, 2 * dst_stride);
+        ST_D4(in0, in1, 0, 1, 0, 1, dst + 8, dst_stride);
         dst += (4 * dst_stride);
     }
 }
@@ -495,7 +495,7 @@ static void hevc_hz_8t_4w_msa(uint8_t *src, int32_t src_stride,
         DPADD_SB4_SH(vec0, vec1, vec2, vec3, filt0, filt1, filt2, filt3,
                      dst3, dst3, dst3, dst3);
 
-        ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride);
+        ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
         dst += (8 * dst_stride);
     }
 }
@@ -1047,7 +1047,7 @@ static void hevc_vt_8t_4w_msa(uint8_t *src, int32_t src_stride,
         DPADD_SB4_SH(src8776, src10998, src12111110, src14131312,
                      filt0, filt1, filt2, filt3, dst76, dst76, dst76, dst76);
 
-        ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
+        ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
         dst += (8 * dst_stride);
 
         src2110 = src10998;
@@ -1191,7 +1191,7 @@ static void hevc_vt_8t_12w_msa(uint8_t *src, int32_t src_stride,
                      dst1_l, dst1_l, dst1_l, dst1_l);
 
         ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride);
-        ST8x4_UB(dst0_l, dst1_l, dst + 8, 2 * dst_stride);
+        ST_D4(dst0_l, dst1_l, 0, 1, 0, 1, dst + 8, dst_stride);
         dst += (4 * dst_stride);
 
         src10_r = src54_r;
@@ -1363,7 +1363,6 @@ static void hevc_hv_8t_4w_msa(uint8_t *src, int32_t src_stride,
                               int32_t height)
 {
     uint32_t loop_cnt;
-    int32_t dst_stride_in_bytes = 2 * dst_stride;
     v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
     v8i16 filt0, filt1, filt2, filt3;
     v8i16 filt_h0, filt_h1, filt_h2, filt_h3;
@@ -1452,7 +1451,7 @@ static void hevc_hv_8t_4w_msa(uint8_t *src, int32_t src_stride,
                                 filt_h0, filt_h1, filt_h2, filt_h3);
         SRA_4V(dst0_r, dst1_r, dst2_r, dst3_r, 6);
         PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r);
-        ST8x4_UB(dst0_r, dst2_r, dst, dst_stride_in_bytes);
+        ST_D4(dst0_r, dst2_r, 0, 1, 0, 1, dst, dst_stride);
         dst += (4 * dst_stride);
 
         dst10_r = dst54_r;
@@ -1607,7 +1606,6 @@ static void hevc_hv_8t_12w_msa(uint8_t *src, int32_t src_stride,
                                int32_t height)
 {
     uint32_t loop_cnt;
-    int32_t dst_stride_in_bytes = 2 * dst_stride;
     uint8_t *src_tmp;
     int16_t *dst_tmp;
     v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
@@ -1784,7 +1782,7 @@ static void hevc_hv_8t_12w_msa(uint8_t *src, int32_t src_stride,
                                 filt_h1, filt_h2, filt_h3);
         SRA_4V(dst0_r, dst1_r, dst2_r, dst3_r, 6);
         PCKEV_H2_SW(dst1_r, dst0_r, dst3_r, dst2_r, dst0_r, dst2_r);
-        ST8x4_UB(dst0_r, dst2_r, dst, dst_stride_in_bytes);
+        ST_D4(dst0_r, dst2_r, 0, 1, 0, 1, dst, dst_stride);
         dst += (4 * dst_stride);
 
         dst10_r = dst54_r;
@@ -1872,7 +1870,7 @@ static void hevc_hz_4t_4x2_msa(uint8_t *src,
     dst0 = const_vec;
     DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst0, dst0);
 
-    ST8x2_UB(dst0, dst, 2 * dst_stride);
+    ST_D2(dst0, 0, 1, dst, dst_stride);
 }
 
 static void hevc_hz_4t_4x4_msa(uint8_t *src,
@@ -1909,7 +1907,7 @@ static void hevc_hz_4t_4x4_msa(uint8_t *src,
     dst1 = const_vec;
     DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst1, dst1);
 
-    ST8x4_UB(dst0, dst1, dst, 2 * dst_stride);
+    ST_D4(dst0, dst1, 0, 1, 0, 1, dst, dst_stride);
 }
 
 static void hevc_hz_4t_4x8multiple_msa(uint8_t *src,
@@ -1956,7 +1954,7 @@ static void hevc_hz_4t_4x8multiple_msa(uint8_t *src,
         dst3 = const_vec;
         DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst3, dst3);
 
-        ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride);
+        ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
         dst += (8 * dst_stride);
     }
 }
@@ -2218,7 +2216,7 @@ static void hevc_hz_4t_12w_msa(uint8_t *src,
         DPADD_SB2_SH(vec0, vec1, filt0, filt1, dst5, dst5);
 
         ST_SH4(dst0, dst1, dst2, dst3, dst, dst_stride);
-        ST8x4_UB(dst4, dst5, dst + 8, 2 * dst_stride);
+        ST_D4(dst4, dst5, 0, 1, 0, 1, dst + 8, dst_stride);
         dst += (4 * dst_stride);
     }
 }
@@ -2478,7 +2476,7 @@ static void hevc_vt_4t_4x2_msa(uint8_t *src,
     dst10 = const_vec;
     DPADD_SB2_SH(src2110, src4332, filt0, filt1, dst10, dst10);
 
-    ST8x2_UB(dst10, dst, 2 * dst_stride);
+    ST_D2(dst10, 0, 1, dst, dst_stride);
 }
 
 static void hevc_vt_4t_4x4_msa(uint8_t *src,
@@ -2515,7 +2513,7 @@ static void hevc_vt_4t_4x4_msa(uint8_t *src,
     dst32 = const_vec;
     DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
 
-    ST8x4_UB(dst10, dst32, dst, 2 * dst_stride);
+    ST_D4(dst10, dst32, 0, 1, 0, 1, dst, dst_stride);
 }
 
 static void hevc_vt_4t_4x8_msa(uint8_t *src,
@@ -2564,8 +2562,7 @@ static void hevc_vt_4t_4x8_msa(uint8_t *src,
     DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
     DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54);
     DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76);
-    ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
-    dst += (8 * dst_stride);
+    ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
 }
 
 static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride,
@@ -2610,7 +2607,7 @@ static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride,
     DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
     DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54);
     DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76);
-    ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
+    ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
     dst += (8 * dst_stride);
 
     src2 = src10;
@@ -2635,8 +2632,7 @@ static void hevc_vt_4t_4x16_msa(uint8_t *src, int32_t src_stride,
     DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst32, dst32);
     DPADD_SB2_SH(src6554, src8776, filt0, filt1, dst54, dst54);
     DPADD_SB2_SH(src8776, src10998, filt0, filt1, dst76, dst76);
-    ST8x8_UB(dst10, dst32, dst54, dst76, dst, 2 * dst_stride);
-    dst += (8 * dst_stride);
+    ST_D8(dst10, dst32, dst54, dst76, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
 }
 
 static void hevc_vt_4t_4w_msa(uint8_t *src,
@@ -2955,7 +2951,7 @@ static void hevc_vt_4t_12w_msa(uint8_t *src,
         DPADD_SB2_SH(src4332, src6554, filt0, filt1, dst1_l, dst1_l);
 
         ST_SH4(dst0_r, dst1_r, dst2_r, dst3_r, dst, dst_stride);
-        ST8x4_UB(dst0_l, dst1_l, dst + 8, (2 * dst_stride));
+        ST_D4(dst0_l, dst1_l, 0, 1, 0, 1, dst + 8, dst_stride);
         dst += (4 * dst_stride);
 
         src2 = src6;
@@ -3243,7 +3239,6 @@ static void hevc_hv_4t_4x2_msa(uint8_t *src,
                                const int8_t *filter_x,
                                const int8_t *filter_y)
 {
-    int32_t dst_stride_in_bytes = 2 * dst_stride;
     v16i8 src0, src1, src2, src3, src4;
     v8i16 filt0, filt1;
     v8i16 filt_h0, filt_h1;
@@ -3288,7 +3283,7 @@ static void hevc_hv_4t_4x2_msa(uint8_t *src,
     dst0 >>= 6;
     dst1 >>= 6;
     dst0 = (v4i32) __msa_pckev_h((v8i16) dst1, (v8i16) dst0);
-    ST8x2_UB(dst0, dst, dst_stride_in_bytes);
+    ST_D2(dst0, 0, 1, dst, dst_stride);
 }
 
 static void hevc_hv_4t_4x4_msa(uint8_t *src,
@@ -3298,7 +3293,6 @@ static void hevc_hv_4t_4x4_msa(uint8_t *src,
                                const int8_t *filter_x,
                                const int8_t *filter_y)
 {
-    int32_t dst_stride_in_bytes = 2 * dst_stride;
     v16i8 src0, src1, src2, src3, src4, src5, src6;
     v8i16 filt0, filt1;
     v8i16 filt_h0, filt_h1;
@@ -3351,7 +3345,7 @@ static void hevc_hv_4t_4x4_msa(uint8_t *src,
     dst3 = HEVC_FILT_4TAP(dst43, dst65, filt_h0, filt_h1);
     SRA_4V(dst0, dst1, dst2, dst3, 6);
     PCKEV_H2_SW(dst1, dst0, dst3, dst2, dst0, dst2);
-    ST8x4_UB(dst0, dst2, dst, dst_stride_in_bytes);
+    ST_D4(dst0, dst2, 0, 1, 0, 1, dst, dst_stride);
 }
 
 
@@ -3442,7 +3436,7 @@ static void hevc_hv_4t_4multx8mult_msa(uint8_t *src,
         SRA_4V(dst4, dst5, dst6, dst7, 6);
         PCKEV_H4_SW(dst1, dst0, dst3, dst2, dst5, dst4, dst7, dst6,
                     dst0, dst1, dst2, dst3);
-        ST8x8_UB(dst0, dst1, dst2, dst3, dst, 2 * dst_stride);
+        ST_D8(dst0, dst1, dst2, dst3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
         dst += (8 * dst_stride);
 
         dst10_r = dst98_r;
@@ -3479,7 +3473,6 @@ static void hevc_hv_4t_6w_msa(uint8_t *src,
                               const int8_t *filter_y,
                               int32_t height)
 {
-    int32_t dst_stride_in_bytes = 2 * dst_stride;
     v16i8 src0, src1, src2, src3, src4, src5, src6, src7, src8, src9, src10;
     v8i16 filt0, filt1;
     v8i16 filt_h0, filt_h1;
@@ -3590,11 +3583,11 @@ static void hevc_hv_4t_6w_msa(uint8_t *src,
     PCKEV_H2_SH(dst1_r, dst0_r, dst3_r, dst2_r, tmp0, tmp1);
     PCKEV_H2_SH(dst5_r, dst4_r, dst7_r, dst6_r, tmp2, tmp3);
     PCKEV_H2_SH(dst1_l, dst0_l, dst3_l, dst2_l, tmp4, tmp5);
-    ST8x4_UB(tmp0, tmp1, dst, dst_stride_in_bytes);
-    ST4x4_UB(tmp4, tmp4, 0, 1, 2, 3, dst + 4, dst_stride_in_bytes);
+    ST_D4(tmp0, tmp1, 0, 1, 0, 1, dst, dst_stride);
+    ST_W4(tmp4, 0, 1, 2, 3, dst + 4, dst_stride);
     dst += 4 * dst_stride;
-    ST8x4_UB(tmp2, tmp3, dst, dst_stride_in_bytes);
-    ST4x4_UB(tmp5, tmp5, 0, 1, 2, 3, dst + 4, dst_stride_in_bytes);
+    ST_D4(tmp2, tmp3, 0, 1, 0, 1, dst, dst_stride);
+    ST_W4(tmp5, 0, 1, 2, 3, dst + 4, dst_stride);
 }
 
 static void hevc_hv_4t_8x2_msa(uint8_t *src,
@@ -4164,7 +4157,7 @@ static void hevc_hv_4t_12w_msa(uint8_t *src,
         SRA_4V(tmp4, tmp5, tmp6, tmp7, 6);
         PCKEV_H4_SW(tmp1, tmp0, tmp3, tmp2, tmp5, tmp4, tmp7, tmp6, tmp0, tmp1,
                     tmp2, tmp3);
-        ST8x8_UB(tmp0, tmp1, tmp2, tmp3, dst, 2 * dst_stride);
+        ST_D8(tmp0, tmp1, tmp2, tmp3, 0, 1, 0, 1, 0, 1, 0, 1, dst, dst_stride);
         dst += (8 * dst_stride);
 
         dst10_r = dst98_r;