forked from mirror/qemu
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
259 lines
14 KiB
Plaintext
259 lines
14 KiB
Plaintext
# MIPS SIMD Architecture Module instruction set
|
|
#
|
|
# Copyright (C) 2020 Philippe Mathieu-Daudé
|
|
#
|
|
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
#
|
|
# Reference:
|
|
# MIPS Architecture for Programmers Volume IV-j
|
|
# - The MIPS32 SIMD Architecture Module, Revision 1.12
|
|
# (Document Number: MD00866-2B-MSA32-AFP-01.12)
|
|
# - The MIPS64 SIMD Architecture Module, Revision 1.12
|
|
# (Document Number: MD00868-1D-MSA64-AFP-01.12)
|
|
|
|
&r rs rt rd sa
|
|
|
|
&msa_r df wd ws wt
|
|
&msa_bz df wt sa
|
|
&msa_ldi df wd sa
|
|
&msa_i df wd ws sa
|
|
&msa_bit df wd ws m
|
|
&msa_elm_df df wd ws n
|
|
&msa_elm wd ws
|
|
|
|
%elm_df 16:6 !function=elm_df
|
|
%elm_n 16:6 !function=elm_n
|
|
%bit_df 16:7 !function=bit_df
|
|
%bit_m 16:7 !function=bit_m
|
|
%2r_df_w 16:1 !function=plus_2
|
|
%3r_df_h 21:1 !function=plus_1
|
|
%3r_df_w 21:1 !function=plus_2
|
|
|
|
@lsa ...... rs:5 rt:5 rd:5 ... sa:2 ...... &r
|
|
@ldst ...... sa:s10 ws:5 wd:5 .... df:2 &msa_i
|
|
@bz_v ...... ... .. wt:5 sa:16 &msa_bz df=3
|
|
@bz ...... ... df:2 wt:5 sa:16 &msa_bz
|
|
@elm_df ...... .... ...... ws:5 wd:5 ...... &msa_elm_df df=%elm_df n=%elm_n
|
|
@elm ...... .......... ws:5 wd:5 ...... &msa_elm
|
|
@vec ...... ..... wt:5 ws:5 wd:5 ...... &msa_r df=0
|
|
@2r ...... ........ df:2 ws:5 wd:5 ...... &msa_r wt=0
|
|
@2rf ...... ......... . ws:5 wd:5 ...... &msa_r wt=0 df=%2r_df_w
|
|
@3r ...... ... df:2 wt:5 ws:5 wd:5 ...... &msa_r
|
|
@3rf_h ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_h
|
|
@3rf_w ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_w
|
|
@u5 ...... ... df:2 sa:5 ws:5 wd:5 ...... &msa_i
|
|
@s5 ...... ... df:2 sa:s5 ws:5 wd:5 ...... &msa_i
|
|
@i8_df ...... df:2 sa:s8 ws:5 wd:5 ...... &msa_i
|
|
@i8 ...... .. sa:s8 ws:5 wd:5 ...... &msa_i df=0
|
|
@ldi ...... ... df:2 sa:s10 wd:5 ...... &msa_ldi
|
|
@bit ...... ... ....... ws:5 wd:5 ...... &msa_bit df=%bit_df m=%bit_m
|
|
|
|
LSA 000000 ..... ..... ..... 000 .. 000101 @lsa
|
|
DLSA 000000 ..... ..... ..... 000 .. 010101 @lsa
|
|
|
|
BZ_V 010001 01011 ..... ................ @bz_v
|
|
BNZ_V 010001 01111 ..... ................ @bz_v
|
|
BZ 010001 110 .. ..... ................ @bz
|
|
BNZ 010001 111 .. ..... ................ @bz
|
|
|
|
ANDI 011110 00 ........ ..... ..... 000000 @i8
|
|
ORI 011110 01 ........ ..... ..... 000000 @i8
|
|
NORI 011110 10 ........ ..... ..... 000000 @i8
|
|
XORI 011110 11 ........ ..... ..... 000000 @i8
|
|
BMNZI 011110 00 ........ ..... ..... 000001 @i8
|
|
BMZI 011110 01 ........ ..... ..... 000001 @i8
|
|
BSELI 011110 10 ........ ..... ..... 000001 @i8
|
|
SHF 011110 .. ........ ..... ..... 000010 @i8_df
|
|
|
|
ADDVI 011110 000 .. ..... ..... ..... 000110 @u5
|
|
SUBVI 011110 001 .. ..... ..... ..... 000110 @u5
|
|
MAXI_S 011110 010 .. ..... ..... ..... 000110 @s5
|
|
MAXI_U 011110 011 .. ..... ..... ..... 000110 @u5
|
|
MINI_S 011110 100 .. ..... ..... ..... 000110 @s5
|
|
MINI_U 011110 101 .. ..... ..... ..... 000110 @u5
|
|
|
|
CEQI 011110 000 .. ..... ..... ..... 000111 @s5
|
|
CLTI_S 011110 010 .. ..... ..... ..... 000111 @s5
|
|
CLTI_U 011110 011 .. ..... ..... ..... 000111 @u5
|
|
CLEI_S 011110 100 .. ..... ..... ..... 000111 @s5
|
|
CLEI_U 011110 101 .. ..... ..... ..... 000111 @u5
|
|
|
|
LDI 011110 110 .. .......... ..... 000111 @ldi
|
|
|
|
SLLI 011110 000 ....... ..... ..... 001001 @bit
|
|
SRAI 011110 001 ....... ..... ..... 001001 @bit
|
|
SRLI 011110 010 ....... ..... ..... 001001 @bit
|
|
BCLRI 011110 011 ....... ..... ..... 001001 @bit
|
|
BSETI 011110 100 ....... ..... ..... 001001 @bit
|
|
BNEGI 011110 101 ....... ..... ..... 001001 @bit
|
|
BINSLI 011110 110 ....... ..... ..... 001001 @bit
|
|
BINSRI 011110 111 ....... ..... ..... 001001 @bit
|
|
|
|
SAT_S 011110 000 ....... ..... ..... 001010 @bit
|
|
SAT_U 011110 001 ....... ..... ..... 001010 @bit
|
|
SRARI 011110 010 ....... ..... ..... 001010 @bit
|
|
SRLRI 011110 011 ....... ..... ..... 001010 @bit
|
|
|
|
SLL 011110 000.. ..... ..... ..... 001101 @3r
|
|
SRA 011110 001.. ..... ..... ..... 001101 @3r
|
|
SRL 011110 010.. ..... ..... ..... 001101 @3r
|
|
BCLR 011110 011.. ..... ..... ..... 001101 @3r
|
|
BSET 011110 100.. ..... ..... ..... 001101 @3r
|
|
BNEG 011110 101.. ..... ..... ..... 001101 @3r
|
|
BINSL 011110 110.. ..... ..... ..... 001101 @3r
|
|
BINSR 011110 111.. ..... ..... ..... 001101 @3r
|
|
|
|
ADDV 011110 000.. ..... ..... ..... 001110 @3r
|
|
SUBV 011110 001.. ..... ..... ..... 001110 @3r
|
|
MAX_S 011110 010.. ..... ..... ..... 001110 @3r
|
|
MAX_U 011110 011.. ..... ..... ..... 001110 @3r
|
|
MIN_S 011110 100.. ..... ..... ..... 001110 @3r
|
|
MIN_U 011110 101.. ..... ..... ..... 001110 @3r
|
|
MAX_A 011110 110.. ..... ..... ..... 001110 @3r
|
|
MIN_A 011110 111.. ..... ..... ..... 001110 @3r
|
|
|
|
CEQ 011110 000.. ..... ..... ..... 001111 @3r
|
|
CLT_S 011110 010.. ..... ..... ..... 001111 @3r
|
|
CLT_U 011110 011.. ..... ..... ..... 001111 @3r
|
|
CLE_S 011110 100.. ..... ..... ..... 001111 @3r
|
|
CLE_U 011110 101.. ..... ..... ..... 001111 @3r
|
|
|
|
ADD_A 011110 000.. ..... ..... ..... 010000 @3r
|
|
ADDS_A 011110 001.. ..... ..... ..... 010000 @3r
|
|
ADDS_S 011110 010.. ..... ..... ..... 010000 @3r
|
|
ADDS_U 011110 011.. ..... ..... ..... 010000 @3r
|
|
AVE_S 011110 100.. ..... ..... ..... 010000 @3r
|
|
AVE_U 011110 101.. ..... ..... ..... 010000 @3r
|
|
AVER_S 011110 110.. ..... ..... ..... 010000 @3r
|
|
AVER_U 011110 111.. ..... ..... ..... 010000 @3r
|
|
|
|
SUBS_S 011110 000.. ..... ..... ..... 010001 @3r
|
|
SUBS_U 011110 001.. ..... ..... ..... 010001 @3r
|
|
SUBSUS_U 011110 010.. ..... ..... ..... 010001 @3r
|
|
SUBSUU_S 011110 011.. ..... ..... ..... 010001 @3r
|
|
ASUB_S 011110 100.. ..... ..... ..... 010001 @3r
|
|
ASUB_U 011110 101.. ..... ..... ..... 010001 @3r
|
|
|
|
MULV 011110 000.. ..... ..... ..... 010010 @3r
|
|
MADDV 011110 001.. ..... ..... ..... 010010 @3r
|
|
MSUBV 011110 010.. ..... ..... ..... 010010 @3r
|
|
DIV_S 011110 100.. ..... ..... ..... 010010 @3r
|
|
DIV_U 011110 101.. ..... ..... ..... 010010 @3r
|
|
MOD_S 011110 110.. ..... ..... ..... 010010 @3r
|
|
MOD_U 011110 111.. ..... ..... ..... 010010 @3r
|
|
|
|
DOTP_S 011110 000.. ..... ..... ..... 010011 @3r
|
|
DOTP_U 011110 001.. ..... ..... ..... 010011 @3r
|
|
DPADD_S 011110 010.. ..... ..... ..... 010011 @3r
|
|
DPADD_U 011110 011.. ..... ..... ..... 010011 @3r
|
|
DPSUB_S 011110 100.. ..... ..... ..... 010011 @3r
|
|
DPSUB_U 011110 101.. ..... ..... ..... 010011 @3r
|
|
|
|
SLD 011110 000 .. ..... ..... ..... 010100 @3r
|
|
SPLAT 011110 001 .. ..... ..... ..... 010100 @3r
|
|
PCKEV 011110 010 .. ..... ..... ..... 010100 @3r
|
|
PCKOD 011110 011 .. ..... ..... ..... 010100 @3r
|
|
ILVL 011110 100 .. ..... ..... ..... 010100 @3r
|
|
ILVR 011110 101 .. ..... ..... ..... 010100 @3r
|
|
ILVEV 011110 110 .. ..... ..... ..... 010100 @3r
|
|
ILVOD 011110 111 .. ..... ..... ..... 010100 @3r
|
|
|
|
VSHF 011110 000 .. ..... ..... ..... 010101 @3r
|
|
SRAR 011110 001 .. ..... ..... ..... 010101 @3r
|
|
SRLR 011110 010 .. ..... ..... ..... 010101 @3r
|
|
HADD_S 011110 100.. ..... ..... ..... 010101 @3r
|
|
HADD_U 011110 101.. ..... ..... ..... 010101 @3r
|
|
HSUB_S 011110 110.. ..... ..... ..... 010101 @3r
|
|
HSUB_U 011110 111.. ..... ..... ..... 010101 @3r
|
|
|
|
{
|
|
CTCMSA 011110 0000111110 ..... ..... 011001 @elm
|
|
SLDI 011110 0000 ...... ..... ..... 011001 @elm_df
|
|
}
|
|
{
|
|
CFCMSA 011110 0001111110 ..... ..... 011001 @elm
|
|
SPLATI 011110 0001 ...... ..... ..... 011001 @elm_df
|
|
}
|
|
{
|
|
MOVE_V 011110 0010111110 ..... ..... 011001 @elm
|
|
COPY_S 011110 0010 ...... ..... ..... 011001 @elm_df
|
|
}
|
|
COPY_U 011110 0011 ...... ..... ..... 011001 @elm_df
|
|
INSERT 011110 0100 ...... ..... ..... 011001 @elm_df
|
|
INSVE 011110 0101 ...... ..... ..... 011001 @elm_df
|
|
|
|
FCAF 011110 0000 . ..... ..... ..... 011010 @3rf_w
|
|
FCUN 011110 0001 . ..... ..... ..... 011010 @3rf_w
|
|
FCEQ 011110 0010 . ..... ..... ..... 011010 @3rf_w
|
|
FCUEQ 011110 0011 . ..... ..... ..... 011010 @3rf_w
|
|
FCLT 011110 0100 . ..... ..... ..... 011010 @3rf_w
|
|
FCULT 011110 0101 . ..... ..... ..... 011010 @3rf_w
|
|
FCLE 011110 0110 . ..... ..... ..... 011010 @3rf_w
|
|
FCULE 011110 0111 . ..... ..... ..... 011010 @3rf_w
|
|
FSAF 011110 1000 . ..... ..... ..... 011010 @3rf_w
|
|
FSUN 011110 1001 . ..... ..... ..... 011010 @3rf_w
|
|
FSEQ 011110 1010 . ..... ..... ..... 011010 @3rf_w
|
|
FSUEQ 011110 1011 . ..... ..... ..... 011010 @3rf_w
|
|
FSLT 011110 1100 . ..... ..... ..... 011010 @3rf_w
|
|
FSULT 011110 1101 . ..... ..... ..... 011010 @3rf_w
|
|
FSLE 011110 1110 . ..... ..... ..... 011010 @3rf_w
|
|
FSULE 011110 1111 . ..... ..... ..... 011010 @3rf_w
|
|
|
|
FADD 011110 0000 . ..... ..... ..... 011011 @3rf_w
|
|
FSUB 011110 0001 . ..... ..... ..... 011011 @3rf_w
|
|
FMUL 011110 0010 . ..... ..... ..... 011011 @3rf_w
|
|
FDIV 011110 0011 . ..... ..... ..... 011011 @3rf_w
|
|
FMADD 011110 0100 . ..... ..... ..... 011011 @3rf_w
|
|
FMSUB 011110 0101 . ..... ..... ..... 011011 @3rf_w
|
|
FEXP2 011110 0111 . ..... ..... ..... 011011 @3rf_w
|
|
FEXDO 011110 1000 . ..... ..... ..... 011011 @3rf_w
|
|
FTQ 011110 1010 . ..... ..... ..... 011011 @3rf_w
|
|
FMIN 011110 1100 . ..... ..... ..... 011011 @3rf_w
|
|
FMIN_A 011110 1101 . ..... ..... ..... 011011 @3rf_w
|
|
FMAX 011110 1110 . ..... ..... ..... 011011 @3rf_w
|
|
FMAX_A 011110 1111 . ..... ..... ..... 011011 @3rf_w
|
|
|
|
FCOR 011110 0001 . ..... ..... ..... 011100 @3rf_w
|
|
FCUNE 011110 0010 . ..... ..... ..... 011100 @3rf_w
|
|
FCNE 011110 0011 . ..... ..... ..... 011100 @3rf_w
|
|
MUL_Q 011110 0100 . ..... ..... ..... 011100 @3rf_h
|
|
MADD_Q 011110 0101 . ..... ..... ..... 011100 @3rf_h
|
|
MSUB_Q 011110 0110 . ..... ..... ..... 011100 @3rf_h
|
|
FSOR 011110 1001 . ..... ..... ..... 011100 @3rf_w
|
|
FSUNE 011110 1010 . ..... ..... ..... 011100 @3rf_w
|
|
FSNE 011110 1011 . ..... ..... ..... 011100 @3rf_w
|
|
MULR_Q 011110 1100 . ..... ..... ..... 011100 @3rf_h
|
|
MADDR_Q 011110 1101 . ..... ..... ..... 011100 @3rf_h
|
|
MSUBR_Q 011110 1110 . ..... ..... ..... 011100 @3rf_h
|
|
|
|
AND_V 011110 00000 ..... ..... ..... 011110 @vec
|
|
OR_V 011110 00001 ..... ..... ..... 011110 @vec
|
|
NOR_V 011110 00010 ..... ..... ..... 011110 @vec
|
|
XOR_V 011110 00011 ..... ..... ..... 011110 @vec
|
|
BMNZ_V 011110 00100 ..... ..... ..... 011110 @vec
|
|
BMZ_V 011110 00101 ..... ..... ..... 011110 @vec
|
|
BSEL_V 011110 00110 ..... ..... ..... 011110 @vec
|
|
FILL 011110 11000000 .. ..... ..... 011110 @2r
|
|
PCNT 011110 11000001 .. ..... ..... 011110 @2r
|
|
NLOC 011110 11000010 .. ..... ..... 011110 @2r
|
|
NLZC 011110 11000011 .. ..... ..... 011110 @2r
|
|
FCLASS 011110 110010000 . ..... ..... 011110 @2rf
|
|
FTRUNC_S 011110 110010001 . ..... ..... 011110 @2rf
|
|
FTRUNC_U 011110 110010010 . ..... ..... 011110 @2rf
|
|
FSQRT 011110 110010011 . ..... ..... 011110 @2rf
|
|
FRSQRT 011110 110010100 . ..... ..... 011110 @2rf
|
|
FRCP 011110 110010101 . ..... ..... 011110 @2rf
|
|
FRINT 011110 110010110 . ..... ..... 011110 @2rf
|
|
FLOG2 011110 110010111 . ..... ..... 011110 @2rf
|
|
FEXUPL 011110 110011000 . ..... ..... 011110 @2rf
|
|
FEXUPR 011110 110011001 . ..... ..... 011110 @2rf
|
|
FFQL 011110 110011010 . ..... ..... 011110 @2rf
|
|
FFQR 011110 110011011 . ..... ..... 011110 @2rf
|
|
FTINT_S 011110 110011100 . ..... ..... 011110 @2rf
|
|
FTINT_U 011110 110011101 . ..... ..... 011110 @2rf
|
|
FFINT_S 011110 110011110 . ..... ..... 011110 @2rf
|
|
FFINT_U 011110 110011111 . ..... ..... 011110 @2rf
|
|
|
|
LD 011110 .......... ..... ..... 1000 .. @ldst
|
|
ST 011110 .......... ..... ..... 1001 .. @ldst
|