| # 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:s16 &msa_bz df=3 |
| @bz ...... ... df:2 wt:5 sa:s16 &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 |