-.macro compute_premult_16 half_u1, half_u2, half_v1, half_v2
- vmov d2, \half_u1 @ copy left q14 to left q1
- vmov d3, \half_u1 @ copy left q14 to right q1
- vmov d4, \half_u2 @ copy right q14 to left q2
- vmov d5, \half_u2 @ copy right q14 to right q2
-
- vmov d6, \half_v1 @ copy left q15 to left q3
- vmov d7, \half_v1 @ copy left q15 to right q3
- vmov d8, \half_v2 @ copy right q15 to left q4
- vmov d9, \half_v2 @ copy right q15 to right q4
-
- vzip.16 d2, d3 @ U1U1U2U2U3U3U4U4
- vzip.16 d4, d5 @ U5U5U6U6U7U7U8U8
-
- vzip.16 d6, d7 @ V1V1V2V2V3V3V4V4
- vzip.16 d8, d9 @ V5V5V6V6V7V7V8V8
-
- vmul.s16 q8, q3, d1[0] @ V * v2r (left, red)
- vmul.s16 q9, q4, d1[0] @ V * v2r (right, red)
- vmul.s16 q10, q1, d1[1] @ U * u2g
- vmul.s16 q11, q2, d1[1] @ U * u2g
- vmla.s16 q10, q3, d1[2] @ U * u2g + V * v2g (left, green)
- vmla.s16 q11, q4, d1[2] @ U * u2g + V * v2g (right, green)
- vmul.s16 q12, q1, d1[3] @ U * u2b (left, blue)
- vmul.s16 q13, q2, d1[3] @ U * u2b (right, blue)
+.macro compute_premult
+ vsub.u16 q14,q11 @ q14 = U * (1 << 3) - 128 * (1 << 3)
+ vsub.u16 q15,q11 @ q15 = V * (1 << 3) - 128 * (1 << 3)
+ vqdmulh.s16 q8, q15, d1[0] @ q8 = V * v2r
+ vqdmulh.s16 q9, q14, d1[1] @ q9 = U * u2g
+ vqdmulh.s16 q5, q15, d1[2] @ q5 = V * v2g
+ vadd.s16 q9, q5 @ q9 = U * u2g + V * v2g
+ vqdmulh.s16 q10,q14, d1[3] @ q10 = U * u2b