register int16_t *samples = mono_samples;
do {
int16_t left = *samples++;
/* force gcc to update the pointer and use pre-indexing */
asm ("" : "+r"(samples) : : "memory" );
*samples++ = left;
} while(samples != end);
mono_samples = samples;


VS


int16_t left;
asm (
"1: ldrh %0, [%1], #2 \n"
" strh %0, [%1], #2 \n"
" cmp %1, %2 \n"
" bne 1b \n"
: "=r"(left), "+r"(mono_samples)
: "r"(end)
: "memory"
);