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:16 &msa_bz df=3 35@bz ...... ... df:2 wt:5 sa:16 &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 51LSA 000000 ..... ..... ..... 000 .. 000101 @lsa 52DLSA 000000 ..... ..... ..... 000 .. 010101 @lsa 53 54BZ_V 010001 01011 ..... ................ @bz_v 55BNZ_V 010001 01111 ..... ................ @bz_v 56BZ 010001 110 .. ..... ................ @bz 57BNZ 010001 111 .. ..... ................ @bz 58 59ANDI 011110 00 ........ ..... ..... 000000 @i8 60ORI 011110 01 ........ ..... ..... 000000 @i8 61NORI 011110 10 ........ ..... ..... 000000 @i8 62XORI 011110 11 ........ ..... ..... 000000 @i8 63BMNZI 011110 00 ........ ..... ..... 000001 @i8 64BMZI 011110 01 ........ ..... ..... 000001 @i8 65BSELI 011110 10 ........ ..... ..... 000001 @i8 66SHF 011110 .. ........ ..... ..... 000010 @i8_df 67 68ADDVI 011110 000 .. ..... ..... ..... 000110 @u5 69SUBVI 011110 001 .. ..... ..... ..... 000110 @u5 70MAXI_S 011110 010 .. ..... ..... ..... 000110 @s5 71MAXI_U 011110 011 .. ..... ..... ..... 000110 @u5 72MINI_S 011110 100 .. ..... ..... ..... 000110 @s5 73MINI_U 011110 101 .. ..... ..... ..... 000110 @u5 74 75CEQI 011110 000 .. ..... ..... ..... 000111 @s5 76CLTI_S 011110 010 .. ..... ..... ..... 000111 @s5 77CLTI_U 011110 011 .. ..... ..... ..... 000111 @u5 78CLEI_S 011110 100 .. ..... ..... ..... 000111 @s5 79CLEI_U 011110 101 .. ..... ..... ..... 000111 @u5 80 81LDI 011110 110 .. .......... ..... 000111 @ldi 82 83SLLI 011110 000 ....... ..... ..... 001001 @bit 84SRAI 011110 001 ....... ..... ..... 001001 @bit 85SRLI 011110 010 ....... ..... ..... 001001 @bit 86BCLRI 011110 011 ....... ..... ..... 001001 @bit 87BSETI 011110 100 ....... ..... ..... 001001 @bit 88BNEGI 011110 101 ....... ..... ..... 001001 @bit 89BINSLI 011110 110 ....... ..... ..... 001001 @bit 90BINSRI 011110 111 ....... ..... ..... 001001 @bit 91 92SAT_S 011110 000 ....... ..... ..... 001010 @bit 93SAT_U 011110 001 ....... ..... ..... 001010 @bit 94SRARI 011110 010 ....... ..... ..... 001010 @bit 95SRLRI 011110 011 ....... ..... ..... 001010 @bit 96 97SLL 011110 000.. ..... ..... ..... 001101 @3r 98SRA 011110 001.. ..... ..... ..... 001101 @3r 99SRL 011110 010.. ..... ..... ..... 001101 @3r 100BCLR 011110 011.. ..... ..... ..... 001101 @3r 101BSET 011110 100.. ..... ..... ..... 001101 @3r 102BNEG 011110 101.. ..... ..... ..... 001101 @3r 103BINSL 011110 110.. ..... ..... ..... 001101 @3r 104BINSR 011110 111.. ..... ..... ..... 001101 @3r 105 106ADDV 011110 000.. ..... ..... ..... 001110 @3r 107SUBV 011110 001.. ..... ..... ..... 001110 @3r 108MAX_S 011110 010.. ..... ..... ..... 001110 @3r 109MAX_U 011110 011.. ..... ..... ..... 001110 @3r 110MIN_S 011110 100.. ..... ..... ..... 001110 @3r 111MIN_U 011110 101.. ..... ..... ..... 001110 @3r 112MAX_A 011110 110.. ..... ..... ..... 001110 @3r 113MIN_A 011110 111.. ..... ..... ..... 001110 @3r 114 115CEQ 011110 000.. ..... ..... ..... 001111 @3r 116CLT_S 011110 010.. ..... ..... ..... 001111 @3r 117CLT_U 011110 011.. ..... ..... ..... 001111 @3r 118CLE_S 011110 100.. ..... ..... ..... 001111 @3r 119CLE_U 011110 101.. ..... ..... ..... 001111 @3r 120 121ADD_A 011110 000.. ..... ..... ..... 010000 @3r 122ADDS_A 011110 001.. ..... ..... ..... 010000 @3r 123ADDS_S 011110 010.. ..... ..... ..... 010000 @3r 124ADDS_U 011110 011.. ..... ..... ..... 010000 @3r 125AVE_S 011110 100.. ..... ..... ..... 010000 @3r 126AVE_U 011110 101.. ..... ..... ..... 010000 @3r 127AVER_S 011110 110.. ..... ..... ..... 010000 @3r 128AVER_U 011110 111.. ..... ..... ..... 010000 @3r 129 130SUBS_S 011110 000.. ..... ..... ..... 010001 @3r 131SUBS_U 011110 001.. ..... ..... ..... 010001 @3r 132SUBSUS_U 011110 010.. ..... ..... ..... 010001 @3r 133SUBSUU_S 011110 011.. ..... ..... ..... 010001 @3r 134ASUB_S 011110 100.. ..... ..... ..... 010001 @3r 135ASUB_U 011110 101.. ..... ..... ..... 010001 @3r 136 137MULV 011110 000.. ..... ..... ..... 010010 @3r 138MADDV 011110 001.. ..... ..... ..... 010010 @3r 139MSUBV 011110 010.. ..... ..... ..... 010010 @3r 140DIV_S 011110 100.. ..... ..... ..... 010010 @3r 141DIV_U 011110 101.. ..... ..... ..... 010010 @3r 142MOD_S 011110 110.. ..... ..... ..... 010010 @3r 143MOD_U 011110 111.. ..... ..... ..... 010010 @3r 144 145DOTP_S 011110 000.. ..... ..... ..... 010011 @3r 146DOTP_U 011110 001.. ..... ..... ..... 010011 @3r 147DPADD_S 011110 010.. ..... ..... ..... 010011 @3r 148DPADD_U 011110 011.. ..... ..... ..... 010011 @3r 149DPSUB_S 011110 100.. ..... ..... ..... 010011 @3r 150DPSUB_U 011110 101.. ..... ..... ..... 010011 @3r 151 152SLD 011110 000 .. ..... ..... ..... 010100 @3r 153SPLAT 011110 001 .. ..... ..... ..... 010100 @3r 154PCKEV 011110 010 .. ..... ..... ..... 010100 @3r 155PCKOD 011110 011 .. ..... ..... ..... 010100 @3r 156ILVL 011110 100 .. ..... ..... ..... 010100 @3r 157ILVR 011110 101 .. ..... ..... ..... 010100 @3r 158ILVEV 011110 110 .. ..... ..... ..... 010100 @3r 159ILVOD 011110 111 .. ..... ..... ..... 010100 @3r 160 161VSHF 011110 000 .. ..... ..... ..... 010101 @3r 162SRAR 011110 001 .. ..... ..... ..... 010101 @3r 163SRLR 011110 010 .. ..... ..... ..... 010101 @3r 164HADD_S 011110 100.. ..... ..... ..... 010101 @3r 165HADD_U 011110 101.. ..... ..... ..... 010101 @3r 166HSUB_S 011110 110.. ..... ..... ..... 010101 @3r 167HSUB_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} 181COPY_U 011110 0011 ...... ..... ..... 011001 @elm_df 182INSERT 011110 0100 ...... ..... ..... 011001 @elm_df 183INSVE 011110 0101 ...... ..... ..... 011001 @elm_df 184 185FCAF 011110 0000 . ..... ..... ..... 011010 @3rf_w 186FCUN 011110 0001 . ..... ..... ..... 011010 @3rf_w 187FCEQ 011110 0010 . ..... ..... ..... 011010 @3rf_w 188FCUEQ 011110 0011 . ..... ..... ..... 011010 @3rf_w 189FCLT 011110 0100 . ..... ..... ..... 011010 @3rf_w 190FCULT 011110 0101 . ..... ..... ..... 011010 @3rf_w 191FCLE 011110 0110 . ..... ..... ..... 011010 @3rf_w 192FCULE 011110 0111 . ..... ..... ..... 011010 @3rf_w 193FSAF 011110 1000 . ..... ..... ..... 011010 @3rf_w 194FSUN 011110 1001 . ..... ..... ..... 011010 @3rf_w 195FSEQ 011110 1010 . ..... ..... ..... 011010 @3rf_w 196FSUEQ 011110 1011 . ..... ..... ..... 011010 @3rf_w 197FSLT 011110 1100 . ..... ..... ..... 011010 @3rf_w 198FSULT 011110 1101 . ..... ..... ..... 011010 @3rf_w 199FSLE 011110 1110 . ..... ..... ..... 011010 @3rf_w 200FSULE 011110 1111 . ..... ..... ..... 011010 @3rf_w 201 202FADD 011110 0000 . ..... ..... ..... 011011 @3rf_w 203FSUB 011110 0001 . ..... ..... ..... 011011 @3rf_w 204FMUL 011110 0010 . ..... ..... ..... 011011 @3rf_w 205FDIV 011110 0011 . ..... ..... ..... 011011 @3rf_w 206FMADD 011110 0100 . ..... ..... ..... 011011 @3rf_w 207FMSUB 011110 0101 . ..... ..... ..... 011011 @3rf_w 208FEXP2 011110 0111 . ..... ..... ..... 011011 @3rf_w 209FEXDO 011110 1000 . ..... ..... ..... 011011 @3rf_w 210FTQ 011110 1010 . ..... ..... ..... 011011 @3rf_w 211FMIN 011110 1100 . ..... ..... ..... 011011 @3rf_w 212FMIN_A 011110 1101 . ..... ..... ..... 011011 @3rf_w 213FMAX 011110 1110 . ..... ..... ..... 011011 @3rf_w 214FMAX_A 011110 1111 . ..... ..... ..... 011011 @3rf_w 215 216FCOR 011110 0001 . ..... ..... ..... 011100 @3rf_w 217FCUNE 011110 0010 . ..... ..... ..... 011100 @3rf_w 218FCNE 011110 0011 . ..... ..... ..... 011100 @3rf_w 219MUL_Q 011110 0100 . ..... ..... ..... 011100 @3rf_h 220MADD_Q 011110 0101 . ..... ..... ..... 011100 @3rf_h 221MSUB_Q 011110 0110 . ..... ..... ..... 011100 @3rf_h 222FSOR 011110 1001 . ..... ..... ..... 011100 @3rf_w 223FSUNE 011110 1010 . ..... ..... ..... 011100 @3rf_w 224FSNE 011110 1011 . ..... ..... ..... 011100 @3rf_w 225MULR_Q 011110 1100 . ..... ..... ..... 011100 @3rf_h 226MADDR_Q 011110 1101 . ..... ..... ..... 011100 @3rf_h 227MSUBR_Q 011110 1110 . ..... ..... ..... 011100 @3rf_h 228 229AND_V 011110 00000 ..... ..... ..... 011110 @vec 230OR_V 011110 00001 ..... ..... ..... 011110 @vec 231NOR_V 011110 00010 ..... ..... ..... 011110 @vec 232XOR_V 011110 00011 ..... ..... ..... 011110 @vec 233BMNZ_V 011110 00100 ..... ..... ..... 011110 @vec 234BMZ_V 011110 00101 ..... ..... ..... 011110 @vec 235BSEL_V 011110 00110 ..... ..... ..... 011110 @vec 236FILL 011110 11000000 .. ..... ..... 011110 @2r 237PCNT 011110 11000001 .. ..... ..... 011110 @2r 238NLOC 011110 11000010 .. ..... ..... 011110 @2r 239NLZC 011110 11000011 .. ..... ..... 011110 @2r 240FCLASS 011110 110010000 . ..... ..... 011110 @2rf 241FTRUNC_S 011110 110010001 . ..... ..... 011110 @2rf 242FTRUNC_U 011110 110010010 . ..... ..... 011110 @2rf 243FSQRT 011110 110010011 . ..... ..... 011110 @2rf 244FRSQRT 011110 110010100 . ..... ..... 011110 @2rf 245FRCP 011110 110010101 . ..... ..... 011110 @2rf 246FRINT 011110 110010110 . ..... ..... 011110 @2rf 247FLOG2 011110 110010111 . ..... ..... 011110 @2rf 248FEXUPL 011110 110011000 . ..... ..... 011110 @2rf 249FEXUPR 011110 110011001 . ..... ..... 011110 @2rf 250FFQL 011110 110011010 . ..... ..... 011110 @2rf 251FFQR 011110 110011011 . ..... ..... 011110 @2rf 252FTINT_S 011110 110011100 . ..... ..... 011110 @2rf 253FTINT_U 011110 110011101 . ..... ..... 011110 @2rf 254FFINT_S 011110 110011110 . ..... ..... 011110 @2rf 255FFINT_U 011110 110011111 . ..... ..... 011110 @2rf 256 257LD 011110 .......... ..... ..... 1000 .. @ldst 258ST 011110 .......... ..... ..... 1001 .. @ldst 259