Я думаю, что такие вещи должны работать, хотя я не проверял это:
BFI rx, r0, #8, #24
BFI ry, r1, #8, #24
UBFX r1, r1, #24, #8
BFI rx, r1, #0, #8
UBFX r2, r2, #24, #8
BFI ry, r2, #0, #8
или
BFI rx, r0, #24, #8
BFI ry, r1, #24, #8
UBFX r1, r1, #8, #24
BFI rx, r1, #0, #24
UBFX r2, r2, #8, #24
BFI ry, r2, #0, #24
Я не думаю, что это можно сделать только в одной или двух инструкциях. Если вам больше нравится, UBFX можно заменить на сдвиг вправо.
Обратите внимание, что некоторые архитектуры ARM делают поддерживают невыровненные нагрузки.
РЕДАКТИРОВАТЬ: Это меня беспокоит. Должен быть лучший способ, и я думаю, что нашел его сейчас:
@ shift is one of {8, 16, 24}
lsr rx, r0, #\shift
orr rx, rx, r1, lsl #32-\shift
lsr ry, r1, #\shift
orr ry, ry, r2, lsl #32-\shift
r0
может использоваться в качестве регистра назначения вместо rx
, то же самое для r1
/ ry