mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-06 17:23:56 -06:00
target/arm: Implement MVE interleaving loads/stores
Implement the MVE interleaving load/store functions VLD2, VLD4, VST2 and VST4. VLD2 loads 16 bytes of data from memory and writes to 2 consecutive Qregs; VLD4 loads 16 bytes of data from memory and writes to 4 consecutive Qregs. The 'pattern' field in the encoding determines the offset into memory which is accessed and also which elements in the Qregs are written to. (The intention is that a sequence of four consecutive VLD4 with different pattern values performs a complete de-interleaving load of 64 bytes into all elements of the 4 Qregs.) VST2 and VST4 do the same, but for stores. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
fac80f0856
commit
075e7e97e3
4 changed files with 495 additions and 0 deletions
|
@ -44,6 +44,7 @@
|
|||
&vabav qn qm rda size
|
||||
&vldst_sg qd qm rn size msize os
|
||||
&vldst_sg_imm qd qm a w imm
|
||||
&vldst_il qd rn size pat w
|
||||
|
||||
# scatter-gather memory size is in bits 6:4
|
||||
%sg_msize 6:1 4:1
|
||||
|
@ -59,6 +60,10 @@
|
|||
@vldst_sg_imm .... .... a:1 . w:1 . .... .... .... . imm:7 &vldst_sg_imm \
|
||||
qd=%qd qm=%qn
|
||||
|
||||
# Deinterleaving load/interleaving store
|
||||
@vldst_il .... .... .. w:1 . rn:4 .... ... size:2 pat:2 ..... &vldst_il \
|
||||
qd=%qd
|
||||
|
||||
@1op .... .... .... size:2 .. .... .... .... .... &1op qd=%qd qm=%qm
|
||||
@1op_nosz .... .... .... .... .... .... .... .... &1op qd=%qd qm=%qm size=0
|
||||
@2op .... .... .. size:2 .... .... .... .... .... &2op qd=%qd qm=%qm qn=%qn
|
||||
|
@ -158,6 +163,12 @@ VLDRD_sg_imm 111 1 1101 ... 1 ... 0 ... 1 1111 .... .... @vldst_sg_imm
|
|||
VSTRW_sg_imm 111 1 1101 ... 0 ... 0 ... 1 1110 .... .... @vldst_sg_imm
|
||||
VSTRD_sg_imm 111 1 1101 ... 0 ... 0 ... 1 1111 .... .... @vldst_sg_imm
|
||||
|
||||
# deinterleaving loads/interleaving stores
|
||||
VLD2 1111 1100 1 .. 1 .... ... 1 111 .. .. 00000 @vldst_il
|
||||
VLD4 1111 1100 1 .. 1 .... ... 1 111 .. .. 00001 @vldst_il
|
||||
VST2 1111 1100 1 .. 0 .... ... 1 111 .. .. 00000 @vldst_il
|
||||
VST4 1111 1100 1 .. 0 .... ... 1 111 .. .. 00001 @vldst_il
|
||||
|
||||
# Moves between 2 32-bit vector lanes and 2 general purpose registers
|
||||
VMOV_to_2gp 1110 1100 0 . 00 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
|
||||
VMOV_from_2gp 1110 1100 0 . 01 rt2:4 ... 0 1111 000 idx:1 rt:4 qd=%qd
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue