# 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