Unified · Split
| @@ -1250,21 +1250,7 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 1249 unmodified lines | |||
| 1250 | uint8_t beta_in, | 1250 | uint8_t beta_in, |
| 1251 | uint32_t img_width) | 1251 | uint32_t img_width) |
| 1252 | { | 1252 | { |
| 1253 | uint8_t *src; | 1253 | v16u8 tmp_vec, bs = { 0 }; |
| 1254 | v16u8 beta, tmp_vec, bs = { 0 }; | ||
| 1255 | v16u8 tc = { 0 }; | ||
| 1256 | v16u8 is_less_than, is_less_than_beta; | ||
| 1257 | v16u8 p1, p0, q0, q1; | ||
| 1258 | v8i16 p0_r, q0_r, p1_r = { 0 }; | ||
| 1259 | v8i16 q1_r = { 0 }; | ||
| 1260 | v8i16 p0_l, q0_l, p1_l = { 0 }; | ||
| 1261 | v8i16 q1_l = { 0 }; | ||
| 1262 | v16u8 p3_org, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org, q3_org; | ||
| 1263 | v8i16 p2_org_r, p1_org_r, p0_org_r, q0_org_r, q1_org_r, q2_org_r; | ||
| 1264 | v8i16 p2_org_l, p1_org_l, p0_org_l, q0_org_l, q1_org_l, q2_org_l; | ||
| 1265 | v8i16 tc_r, tc_l; | ||
| 1266 | v16i8 zero = { 0 }; | ||
| 1267 | v16u8 is_bs_greater_than0; | ||
| 1268 | 1254 | ||
| 1269 | tmp_vec = (v16u8) __msa_fill_b(bs0); | 1255 | tmp_vec = (v16u8) __msa_fill_b(bs0); |
| 1270 | bs = (v16u8) __msa_insve_w((v4i32) bs, 0, (v4i32) tmp_vec); | 1256 | bs = (v16u8) __msa_insve_w((v4i32) bs, 0, (v4i32) tmp_vec); |
| @@ -1276,6 +1262,14 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 5 unmodified lines | |||
| 1276 | bs = (v16u8) __msa_insve_w((v4i32) bs, 3, (v4i32) tmp_vec); | 1262 | bs = (v16u8) __msa_insve_w((v4i32) bs, 3, (v4i32) tmp_vec); |
| 1277 | 1263 | ||
| 1278 | if (!__msa_test_bz_v(bs)) { | 1264 | if (!__msa_test_bz_v(bs)) { |
| 1265 | uint8_t *src = data - 4; | ||
| 1266 | v16u8 p3_org, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org, q3_org; | ||
| 1267 | v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha, beta; | ||
| 1268 | v16u8 is_less_than, is_less_than_beta, is_less_than_alpha; | ||
| 1269 | v16u8 is_bs_greater_than0; | ||
| 1270 | v16u8 tc = { 0 }; | ||
| 1271 | v16i8 zero = { 0 }; | ||
| 1272 | |||
| 1279 | tmp_vec = (v16u8) __msa_fill_b(tc0); | 1273 | tmp_vec = (v16u8) __msa_fill_b(tc0); |
| 1280 | tc = (v16u8) __msa_insve_w((v4i32) tc, 0, (v4i32) tmp_vec); | 1274 | tc = (v16u8) __msa_insve_w((v4i32) tc, 0, (v4i32) tmp_vec); |
| 1281 | tmp_vec = (v16u8) __msa_fill_b(tc1); | 1275 | tmp_vec = (v16u8) __msa_fill_b(tc1); |
| @@ -1291,9 +1285,6 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 9 unmodified lines | |||
| 1291 | v16u8 row0, row1, row2, row3, row4, row5, row6, row7; | 1285 | v16u8 row0, row1, row2, row3, row4, row5, row6, row7; |
| 1292 | v16u8 row8, row9, row10, row11, row12, row13, row14, row15; | 1286 | v16u8 row8, row9, row10, row11, row12, row13, row14, row15; |
| 1293 | 1287 | ||
| 1294 | src = data; | ||
| 1295 | src -= 4; | ||
| 1296 | |||
| 1297 | LD_UB8(src, img_width, | 1288 | LD_UB8(src, img_width, |
| 1298 | row0, row1, row2, row3, row4, row5, row6, row7); | 1289 | row0, row1, row2, row3, row4, row5, row6, row7); |
| 1299 | src += (8 * img_width); | 1290 | src += (8 * img_width); |
| @@ -1306,27 +1297,28 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 6 unmodified lines | |||
| 1306 | p3_org, p2_org, p1_org, p0_org, | 1297 | p3_org, p2_org, p1_org, p0_org, |
| 1307 | q0_org, q1_org, q2_org, q3_org); | 1298 | q0_org, q1_org, q2_org, q3_org); |
| 1308 | } | 1299 | } |
| 1309 | { | 1300 | |
| 1310 | v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0, alpha; | 1301 | p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org); |
| 1311 | v16u8 is_less_than_alpha; | 1302 | p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org); |
| 1312 | 1303 | q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org); | |
| 1313 | p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org); | 1304 | |
| 1314 | p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org); | 1305 | alpha = (v16u8) __msa_fill_b(alpha_in); |
| 1315 | q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org); | 1306 | beta = (v16u8) __msa_fill_b(beta_in); |
| 1316 | 1307 | ||
| 1317 | alpha = (v16u8) __msa_fill_b(alpha_in); | 1308 | is_less_than_alpha = (p0_asub_q0 < alpha); |
| 1318 | beta = (v16u8) __msa_fill_b(beta_in); | 1309 | is_less_than_beta = (p1_asub_p0 < beta); |
| 1319 | 1310 | is_less_than = is_less_than_beta & is_less_than_alpha; | |
| 1320 | is_less_than_alpha = (p0_asub_q0 < alpha); | 1311 | is_less_than_beta = (q1_asub_q0 < beta); |
| 1321 | is_less_than_beta = (p1_asub_p0 < beta); | 1312 | is_less_than = is_less_than_beta & is_less_than; |
| 1322 | is_less_than = is_less_than_beta & is_less_than_alpha; | 1313 | is_less_than = is_less_than & is_bs_greater_than0; |
| 1323 | is_less_than_beta = (q1_asub_q0 < beta); | 1314 | |
| 1324 | is_less_than = is_less_than_beta & is_less_than; | ||
| 1325 | is_less_than = is_less_than & is_bs_greater_than0; | ||
| 1326 | } | ||
| 1327 | if (!__msa_test_bz_v(is_less_than)) { | 1315 | if (!__msa_test_bz_v(is_less_than)) { |
| 1328 | v16i8 negate_tc, sign_negate_tc; | 1316 | v16i8 negate_tc, sign_negate_tc; |
| 1329 | v8i16 negate_tc_r, i16_negatetc_l; | 1317 | v16u8 p0, q0, p2_asub_p0, q2_asub_q0; |
| 1318 | v8i16 tc_r, tc_l, negate_tc_r, i16_negatetc_l; | ||
| 1319 | v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r; | ||
| 1320 | v8i16 p1_org_l, p0_org_l, q0_org_l, q1_org_l; | ||
| 1321 | v8i16 p0_r, q0_r, p0_l, q0_l; | ||
| 1330 | 1322 | ||
| 1331 | negate_tc = zero - (v16i8) tc; | 1323 | negate_tc = zero - (v16i8) tc; |
| 1332 | sign_negate_tc = __msa_clti_s_b(negate_tc, 0); | 1324 | sign_negate_tc = __msa_clti_s_b(negate_tc, 0); |
| @@ -1338,34 +1330,22 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 5 unmodified lines | |||
| 1338 | UNPCK_UB_SH(p0_org, p0_org_r, p0_org_l); | 1330 | UNPCK_UB_SH(p0_org, p0_org_r, p0_org_l); |
| 1339 | UNPCK_UB_SH(q0_org, q0_org_r, q0_org_l); | 1331 | UNPCK_UB_SH(q0_org, q0_org_r, q0_org_l); |
| 1340 | 1332 | ||
| 1341 | { | 1333 | p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org); |
| 1342 | v16u8 p2_asub_p0; | 1334 | is_less_than_beta = (p2_asub_p0 < beta); |
| 1343 | v16u8 is_less_than_beta_r, is_less_than_beta_l; | 1335 | is_less_than_beta = is_less_than_beta & is_less_than; |
| 1344 | |||
| 1345 | p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org); | ||
| 1346 | is_less_than_beta = (p2_asub_p0 < beta); | ||
| 1347 | is_less_than_beta = is_less_than_beta & is_less_than; | ||
| 1348 | |||
| 1349 | is_less_than_beta_r = | ||
| 1350 | (v16u8) __msa_sldi_b((v16i8) is_less_than_beta, zero, 8); | ||
| 1351 | if (!__msa_test_bz_v(is_less_than_beta_r)) { | ||
| 1352 | p2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) p2_org); | ||
| 1353 | |||
| 1354 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, p1_org_r, p2_org_r, | ||
| 1355 | negate_tc_r, tc_r, p1_r); | ||
| 1356 | } | ||
| 1357 | |||
| 1358 | is_less_than_beta_l = | ||
| 1359 | (v16u8) __msa_sldi_b(zero, (v16i8) is_less_than_beta, 8); | ||
| 1360 | if (!__msa_test_bz_v(is_less_than_beta_l)) { | ||
| 1361 | p2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) p2_org); | ||
| 1362 | |||
| 1363 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, p1_org_l, p2_org_l, | ||
| 1364 | i16_negatetc_l, tc_l, p1_l); | ||
| 1365 | } | ||
| 1366 | } | ||
| 1367 | 1336 | ||
| 1368 | if (!__msa_test_bz_v(is_less_than_beta)) { | 1337 | if (!__msa_test_bz_v(is_less_than_beta)) { |
| 1338 | v16u8 p1; | ||
| 1339 | v8i16 p1_r = { 0 }; | ||
| 1340 | v8i16 p1_l = { 0 }; | ||
| 1341 | v8i16 p2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) p2_org); | ||
| 1342 | v8i16 p2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) p2_org); | ||
| 1343 | |||
| 1344 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, p1_org_r, p2_org_r, | ||
| 1345 | negate_tc_r, tc_r, p1_r); | ||
| 1346 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, p1_org_l, p2_org_l, | ||
| 1347 | i16_negatetc_l, tc_l, p1_l); | ||
| 1348 | |||
| 1369 | p1 = (v16u8) __msa_pckev_b((v16i8) p1_l, (v16i8) p1_r); | 1349 | p1 = (v16u8) __msa_pckev_b((v16i8) p1_l, (v16i8) p1_r); |
| 1370 | p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta); | 1350 | p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta); |
| 1371 | 1351 | ||
| @@ -1373,36 +1353,25 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 1 unmodified line | |||
| 1373 | tc = tc + is_less_than_beta; | 1353 | tc = tc + is_less_than_beta; |
| 1374 | } | 1354 | } |
| 1375 | 1355 | ||
| 1376 | { | 1356 | q2_asub_q0 = __msa_asub_u_b(q2_org, q0_org); |
| 1377 | v16u8 u8_q2asub_q0; | 1357 | is_less_than_beta = (q2_asub_q0 < beta); |
| 1378 | v16u8 is_less_than_beta_l, is_less_than_beta_r; | 1358 | is_less_than_beta = is_less_than_beta & is_less_than; |
| 1379 | 1359 | ||
| 1380 | u8_q2asub_q0 = __msa_asub_u_b(q2_org, q0_org); | 1360 | q1_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q1_org); |
| 1381 | is_less_than_beta = (u8_q2asub_q0 < beta); | 1361 | q1_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q1_org); |
| 1382 | is_less_than_beta = is_less_than_beta & is_less_than; | ||
| 1383 | |||
| 1384 | q1_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q1_org); | ||
| 1385 | |||
| 1386 | is_less_than_beta_r = | ||
| 1387 | (v16u8) __msa_sldi_b((v16i8) is_less_than_beta, zero, 8); | ||
| 1388 | if (!__msa_test_bz_v(is_less_than_beta_r)) { | ||
| 1389 | q2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q2_org); | ||
| 1390 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, q1_org_r, q2_org_r, | ||
| 1391 | negate_tc_r, tc_r, q1_r); | ||
| 1392 | } | ||
| 1393 | |||
| 1394 | q1_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q1_org); | ||
| 1395 | |||
| 1396 | is_less_than_beta_l = | ||
| 1397 | (v16u8) __msa_sldi_b(zero, (v16i8) is_less_than_beta, 8); | ||
| 1398 | if (!__msa_test_bz_v(is_less_than_beta_l)) { | ||
| 1399 | q2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q2_org); | ||
| 1400 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, q1_org_l, q2_org_l, | ||
| 1401 | i16_negatetc_l, tc_l, q1_l); | ||
| 1402 | } | ||
| 1403 | } | ||
| 1404 | 1362 | ||
| 1405 | if (!__msa_test_bz_v(is_less_than_beta)) { | 1363 | if (!__msa_test_bz_v(is_less_than_beta)) { |
| 1364 | v16u8 q1; | ||
| 1365 | v8i16 q1_r = { 0 }; | ||
| 1366 | v8i16 q1_l = { 0 }; | ||
| 1367 | v8i16 q2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q2_org); | ||
| 1368 | v8i16 q2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q2_org); | ||
| 1369 | |||
| 1370 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, q1_org_r, q2_org_r, | ||
| 1371 | negate_tc_r, tc_r, q1_r); | ||
| 1372 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, q1_org_l, q2_org_l, | ||
| 1373 | i16_negatetc_l, tc_l, q1_l); | ||
| 1374 | |||
| 1406 | q1 = (v16u8) __msa_pckev_b((v16i8) q1_l, (v16i8) q1_r); | 1375 | q1 = (v16u8) __msa_pckev_b((v16i8) q1_l, (v16i8) q1_r); |
| 1407 | q1_org = __msa_bmnz_v(q1_org, q1, is_less_than_beta); | 1376 | q1_org = __msa_bmnz_v(q1_org, q1, is_less_than_beta); |
| 1408 | 1377 | ||
| @@ -1436,7 +1405,7 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 27 unmodified lines | |||
| 1436 | 1405 | ||
| 1437 | p0_org = __msa_bmnz_v(p0_org, p0, is_less_than); | 1406 | p0_org = __msa_bmnz_v(p0_org, p0, is_less_than); |
| 1438 | q0_org = __msa_bmnz_v(q0_org, q0, is_less_than); | 1407 | q0_org = __msa_bmnz_v(q0_org, q0, is_less_than); |
| 1439 | } | 1408 | |
| 1440 | { | 1409 | { |
| 1441 | v16i8 tp0, tp1, tp2, tp3; | 1410 | v16i8 tp0, tp1, tp2, tp3; |
| 1442 | v8i16 tmp2, tmp5; | 1411 | v8i16 tmp2, tmp5; |
| @@ -1548,6 +1517,7 @@ static void avc_loopfilter_luma_inter_edge_ver_msa(uint8_t *data, · 105 unmodified lines | |||
| 1548 | SW(out2, src); | 1517 | SW(out2, src); |
| 1549 | SH(out3, (src + 4)); | 1518 | SH(out3, (src + 4)); |
| 1550 | } | 1519 | } |
| 1520 | } | ||
| 1551 | } | 1521 | } |
| 1552 | } | 1522 | } |
| 1553 | 1523 | ||
| @@ -1560,20 +1530,8 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, · 6 unmodified lines | |||
| 1560 | uint8_t beta_in, | 1530 | uint8_t beta_in, |
| 1561 | uint32_t image_width) | 1531 | uint32_t image_width) |
| 1562 | { | 1532 | { |
| 1563 | v16u8 p2_asub_p0, u8_q2asub_q0; | ||
| 1564 | v16u8 alpha, beta, is_less_than, is_less_than_beta; | ||
| 1565 | v16u8 p1, p0, q0, q1; | ||
| 1566 | v8i16 p1_r = { 0 }; | ||
| 1567 | v8i16 p0_r, q0_r, q1_r = { 0 }; | ||
| 1568 | v8i16 p1_l = { 0 }; | ||
| 1569 | v8i16 p0_l, q0_l, q1_l = { 0 }; | ||
| 1570 | v16u8 p2_org, p1_org, p0_org, q0_org, q1_org, q2_org; | ||
| 1571 | v8i16 p2_org_r, p1_org_r, p0_org_r, q0_org_r, q1_org_r, q2_org_r; | ||
| 1572 | v8i16 p2_org_l, p1_org_l, p0_org_l, q0_org_l, q1_org_l, q2_org_l; | ||
| 1573 | v16i8 zero = { 0 }; | ||
| 1574 | v16u8 tmp_vec; | 1533 | v16u8 tmp_vec; |
| 1575 | v16u8 bs = { 0 }; | 1534 | v16u8 bs = { 0 }; |
| 1576 | v16i8 tc = { 0 }; | ||
| 1577 | 1535 | ||
| 1578 | tmp_vec = (v16u8) __msa_fill_b(bs0); | 1536 | tmp_vec = (v16u8) __msa_fill_b(bs0); |
| 1579 | bs = (v16u8) __msa_insve_w((v4i32) bs, 0, (v4i32) tmp_vec); | 1537 | bs = (v16u8) __msa_insve_w((v4i32) bs, 0, (v4i32) tmp_vec); |
| @@ -1585,6 +1543,16 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, · 5 unmodified lines | |||
| 1585 | bs = (v16u8) __msa_insve_w((v4i32) bs, 3, (v4i32) tmp_vec); | 1543 | bs = (v16u8) __msa_insve_w((v4i32) bs, 3, (v4i32) tmp_vec); |
| 1586 | 1544 | ||
| 1587 | if (!__msa_test_bz_v(bs)) { | 1545 | if (!__msa_test_bz_v(bs)) { |
| 1546 | v16u8 alpha, beta, is_less_than, is_less_than_beta; | ||
| 1547 | v16u8 p0, q0, p2_org, p1_org, p0_org, q0_org, q1_org, q2_org; | ||
| 1548 | v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0; | ||
| 1549 | v16u8 is_less_than_alpha, is_bs_greater_than0; | ||
| 1550 | v8i16 p0_r, q0_r, p0_l, q0_l; | ||
| 1551 | v8i16 p1_org_r, p0_org_r, q0_org_r, q1_org_r; | ||
| 1552 | v8i16 p1_org_l, p0_org_l, q0_org_l, q1_org_l; | ||
| 1553 | v16i8 zero = { 0 }; | ||
| 1554 | v16i8 tc = { 0 }; | ||
| 1555 | |||
| 1588 | tmp_vec = (v16u8) __msa_fill_b(tc0); | 1556 | tmp_vec = (v16u8) __msa_fill_b(tc0); |
| 1589 | tc = (v16i8) __msa_insve_w((v4i32) tc, 0, (v4i32) tmp_vec); | 1557 | tc = (v16i8) __msa_insve_w((v4i32) tc, 0, (v4i32) tmp_vec); |
| 1590 | tmp_vec = (v16u8) __msa_fill_b(tc1); | 1558 | tmp_vec = (v16u8) __msa_fill_b(tc1); |
| @@ -1600,26 +1568,22 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, · 9 unmodified lines | |||
| 1600 | LD_UB5(data - (3 * image_width), image_width, | 1568 | LD_UB5(data - (3 * image_width), image_width, |
| 1601 | p2_org, p1_org, p0_org, q0_org, q1_org); | 1569 | p2_org, p1_org, p0_org, q0_org, q1_org); |
| 1602 | 1570 | ||
| 1603 | { | 1571 | is_bs_greater_than0 = ((v16u8) zero < bs); |
| 1604 | v16u8 p0_asub_q0, p1_asub_p0, q1_asub_q0; | 1572 | p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org); |
| 1605 | v16u8 is_less_than_alpha, is_bs_greater_than0; | 1573 | p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org); |
| 1606 | 1574 | q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org); | |
| 1607 | is_bs_greater_than0 = ((v16u8) zero < bs); | 1575 | |
| 1608 | p0_asub_q0 = __msa_asub_u_b(p0_org, q0_org); | 1576 | is_less_than_alpha = (p0_asub_q0 < alpha); |
| 1609 | p1_asub_p0 = __msa_asub_u_b(p1_org, p0_org); | 1577 | is_less_than_beta = (p1_asub_p0 < beta); |
| 1610 | q1_asub_q0 = __msa_asub_u_b(q1_org, q0_org); | 1578 | is_less_than = is_less_than_beta & is_less_than_alpha; |
| 1611 | 1579 | is_less_than_beta = (q1_asub_q0 < beta); | |
| 1612 | is_less_than_alpha = (p0_asub_q0 < alpha); | 1580 | is_less_than = is_less_than_beta & is_less_than; |
| 1613 | is_less_than_beta = (p1_asub_p0 < beta); | 1581 | is_less_than = is_less_than & is_bs_greater_than0; |
| 1614 | is_less_than = is_less_than_beta & is_less_than_alpha; | ||
| 1615 | is_less_than_beta = (q1_asub_q0 < beta); | ||
| 1616 | is_less_than = is_less_than_beta & is_less_than; | ||
| 1617 | is_less_than = is_less_than & is_bs_greater_than0; | ||
| 1618 | } | ||
| 1619 | 1582 | ||
| 1620 | if (!__msa_test_bz_v(is_less_than)) { | 1583 | if (!__msa_test_bz_v(is_less_than)) { |
| 1621 | v16i8 sign_negate_tc, negate_tc; | 1584 | v16i8 sign_negate_tc, negate_tc; |
| 1622 | v8i16 negate_tc_r, i16_negatetc_l, tc_l, tc_r; | 1585 | v8i16 negate_tc_r, i16_negatetc_l, tc_l, tc_r; |
| 1586 | v16u8 p2_asub_p0, q2_asub_q0; | ||
| 1623 | 1587 | ||
| 1624 | q2_org = LD_UB(data + (2 * image_width)); | 1588 | q2_org = LD_UB(data + (2 * image_width)); |
| 1625 | negate_tc = zero - tc; | 1589 | negate_tc = zero - tc; |
| @@ -1635,28 +1599,19 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, · 9 unmodified lines | |||
| 1635 | p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org); | 1599 | p2_asub_p0 = __msa_asub_u_b(p2_org, p0_org); |
| 1636 | is_less_than_beta = (p2_asub_p0 < beta); | 1600 | is_less_than_beta = (p2_asub_p0 < beta); |
| 1637 | is_less_than_beta = is_less_than_beta & is_less_than; | 1601 | is_less_than_beta = is_less_than_beta & is_less_than; |
| 1638 | { | ||
| 1639 | v8u16 is_less_than_beta_r, is_less_than_beta_l; | ||
| 1640 | |||
| 1641 | is_less_than_beta_r = | ||
| 1642 | (v8u16) __msa_sldi_b((v16i8) is_less_than_beta, zero, 8); | ||
| 1643 | if (!__msa_test_bz_v((v16u8) is_less_than_beta_r)) { | ||
| 1644 | p2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) p2_org); | ||
| 1645 | 1602 | ||
| 1646 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, p1_org_r, p2_org_r, | 1603 | if (!__msa_test_bz_v(is_less_than_beta)) { |
| 1647 | negate_tc_r, tc_r, p1_r); | 1604 | v16u8 p1; |
| 1648 | } | 1605 | v8i16 p1_r = { 0 }; |
| 1606 | v8i16 p1_l = { 0 }; | ||
| 1607 | v8i16 p2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) p2_org); | ||
| 1608 | v8i16 p2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) p2_org); | ||
| 1649 | 1609 | ||
| 1650 | is_less_than_beta_l = | 1610 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, p1_org_r, p2_org_r, |
| 1651 | (v8u16) __msa_sldi_b(zero, (v16i8) is_less_than_beta, 8); | 1611 | negate_tc_r, tc_r, p1_r); |
| 1652 | if (!__msa_test_bz_v((v16u8) is_less_than_beta_l)) { | 1612 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, p1_org_l, p2_org_l, |
| 1653 | p2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) p2_org); | 1613 | i16_negatetc_l, tc_l, p1_l); |
| 1654 | 1614 | ||
| 1655 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, p1_org_l, p2_org_l, | ||
| 1656 | i16_negatetc_l, tc_l, p1_l); | ||
| 1657 | } | ||
| 1658 | } | ||
| 1659 | if (!__msa_test_bz_v(is_less_than_beta)) { | ||
| 1660 | p1 = (v16u8) __msa_pckev_b((v16i8) p1_l, (v16i8) p1_r); | 1615 | p1 = (v16u8) __msa_pckev_b((v16i8) p1_l, (v16i8) p1_r); |
| 1661 | p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta); | 1616 | p1_org = __msa_bmnz_v(p1_org, p1, is_less_than_beta); |
| 1662 | ST_UB(p1_org, data - (2 * image_width)); | 1617 | ST_UB(p1_org, data - (2 * image_width)); |
| @@ -1665,34 +1620,25 @@ static void avc_loopfilter_luma_inter_edge_hor_msa(uint8_t *data, · 2 unmodified lines | |||
| 1665 | tc = tc + (v16i8) is_less_than_beta; | 1620 | tc = tc + (v16i8) is_less_than_beta; |
| 1666 | } | 1621 | } |
| 1667 | 1622 | ||
| 1668 | u8_q2asub_q0 = __msa_asub_u_b(q2_org, q0_org); | 1623 | q2_asub_q0 = __msa_asub_u_b(q2_org, q0_org); |
| 1669 | is_less_than_beta = (u8_q2asub_q0 < beta); | 1624 | is_less_than_beta = (q2_asub_q0 < beta); |
| 1670 | is_less_than_beta = is_less_than_beta & is_less_than; | 1625 | is_less_than_beta = is_less_than_beta & is_less_than; |
| 1671 | 1626 | ||
| 1672 | { | 1627 | q1_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q1_org); |
| 1673 | v8u16 is_less_than_beta_r, is_less_than_beta_l; | 1628 | q1_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q1_org); |
| 1674 | is_less_than_beta_r = | 1629 | |
| 1675 | (v8u16) __msa_sldi_b((v16i8) is_less_than_beta, zero, 8); | ||
| 1676 | |||
| 1677 | q1_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q1_org); | ||
| 1678 | if (!__msa_test_bz_v((v16u8) is_less_than_beta_r)) { | ||
| 1679 | q2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q2_org); | ||
| 1680 | |||
| 1681 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, q1_org_r, q2_org_r, | ||
| 1682 | negate_tc_r, tc_r, q1_r); | ||
| 1683 | } | ||
| 1684 | is_less_than_beta_l = | ||
| 1685 | (v8u16) __msa_sldi_b(zero, (v16i8) is_less_than_beta, 8); | ||
| 1686 | |||
| 1687 | q1_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q1_org); | ||
| 1688 | if (!__msa_test_bz_v((v16u8) is_less_than_beta_l)) { | ||
| 1689 | q2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q2_org); | ||
| 1690 | |||
| 1691 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, q1_org_l, q2_org_l, | ||
| 1692 | i16_negatetc_l, tc_l, q1_l); | ||
| 1693 | } | ||
| 1694 | } | ||
| 1695 | if (!__msa_test_bz_v(is_less_than_beta)) { | 1630 | if (!__msa_test_bz_v(is_less_than_beta)) { |
| 1631 | v16u8 q1; | ||
| 1632 | v8i16 q1_r = { 0 }; | ||
| 1633 | v8i16 q1_l = { 0 }; | ||
| 1634 | v8i16 q2_org_r = (v8i16) __msa_ilvr_b(zero, (v16i8) q2_org); | ||
| 1635 | v8i16 q2_org_l = (v8i16) __msa_ilvl_b(zero, (v16i8) q2_org); | ||
| 1636 | |||
| 1637 | AVC_LPF_P1_OR_Q1(p0_org_r, q0_org_r, q1_org_r, q2_org_r, | ||
| 1638 | negate_tc_r, tc_r, q1_r); | ||
| 1639 | AVC_LPF_P1_OR_Q1(p0_org_l, q0_org_l, q1_org_l, q2_org_l, | ||
| 1640 | i16_negatetc_l, tc_l, q1_l); | ||
| 1641 | |||
| 1696 | q1 = (v16u8) __msa_pckev_b((v16i8) q1_l, (v16i8) q1_r); | 1642 | q1 = (v16u8) __msa_pckev_b((v16i8) q1_l, (v16i8) q1_r); |
| 1697 | q1_org = __msa_bmnz_v(q1_org, q1, is_less_than_beta); | 1643 | q1_org = __msa_bmnz_v(q1_org, q1, is_less_than_beta); |
| 1698 | ST_UB(q1_org, data + image_width); | 1644 | ST_UB(q1_org, data + image_width); |