, q8,  q11\n"
			"vhsub.s32 q11, q8,  q11\n"
			"vabs.s32  q8,  q8\n"
			"vabs.s32  q9,  q9\n"
			"vabs.s32  q10, q10\n"
			"vabs.s32  q11, q11\n"
			"vmax.s32  q0,  q0,  q8\n"
			"vmax.s32  q1,  q1,  q9\n"
			"vmax.s32  q2,  q2,  q10\n"
			"vmax.s32  q3,  q3,  q11\n"
			"subs      %[i], %[i], #1\n"
			"bgt       1b\n"
			"vsub.s32  q0,  q0,  q14\n"
			"vsub.s32  q1,  q1,  q14\n"
			"vsub.s32  q2,  q2,  q14\n"
			"vsub.s32  q3,  q3,  q14\n"
			"vclz.s32  q0,  q0\n"
			"vclz.s32  q1,  q1\n"
			"vclz.s32  q2,  q2\n"
			"vclz.s32  q3,  q3\n"
			"vsub.s32  q0,  q13, q0\n"
			"vsub.s32  q1,  q13, q1\n"
			"vsub.s32  q2,  q13, q2\n"
			"vsub.s32  q3,  q13, q3\n"
		".endm\n"
		/*
		 * constants: q14 = 1
		 * input: q15    - joint stereo selection mask
		 *        %[in0] - value set by calc_scalefactors macro
		 *        %[in1] - value set by calc_scalefactors macro
		 */
		".macro update_joint_stereo_samples\n"
			"sub       %[out1], %[in1], %[inc]\n"
			"sub       %[out0], %[in0], %[inc]\n"
			"sub       %[in1], %[in1], %[inc], asl #1\n"
			"sub       %[in0], %[in0], %[inc], asl #1\n"
			"vld1.32   {d18, d19}, [%[in1], :128]\n"
			"vbic.s32  q11, q9,  q14\n"
			"vld1.32   {d16, d17}, [%[in0], :128]\n"
			"vld1.32   {d2, d3}, [%[out1], :128]\n"
			"vbic.s32  q3,  q1,  q14\n"
			"vld1.32   {d0, d1}, [%[out0], :128]\n"
			"vhsub.s32 q10, q8,  q11\n"
			"vhadd.s32 q11, q8,  q11\n"
			"vhsub.s32 q2,  q0,  q3\n"
			"vhadd.s32 q3,  q0,  q3\n"
			"vbif.s32  q10, q9,  q15\n"
			"vbif.s32  d22, d16, d30\n"
			"sub       %[inc], %[zero], %[inc], asl #1\n"
			"sub       %[i], %[blocks], #2\n"
		"2:\n"
			"vbif.s32  d23, d17, d31\n"
			"vst1.32   {d20, d21}, [%[in1], :128], %[inc]\n"
			"vbif.s32  d4,  d2,  d30\n"
			"vld1.32   {d18, d19}, [%[in1], :128]\n"
			"vbif.s32  d5,  d3,  d31\n"
			"vst1.32   {d22, d23}, [%[in0], :128], %[inc]\n"
			"vbif.s32  d6,  d0,  d30\n"
			"vld1.32   {d16, d17}, [%[in0], :128]\n"
			"vbif.s32  d7,  d1,  d31\n"
			"vst1.32   {d4, d5}, [%[out1], :128], %[inc]\n"
			"vbic.s32  q11, q9,  q14\n"
			"vld1