  %[x], %[x], #32\n"
			"sub     %[y], %[y], #32\n"
			"sub     %[position], %[position], #16\n"
			"vld2.16  {d4, d5, d6, d7}, [%[pcm]]!\n"
			"vld2.16  {d20, d21, d22, d23}, [%[pcm]]!\n"
			"vswp    q3, q10\n"
			"vtbl.8  d16, {d4, d5, d6, d7}, d0\n"
			"vtbl.8  d17, {d4, d5, d6, d7}, d1\n"
			"vtbl.8  d18, {d4, d5, d6, d7}, d2\n"
			"vtbl.8  d19, {d4, d5, d6, d7}, d3\n"
			"vst1.16 {d16, d17, d18, d19}, [%[x], :128]\n"
			"vtbl.8  d16, {d20, d21, d22, d23}, d0\n"
			"vtbl.8  d17, {d20, d21, d22, d23}, d1\n"
			"vtbl.8  d18, {d20, d21, d22, d23}, d2\n"
			"vtbl.8  d19, {d20, d21, d22, d23}, d3\n"
			"vst1.16 {d16, d17, d18, d19}, [%[y], :128]\n"
			"subs    %[nsamples], %[nsamples], #16\n"
			"bgt     1b\n"
			:
			  [x]        "+r" (x),
			  [y]        "+r" (y),
			  [pcm]      "+r" (pcm),
			  [nsamples] "+r" (nsamples),
			  [position] "+r" (position)
			:
			  [perm]      "r" (big_endian ? perm_be : perm_le)
			: "cc", "memory", "d0", "d1", "d2", "d3", "d4",
			  "d5", "d6", "d7", "d16", "d17", "d18", "d19",
			  "d20", "d21", "d22", "d23");
	} else {
		int16_t *x = &X[0][position];
		asm volatile (
			"vld1.8  {d0, d1, d2, d3}, [%[perm], :128]\n"
		"1:\n"
			"sub     %[x], %[x], #32\n"
			"sub     %[position], %[position], #16\n"
			"vld1.8  {d4, d5, d6, d7}, [%[pcm]]!\n"
			"vtbl.8  d16, {d4, d5, d6, d7}, d0\n"
			"vtbl.8  d17, {d4, d5, d6, d7}, d1\n"
			"vtbl.8  d18, {d4, d5, d6, d7}, d2\n"
			"vtbl.8  d19, {d4, d5, d6, d7}, d3\n"
			"vst1.16 {d16, d17, d18, d19}, [%[x], :128]\n"
			"subs    %[nsamples], %[nsamples], #16\n"
			"bgt     1b\n"
			:
			  [x]        "+r" (x),
			  [pcm]      "+r" (pcm),
			  [nsamples] "+r" (nsamples),
			  [position] "+r" (position)
			:
			  [perm]      "r" (big_endian ? perm_be : perm_le)
			: "cc", "memory", "d0", "d1", "d2", "d3", "d4",
			  "d5", "d6", "d7", "d16", "d17", "d18", "d19");
	}
	return position;
}

#undef PERM_BE
#undef PERM_LE

static int sbc_enc_process_input_4s_be_neon(int position, const uint8_t *pcm,
					int16_t X[2][SBC_X_BUFFER_SIZE],
					int nsamp