 q15, q0,  q1\n"
		"vadd.s32  q9,  q2,  q3\n"
		"vmov.s32  d31[1], %[zero]\n"  /* last subband -> no joint */
		"vld1.32   {d16, d17}, [%[consts], :128]!\n"
		"vcgt.s32  q15, q15, q9\n"

		/* calculate part of 'joint' variable and save it to d24 */
		/* update and save scale factors to memory */
		"  vand.s32  q8, q8, q15\n"
		"vbit.s32  q0,  q2,  q15\n"
		"  vpadd.s32 d16, d16, d17\n"
		"vbit.s32  q1,  q3,  q15\n"
		"vst1.32   {d0, d1}, [%[out0], :128]\n"
		"vst1.32   {d2, d3}, [%[out1], :128]\n"
		"  vpadd.s32 d24, d16, d16\n"

		"update_joint_stereo_samples\n"

		"add   %[in0], %[in], #0\n"
		"add   %[in1], %[in], #32\n"
		"add   %[out0], %[out], #0\n\n"
		"add   %[out1], %[out], #32\n"
		"vmov.s32  q0, %[c1]\n"
		"vadd.s32  q0, q0, q14\n"

		"calc_scalefactors\n"

		/* check whether to use joint stereo for subbands 0, 1, 2, 3 */
		"vadd.s32  q15, q0,  q1\n"
		"vadd.s32  q9,  q2,  q3\n"
		"vld1.32   {d16, d17}, [%[consts], :128]!\n"
		"vcgt.s32  q15, q15, q9\n"

		/* combine last part of 'joint' with d24 and save to memory */
		/* update and save scale factors to memory */
		"  vand.s32  q8, q8, q15\n"
		"vbit.s32  q0,  q2,  q15\n"
		"  vpadd.s32 d16, d16, d17\n"
		"vbit.s32  q1,  q3,  q15\n"
		"  vpadd.s32 d16, d16, d16\n"
		"vst1.32   {d0, d1}, [%[out0], :128]\n"
		"  vadd.s32  d16, d16, d24\n"
		"vst1.32   {d2, d3}, [%[out1], :128]\n"
		"  vst1.32   {d16[0]}, [%[joint]]\n"

		"update_joint_stereo_samples\n"
	"9:\n"
		".purgem calc_scalefactors\n"
		".purgem update_joint_stereo_samples\n"
		:
		  [i]      "+&r" (i),
		  [in]     "+&r" (in),
		  [in0]    "=&r" (in0),
		  [in1]    "=&r" (in1),
		  [out]    "+&r" (out),
		  [out0]   "=&r" (out0),
		  [out1]   "=&r" (out1),
		  [consts] "+&r" (consts)
		:
		  [inc]      "r" ((char *) &sb_sample_f[1][0][0] -
				 (char *) &sb_sample_f[0][0][0]),
		  [blocks]   "r" (blocks),
		  [joint]    "r" (&joint),
		  [c1]       "i" (1 << SCALE_OUT_BITS),
		  [c2]       "i" (31 - SCALE_OUT_BITS),
		  [zero]     "r" (0)
		: "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7",
		  