.syntax unified .thumb .macro all_vstr op, size, ext .irp op1, q0, q1, q2, q4, q7 .irp op2, r0, r1, r2, r4, r7, r8, r10, r12, r13, r14 .irp op3, q0, q1, q2, q4, q7 \op\()\size \op1, [\op2, \op3] \op\()\size \op1, [\op2, \op3, uxtw #\ext] .endr .endr .endr .endm .irp size, .8, .16, .32 all_vstr vstrb, \size, 0 .endr .irp size, .16, .32 all_vstr vstrh, \size, 1 .endr all_vstr vstrw, .32, 2 all_vstr vstrd, .64, 3 vpstete vstrbt.8 q1, [r0, q0] vstrbe.8 q1, [r2, q2] vstrbt.16 q2, [r3, q1] vstrbe.16 q3, [r4, q6] vpstete vstrbt.32 q4, [r8, q2] vstrbe.32 q7, [sp, q6] vstrht.16 q0, [r0, q1] vstrhe.16 q2, [r2, q0] vpstet vstrht.32 q1, [r1, q7] vstrhe.32 q3, [r3, q2] vstrht.16 q4, [r6, q5, UXTW #1] vpstete vstrht.16 q6, [r10, q3, UXTW #1] vstrhe.32 q5, [r7, q4, UXTW #1] vstrht.32 q7, [sp, q6, UXTW #1] vstrwe.32 q0, [r2, q1] vpstete vstrwt.32 q1, [r5, q7] vstrwe.32 q2, [r8, q3, UXTW #2] vstrwt.32 q5, [sp, q0, UXTW #2] vstrde.64 q0, [sp, q7] vpstte vstrdt.64 q2, [r0, q1] vstrdt.64 q3, [r3, q5, UXTW #3] vstrde.64 q7, [r7, q4, UXTW #3] .macro all_vldr op, size, ext .irp op2, r0, r1, r2, r4, r7, r8, r10, r12, r13, r14 .irp op3, q1, q2, q4, q7 \op\()\size q0, [\op2, \op3] \op\()\size q0, [\op2, \op3, uxtw #\ext] .endr .irp op3, q0, q2, q4, q7 \op\()\size q1, [\op2, \op3] \op\()\size q1, [\op2, \op3, uxtw #\ext] .endr .irp op3, q0, q1, q4, q7 \op\()\size q2, [\op2, \op3] \op\()\size q2, [\op2, \op3, uxtw #\ext] .endr .irp op3, q0, q1, q2, q7 \op\()\size q4, [\op2, \op3] \op\()\size q4, [\op2, \op3, uxtw #\ext] .endr .irp op3, q0, q1, q2, q4 \op\()\size q7, [\op2, \op3] \op\()\size q7, [\op2, \op3, uxtw #\ext] .endr .endr .endm .irp data, .u8, .s16, .u16, .s32, .u32 all_vldr vldrb, \data, 0 .endr .irp data, .u16, .s32, .u32 all_vldr vldrh, \data, 1 .endr all_vldr vldrw, .u32, 2 all_vldr vldrd, .u64, 3 vpstete vldrbt.u8 q1, [r0, q0] vldrbe.u8 q1, [r2, q2] vldrbt.u16 q2, [r3, q1] vldrbe.s16 q3, [r4, q6] vpstete vldrbt.u32 q4, [r8, q2] vldrbe.s32 q7, [sp, q6] vldrht.u16 q0, [r0, q1] vldrhe.u16 q2, [r2, q0] vpstete vldrht.u32 q1, [r1, q7] vldrhe.u32 q3, [r3, q2] vldrht.u16 q4, [r6, q5, UXTW #1] vldrhe.u16 q6, [r10, q3, UXTW #1] vpstete vldrht.u32 q5, [r7, q4, UXTW #1] vldrhe.u32 q7, [sp, q6, UXTW #1] vldrwt.u32 q0, [r2, q1] vldrwe.u32 q1, [r5, q7] vpstete vldrwt.u32 q2, [r8, q3, UXTW #2] vldrwe.u32 q5, [sp, q0, UXTW #2] vldrdt.u64 q0, [sp, q7] vldrde.u64 q2, [r0, q1] vpste vldrdt.u64 q3, [r3, q5, UXTW #3] vldrde.u64 q7, [r7, q4, UXTW #3] .irp dt, u8, s16, 8 vldrb.\dt q0, [r2, q3] .endr .irp dt, 16, u16, s32, f16, p16, u32 vldrh.\dt q0, [r2, q3, UXTW #1] .endr .irp dt, 32, u32, f32, p32 vldrw.\dt q0, [r2, q3, UXTW #2] .endr .irp dt, 64, u64, f64, p64 vldrd.\dt q0, [r2, q3, UXTW #3] .endr