The apple assembler for arm can handle the gnu binutils style macros just fine these days, so there is no need to duplicate all of these macros in two syntaxes, when the new one works fine in all cases. We already require a new enough assembler to support the gnu binutils style features since we use the .rept directive in a few places.
Showing the changes to codec/processing/src/arm (2 of 10 files). Show all
Unified · Split
| @@ -33,21 +33,12 @@ · 32 unmodified lines | |||
| 33 | #ifdef HAVE_NEON | 33 | #ifdef HAVE_NEON |
| 34 | #include "arm_arch_common_macro.S" | 34 | #include "arm_arch_common_macro.S" |
| 35 | 35 | ||
| 36 | #ifdef __APPLE__ | ||
| 37 | .macro SQR_ADD_16BYTES | ||
| 38 | vmull.u8 q3, $0, $0 | ||
| 39 | vmull.u8 q8, $1, $1 | ||
| 40 | vpadal.u16 $2, q3 | ||
| 41 | vpadal.u16 $2, q8 | ||
| 42 | .endm | ||
| 43 | #else | ||
| 44 | .macro SQR_ADD_16BYTES arg0, arg1, arg2 | 36 | .macro SQR_ADD_16BYTES arg0, arg1, arg2 |
| 45 | vmull.u8 q3, \arg0, \arg0 | 37 | vmull.u8 q3, \arg0, \arg0 |
| 46 | vmull.u8 q8, \arg1, \arg1 | 38 | vmull.u8 q8, \arg1, \arg1 |
| 47 | vpadal.u16 \arg2, q3 | 39 | vpadal.u16 \arg2, q3 |
| 48 | vpadal.u16 \arg2, q8 | 40 | vpadal.u16 \arg2, q8 |
| 49 | .endm | 41 | .endm |
| 50 | #endif | ||
| 51 | 42 | ||
| 52 | 43 | ||
| 53 | WELS_ASM_FUNC_BEGIN SampleVariance16x16_neon | 44 | WELS_ASM_FUNC_BEGIN SampleVariance16x16_neon |
| @@ -33,38 +33,6 @@ · 32 unmodified lines | |||
| 33 | #ifdef HAVE_NEON | 33 | #ifdef HAVE_NEON |
| 34 | #include "arm_arch_common_macro.S" | 34 | #include "arm_arch_common_macro.S" |
| 35 | 35 | ||
| 36 | #ifdef __APPLE__ | ||
| 37 | |||
| 38 | .macro ABS_SUB_SUM_16BYTES | ||
| 39 | vld1.32 {q15}, [$0], $2 | ||
| 40 | vld1.32 {q14}, [$1], $2 | ||
| 41 | vabal.u8 $3, d30, d28 | ||
| 42 | vabal.u8 $4, d31, d29 | ||
| 43 | .endm | ||
| 44 | |||
| 45 | .macro ABS_SUB_SUM_8x16BYTES | ||
| 46 | vld1.32 {q15}, [$0], $2 | ||
| 47 | vld1.32 {q14}, [$1], $2 | ||
| 48 | vabdl.u8 $3, d30, d28 | ||
| 49 | vabdl.u8 $4, d31, d29 | ||
| 50 | |||
| 51 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 52 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 53 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 54 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 55 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 56 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 57 | ABS_SUB_SUM_16BYTES $0, $1, $2, $3, $4 | ||
| 58 | .endm | ||
| 59 | |||
| 60 | .macro SAD_8X16BITS | ||
| 61 | vadd.u16 d31, $0, $1 | ||
| 62 | vpaddl.u16 d31, d31 | ||
| 63 | vpaddl.u32 $2, d31 | ||
| 64 | .endm | ||
| 65 | |||
| 66 | #else | ||
| 67 | |||
| 68 | .macro ABS_SUB_SUM_16BYTES arg0, arg1, arg2, arg3, arg4 | 36 | .macro ABS_SUB_SUM_16BYTES arg0, arg1, arg2, arg3, arg4 |
| 69 | vld1.32 {q15}, [\arg0], \arg2 | 37 | vld1.32 {q15}, [\arg0], \arg2 |
| 70 | vld1.32 {q14}, [\arg1], \arg2 | 38 | vld1.32 {q14}, [\arg1], \arg2 |
| @@ -92,7 +60,6 @@ · 21 unmodified lines | |||
| 92 | vpaddl.u16 d31, d31 | 60 | vpaddl.u16 d31, d31 |
| 93 | vpaddl.u32 \arg2, d31 | 61 | vpaddl.u32 \arg2, d31 |
| 94 | .endm | 62 | .endm |
| 95 | #endif | ||
| 96 | 63 | ||
| 97 | 64 | ||
| 98 | WELS_ASM_FUNC_BEGIN VAACalcSad_neon | 65 | WELS_ASM_FUNC_BEGIN VAACalcSad_neon |
| @@ -159,52 +126,6 @@ vaa_calc_sad_loop1: · 60 unmodified lines | |||
| 159 | WELS_ASM_FUNC_END | 126 | WELS_ASM_FUNC_END |
| 160 | 127 | ||
| 161 | 128 | ||
| 162 | #ifdef __APPLE__ | ||
| 163 | .macro SAD_SD_MAD_16BYTES | ||
| 164 | vld1.32 {q0}, [$0], $2 | ||
| 165 | vld1.32 {q1}, [$1], $2 | ||
| 166 | |||
| 167 | vpadal.u8 $3, q0 | ||
| 168 | vpadal.u8 $4, q1 | ||
| 169 | |||
| 170 | vabd.u8 q0, q0, q1 | ||
| 171 | vmax.u8 $5, q0 | ||
| 172 | vpadal.u8 $6, q0 | ||
| 173 | .endm | ||
| 174 | |||
| 175 | .macro SAD_SD_MAD_8x16BYTES | ||
| 176 | vld1.32 {q0}, [$0], $2 | ||
| 177 | vld1.32 {q1}, [$1], $2 | ||
| 178 | |||
| 179 | vpaddl.u8 q2, q0 | ||
| 180 | vpaddl.u8 q3, q1 | ||
| 181 | |||
| 182 | vabd.u8 $3, q0, q1 | ||
| 183 | vpaddl.u8 $4, $3 //abs_diff | ||
| 184 | |||
| 185 | |||
| 186 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 187 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 188 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 189 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 190 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 191 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 192 | SAD_SD_MAD_16BYTES $0,$1,$2,q2,q3,$3,$4 | ||
| 193 | |||
| 194 | vsub.u16 $5, q2, q3 | ||
| 195 | .endm | ||
| 196 | |||
| 197 | .macro SAD_SD_MAD_CALC | ||
| 198 | vpmax.u8 d0, $0, $1 //8bytes | ||
| 199 | vpmax.u8 d0, d0, d0 //4bytes | ||
| 200 | vpmax.u8 $2, d0, d0 //2bytes | ||
| 201 | |||
| 202 | vpaddl.u16 $3, $3 | ||
| 203 | vpaddl.u32 $3, $3 | ||
| 204 | vpaddl.s16 $4, $4 | ||
| 205 | vpaddl.s32 $4, $4 | ||
| 206 | .endm | ||
| 207 | #else | ||
| 208 | .macro SAD_SD_MAD_16BYTES arg0, arg1, arg2, arg3, arg4, arg5, arg6 | 129 | .macro SAD_SD_MAD_16BYTES arg0, arg1, arg2, arg3, arg4, arg5, arg6 |
| 209 | vld1.32 {q0}, [\arg0], \arg2 | 130 | vld1.32 {q0}, [\arg0], \arg2 |
| 210 | vld1.32 {q1}, [\arg1], \arg2 | 131 | vld1.32 {q1}, [\arg1], \arg2 |
| @@ -249,7 +170,6 @@ WELS_ASM_FUNC_END · 38 unmodified lines | |||
| 249 | vpaddl.s16 \arg4, \arg4 | 170 | vpaddl.s16 \arg4, \arg4 |
| 250 | vpaddl.s32 \arg4, \arg4 | 171 | vpaddl.s32 \arg4, \arg4 |
| 251 | .endm | 172 | .endm |
| 252 | #endif | ||
| 253 | 173 | ||
| 254 | WELS_ASM_FUNC_BEGIN VAACalcSadBgd_neon | 174 | WELS_ASM_FUNC_BEGIN VAACalcSadBgd_neon |
| 255 | 175 | ||
| @@ -313,165 +233,6 @@ vaa_calc_sad_bgd_loop1: · 57 unmodified lines | |||
| 313 | WELS_ASM_FUNC_END | 233 | WELS_ASM_FUNC_END |
| 314 | 234 | ||
| 315 | 235 | ||
| 316 | #ifdef __APPLE__ | ||
| 317 | .macro SSD_MUL_SUM_16BYTES_RESET | ||
| 318 | vmull.u8 $3, $0, $0 | ||
| 319 | vpaddl.u16 $2, $3 | ||
| 320 | |||
| 321 | vmull.u8 $3, $1, $1 | ||
| 322 | vpadal.u16 $2, $3 | ||
| 323 | .endm | ||
| 324 | |||
| 325 | .macro SSD_MUL_SUM_16BYTES | ||
| 326 | vmull.u8 $3, $0, $0 | ||
| 327 | vpadal.u16 $2, $3 | ||
| 328 | |||
| 329 | vmull.u8 $3, $1, $1 | ||
| 330 | vpadal.u16 $2, $3 | ||
| 331 | .endm | ||
| 332 | |||
| 333 | .macro SAD_SSD_BGD_16 | ||
| 334 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 335 | |||
| 336 | vpadal.u8 q3, q0 //add cur_row together | ||
| 337 | vpadal.u8 q4, q1 //add ref_row together | ||
| 338 | |||
| 339 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 340 | |||
| 341 | vmax.u8 q5, q2 //l_mad for 16 bytes reset for every 8x16 | ||
| 342 | |||
| 343 | vpadal.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 344 | |||
| 345 | SSD_MUL_SUM_16BYTES d4,d5, q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 346 | |||
| 347 | vld1.8 {q1}, [$1], $2 //load ref_row | ||
| 348 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 349 | |||
| 350 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 351 | .endm | ||
| 352 | |||
| 353 | //the last row of a 16x16 block | ||
| 354 | .macro SAD_SSD_BGD_16_end | ||
| 355 | vld1.8 {q0}, [$0], $1 //load cur_row | ||
| 356 | |||
| 357 | vpadal.u8 q3, q0 //add cur_row together | ||
| 358 | vpadal.u8 q4, q1 //add ref_row together | ||
| 359 | |||
| 360 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 361 | |||
| 362 | vmax.u8 q5, q2 //l_mad for 16 bytes reset for every 8x16 | ||
| 363 | |||
| 364 | vpadal.u8 $2, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 365 | |||
| 366 | SSD_MUL_SUM_16BYTES d4,d5, q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 367 | |||
| 368 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 369 | |||
| 370 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 371 | .endm | ||
| 372 | |||
| 373 | //for the begin of a 8x16 block, use some instructions to reset the register | ||
| 374 | .macro SAD_SSD_BGD_16_RESET_8x8 | ||
| 375 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 376 | |||
| 377 | vpaddl.u8 q3, q0 //add cur_row together | ||
| 378 | vpaddl.u8 q4, q1 //add ref_row together | ||
| 379 | |||
| 380 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 381 | |||
| 382 | vmov q5,q2 //calculate max and avoid reset to zero, l_mad for 16 bytes reset for every 8x16 | ||
| 383 | |||
| 384 | vpaddl.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 385 | |||
| 386 | |||
| 387 | SSD_MUL_SUM_16BYTES d4,d5, q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 388 | |||
| 389 | vld1.8 {q1}, [$1], $2 //load ref_row | ||
| 390 | |||
| 391 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 392 | |||
| 393 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 394 | .endm | ||
| 395 | |||
| 396 | //for the begin of a 16x16 block, use some instructions to reset the register | ||
| 397 | .macro SAD_SSD_BGD_16_RESET_16x16 | ||
| 398 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 399 | vld1.8 {q1}, [$1], $2 //load ref_row | ||
| 400 | |||
| 401 | vpaddl.u8 q3, q0 //add cur_row together | ||
| 402 | vpaddl.u8 q4, q1 //add ref_row together | ||
| 403 | |||
| 404 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 405 | |||
| 406 | vmov q5,q2 //calculate max and avoid reset to zero, l_mad for 16 bytes reset for every 8x16 | ||
| 407 | |||
| 408 | vpaddl.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 409 | |||
| 410 | SSD_MUL_SUM_16BYTES_RESET d4,d5,q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 411 | |||
| 412 | vld1.8 {q1}, [$1], $2 //load ref_row | ||
| 413 | |||
| 414 | vpaddl.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 415 | |||
| 416 | SSD_MUL_SUM_16BYTES_RESET d0,d1,q10,q11 //q10 for lsqsum reset for every 16x16 | ||
| 417 | .endm | ||
| 418 | |||
| 419 | //for each 8x16 block | ||
| 420 | .macro SAD_SSD_BGD_CALC_8x16 | ||
| 421 | |||
| 422 | vpmax.u8 d10, d10, d11 //4 numbers | ||
| 423 | vpmax.u8 d10, d10, d10 //2 numbers | ||
| 424 | vpmax.u8 d10, d10, d10 //1 number1 | ||
| 425 | |||
| 426 | vmov $0, d10 //d26 d27 keeps the l_mad | ||
| 427 | |||
| 428 | //p_sd8x8 fix me | ||
| 429 | vpaddl.u16 q3, q3 | ||
| 430 | vpaddl.u16 q4, q4 | ||
| 431 | |||
| 432 | vsub.i32 $1, q3, q4 | ||
| 433 | vpaddl.u32 $1, $1 | ||
| 434 | |||
| 435 | //psad8x8 | ||
| 436 | vpaddl.u16 $2, $2 | ||
| 437 | vpaddl.u32 $2, $2 | ||
| 438 | |||
| 439 | //psadframe | ||
| 440 | vadd.i32 q12, $2 | ||
| 441 | .endm | ||
| 442 | |||
| 443 | .macro SAD_SSD_BGD_16x16 | ||
| 444 | //for one 8x16 | ||
| 445 | SAD_SSD_BGD_16_RESET_16x16 $0, $1, $2, q6 | ||
| 446 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 447 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 448 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 449 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 450 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 451 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 452 | SAD_SSD_BGD_16 $0, $1, $2, q6 | ||
| 453 | |||
| 454 | SAD_SSD_BGD_CALC_8x16 d26, q14, q6 | ||
| 455 | |||
| 456 | //for another 8x16 | ||
| 457 | SAD_SSD_BGD_16_RESET_8x8 $0, $1, $2, q7 | ||
| 458 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 459 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 460 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 461 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 462 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 463 | SAD_SSD_BGD_16 $0, $1, $2, q7 | ||
| 464 | SAD_SSD_BGD_16_end $0, $2, q7 | ||
| 465 | |||
| 466 | SAD_SSD_BGD_CALC_8x16 d27, q15, q7 | ||
| 467 | .endm | ||
| 468 | |||
| 469 | .macro SSD_SAD_SD_MAD_PADDL | ||
| 470 | vpaddl.s16 $0, $0 | ||
| 471 | vpaddl.s32 $0, $0 | ||
| 472 | vadd.i32 $1, $1, $2 | ||
| 473 | .endm | ||
| 474 | #else | ||
| 475 | .macro SSD_MUL_SUM_16BYTES_RESET arg0, arg1, arg2, arg3 | 236 | .macro SSD_MUL_SUM_16BYTES_RESET arg0, arg1, arg2, arg3 |
| 476 | vmull.u8 \arg3, \arg0, \arg0 | 237 | vmull.u8 \arg3, \arg0, \arg0 |
| 477 | vpaddl.u16 \arg2, \arg3 | 238 | vpaddl.u16 \arg2, \arg3 |
| @@ -629,7 +390,6 @@ WELS_ASM_FUNC_END · 151 unmodified lines | |||
| 629 | vpaddl.s32 \arg0, \arg0 | 390 | vpaddl.s32 \arg0, \arg0 |
| 630 | vadd.i32 \arg1, \arg1, \arg2 | 391 | vadd.i32 \arg1, \arg1, \arg2 |
| 631 | .endm | 392 | .endm |
| 632 | #endif | ||
| 633 | 393 | ||
| 634 | 394 | ||
| 635 | WELS_ASM_FUNC_BEGIN VAACalcSadSsdBgd_neon | 395 | WELS_ASM_FUNC_BEGIN VAACalcSadSsdBgd_neon |
| @@ -711,105 +471,6 @@ bne vaa_calc_sad_ssd_bgd_height_loop · 75 unmodified lines | |||
| 711 | WELS_ASM_FUNC_END | 471 | WELS_ASM_FUNC_END |
| 712 | 472 | ||
| 713 | 473 | ||
| 714 | #ifdef __APPLE__ | ||
| 715 | .macro SAD_VAR_16 | ||
| 716 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 717 | |||
| 718 | vpadal.u8 q3, q0 //add cur_row together | ||
| 719 | vpadal.u8 q4, q1 //add ref_row together | ||
| 720 | |||
| 721 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 722 | |||
| 723 | vpadal.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 724 | |||
| 725 | vld1.8 {q1}, [$1], $2 | ||
| 726 | |||
| 727 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 728 | |||
| 729 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 730 | .endm | ||
| 731 | |||
| 732 | .macro SAD_VAR_16_END | ||
| 733 | vld1.8 {q0}, [$0], $1 //load cur_row | ||
| 734 | |||
| 735 | vpadal.u8 q3, q0 //add cur_row together | ||
| 736 | vpadal.u8 q4, q1 //add ref_row together | ||
| 737 | |||
| 738 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 739 | |||
| 740 | vpadal.u8 $2, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 741 | |||
| 742 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 743 | |||
| 744 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 745 | .endm | ||
| 746 | |||
| 747 | .macro SAD_VAR_16_RESET_16x16 | ||
| 748 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 749 | vld1.8 {q1}, [$1], $2 | ||
| 750 | |||
| 751 | vpaddl.u8 q3, q0 //add cur_row together | ||
| 752 | vpaddl.u8 q4, q1 //add ref_row together | ||
| 753 | |||
| 754 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 755 | |||
| 756 | vpaddl.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 757 | |||
| 758 | vld1.8 {q1}, [$1], $2 | ||
| 759 | |||
| 760 | vpaddl.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 761 | |||
| 762 | SSD_MUL_SUM_16BYTES_RESET d0,d1, q10, q11 | ||
| 763 | .endm | ||
| 764 | |||
| 765 | .macro SAD_VAR_16_RESET_8x8 | ||
| 766 | vld1.8 {q0}, [$0], $2 //load cur_row | ||
| 767 | |||
| 768 | vpaddl.u8 q3, q0 //add cur_row together | ||
| 769 | vpaddl.u8 q4, q1 //add ref_row together | ||
| 770 | |||
| 771 | vabd.u8 q2, q0, q1 //abs_diff | ||
| 772 | |||
| 773 | vpaddl.u8 $3, q2 //l_sad for 16 bytes reset for every 8x16 | ||
| 774 | |||
| 775 | vld1.8 {q1}, [$1], $2 | ||
| 776 | |||
| 777 | vpadal.u8 q9, q0 //q9 for l_sum reset for every 16x16 | ||
| 778 | |||
| 779 | SSD_MUL_SUM_16BYTES d0,d1, q10, q11 //q10 for lsqsum reset for every 16x16 | ||
| 780 | .endm | ||
| 781 | |||
| 782 | .macro SAD_VAR_16x16 | ||
| 783 | //for one 8x16 | ||
| 784 | SAD_VAR_16_RESET_16x16 $0, $1, $2, q6 | ||
| 785 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 786 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 787 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 788 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 789 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 790 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 791 | SAD_VAR_16 $0, $1, $2, q6 | ||
| 792 | |||
| 793 | vpaddl.u16 q6, q6 | ||
| 794 | vpaddl.u32 q6, q6 | ||
| 795 | vadd.i32 q12, q6 | ||
| 796 | |||
| 797 | //for another 8x16 | ||
| 798 | SAD_VAR_16_RESET_8x8 $0, $1, $2, q7 | ||
| 799 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 800 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 801 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 802 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 803 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 804 | SAD_VAR_16 $0, $1, $2, q7 | ||
| 805 | SAD_VAR_16_END $0, $2, q7 | ||
| 806 | |||
| 807 | vpaddl.u16 q7, q7 | ||
| 808 | vpaddl.u32 q7, q7 | ||
| 809 | |||
| 810 | vadd.i32 q12, q7 | ||
| 811 | .endm | ||
| 812 | #else | ||
| 813 | .macro SAD_VAR_16 arg0, arg1, arg2, arg3 | 474 | .macro SAD_VAR_16 arg0, arg1, arg2, arg3 |
| 814 | vld1.8 {q0}, [\arg0], \arg2 //load cur_row | 475 | vld1.8 {q0}, [\arg0], \arg2 //load cur_row |
| 815 | 476 | ||
| @@ -908,7 +569,6 @@ WELS_ASM_FUNC_END · 92 unmodified lines | |||
| 908 | 569 | ||
| 909 | vadd.i32 q12, q7 | 570 | vadd.i32 q12, q7 |
| 910 | .endm | 571 | .endm |
| 911 | #endif | ||
| 912 | 572 | ||
| 913 | 573 | ||
| 914 | WELS_ASM_FUNC_BEGIN VAACalcSadVar_neon | 574 | WELS_ASM_FUNC_BEGIN VAACalcSadVar_neon |
| @@ -970,62 +630,6 @@ bne vaa_calc_sad_var_height_loop · 55 unmodified lines | |||
| 970 | WELS_ASM_FUNC_END | 630 | WELS_ASM_FUNC_END |
| 971 | 631 | ||
| 972 | 632 | ||
| 973 | #ifdef __APPLE__ | ||
| 974 | .macro SAD_SSD_16 | ||
| 975 | SAD_VAR_16 $0, $1, $2, $3 | ||
| 976 | |||
| 977 | SSD_MUL_SUM_16BYTES d4,d5,q8, q11 | ||
| 978 | .endm | ||
| 979 | |||
| 980 | .macro SAD_SSD_16_END | ||
| 981 | SAD_VAR_16_END $0, $1, $2 | ||
| 982 | |||
| 983 | SSD_MUL_SUM_16BYTES d4,d5,q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 984 | .endm | ||
| 985 | |||
| 986 | .macro SAD_SSD_16_RESET_16x16 | ||
| 987 | SAD_VAR_16_RESET_16x16 $0, $1, $2, $3 | ||
| 988 | |||
| 989 | SSD_MUL_SUM_16BYTES_RESET d4,d5,q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 990 | .endm | ||
| 991 | |||
| 992 | .macro SAD_SSD_16_RESET_8x8 | ||
| 993 | SAD_VAR_16_RESET_8x8 $0, $1, $2, $3 | ||
| 994 | |||
| 995 | SSD_MUL_SUM_16BYTES d4,d5,q8, q11 //q8 for l_sqiff reset for every 16x16 | ||
| 996 | .endm | ||
| 997 | |||
| 998 | .macro SAD_SSD_16x16 | ||
| 999 | //for one 8x16 | ||
| 1000 | SAD_SSD_16_RESET_16x16 $0, $1, $2, q6 | ||
| 1001 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1002 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1003 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1004 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1005 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1006 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1007 | SAD_SSD_16 $0, $1, $2, q6 | ||
| 1008 | |||
| 1009 | vpaddl.u16 q6, q6 | ||
| 1010 | vpaddl.u32 q6, q6 | ||
| 1011 | vadd.i32 q12, q6 | ||
| 1012 | |||
| 1013 | //for another 8x16 | ||
| 1014 | SAD_SSD_16_RESET_8x8 $0, $1, $2, q7 | ||
| 1015 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1016 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1017 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1018 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1019 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1020 | SAD_SSD_16 $0, $1, $2, q7 | ||
| 1021 | SAD_SSD_16_END $0, $2, q7 | ||
| 1022 | |||
| 1023 | vpaddl.u16 q7, q7 | ||
| 1024 | vpaddl.u32 q7, q7 | ||
| 1025 | |||
| 1026 | vadd.i32 q12, q7 | ||
| 1027 | .endm | ||
| 1028 | #else | ||
| 1029 | .macro SAD_SSD_16 arg0, arg1, arg2, arg3 | 633 | .macro SAD_SSD_16 arg0, arg1, arg2, arg3 |
| 1030 | SAD_VAR_16 \arg0, \arg1, \arg2, \arg3 | 634 | SAD_VAR_16 \arg0, \arg1, \arg2, \arg3 |
| 1031 | 635 | ||
| @@ -1080,7 +684,6 @@ WELS_ASM_FUNC_END · 48 unmodified lines | |||
| 1080 | 684 | ||
| 1081 | vadd.i32 q12, q7 | 685 | vadd.i32 q12, q7 |
| 1082 | .endm | 686 | .endm |
| 1083 | #endif | ||
| 1084 | 687 | ||
| 1085 | 688 | ||
| 1086 | WELS_ASM_FUNC_BEGIN VAACalcSadSsd_neon | 689 | WELS_ASM_FUNC_BEGIN VAACalcSadSsd_neon |