History

Remove apple specific versions of arm macros with arguments

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.

Martin Storsjö committed 11 years ago

Commit 09953901 parent d8202cf10 files · +0 −1142Browse files

Showing the changes to codec/processing/src/arm (2 of 10 files). Show all

Unified · Split

2 files
  1. codec/processing/src/arm/adaptive_quantization.S +0 −9
  2. codec/processing/src/arm/vaa_calc_neon.S +0 −397
codec/processing/src/arm/adaptive_quantization.S+0−9
@@ -33,21 +33,12 @@ · 32 unmodified lines
33#ifdef HAVE_NEON33#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, arg236.macro SQR_ADD_16BYTES arg0, arg1, arg2
45 vmull.u8 q3, \arg0, \arg037 vmull.u8 q3, \arg0, \arg0
46 vmull.u8 q8, \arg1, \arg138 vmull.u8 q8, \arg1, \arg1
47 vpadal.u16 \arg2, q339 vpadal.u16 \arg2, q3
48 vpadal.u16 \arg2, q840 vpadal.u16 \arg2, q8
49.endm41.endm
50#endif
51 42
52 43
53WELS_ASM_FUNC_BEGIN SampleVariance16x16_neon44WELS_ASM_FUNC_BEGIN SampleVariance16x16_neon
codec/processing/src/arm/vaa_calc_neon.S+0−397
@@ -33,38 +33,6 @@ · 32 unmodified lines
33#ifdef HAVE_NEON33#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, arg436.macro ABS_SUB_SUM_16BYTES arg0, arg1, arg2, arg3, arg4
69 vld1.32 {q15}, [\arg0], \arg237 vld1.32 {q15}, [\arg0], \arg2
70 vld1.32 {q14}, [\arg1], \arg238 vld1.32 {q14}, [\arg1], \arg2
@@ -92,7 +60,6 @@ · 21 unmodified lines
92 vpaddl.u16 d31, d3160 vpaddl.u16 d31, d31
93 vpaddl.u32 \arg2, d3161 vpaddl.u32 \arg2, d31
94.endm62.endm
95#endif
96 63
97 64
98WELS_ASM_FUNC_BEGIN VAACalcSad_neon65WELS_ASM_FUNC_BEGIN VAACalcSad_neon
@@ -159,52 +126,6 @@ vaa_calc_sad_loop1: · 60 unmodified lines
159WELS_ASM_FUNC_END126WELS_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, arg6129.macro SAD_SD_MAD_16BYTES arg0, arg1, arg2, arg3, arg4, arg5, arg6
209 vld1.32 {q0}, [\arg0], \arg2130 vld1.32 {q0}, [\arg0], \arg2
210 vld1.32 {q1}, [\arg1], \arg2131 vld1.32 {q1}, [\arg1], \arg2
@@ -249,7 +170,6 @@ WELS_ASM_FUNC_END · 38 unmodified lines
249 vpaddl.s16 \arg4, \arg4170 vpaddl.s16 \arg4, \arg4
250 vpaddl.s32 \arg4, \arg4171 vpaddl.s32 \arg4, \arg4
251.endm172.endm
252#endif
253 173
254WELS_ASM_FUNC_BEGIN VAACalcSadBgd_neon174WELS_ASM_FUNC_BEGIN VAACalcSadBgd_neon
255 175
@@ -313,165 +233,6 @@ vaa_calc_sad_bgd_loop1: · 57 unmodified lines
313WELS_ASM_FUNC_END233WELS_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, arg3236.macro SSD_MUL_SUM_16BYTES_RESET arg0, arg1, arg2, arg3
476 vmull.u8 \arg3, \arg0, \arg0237 vmull.u8 \arg3, \arg0, \arg0
477 vpaddl.u16 \arg2, \arg3238 vpaddl.u16 \arg2, \arg3
@@ -629,7 +390,6 @@ WELS_ASM_FUNC_END · 151 unmodified lines
629 vpaddl.s32 \arg0, \arg0390 vpaddl.s32 \arg0, \arg0
630 vadd.i32 \arg1, \arg1, \arg2391 vadd.i32 \arg1, \arg1, \arg2
631.endm392.endm
632#endif
633 393
634 394
635WELS_ASM_FUNC_BEGIN VAACalcSadSsdBgd_neon395WELS_ASM_FUNC_BEGIN VAACalcSadSsdBgd_neon
@@ -711,105 +471,6 @@ bne vaa_calc_sad_ssd_bgd_height_loop · 75 unmodified lines
711WELS_ASM_FUNC_END471WELS_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, arg3474.macro SAD_VAR_16 arg0, arg1, arg2, arg3
814 vld1.8 {q0}, [\arg0], \arg2 //load cur_row475 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, q7570 vadd.i32 q12, q7
910.endm571.endm
911#endif
912 572
913 573
914WELS_ASM_FUNC_BEGIN VAACalcSadVar_neon574WELS_ASM_FUNC_BEGIN VAACalcSadVar_neon
@@ -970,62 +630,6 @@ bne vaa_calc_sad_var_height_loop · 55 unmodified lines
970WELS_ASM_FUNC_END630WELS_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, arg3633.macro SAD_SSD_16 arg0, arg1, arg2, arg3
1030 SAD_VAR_16 \arg0, \arg1, \arg2, \arg3634 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, q7685 vadd.i32 q12, q7
1082.endm686.endm
1083#endif
1084 687
1085 688
1086WELS_ASM_FUNC_BEGIN VAACalcSadSsd_neon689WELS_ASM_FUNC_BEGIN VAACalcSadSsd_neon

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t