以尽可能快以及少的指令完成操作,该怎么处理

以尽可能快以及少的指令完成操作
以尽可能快的速度以及尽可能少的ARM指令完成与下面等同的操作:
unsigned int x = ...; // 假定unsigned int为32-bit
// 取x低3字节(即bit0~bit23),且每字节丢弃低3位,然后将每字节剩下的位组成一个15位的新数
unsigned short y = ((x & 0xf80000) >> 19) | 
                   ((x & 0x00f800) >> 11) | 
                   ((x & 0x0000f8) >>  3);

------解决方案--------------------
; 假定r0存有x的值
and r1, r0, #0x000000f8
and r2, r0, #0x0000f800
and r0, r0, #0x00f80000
mov r0, r0, lsr #9
orr r0, r0, r1, lsr #3
orr r0, r0, r2, lsr #6