;; consume 256 source image pixels VLD1.8 {Q0,Q1},[r1@128]!; load 32 from row 0 VLD1.8 {Q4,Q5},[r2]! ; load 32 from row 1 VLD1.8 {Q8,Q9},[r3@64]!; load 32 from row 2 VLD1.8 {Q12,Q13},[r4]! ; load 32 from row 3 VLD1.8 {Q2,Q3},[r1@128]!; load another 32 from row 0 VLD1.8 {Q6,Q7},[r2]! ; load another 32 from row 1 VLD1.8 {Q10,Q11},[r3@64]!; load another 32 from row 2 VLD1.8 {Q14,Q15},[r4]! ; load another 32 from row 3;; now at 256 8-bit values VPADDL.u8 Q0,Q0; 8 adds VPADDL.u8 Q1,Q1; 8 adds VPADDL.u8 Q2,Q2; 8 adds VPADDL.u8 Q3,Q3; 8 adds VPADAL.u8 Q0,Q4; 16 adds VPADAL.u8 Q1,Q5; 16 adds VPADAL.u8 Q2,Q6; 16 adds VPADAL.u8 Q3,Q7; 16 adds VPADAL.u8 Q0,Q8; 16 adds VPADAL.u8 Q1,Q9; 16 adds VPADAL.u8 Q2,Q10; 16 adds VPADAL.u8 Q3,Q11; 16 adds VPADAL.u8 Q0,Q12; 16 adds VPADAL.u8 Q1,Q13; 16 adds VPADAL.u8 Q2,Q14; 16 adds VPADAL.u8 Q3,Q15; 16 adds;; now at 32 16-bit values VPADD.u16 Q0,Q0,Q1; 8 adds VPADD.u16 Q1,Q2,Q3; 8 adds;; now at 16 16-bit values VSHRN.u16 D0,Q0,#4; 8 divides by 16 VSHRN.u16 D1,Q1,#4; 8 divides by 16;; now at 16 8-bit values;; write out 16 destination image pixels VST1.8 {Q0},[r0@64]!; store 16