Я подозреваю, что проблема в том, что вы используете короткий (16-битный) тип данных. Попробуйте 32-битный для тестирования.
Кроме того, я никогда не использовал rev16, но я сомневаюсь, что это именно та функция, которая вам нужна.
uint32_t data2;
data2 = data;
__asm__ ("rev16 %0, %1\n" : "=l" (data2) : "l" (data2)); <- This is the line pointed by