我有这个V6.16b寄存器:0a,0b,0c,0d,0e,0f,07,08,0a,0b,0c,0d,0e,0f,07,08
目标是:ab,cd,ef,78,ab,cd,ef,78
我是这样做的:
movi v7.8h, 0x04 // 04,00,04,00,04,00,04,00,04,00,04,00,04,00,04,00
ushl v6.16b, v6.16b, v7.16b // a0,0b,c0,0d,e0,0f,70,08,a0,0b,c0,0d,e0,0f,70,08
movi v8.8h, 0xf8 // f8,00,f8,00,f8,00,f8,00,f8,00,f8,00,f8,00,f8,00
ushl v10.8h, v6.8h, v8.8h // 0b,00,0d,00,0f,00,08,00,0b,00,0d,00,0f,00,08,00
orr v10.16b, v10.16b, v6.16b // ab,0b,cd,0d,ef,0f,78,08,ab,0b,cd,0d,ef,0f,78,08
mov v10.b[1], v10.b[2]
mov v10.b[2], v10.b[4]
mov v10.b[3], v10.b[6]
mov v10.b[4], v10.b[8]
mov v10.b[5], v10.b[10]
mov v10.b[6], v10.b[12]
mov v10.b[7], v10.b[14] // ab,cd,ef,78,ab,cd,ef,78,ab,0b,cd,0d,ef,0f,78,08
它确实有效,但是有没有办法用更少的指令来做到这一点? (特别是mov)