| 1 | # MIPS SIMD Architecture Module instruction set |
| 2 | # |
| 3 | # Copyright (C) 2020 Philippe Mathieu-Daudé |
| 4 | # |
| 5 | # SPDX-License-Identifier: LGPL-2.1-or-later |
| 6 | # |
| 7 | # Reference: |
| 8 | # MIPS Architecture for Programmers Volume IV-j |
| 9 | # - The MIPS32 SIMD Architecture Module, Revision 1.12 |
| 10 | # (Document Number: MD00866-2B-MSA32-AFP-01.12) |
| 11 | # - The MIPS64 SIMD Architecture Module, Revision 1.12 |
| 12 | # (Document Number: MD00868-1D-MSA64-AFP-01.12) |
| 13 | |
| 14 | &r rs rt rd sa |
| 15 | |
| 16 | &msa_r df wd ws wt |
| 17 | &msa_bz df wt sa |
| 18 | &msa_ldi df wd sa |
| 19 | &msa_i df wd ws sa |
| 20 | &msa_bit df wd ws m |
| 21 | &msa_elm_df df wd ws n |
| 22 | &msa_elm wd ws |
| 23 | |
| 24 | %elm_df 16:6 !function=elm_df |
| 25 | %elm_n 16:6 !function=elm_n |
| 26 | %bit_df 16:7 !function=bit_df |
| 27 | %bit_m 16:7 !function=bit_m |
| 28 | %2r_df_w 16:1 !function=plus_2 |
| 29 | %3r_df_h 21:1 !function=plus_1 |
| 30 | %3r_df_w 21:1 !function=plus_2 |
| 31 | |
| 32 | @lsa ...... rs:5 rt:5 rd:5 ... sa:2 ...... &r |
| 33 | @ldst ...... sa:s10 ws:5 wd:5 .... df:2 &msa_i |
| 34 | @bz_v ...... ... .. wt:5 sa:s16 &msa_bz df=3 |
| 35 | @bz ...... ... df:2 wt:5 sa:s16 &msa_bz |
| 36 | @elm_df ...... .... ...... ws:5 wd:5 ...... &msa_elm_df df=%elm_df n=%elm_n |
| 37 | @elm ...... .......... ws:5 wd:5 ...... &msa_elm |
| 38 | @vec ...... ..... wt:5 ws:5 wd:5 ...... &msa_r df=0 |
| 39 | @2r ...... ........ df:2 ws:5 wd:5 ...... &msa_r wt=0 |
| 40 | @2rf ...... ......... . ws:5 wd:5 ...... &msa_r wt=0 df=%2r_df_w |
| 41 | @3r ...... ... df:2 wt:5 ws:5 wd:5 ...... &msa_r |
| 42 | @3rf_h ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_h |
| 43 | @3rf_w ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_w |
| 44 | @u5 ...... ... df:2 sa:5 ws:5 wd:5 ...... &msa_i |
| 45 | @s5 ...... ... df:2 sa:s5 ws:5 wd:5 ...... &msa_i |
| 46 | @i8_df ...... df:2 sa:s8 ws:5 wd:5 ...... &msa_i |
| 47 | @i8 ...... .. sa:s8 ws:5 wd:5 ...... &msa_i df=0 |
| 48 | @ldi ...... ... df:2 sa:s10 wd:5 ...... &msa_ldi |
| 49 | @bit ...... ... ....... ws:5 wd:5 ...... &msa_bit df=%bit_df m=%bit_m |
| 50 | |
| 51 | LSA 000000 ..... ..... ..... 000 .. 000101 @lsa |
| 52 | DLSA 000000 ..... ..... ..... 000 .. 010101 @lsa |
| 53 | |
| 54 | BZ_V 010001 01011 ..... ................ @bz_v |
| 55 | BNZ_V 010001 01111 ..... ................ @bz_v |
| 56 | BZ 010001 110 .. ..... ................ @bz |
| 57 | BNZ 010001 111 .. ..... ................ @bz |
| 58 | |
| 59 | ANDI 011110 00 ........ ..... ..... 000000 @i8 |
| 60 | ORI 011110 01 ........ ..... ..... 000000 @i8 |
| 61 | NORI 011110 10 ........ ..... ..... 000000 @i8 |
| 62 | XORI 011110 11 ........ ..... ..... 000000 @i8 |
| 63 | BMNZI 011110 00 ........ ..... ..... 000001 @i8 |
| 64 | BMZI 011110 01 ........ ..... ..... 000001 @i8 |
| 65 | BSELI 011110 10 ........ ..... ..... 000001 @i8 |
| 66 | SHF 011110 .. ........ ..... ..... 000010 @i8_df |
| 67 | |
| 68 | ADDVI 011110 000 .. ..... ..... ..... 000110 @u5 |
| 69 | SUBVI 011110 001 .. ..... ..... ..... 000110 @u5 |
| 70 | MAXI_S 011110 010 .. ..... ..... ..... 000110 @s5 |
| 71 | MAXI_U 011110 011 .. ..... ..... ..... 000110 @u5 |
| 72 | MINI_S 011110 100 .. ..... ..... ..... 000110 @s5 |
| 73 | MINI_U 011110 101 .. ..... ..... ..... 000110 @u5 |
| 74 | |
| 75 | CEQI 011110 000 .. ..... ..... ..... 000111 @s5 |
| 76 | CLTI_S 011110 010 .. ..... ..... ..... 000111 @s5 |
| 77 | CLTI_U 011110 011 .. ..... ..... ..... 000111 @u5 |
| 78 | CLEI_S 011110 100 .. ..... ..... ..... 000111 @s5 |
| 79 | CLEI_U 011110 101 .. ..... ..... ..... 000111 @u5 |
| 80 | |
| 81 | LDI 011110 110 .. .......... ..... 000111 @ldi |
| 82 | |
| 83 | SLLI 011110 000 ....... ..... ..... 001001 @bit |
| 84 | SRAI 011110 001 ....... ..... ..... 001001 @bit |
| 85 | SRLI 011110 010 ....... ..... ..... 001001 @bit |
| 86 | BCLRI 011110 011 ....... ..... ..... 001001 @bit |
| 87 | BSETI 011110 100 ....... ..... ..... 001001 @bit |
| 88 | BNEGI 011110 101 ....... ..... ..... 001001 @bit |
| 89 | BINSLI 011110 110 ....... ..... ..... 001001 @bit |
| 90 | BINSRI 011110 111 ....... ..... ..... 001001 @bit |
| 91 | |
| 92 | SAT_S 011110 000 ....... ..... ..... 001010 @bit |
| 93 | SAT_U 011110 001 ....... ..... ..... 001010 @bit |
| 94 | SRARI 011110 010 ....... ..... ..... 001010 @bit |
| 95 | SRLRI 011110 011 ....... ..... ..... 001010 @bit |
| 96 | |
| 97 | SLL 011110 000.. ..... ..... ..... 001101 @3r |
| 98 | SRA 011110 001.. ..... ..... ..... 001101 @3r |
| 99 | SRL 011110 010.. ..... ..... ..... 001101 @3r |
| 100 | BCLR 011110 011.. ..... ..... ..... 001101 @3r |
| 101 | BSET 011110 100.. ..... ..... ..... 001101 @3r |
| 102 | BNEG 011110 101.. ..... ..... ..... 001101 @3r |
| 103 | BINSL 011110 110.. ..... ..... ..... 001101 @3r |
| 104 | BINSR 011110 111.. ..... ..... ..... 001101 @3r |
| 105 | |
| 106 | ADDV 011110 000.. ..... ..... ..... 001110 @3r |
| 107 | SUBV 011110 001.. ..... ..... ..... 001110 @3r |
| 108 | MAX_S 011110 010.. ..... ..... ..... 001110 @3r |
| 109 | MAX_U 011110 011.. ..... ..... ..... 001110 @3r |
| 110 | MIN_S 011110 100.. ..... ..... ..... 001110 @3r |
| 111 | MIN_U 011110 101.. ..... ..... ..... 001110 @3r |
| 112 | MAX_A 011110 110.. ..... ..... ..... 001110 @3r |
| 113 | MIN_A 011110 111.. ..... ..... ..... 001110 @3r |
| 114 | |
| 115 | CEQ 011110 000.. ..... ..... ..... 001111 @3r |
| 116 | CLT_S 011110 010.. ..... ..... ..... 001111 @3r |
| 117 | CLT_U 011110 011.. ..... ..... ..... 001111 @3r |
| 118 | CLE_S 011110 100.. ..... ..... ..... 001111 @3r |
| 119 | CLE_U 011110 101.. ..... ..... ..... 001111 @3r |
| 120 | |
| 121 | ADD_A 011110 000.. ..... ..... ..... 010000 @3r |
| 122 | ADDS_A 011110 001.. ..... ..... ..... 010000 @3r |
| 123 | ADDS_S 011110 010.. ..... ..... ..... 010000 @3r |
| 124 | ADDS_U 011110 011.. ..... ..... ..... 010000 @3r |
| 125 | AVE_S 011110 100.. ..... ..... ..... 010000 @3r |
| 126 | AVE_U 011110 101.. ..... ..... ..... 010000 @3r |
| 127 | AVER_S 011110 110.. ..... ..... ..... 010000 @3r |
| 128 | AVER_U 011110 111.. ..... ..... ..... 010000 @3r |
| 129 | |
| 130 | SUBS_S 011110 000.. ..... ..... ..... 010001 @3r |
| 131 | SUBS_U 011110 001.. ..... ..... ..... 010001 @3r |
| 132 | SUBSUS_U 011110 010.. ..... ..... ..... 010001 @3r |
| 133 | SUBSUU_S 011110 011.. ..... ..... ..... 010001 @3r |
| 134 | ASUB_S 011110 100.. ..... ..... ..... 010001 @3r |
| 135 | ASUB_U 011110 101.. ..... ..... ..... 010001 @3r |
| 136 | |
| 137 | MULV 011110 000.. ..... ..... ..... 010010 @3r |
| 138 | MADDV 011110 001.. ..... ..... ..... 010010 @3r |
| 139 | MSUBV 011110 010.. ..... ..... ..... 010010 @3r |
| 140 | DIV_S 011110 100.. ..... ..... ..... 010010 @3r |
| 141 | DIV_U 011110 101.. ..... ..... ..... 010010 @3r |
| 142 | MOD_S 011110 110.. ..... ..... ..... 010010 @3r |
| 143 | MOD_U 011110 111.. ..... ..... ..... 010010 @3r |
| 144 | |
| 145 | DOTP_S 011110 000.. ..... ..... ..... 010011 @3r |
| 146 | DOTP_U 011110 001.. ..... ..... ..... 010011 @3r |
| 147 | DPADD_S 011110 010.. ..... ..... ..... 010011 @3r |
| 148 | DPADD_U 011110 011.. ..... ..... ..... 010011 @3r |
| 149 | DPSUB_S 011110 100.. ..... ..... ..... 010011 @3r |
| 150 | DPSUB_U 011110 101.. ..... ..... ..... 010011 @3r |
| 151 | |
| 152 | SLD 011110 000 .. ..... ..... ..... 010100 @3r |
| 153 | SPLAT 011110 001 .. ..... ..... ..... 010100 @3r |
| 154 | PCKEV 011110 010 .. ..... ..... ..... 010100 @3r |
| 155 | PCKOD 011110 011 .. ..... ..... ..... 010100 @3r |
| 156 | ILVL 011110 100 .. ..... ..... ..... 010100 @3r |
| 157 | ILVR 011110 101 .. ..... ..... ..... 010100 @3r |
| 158 | ILVEV 011110 110 .. ..... ..... ..... 010100 @3r |
| 159 | ILVOD 011110 111 .. ..... ..... ..... 010100 @3r |
| 160 | |
| 161 | VSHF 011110 000 .. ..... ..... ..... 010101 @3r |
| 162 | SRAR 011110 001 .. ..... ..... ..... 010101 @3r |
| 163 | SRLR 011110 010 .. ..... ..... ..... 010101 @3r |
| 164 | HADD_S 011110 100.. ..... ..... ..... 010101 @3r |
| 165 | HADD_U 011110 101.. ..... ..... ..... 010101 @3r |
| 166 | HSUB_S 011110 110.. ..... ..... ..... 010101 @3r |
| 167 | HSUB_U 011110 111.. ..... ..... ..... 010101 @3r |
| 168 | |
| 169 | { |
| 170 | CTCMSA 011110 0000111110 ..... ..... 011001 @elm |
| 171 | SLDI 011110 0000 ...... ..... ..... 011001 @elm_df |
| 172 | } |
| 173 | { |
| 174 | CFCMSA 011110 0001111110 ..... ..... 011001 @elm |
| 175 | SPLATI 011110 0001 ...... ..... ..... 011001 @elm_df |
| 176 | } |
| 177 | { |
| 178 | MOVE_V 011110 0010111110 ..... ..... 011001 @elm |
| 179 | COPY_S 011110 0010 ...... ..... ..... 011001 @elm_df |
| 180 | } |
| 181 | COPY_U 011110 0011 ...... ..... ..... 011001 @elm_df |
| 182 | INSERT 011110 0100 ...... ..... ..... 011001 @elm_df |
| 183 | INSVE 011110 0101 ...... ..... ..... 011001 @elm_df |
| 184 | |
| 185 | FCAF 011110 0000 . ..... ..... ..... 011010 @3rf_w |
| 186 | FCUN 011110 0001 . ..... ..... ..... 011010 @3rf_w |
| 187 | FCEQ 011110 0010 . ..... ..... ..... 011010 @3rf_w |
| 188 | FCUEQ 011110 0011 . ..... ..... ..... 011010 @3rf_w |
| 189 | FCLT 011110 0100 . ..... ..... ..... 011010 @3rf_w |
| 190 | FCULT 011110 0101 . ..... ..... ..... 011010 @3rf_w |
| 191 | FCLE 011110 0110 . ..... ..... ..... 011010 @3rf_w |
| 192 | FCULE 011110 0111 . ..... ..... ..... 011010 @3rf_w |
| 193 | FSAF 011110 1000 . ..... ..... ..... 011010 @3rf_w |
| 194 | FSUN 011110 1001 . ..... ..... ..... 011010 @3rf_w |
| 195 | FSEQ 011110 1010 . ..... ..... ..... 011010 @3rf_w |
| 196 | FSUEQ 011110 1011 . ..... ..... ..... 011010 @3rf_w |
| 197 | FSLT 011110 1100 . ..... ..... ..... 011010 @3rf_w |
| 198 | FSULT 011110 1101 . ..... ..... ..... 011010 @3rf_w |
| 199 | FSLE 011110 1110 . ..... ..... ..... 011010 @3rf_w |
| 200 | FSULE 011110 1111 . ..... ..... ..... 011010 @3rf_w |
| 201 | |
| 202 | FADD 011110 0000 . ..... ..... ..... 011011 @3rf_w |
| 203 | FSUB 011110 0001 . ..... ..... ..... 011011 @3rf_w |
| 204 | FMUL 011110 0010 . ..... ..... ..... 011011 @3rf_w |
| 205 | FDIV 011110 0011 . ..... ..... ..... 011011 @3rf_w |
| 206 | FMADD 011110 0100 . ..... ..... ..... 011011 @3rf_w |
| 207 | FMSUB 011110 0101 . ..... ..... ..... 011011 @3rf_w |
| 208 | FEXP2 011110 0111 . ..... ..... ..... 011011 @3rf_w |
| 209 | FEXDO 011110 1000 . ..... ..... ..... 011011 @3rf_w |
| 210 | FTQ 011110 1010 . ..... ..... ..... 011011 @3rf_w |
| 211 | FMIN 011110 1100 . ..... ..... ..... 011011 @3rf_w |
| 212 | FMIN_A 011110 1101 . ..... ..... ..... 011011 @3rf_w |
| 213 | FMAX 011110 1110 . ..... ..... ..... 011011 @3rf_w |
| 214 | FMAX_A 011110 1111 . ..... ..... ..... 011011 @3rf_w |
| 215 | |
| 216 | FCOR 011110 0001 . ..... ..... ..... 011100 @3rf_w |
| 217 | FCUNE 011110 0010 . ..... ..... ..... 011100 @3rf_w |
| 218 | FCNE 011110 0011 . ..... ..... ..... 011100 @3rf_w |
| 219 | MUL_Q 011110 0100 . ..... ..... ..... 011100 @3rf_h |
| 220 | MADD_Q 011110 0101 . ..... ..... ..... 011100 @3rf_h |
| 221 | MSUB_Q 011110 0110 . ..... ..... ..... 011100 @3rf_h |
| 222 | FSOR 011110 1001 . ..... ..... ..... 011100 @3rf_w |
| 223 | FSUNE 011110 1010 . ..... ..... ..... 011100 @3rf_w |
| 224 | FSNE 011110 1011 . ..... ..... ..... 011100 @3rf_w |
| 225 | MULR_Q 011110 1100 . ..... ..... ..... 011100 @3rf_h |
| 226 | MADDR_Q 011110 1101 . ..... ..... ..... 011100 @3rf_h |
| 227 | MSUBR_Q 011110 1110 . ..... ..... ..... 011100 @3rf_h |
| 228 | |
| 229 | AND_V 011110 00000 ..... ..... ..... 011110 @vec |
| 230 | OR_V 011110 00001 ..... ..... ..... 011110 @vec |
| 231 | NOR_V 011110 00010 ..... ..... ..... 011110 @vec |
| 232 | XOR_V 011110 00011 ..... ..... ..... 011110 @vec |
| 233 | BMNZ_V 011110 00100 ..... ..... ..... 011110 @vec |
| 234 | BMZ_V 011110 00101 ..... ..... ..... 011110 @vec |
| 235 | BSEL_V 011110 00110 ..... ..... ..... 011110 @vec |
| 236 | FILL 011110 11000000 .. ..... ..... 011110 @2r |
| 237 | PCNT 011110 11000001 .. ..... ..... 011110 @2r |
| 238 | NLOC 011110 11000010 .. ..... ..... 011110 @2r |
| 239 | NLZC 011110 11000011 .. ..... ..... 011110 @2r |
| 240 | FCLASS 011110 110010000 . ..... ..... 011110 @2rf |
| 241 | FTRUNC_S 011110 110010001 . ..... ..... 011110 @2rf |
| 242 | FTRUNC_U 011110 110010010 . ..... ..... 011110 @2rf |
| 243 | FSQRT 011110 110010011 . ..... ..... 011110 @2rf |
| 244 | FRSQRT 011110 110010100 . ..... ..... 011110 @2rf |
| 245 | FRCP 011110 110010101 . ..... ..... 011110 @2rf |
| 246 | FRINT 011110 110010110 . ..... ..... 011110 @2rf |
| 247 | FLOG2 011110 110010111 . ..... ..... 011110 @2rf |
| 248 | FEXUPL 011110 110011000 . ..... ..... 011110 @2rf |
| 249 | FEXUPR 011110 110011001 . ..... ..... 011110 @2rf |
| 250 | FFQL 011110 110011010 . ..... ..... 011110 @2rf |
| 251 | FFQR 011110 110011011 . ..... ..... 011110 @2rf |
| 252 | FTINT_S 011110 110011100 . ..... ..... 011110 @2rf |
| 253 | FTINT_U 011110 110011101 . ..... ..... 011110 @2rf |
| 254 | FFINT_S 011110 110011110 . ..... ..... 011110 @2rf |
| 255 | FFINT_U 011110 110011111 . ..... ..... 011110 @2rf |
| 256 | |
| 257 | LD 011110 .......... ..... ..... 1000 .. @ldst |
| 258 | ST 011110 .......... ..... ..... 1001 .. @ldst |