~1.14x faster (90 vs 78 cycles) compared with mmxext
Showing the changes to libavcodec (2 of 2 files). Show all
Unified · Split
| @@ -1117,6 +1117,28 @@ ff_chroma_intra_body_mmxext: · 1116 unmodified lines | ||
| 1117 | 1117 | DEBLOCK_P0_Q0 |
| 1118 | 1118 | %endmacro |
| 1119 | 1119 | |
| 1120 | +%macro CHROMA_INTRA_BODY_XMM 0 | |
| 1121 | + LOAD_MASK alpha_d, beta_d | |
| 1122 | + mova m5, m1 | |
| 1123 | + mova m6, m2 | |
| 1124 | + pxor m4, m1, m3 | |
| 1125 | + pand m4, [pb_1] | |
| 1126 | + pavgb m1, m3 | |
| 1127 | + psubusb m1, m4 | |
| 1128 | + pavgb m1, m0 | |
| 1129 | + pxor m4, m2, m0 | |
| 1130 | + pand m4, [pb_1] | |
| 1131 | + pavgb m2, m0 | |
| 1132 | + psubusb m2, m4 | |
| 1133 | + pavgb m2, m3 | |
| 1134 | + psubb m1, m5 | |
| 1135 | + psubb m2, m6 | |
| 1136 | + pand m1, m7 | |
| 1137 | + pand m2, m7 | |
| 1138 | + paddb m1, m5 | |
| 1139 | + paddb m2, m6 | |
| 1140 | +%endmacro | |
| 1141 | + | |
| 1120 | 1142 | %macro CHROMA_V_START_XMM 1 |
| 1121 | 1143 | movsxdifnidn stride_q, stride_d |
| 1122 | 1144 | dec alpha_d |
| @@ -1190,6 +1212,17 @@ cglobal deblock_h_chroma422_8, 5, 7, 8, 0-16, pix_, stride_, alpha_, beta_, tc0_ · 67 unmodified lines | ||
| 1190 | 1212 | STORE_8_ROWS PASS8ROWS(pix_q - 2, r5 - 2, stride_q, r6) |
| 1191 | 1213 | RET |
| 1192 | 1214 | |
| 1215 | +cglobal deblock_v_chroma_intra_8, 4, 5, 8, pix_, stride_, alpha_, beta_ | |
| 1216 | + CHROMA_V_START_XMM r4 | |
| 1217 | + movq m0, [r4] | |
| 1218 | + movq m1, [r4 + stride_q] | |
| 1219 | + movq m2, [pix_q] | |
| 1220 | + movq m3, [pix_q + stride_q] | |
| 1221 | + CHROMA_INTRA_BODY_XMM | |
| 1222 | + movq [r4 + stride_q], m1 | |
| 1223 | + movq [pix_q], m2 | |
| 1224 | +RET | |
| 1225 | + | |
| 1193 | 1226 | %endmacro ; DEBLOCK_CHROMA_XMM |
| 1194 | 1227 | |
| 1195 | 1228 | DEBLOCK_CHROMA_XMM avx |
| @@ -319,6 +319,7 @@ av_cold void ff_h264dsp_init_x86(H264DSPContext *c, const int bit_depth, · 318 unmodified lines | ||
| 319 | 319 | #endif |
| 320 | 320 | |
| 321 | 321 | c->h264_v_loop_filter_chroma = ff_deblock_v_chroma_8_avx; |
| 322 | + c->h264_v_loop_filter_chroma_intra = ff_deblock_v_chroma_intra_8_avx; | |
| 322 | 323 | if (chroma_format_idc <= 1) { |
| 323 | 324 | c->h264_h_loop_filter_chroma = ff_deblock_h_chroma_8_avx; |
| 324 | 325 | } else { |