1 1.12 mrg ;; Copyright (C) 2005-2022 Free Software Foundation, Inc. 2 1.1 mrg ;; 3 1.1 mrg ;; This file is part of GCC. 4 1.1 mrg ;; 5 1.1 mrg ;; GCC is free software; you can redistribute it and/or modify 6 1.1 mrg ;; it under the terms of the GNU General Public License as published by 7 1.1 mrg ;; the Free Software Foundation; either version 3, or (at your option) 8 1.1 mrg ;; any later version. 9 1.1 mrg ;; 10 1.1 mrg ;; GCC is distributed in the hope that it will be useful, 11 1.1 mrg ;; but WITHOUT ANY WARRANTY; without even the implied warranty of 12 1.1 mrg ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 1.1 mrg ;; GNU General Public License for more details. 14 1.1 mrg ;; 15 1.1 mrg ;; You should have received a copy of the GNU General Public License 16 1.1 mrg ;; along with GCC; see the file COPYING3. If not see 17 1.1 mrg ;; <http://www.gnu.org/licenses/>. 18 1.1 mrg 19 1.3 mrg ;; MIPS DSP ASE Revision 0.98 3/24/2005 20 1.3 mrg (define_c_enum "unspec" [ 21 1.3 mrg UNSPEC_ADDQ 22 1.3 mrg UNSPEC_ADDQ_S 23 1.3 mrg UNSPEC_SUBQ 24 1.3 mrg UNSPEC_SUBQ_S 25 1.3 mrg UNSPEC_ADDSC 26 1.3 mrg UNSPEC_ADDWC 27 1.3 mrg UNSPEC_MODSUB 28 1.3 mrg UNSPEC_RADDU_W_QB 29 1.3 mrg UNSPEC_ABSQ_S 30 1.3 mrg UNSPEC_PRECRQ_QB_PH 31 1.3 mrg UNSPEC_PRECRQ_PH_W 32 1.3 mrg UNSPEC_PRECRQ_RS_PH_W 33 1.3 mrg UNSPEC_PRECRQU_S_QB_PH 34 1.3 mrg UNSPEC_PRECEQ_W_PHL 35 1.3 mrg UNSPEC_PRECEQ_W_PHR 36 1.3 mrg UNSPEC_PRECEQU_PH_QBL 37 1.3 mrg UNSPEC_PRECEQU_PH_QBR 38 1.3 mrg UNSPEC_PRECEQU_PH_QBLA 39 1.3 mrg UNSPEC_PRECEQU_PH_QBRA 40 1.3 mrg UNSPEC_PRECEU_PH_QBL 41 1.3 mrg UNSPEC_PRECEU_PH_QBR 42 1.3 mrg UNSPEC_PRECEU_PH_QBLA 43 1.3 mrg UNSPEC_PRECEU_PH_QBRA 44 1.3 mrg UNSPEC_SHLL 45 1.3 mrg UNSPEC_SHLL_S 46 1.3 mrg UNSPEC_SHRL_QB 47 1.3 mrg UNSPEC_SHRA_PH 48 1.3 mrg UNSPEC_SHRA_R 49 1.3 mrg UNSPEC_MULEU_S_PH_QBL 50 1.3 mrg UNSPEC_MULEU_S_PH_QBR 51 1.3 mrg UNSPEC_MULQ_RS_PH 52 1.3 mrg UNSPEC_MULEQ_S_W_PHL 53 1.3 mrg UNSPEC_MULEQ_S_W_PHR 54 1.3 mrg UNSPEC_DPAU_H_QBL 55 1.3 mrg UNSPEC_DPAU_H_QBR 56 1.3 mrg UNSPEC_DPSU_H_QBL 57 1.3 mrg UNSPEC_DPSU_H_QBR 58 1.3 mrg UNSPEC_DPAQ_S_W_PH 59 1.3 mrg UNSPEC_DPSQ_S_W_PH 60 1.3 mrg UNSPEC_MULSAQ_S_W_PH 61 1.3 mrg UNSPEC_DPAQ_SA_L_W 62 1.3 mrg UNSPEC_DPSQ_SA_L_W 63 1.3 mrg UNSPEC_MAQ_S_W_PHL 64 1.3 mrg UNSPEC_MAQ_S_W_PHR 65 1.3 mrg UNSPEC_MAQ_SA_W_PHL 66 1.3 mrg UNSPEC_MAQ_SA_W_PHR 67 1.3 mrg UNSPEC_BITREV 68 1.3 mrg UNSPEC_INSV 69 1.3 mrg UNSPEC_REPL_QB 70 1.3 mrg UNSPEC_REPL_PH 71 1.3 mrg UNSPEC_CMP_EQ 72 1.3 mrg UNSPEC_CMP_LT 73 1.3 mrg UNSPEC_CMP_LE 74 1.3 mrg UNSPEC_CMPGU_EQ_QB 75 1.3 mrg UNSPEC_CMPGU_LT_QB 76 1.3 mrg UNSPEC_CMPGU_LE_QB 77 1.3 mrg UNSPEC_PICK 78 1.3 mrg UNSPEC_PACKRL_PH 79 1.3 mrg UNSPEC_EXTR_W 80 1.3 mrg UNSPEC_EXTR_R_W 81 1.3 mrg UNSPEC_EXTR_RS_W 82 1.3 mrg UNSPEC_EXTR_S_H 83 1.3 mrg UNSPEC_EXTP 84 1.3 mrg UNSPEC_EXTPDP 85 1.3 mrg UNSPEC_SHILO 86 1.3 mrg UNSPEC_MTHLIP 87 1.3 mrg UNSPEC_WRDSP 88 1.3 mrg UNSPEC_RDDSP 89 1.3 mrg ]) 90 1.3 mrg 91 1.1 mrg (define_constants 92 1.1 mrg [(CCDSP_PO_REGNUM 182) 93 1.1 mrg (CCDSP_SC_REGNUM 183) 94 1.1 mrg (CCDSP_CA_REGNUM 184) 95 1.1 mrg (CCDSP_OU_REGNUM 185) 96 1.1 mrg (CCDSP_CC_REGNUM 186) 97 1.1 mrg (CCDSP_EF_REGNUM 187)]) 98 1.1 mrg 99 1.1 mrg ;; This mode iterator allows si, v2hi, v4qi for all possible modes in DSP ASE. 100 1.1 mrg (define_mode_iterator DSP [(SI "ISA_HAS_DSP") 101 1.1 mrg (V2HI "ISA_HAS_DSP") 102 1.1 mrg (V4QI "ISA_HAS_DSP")]) 103 1.1 mrg 104 1.1 mrg ;; This mode iterator allows v2hi, v4qi for vector/SIMD data. 105 1.1 mrg (define_mode_iterator DSPV [(V2HI "ISA_HAS_DSP") 106 1.1 mrg (V4QI "ISA_HAS_DSP")]) 107 1.1 mrg 108 1.1 mrg ;; This mode iterator allows si, v2hi for Q31 and V2Q15 fixed-point data. 109 1.1 mrg (define_mode_iterator DSPQ [(SI "ISA_HAS_DSP") 110 1.1 mrg (V2HI "ISA_HAS_DSP")]) 111 1.1 mrg 112 1.1 mrg ;; DSP instructions use q for fixed-point data, and u for integer in the infix. 113 1.1 mrg (define_mode_attr dspfmt1 [(SI "q") (V2HI "q") (V4QI "u")]) 114 1.1 mrg 115 1.1 mrg ;; DSP instructions use nothing for fixed-point data, and u for integer in 116 1.1 mrg ;; the infix. 117 1.1 mrg (define_mode_attr dspfmt1_1 [(SI "") (V2HI "") (V4QI "u")]) 118 1.1 mrg 119 1.1 mrg ;; DSP instructions use w, ph, qb in the postfix. 120 1.1 mrg (define_mode_attr dspfmt2 [(SI "w") (V2HI "ph") (V4QI "qb")]) 121 1.1 mrg 122 1.1 mrg ;; DSP shift masks for SI, V2HI, V4QI. 123 1.1 mrg (define_mode_attr dspshift_mask [(SI "0x1f") (V2HI "0xf") (V4QI "0x7")]) 124 1.1 mrg 125 1.1 mrg ;; MIPS DSP ASE Revision 0.98 3/24/2005 126 1.1 mrg ;; Table 2-1. MIPS DSP ASE Instructions: Arithmetic 127 1.1 mrg ;; ADDQ* 128 1.1 mrg (define_insn "add<DSPV:mode>3" 129 1.5 mrg [(set (match_operand:DSPV 0 "register_operand" "=d") 130 1.5 mrg (plus:DSPV (match_operand:DSPV 1 "register_operand" "d") 131 1.5 mrg (match_operand:DSPV 2 "register_operand" "d"))) 132 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 133 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDQ))] 134 1.3 mrg "ISA_HAS_DSP" 135 1.1 mrg "add<DSPV:dspfmt1>.<DSPV:dspfmt2>\t%0,%1,%2" 136 1.3 mrg [(set_attr "type" "dspalu") 137 1.1 mrg (set_attr "mode" "SI")]) 138 1.1 mrg 139 1.1 mrg (define_insn "mips_add<DSP:dspfmt1>_s_<DSP:dspfmt2>" 140 1.5 mrg [(set (match_operand:DSP 0 "register_operand" "=d") 141 1.5 mrg (unspec:DSP [(match_operand:DSP 1 "register_operand" "d") 142 1.5 mrg (match_operand:DSP 2 "register_operand" "d")] 143 1.5 mrg UNSPEC_ADDQ_S)) 144 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 145 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDQ_S))] 146 1.3 mrg "ISA_HAS_DSP" 147 1.1 mrg "add<DSP:dspfmt1>_s.<DSP:dspfmt2>\t%0,%1,%2" 148 1.3 mrg [(set_attr "type" "dspalusat") 149 1.1 mrg (set_attr "mode" "SI")]) 150 1.1 mrg 151 1.1 mrg ;; SUBQ* 152 1.1 mrg (define_insn "sub<DSPV:mode>3" 153 1.5 mrg [(set (match_operand:DSPV 0 "register_operand" "=d") 154 1.5 mrg (minus:DSPV (match_operand:DSPV 1 "register_operand" "d") 155 1.5 mrg (match_operand:DSPV 2 "register_operand" "d"))) 156 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 157 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBQ))] 158 1.1 mrg "ISA_HAS_DSP" 159 1.1 mrg "sub<DSPV:dspfmt1>.<DSPV:dspfmt2>\t%0,%1,%2" 160 1.3 mrg [(set_attr "type" "dspalu") 161 1.1 mrg (set_attr "mode" "SI")]) 162 1.1 mrg 163 1.1 mrg (define_insn "mips_sub<DSP:dspfmt1>_s_<DSP:dspfmt2>" 164 1.5 mrg [(set (match_operand:DSP 0 "register_operand" "=d") 165 1.5 mrg (unspec:DSP [(match_operand:DSP 1 "register_operand" "d") 166 1.5 mrg (match_operand:DSP 2 "register_operand" "d")] 167 1.5 mrg UNSPEC_SUBQ_S)) 168 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 169 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SUBQ_S))] 170 1.1 mrg "ISA_HAS_DSP" 171 1.1 mrg "sub<DSP:dspfmt1>_s.<DSP:dspfmt2>\t%0,%1,%2" 172 1.3 mrg [(set_attr "type" "dspalusat") 173 1.1 mrg (set_attr "mode" "SI")]) 174 1.1 mrg 175 1.1 mrg ;; ADDSC 176 1.1 mrg (define_insn "mips_addsc" 177 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d") 178 1.5 mrg (unspec:SI [(match_operand:SI 1 "register_operand" "d") 179 1.5 mrg (match_operand:SI 2 "register_operand" "d")] 180 1.5 mrg UNSPEC_ADDSC)) 181 1.5 mrg (set (reg:CCDSP CCDSP_CA_REGNUM) 182 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDSC))] 183 1.1 mrg "ISA_HAS_DSP" 184 1.1 mrg "addsc\t%0,%1,%2" 185 1.3 mrg [(set_attr "type" "dspalu") 186 1.1 mrg (set_attr "mode" "SI")]) 187 1.1 mrg 188 1.1 mrg ;; ADDWC 189 1.1 mrg (define_insn "mips_addwc" 190 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d") 191 1.5 mrg (unspec:SI [(match_operand:SI 1 "register_operand" "d") 192 1.5 mrg (match_operand:SI 2 "register_operand" "d") 193 1.5 mrg (reg:CCDSP CCDSP_CA_REGNUM)] 194 1.5 mrg UNSPEC_ADDWC)) 195 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 196 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_ADDWC))] 197 1.1 mrg "ISA_HAS_DSP" 198 1.1 mrg "addwc\t%0,%1,%2" 199 1.3 mrg [(set_attr "type" "dspalu") 200 1.1 mrg (set_attr "mode" "SI")]) 201 1.1 mrg 202 1.1 mrg ;; MODSUB 203 1.1 mrg (define_insn "mips_modsub" 204 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 205 1.1 mrg (unspec:SI [(match_operand:SI 1 "register_operand" "d") 206 1.1 mrg (match_operand:SI 2 "register_operand" "d")] 207 1.1 mrg UNSPEC_MODSUB))] 208 1.1 mrg "ISA_HAS_DSP" 209 1.1 mrg "modsub\t%0,%1,%2" 210 1.3 mrg [(set_attr "type" "dspalu") 211 1.1 mrg (set_attr "mode" "SI")]) 212 1.1 mrg 213 1.1 mrg ;; RADDU* 214 1.1 mrg (define_insn "mips_raddu_w_qb" 215 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 216 1.1 mrg (unspec:SI [(match_operand:V4QI 1 "register_operand" "d")] 217 1.1 mrg UNSPEC_RADDU_W_QB))] 218 1.1 mrg "ISA_HAS_DSP" 219 1.1 mrg "raddu.w.qb\t%0,%1" 220 1.3 mrg [(set_attr "type" "dspalu") 221 1.1 mrg (set_attr "mode" "SI")]) 222 1.1 mrg 223 1.1 mrg ;; ABSQ* 224 1.1 mrg (define_insn "mips_absq_s_<DSPQ:dspfmt2>" 225 1.5 mrg [(set (match_operand:DSPQ 0 "register_operand" "=d") 226 1.5 mrg (unspec:DSPQ [(match_operand:DSPQ 1 "register_operand" "d")] 227 1.5 mrg UNSPEC_ABSQ_S)) 228 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 229 1.5 mrg (unspec:CCDSP [(match_dup 1)] UNSPEC_ABSQ_S))] 230 1.1 mrg "ISA_HAS_DSP" 231 1.1 mrg "absq_s.<DSPQ:dspfmt2>\t%0,%1" 232 1.3 mrg [(set_attr "type" "dspalusat") 233 1.1 mrg (set_attr "mode" "SI")]) 234 1.1 mrg 235 1.1 mrg ;; PRECRQ* 236 1.1 mrg (define_insn "mips_precrq_qb_ph" 237 1.1 mrg [(set (match_operand:V4QI 0 "register_operand" "=d") 238 1.1 mrg (unspec:V4QI [(match_operand:V2HI 1 "register_operand" "d") 239 1.1 mrg (match_operand:V2HI 2 "register_operand" "d")] 240 1.1 mrg UNSPEC_PRECRQ_QB_PH))] 241 1.1 mrg "ISA_HAS_DSP" 242 1.1 mrg "precrq.qb.ph\t%0,%1,%2" 243 1.3 mrg [(set_attr "type" "dspalu") 244 1.1 mrg (set_attr "mode" "SI")]) 245 1.1 mrg 246 1.1 mrg (define_insn "mips_precrq_ph_w" 247 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 248 1.1 mrg (unspec:V2HI [(match_operand:SI 1 "register_operand" "d") 249 1.1 mrg (match_operand:SI 2 "register_operand" "d")] 250 1.1 mrg UNSPEC_PRECRQ_PH_W))] 251 1.1 mrg "ISA_HAS_DSP" 252 1.1 mrg "precrq.ph.w\t%0,%1,%2" 253 1.3 mrg [(set_attr "type" "dspalu") 254 1.1 mrg (set_attr "mode" "SI")]) 255 1.1 mrg 256 1.1 mrg (define_insn "mips_precrq_rs_ph_w" 257 1.5 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 258 1.5 mrg (unspec:V2HI [(match_operand:SI 1 "register_operand" "d") 259 1.5 mrg (match_operand:SI 2 "register_operand" "d")] 260 1.5 mrg UNSPEC_PRECRQ_RS_PH_W)) 261 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 262 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] 263 1.5 mrg UNSPEC_PRECRQ_RS_PH_W))] 264 1.1 mrg "ISA_HAS_DSP" 265 1.1 mrg "precrq_rs.ph.w\t%0,%1,%2" 266 1.3 mrg [(set_attr "type" "dspalu") 267 1.1 mrg (set_attr "mode" "SI")]) 268 1.1 mrg 269 1.1 mrg ;; PRECRQU* 270 1.1 mrg (define_insn "mips_precrqu_s_qb_ph" 271 1.5 mrg [(set (match_operand:V4QI 0 "register_operand" "=d") 272 1.5 mrg (unspec:V4QI [(match_operand:V2HI 1 "register_operand" "d") 273 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 274 1.5 mrg UNSPEC_PRECRQU_S_QB_PH)) 275 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 276 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] 277 1.5 mrg UNSPEC_PRECRQU_S_QB_PH))] 278 1.1 mrg "ISA_HAS_DSP" 279 1.1 mrg "precrqu_s.qb.ph\t%0,%1,%2" 280 1.3 mrg [(set_attr "type" "dspalusat") 281 1.1 mrg (set_attr "mode" "SI")]) 282 1.1 mrg 283 1.1 mrg ;; PRECEQ* 284 1.1 mrg (define_insn "mips_preceq_w_phl" 285 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 286 1.1 mrg (unspec:SI [(match_operand:V2HI 1 "register_operand" "d")] 287 1.1 mrg UNSPEC_PRECEQ_W_PHL))] 288 1.1 mrg "ISA_HAS_DSP" 289 1.1 mrg "preceq.w.phl\t%0,%1" 290 1.3 mrg [(set_attr "type" "dspalu") 291 1.1 mrg (set_attr "mode" "SI")]) 292 1.1 mrg 293 1.1 mrg (define_insn "mips_preceq_w_phr" 294 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 295 1.1 mrg (unspec:SI [(match_operand:V2HI 1 "register_operand" "d")] 296 1.1 mrg UNSPEC_PRECEQ_W_PHR))] 297 1.1 mrg "ISA_HAS_DSP" 298 1.1 mrg "preceq.w.phr\t%0,%1" 299 1.3 mrg [(set_attr "type" "dspalu") 300 1.1 mrg (set_attr "mode" "SI")]) 301 1.1 mrg 302 1.1 mrg ;; PRECEQU* 303 1.1 mrg (define_insn "mips_precequ_ph_qbl" 304 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 305 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 306 1.1 mrg UNSPEC_PRECEQU_PH_QBL))] 307 1.1 mrg "ISA_HAS_DSP" 308 1.1 mrg "precequ.ph.qbl\t%0,%1" 309 1.3 mrg [(set_attr "type" "dspalu") 310 1.1 mrg (set_attr "mode" "SI")]) 311 1.1 mrg 312 1.1 mrg (define_insn "mips_precequ_ph_qbr" 313 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 314 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 315 1.1 mrg UNSPEC_PRECEQU_PH_QBR))] 316 1.1 mrg "ISA_HAS_DSP" 317 1.1 mrg "precequ.ph.qbr\t%0,%1" 318 1.3 mrg [(set_attr "type" "dspalu") 319 1.1 mrg (set_attr "mode" "SI")]) 320 1.1 mrg 321 1.1 mrg (define_insn "mips_precequ_ph_qbla" 322 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 323 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 324 1.1 mrg UNSPEC_PRECEQU_PH_QBLA))] 325 1.1 mrg "ISA_HAS_DSP" 326 1.1 mrg "precequ.ph.qbla\t%0,%1" 327 1.3 mrg [(set_attr "type" "dspalu") 328 1.1 mrg (set_attr "mode" "SI")]) 329 1.1 mrg 330 1.1 mrg (define_insn "mips_precequ_ph_qbra" 331 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 332 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 333 1.1 mrg UNSPEC_PRECEQU_PH_QBRA))] 334 1.1 mrg "ISA_HAS_DSP" 335 1.1 mrg "precequ.ph.qbra\t%0,%1" 336 1.3 mrg [(set_attr "type" "dspalu") 337 1.1 mrg (set_attr "mode" "SI")]) 338 1.1 mrg 339 1.1 mrg ;; PRECEU* 340 1.1 mrg (define_insn "mips_preceu_ph_qbl" 341 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 342 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 343 1.1 mrg UNSPEC_PRECEU_PH_QBL))] 344 1.1 mrg "ISA_HAS_DSP" 345 1.1 mrg "preceu.ph.qbl\t%0,%1" 346 1.3 mrg [(set_attr "type" "dspalu") 347 1.1 mrg (set_attr "mode" "SI")]) 348 1.1 mrg 349 1.1 mrg (define_insn "mips_preceu_ph_qbr" 350 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 351 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 352 1.1 mrg UNSPEC_PRECEU_PH_QBR))] 353 1.1 mrg "ISA_HAS_DSP" 354 1.1 mrg "preceu.ph.qbr\t%0,%1" 355 1.3 mrg [(set_attr "type" "dspalu") 356 1.1 mrg (set_attr "mode" "SI")]) 357 1.1 mrg 358 1.1 mrg (define_insn "mips_preceu_ph_qbla" 359 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 360 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 361 1.1 mrg UNSPEC_PRECEU_PH_QBLA))] 362 1.1 mrg "ISA_HAS_DSP" 363 1.1 mrg "preceu.ph.qbla\t%0,%1" 364 1.3 mrg [(set_attr "type" "dspalu") 365 1.1 mrg (set_attr "mode" "SI")]) 366 1.1 mrg 367 1.1 mrg (define_insn "mips_preceu_ph_qbra" 368 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 369 1.1 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d")] 370 1.1 mrg UNSPEC_PRECEU_PH_QBRA))] 371 1.1 mrg "ISA_HAS_DSP" 372 1.1 mrg "preceu.ph.qbra\t%0,%1" 373 1.3 mrg [(set_attr "type" "dspalu") 374 1.1 mrg (set_attr "mode" "SI")]) 375 1.1 mrg 376 1.1 mrg ;; Table 2-2. MIPS DSP ASE Instructions: Shift 377 1.1 mrg ;; SHLL* 378 1.1 mrg (define_insn "mips_shll_<DSPV:dspfmt2>" 379 1.5 mrg [(set (match_operand:DSPV 0 "register_operand" "=d,d") 380 1.5 mrg (unspec:DSPV [(match_operand:DSPV 1 "register_operand" "d,d") 381 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 382 1.5 mrg UNSPEC_SHLL)) 383 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 384 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SHLL))] 385 1.1 mrg "ISA_HAS_DSP" 386 1.1 mrg { 387 1.1 mrg if (which_alternative == 0) 388 1.1 mrg { 389 1.1 mrg if (INTVAL (operands[2]) 390 1.1 mrg & ~(unsigned HOST_WIDE_INT) <DSPV:dspshift_mask>) 391 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & <DSPV:dspshift_mask>); 392 1.1 mrg return "shll.<DSPV:dspfmt2>\t%0,%1,%2"; 393 1.1 mrg } 394 1.1 mrg return "shllv.<DSPV:dspfmt2>\t%0,%1,%2"; 395 1.1 mrg } 396 1.3 mrg [(set_attr "type" "dspalu") 397 1.1 mrg (set_attr "mode" "SI")]) 398 1.1 mrg 399 1.1 mrg (define_insn "mips_shll_s_<DSPQ:dspfmt2>" 400 1.5 mrg [(set (match_operand:DSPQ 0 "register_operand" "=d,d") 401 1.5 mrg (unspec:DSPQ [(match_operand:DSPQ 1 "register_operand" "d,d") 402 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 403 1.5 mrg UNSPEC_SHLL_S)) 404 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 405 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_SHLL_S))] 406 1.1 mrg "ISA_HAS_DSP" 407 1.1 mrg { 408 1.1 mrg if (which_alternative == 0) 409 1.1 mrg { 410 1.1 mrg if (INTVAL (operands[2]) 411 1.1 mrg & ~(unsigned HOST_WIDE_INT) <DSPQ:dspshift_mask>) 412 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & <DSPQ:dspshift_mask>); 413 1.1 mrg return "shll_s.<DSPQ:dspfmt2>\t%0,%1,%2"; 414 1.1 mrg } 415 1.1 mrg return "shllv_s.<DSPQ:dspfmt2>\t%0,%1,%2"; 416 1.1 mrg } 417 1.3 mrg [(set_attr "type" "dspalusat") 418 1.1 mrg (set_attr "mode" "SI")]) 419 1.1 mrg 420 1.1 mrg ;; SHRL* 421 1.1 mrg (define_insn "mips_shrl_qb" 422 1.1 mrg [(set (match_operand:V4QI 0 "register_operand" "=d,d") 423 1.1 mrg (unspec:V4QI [(match_operand:V4QI 1 "register_operand" "d,d") 424 1.1 mrg (match_operand:SI 2 "arith_operand" "I,d")] 425 1.1 mrg UNSPEC_SHRL_QB))] 426 1.1 mrg "ISA_HAS_DSP" 427 1.1 mrg { 428 1.1 mrg if (which_alternative == 0) 429 1.1 mrg { 430 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x7) 431 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x7); 432 1.1 mrg return "shrl.qb\t%0,%1,%2"; 433 1.1 mrg } 434 1.1 mrg return "shrlv.qb\t%0,%1,%2"; 435 1.1 mrg } 436 1.3 mrg [(set_attr "type" "dspalu") 437 1.1 mrg (set_attr "mode" "SI")]) 438 1.1 mrg 439 1.1 mrg ;; SHRA* 440 1.1 mrg (define_insn "mips_shra_ph" 441 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d,d") 442 1.1 mrg (unspec:V2HI [(match_operand:V2HI 1 "register_operand" "d,d") 443 1.1 mrg (match_operand:SI 2 "arith_operand" "I,d")] 444 1.1 mrg UNSPEC_SHRA_PH))] 445 1.1 mrg "ISA_HAS_DSP" 446 1.1 mrg { 447 1.1 mrg if (which_alternative == 0) 448 1.1 mrg { 449 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0xf) 450 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0xf); 451 1.1 mrg return "shra.ph\t%0,%1,%2"; 452 1.1 mrg } 453 1.1 mrg return "shrav.ph\t%0,%1,%2"; 454 1.1 mrg } 455 1.3 mrg [(set_attr "type" "dspalu") 456 1.1 mrg (set_attr "mode" "SI")]) 457 1.1 mrg 458 1.1 mrg (define_insn "mips_shra_r_<DSPQ:dspfmt2>" 459 1.1 mrg [(set (match_operand:DSPQ 0 "register_operand" "=d,d") 460 1.1 mrg (unspec:DSPQ [(match_operand:DSPQ 1 "register_operand" "d,d") 461 1.1 mrg (match_operand:SI 2 "arith_operand" "I,d")] 462 1.1 mrg UNSPEC_SHRA_R))] 463 1.1 mrg "ISA_HAS_DSP" 464 1.1 mrg { 465 1.1 mrg if (which_alternative == 0) 466 1.1 mrg { 467 1.1 mrg if (INTVAL (operands[2]) 468 1.1 mrg & ~(unsigned HOST_WIDE_INT) <DSPQ:dspshift_mask>) 469 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & <DSPQ:dspshift_mask>); 470 1.1 mrg return "shra_r.<DSPQ:dspfmt2>\t%0,%1,%2"; 471 1.1 mrg } 472 1.1 mrg return "shrav_r.<DSPQ:dspfmt2>\t%0,%1,%2"; 473 1.1 mrg } 474 1.3 mrg [(set_attr "type" "dspalu") 475 1.1 mrg (set_attr "mode" "SI")]) 476 1.1 mrg 477 1.1 mrg ;; Table 2-3. MIPS DSP ASE Instructions: Multiply 478 1.1 mrg ;; MULEU* 479 1.1 mrg (define_insn "mips_muleu_s_ph_qbl" 480 1.5 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 481 1.5 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d") 482 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 483 1.5 mrg UNSPEC_MULEU_S_PH_QBL)) 484 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 485 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULEU_S_PH_QBL)) 486 1.5 mrg (clobber (match_scratch:DI 3 "=x"))] 487 1.1 mrg "ISA_HAS_DSP" 488 1.1 mrg "muleu_s.ph.qbl\t%0,%1,%2" 489 1.1 mrg [(set_attr "type" "imul3") 490 1.1 mrg (set_attr "mode" "SI")]) 491 1.1 mrg 492 1.1 mrg (define_insn "mips_muleu_s_ph_qbr" 493 1.5 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 494 1.5 mrg (unspec:V2HI [(match_operand:V4QI 1 "register_operand" "d") 495 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 496 1.5 mrg UNSPEC_MULEU_S_PH_QBR)) 497 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 498 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULEU_S_PH_QBR)) 499 1.5 mrg (clobber (match_scratch:DI 3 "=x"))] 500 1.1 mrg "ISA_HAS_DSP" 501 1.1 mrg "muleu_s.ph.qbr\t%0,%1,%2" 502 1.1 mrg [(set_attr "type" "imul3") 503 1.1 mrg (set_attr "mode" "SI")]) 504 1.1 mrg 505 1.1 mrg ;; MULQ* 506 1.1 mrg (define_insn "mips_mulq_rs_ph" 507 1.5 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 508 1.5 mrg (unspec:V2HI [(match_operand:V2HI 1 "register_operand" "d") 509 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 510 1.5 mrg UNSPEC_MULQ_RS_PH)) 511 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 512 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULQ_RS_PH)) 513 1.5 mrg (clobber (match_scratch:DI 3 "=x"))] 514 1.1 mrg "ISA_HAS_DSP" 515 1.1 mrg "mulq_rs.ph\t%0,%1,%2" 516 1.1 mrg [(set_attr "type" "imul3") 517 1.1 mrg (set_attr "mode" "SI")]) 518 1.1 mrg 519 1.1 mrg ;; MULEQ* 520 1.1 mrg (define_insn "mips_muleq_s_w_phl" 521 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d") 522 1.5 mrg (unspec:SI [(match_operand:V2HI 1 "register_operand" "d") 523 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 524 1.5 mrg UNSPEC_MULEQ_S_W_PHL)) 525 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 526 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULEQ_S_W_PHL)) 527 1.5 mrg (clobber (match_scratch:DI 3 "=x"))] 528 1.1 mrg "ISA_HAS_DSP" 529 1.1 mrg "muleq_s.w.phl\t%0,%1,%2" 530 1.1 mrg [(set_attr "type" "imul3") 531 1.1 mrg (set_attr "mode" "SI")]) 532 1.1 mrg 533 1.1 mrg (define_insn "mips_muleq_s_w_phr" 534 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d") 535 1.5 mrg (unspec:SI [(match_operand:V2HI 1 "register_operand" "d") 536 1.5 mrg (match_operand:V2HI 2 "register_operand" "d")] 537 1.5 mrg UNSPEC_MULEQ_S_W_PHR)) 538 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 539 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_MULEQ_S_W_PHR)) 540 1.5 mrg (clobber (match_scratch:DI 3 "=x"))] 541 1.1 mrg "ISA_HAS_DSP" 542 1.1 mrg "muleq_s.w.phr\t%0,%1,%2" 543 1.1 mrg [(set_attr "type" "imul3") 544 1.1 mrg (set_attr "mode" "SI")]) 545 1.1 mrg 546 1.1 mrg ;; DPAU* 547 1.1 mrg (define_insn "mips_dpau_h_qbl" 548 1.1 mrg [(set (match_operand:DI 0 "register_operand" "=a") 549 1.1 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 550 1.1 mrg (match_operand:V4QI 2 "register_operand" "d") 551 1.1 mrg (match_operand:V4QI 3 "register_operand" "d")] 552 1.1 mrg UNSPEC_DPAU_H_QBL))] 553 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 554 1.1 mrg "dpau.h.qbl\t%q0,%2,%3" 555 1.3 mrg [(set_attr "type" "dspmac") 556 1.3 mrg (set_attr "accum_in" "1") 557 1.1 mrg (set_attr "mode" "SI")]) 558 1.1 mrg 559 1.1 mrg (define_insn "mips_dpau_h_qbr" 560 1.1 mrg [(set (match_operand:DI 0 "register_operand" "=a") 561 1.1 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 562 1.1 mrg (match_operand:V4QI 2 "register_operand" "d") 563 1.1 mrg (match_operand:V4QI 3 "register_operand" "d")] 564 1.1 mrg UNSPEC_DPAU_H_QBR))] 565 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 566 1.1 mrg "dpau.h.qbr\t%q0,%2,%3" 567 1.3 mrg [(set_attr "type" "dspmac") 568 1.3 mrg (set_attr "accum_in" "1") 569 1.1 mrg (set_attr "mode" "SI")]) 570 1.1 mrg 571 1.1 mrg ;; DPSU* 572 1.1 mrg (define_insn "mips_dpsu_h_qbl" 573 1.1 mrg [(set (match_operand:DI 0 "register_operand" "=a") 574 1.1 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 575 1.1 mrg (match_operand:V4QI 2 "register_operand" "d") 576 1.1 mrg (match_operand:V4QI 3 "register_operand" "d")] 577 1.1 mrg UNSPEC_DPSU_H_QBL))] 578 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 579 1.1 mrg "dpsu.h.qbl\t%q0,%2,%3" 580 1.3 mrg [(set_attr "type" "dspmac") 581 1.3 mrg (set_attr "accum_in" "1") 582 1.1 mrg (set_attr "mode" "SI")]) 583 1.1 mrg 584 1.1 mrg (define_insn "mips_dpsu_h_qbr" 585 1.1 mrg [(set (match_operand:DI 0 "register_operand" "=a") 586 1.1 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 587 1.1 mrg (match_operand:V4QI 2 "register_operand" "d") 588 1.1 mrg (match_operand:V4QI 3 "register_operand" "d")] 589 1.1 mrg UNSPEC_DPSU_H_QBR))] 590 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 591 1.1 mrg "dpsu.h.qbr\t%q0,%2,%3" 592 1.3 mrg [(set_attr "type" "dspmac") 593 1.3 mrg (set_attr "accum_in" "1") 594 1.1 mrg (set_attr "mode" "SI")]) 595 1.1 mrg 596 1.1 mrg ;; DPAQ* 597 1.1 mrg (define_insn "mips_dpaq_s_w_ph" 598 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 599 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 600 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 601 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 602 1.5 mrg UNSPEC_DPAQ_S_W_PH)) 603 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 604 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 605 1.5 mrg UNSPEC_DPAQ_S_W_PH))] 606 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 607 1.1 mrg "dpaq_s.w.ph\t%q0,%2,%3" 608 1.3 mrg [(set_attr "type" "dspmac") 609 1.3 mrg (set_attr "accum_in" "1") 610 1.1 mrg (set_attr "mode" "SI")]) 611 1.1 mrg 612 1.1 mrg ;; DPSQ* 613 1.1 mrg (define_insn "mips_dpsq_s_w_ph" 614 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 615 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 616 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 617 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 618 1.5 mrg UNSPEC_DPSQ_S_W_PH)) 619 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 620 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 621 1.5 mrg UNSPEC_DPSQ_S_W_PH))] 622 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 623 1.1 mrg "dpsq_s.w.ph\t%q0,%2,%3" 624 1.3 mrg [(set_attr "type" "dspmac") 625 1.3 mrg (set_attr "accum_in" "1") 626 1.1 mrg (set_attr "mode" "SI")]) 627 1.1 mrg 628 1.1 mrg ;; MULSAQ* 629 1.1 mrg (define_insn "mips_mulsaq_s_w_ph" 630 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 631 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 632 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 633 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 634 1.5 mrg UNSPEC_MULSAQ_S_W_PH)) 635 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 636 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 637 1.5 mrg UNSPEC_MULSAQ_S_W_PH))] 638 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 639 1.1 mrg "mulsaq_s.w.ph\t%q0,%2,%3" 640 1.3 mrg [(set_attr "type" "dspmac") 641 1.3 mrg (set_attr "accum_in" "1") 642 1.1 mrg (set_attr "mode" "SI")]) 643 1.1 mrg 644 1.1 mrg ;; DPAQ* 645 1.1 mrg (define_insn "mips_dpaq_sa_l_w" 646 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 647 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 648 1.5 mrg (match_operand:SI 2 "register_operand" "d") 649 1.5 mrg (match_operand:SI 3 "register_operand" "d")] 650 1.5 mrg UNSPEC_DPAQ_SA_L_W)) 651 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 652 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 653 1.5 mrg UNSPEC_DPAQ_SA_L_W))] 654 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 655 1.1 mrg "dpaq_sa.l.w\t%q0,%2,%3" 656 1.3 mrg [(set_attr "type" "dspmacsat") 657 1.3 mrg (set_attr "accum_in" "1") 658 1.1 mrg (set_attr "mode" "SI")]) 659 1.1 mrg 660 1.1 mrg ;; DPSQ* 661 1.1 mrg (define_insn "mips_dpsq_sa_l_w" 662 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 663 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 664 1.5 mrg (match_operand:SI 2 "register_operand" "d") 665 1.5 mrg (match_operand:SI 3 "register_operand" "d")] 666 1.5 mrg UNSPEC_DPSQ_SA_L_W)) 667 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 668 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 669 1.5 mrg UNSPEC_DPSQ_SA_L_W))] 670 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 671 1.1 mrg "dpsq_sa.l.w\t%q0,%2,%3" 672 1.3 mrg [(set_attr "type" "dspmacsat") 673 1.3 mrg (set_attr "accum_in" "1") 674 1.1 mrg (set_attr "mode" "SI")]) 675 1.1 mrg 676 1.1 mrg ;; MAQ* 677 1.1 mrg (define_insn "mips_maq_s_w_phl" 678 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 679 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 680 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 681 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 682 1.5 mrg UNSPEC_MAQ_S_W_PHL)) 683 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 684 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 685 1.5 mrg UNSPEC_MAQ_S_W_PHL))] 686 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 687 1.1 mrg "maq_s.w.phl\t%q0,%2,%3" 688 1.3 mrg [(set_attr "type" "dspmac") 689 1.3 mrg (set_attr "accum_in" "1") 690 1.1 mrg (set_attr "mode" "SI")]) 691 1.1 mrg 692 1.1 mrg (define_insn "mips_maq_s_w_phr" 693 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 694 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 695 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 696 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 697 1.5 mrg UNSPEC_MAQ_S_W_PHR)) 698 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 699 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 700 1.5 mrg UNSPEC_MAQ_S_W_PHR))] 701 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 702 1.1 mrg "maq_s.w.phr\t%q0,%2,%3" 703 1.3 mrg [(set_attr "type" "dspmac") 704 1.3 mrg (set_attr "accum_in" "1") 705 1.1 mrg (set_attr "mode" "SI")]) 706 1.1 mrg 707 1.1 mrg ;; MAQ_SA* 708 1.1 mrg (define_insn "mips_maq_sa_w_phl" 709 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 710 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 711 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 712 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 713 1.5 mrg UNSPEC_MAQ_SA_W_PHL)) 714 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 715 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 716 1.5 mrg UNSPEC_MAQ_SA_W_PHL))] 717 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 718 1.1 mrg "maq_sa.w.phl\t%q0,%2,%3" 719 1.3 mrg [(set_attr "type" "dspmacsat") 720 1.3 mrg (set_attr "accum_in" "1") 721 1.1 mrg (set_attr "mode" "SI")]) 722 1.1 mrg 723 1.1 mrg (define_insn "mips_maq_sa_w_phr" 724 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 725 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 726 1.5 mrg (match_operand:V2HI 2 "register_operand" "d") 727 1.5 mrg (match_operand:V2HI 3 "register_operand" "d")] 728 1.5 mrg UNSPEC_MAQ_SA_W_PHR)) 729 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 730 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) (match_dup 3)] 731 1.5 mrg UNSPEC_MAQ_SA_W_PHR))] 732 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 733 1.1 mrg "maq_sa.w.phr\t%q0,%2,%3" 734 1.3 mrg [(set_attr "type" "dspmacsat") 735 1.3 mrg (set_attr "accum_in" "1") 736 1.1 mrg (set_attr "mode" "SI")]) 737 1.1 mrg 738 1.1 mrg ;; Table 2-4. MIPS DSP ASE Instructions: General Bit/Manipulation 739 1.1 mrg ;; BITREV 740 1.1 mrg (define_insn "mips_bitrev" 741 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 742 1.1 mrg (unspec:SI [(match_operand:SI 1 "register_operand" "d")] 743 1.1 mrg UNSPEC_BITREV))] 744 1.1 mrg "ISA_HAS_DSP" 745 1.1 mrg "bitrev\t%0,%1" 746 1.3 mrg [(set_attr "type" "dspalu") 747 1.1 mrg (set_attr "mode" "SI")]) 748 1.1 mrg 749 1.1 mrg ;; INSV 750 1.1 mrg (define_insn "mips_insv" 751 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 752 1.1 mrg (unspec:SI [(match_operand:SI 1 "register_operand" "0") 753 1.1 mrg (match_operand:SI 2 "register_operand" "d") 754 1.1 mrg (reg:CCDSP CCDSP_SC_REGNUM) 755 1.1 mrg (reg:CCDSP CCDSP_PO_REGNUM)] 756 1.1 mrg UNSPEC_INSV))] 757 1.1 mrg "ISA_HAS_DSP" 758 1.1 mrg "insv\t%0,%2" 759 1.3 mrg [(set_attr "type" "dspalu") 760 1.1 mrg (set_attr "mode" "SI")]) 761 1.1 mrg 762 1.1 mrg ;; REPL* 763 1.1 mrg (define_insn "mips_repl_qb" 764 1.1 mrg [(set (match_operand:V4QI 0 "register_operand" "=d,d") 765 1.1 mrg (unspec:V4QI [(match_operand:SI 1 "arith_operand" "I,d")] 766 1.1 mrg UNSPEC_REPL_QB))] 767 1.1 mrg "ISA_HAS_DSP" 768 1.1 mrg { 769 1.1 mrg if (which_alternative == 0) 770 1.1 mrg { 771 1.1 mrg if (INTVAL (operands[1]) & ~(unsigned HOST_WIDE_INT) 0xff) 772 1.1 mrg operands[1] = GEN_INT (INTVAL (operands[1]) & 0xff); 773 1.1 mrg return "repl.qb\t%0,%1"; 774 1.1 mrg } 775 1.1 mrg return "replv.qb\t%0,%1"; 776 1.1 mrg } 777 1.3 mrg [(set_attr "type" "dspalu") 778 1.1 mrg (set_attr "mode" "SI")]) 779 1.1 mrg 780 1.1 mrg (define_insn "mips_repl_ph" 781 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d,d") 782 1.1 mrg (unspec:V2HI [(match_operand:SI 1 "reg_imm10_operand" "YB,d")] 783 1.1 mrg UNSPEC_REPL_PH))] 784 1.1 mrg "ISA_HAS_DSP" 785 1.1 mrg "@ 786 1.1 mrg repl.ph\t%0,%1 787 1.1 mrg replv.ph\t%0,%1" 788 1.3 mrg [(set_attr "type" "dspalu") 789 1.1 mrg (set_attr "mode" "SI")]) 790 1.1 mrg 791 1.1 mrg ;; Table 2-5. MIPS DSP ASE Instructions: Compare-Pick 792 1.1 mrg ;; CMPU.* CMP.* 793 1.1 mrg (define_insn "mips_cmp<DSPV:dspfmt1_1>_eq_<DSPV:dspfmt2>" 794 1.1 mrg [(set (reg:CCDSP CCDSP_CC_REGNUM) 795 1.1 mrg (unspec:CCDSP [(match_operand:DSPV 0 "register_operand" "d") 796 1.1 mrg (match_operand:DSPV 1 "register_operand" "d") 797 1.1 mrg (reg:CCDSP CCDSP_CC_REGNUM)] 798 1.1 mrg UNSPEC_CMP_EQ))] 799 1.1 mrg "ISA_HAS_DSP" 800 1.1 mrg "cmp<DSPV:dspfmt1_1>.eq.<DSPV:dspfmt2>\t%0,%1" 801 1.3 mrg [(set_attr "type" "dspalu") 802 1.1 mrg (set_attr "mode" "SI")]) 803 1.1 mrg 804 1.1 mrg (define_insn "mips_cmp<DSPV:dspfmt1_1>_lt_<DSPV:dspfmt2>" 805 1.1 mrg [(set (reg:CCDSP CCDSP_CC_REGNUM) 806 1.1 mrg (unspec:CCDSP [(match_operand:DSPV 0 "register_operand" "d") 807 1.1 mrg (match_operand:DSPV 1 "register_operand" "d") 808 1.1 mrg (reg:CCDSP CCDSP_CC_REGNUM)] 809 1.1 mrg UNSPEC_CMP_LT))] 810 1.1 mrg "ISA_HAS_DSP" 811 1.1 mrg "cmp<DSPV:dspfmt1_1>.lt.<DSPV:dspfmt2>\t%0,%1" 812 1.3 mrg [(set_attr "type" "dspalu") 813 1.1 mrg (set_attr "mode" "SI")]) 814 1.1 mrg 815 1.1 mrg (define_insn "mips_cmp<DSPV:dspfmt1_1>_le_<DSPV:dspfmt2>" 816 1.1 mrg [(set (reg:CCDSP CCDSP_CC_REGNUM) 817 1.1 mrg (unspec:CCDSP [(match_operand:DSPV 0 "register_operand" "d") 818 1.1 mrg (match_operand:DSPV 1 "register_operand" "d") 819 1.1 mrg (reg:CCDSP CCDSP_CC_REGNUM)] 820 1.1 mrg UNSPEC_CMP_LE))] 821 1.1 mrg "ISA_HAS_DSP" 822 1.1 mrg "cmp<DSPV:dspfmt1_1>.le.<DSPV:dspfmt2>\t%0,%1" 823 1.3 mrg [(set_attr "type" "dspalu") 824 1.1 mrg (set_attr "mode" "SI")]) 825 1.1 mrg 826 1.1 mrg (define_insn "mips_cmpgu_eq_qb" 827 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 828 1.1 mrg (unspec:SI [(match_operand:V4QI 1 "register_operand" "d") 829 1.1 mrg (match_operand:V4QI 2 "register_operand" "d")] 830 1.1 mrg UNSPEC_CMPGU_EQ_QB))] 831 1.1 mrg "ISA_HAS_DSP" 832 1.1 mrg "cmpgu.eq.qb\t%0,%1,%2" 833 1.3 mrg [(set_attr "type" "dspalu") 834 1.1 mrg (set_attr "mode" "SI")]) 835 1.1 mrg 836 1.1 mrg (define_insn "mips_cmpgu_lt_qb" 837 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 838 1.1 mrg (unspec:SI [(match_operand:V4QI 1 "register_operand" "d") 839 1.1 mrg (match_operand:V4QI 2 "register_operand" "d")] 840 1.1 mrg UNSPEC_CMPGU_LT_QB))] 841 1.1 mrg "ISA_HAS_DSP" 842 1.1 mrg "cmpgu.lt.qb\t%0,%1,%2" 843 1.3 mrg [(set_attr "type" "dspalu") 844 1.1 mrg (set_attr "mode" "SI")]) 845 1.1 mrg 846 1.1 mrg (define_insn "mips_cmpgu_le_qb" 847 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 848 1.1 mrg (unspec:SI [(match_operand:V4QI 1 "register_operand" "d") 849 1.1 mrg (match_operand:V4QI 2 "register_operand" "d")] 850 1.1 mrg UNSPEC_CMPGU_LE_QB))] 851 1.1 mrg "ISA_HAS_DSP" 852 1.1 mrg "cmpgu.le.qb\t%0,%1,%2" 853 1.3 mrg [(set_attr "type" "dspalu") 854 1.1 mrg (set_attr "mode" "SI")]) 855 1.1 mrg 856 1.1 mrg ;; PICK* 857 1.1 mrg (define_insn "mips_pick_<DSPV:dspfmt2>" 858 1.1 mrg [(set (match_operand:DSPV 0 "register_operand" "=d") 859 1.1 mrg (unspec:DSPV [(match_operand:DSPV 1 "register_operand" "d") 860 1.1 mrg (match_operand:DSPV 2 "register_operand" "d") 861 1.1 mrg (reg:CCDSP CCDSP_CC_REGNUM)] 862 1.1 mrg UNSPEC_PICK))] 863 1.1 mrg "ISA_HAS_DSP" 864 1.1 mrg "pick.<DSPV:dspfmt2>\t%0,%1,%2" 865 1.3 mrg [(set_attr "type" "dspalu") 866 1.1 mrg (set_attr "mode" "SI")]) 867 1.1 mrg 868 1.1 mrg ;; PACKRL* 869 1.1 mrg (define_insn "mips_packrl_ph" 870 1.1 mrg [(set (match_operand:V2HI 0 "register_operand" "=d") 871 1.1 mrg (unspec:V2HI [(match_operand:V2HI 1 "register_operand" "d") 872 1.1 mrg (match_operand:V2HI 2 "register_operand" "d")] 873 1.1 mrg UNSPEC_PACKRL_PH))] 874 1.1 mrg "ISA_HAS_DSP" 875 1.1 mrg "packrl.ph\t%0,%1,%2" 876 1.3 mrg [(set_attr "type" "dspalu") 877 1.1 mrg (set_attr "mode" "SI")]) 878 1.1 mrg 879 1.1 mrg ;; Table 2-6. MIPS DSP ASE Instructions: Accumulator and DSPControl Access 880 1.1 mrg ;; EXTR* 881 1.1 mrg (define_insn "mips_extr_w" 882 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 883 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 884 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 885 1.5 mrg UNSPEC_EXTR_W)) 886 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 887 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTR_W))] 888 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 889 1.1 mrg { 890 1.1 mrg if (which_alternative == 0) 891 1.1 mrg { 892 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 893 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 894 1.1 mrg return "extr.w\t%0,%q1,%2"; 895 1.1 mrg } 896 1.1 mrg return "extrv.w\t%0,%q1,%2"; 897 1.1 mrg } 898 1.3 mrg [(set_attr "type" "accext") 899 1.1 mrg (set_attr "mode" "SI")]) 900 1.1 mrg 901 1.1 mrg (define_insn "mips_extr_r_w" 902 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 903 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 904 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 905 1.5 mrg UNSPEC_EXTR_R_W)) 906 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 907 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTR_R_W))] 908 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 909 1.1 mrg { 910 1.1 mrg if (which_alternative == 0) 911 1.1 mrg { 912 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 913 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 914 1.1 mrg return "extr_r.w\t%0,%q1,%2"; 915 1.1 mrg } 916 1.1 mrg return "extrv_r.w\t%0,%q1,%2"; 917 1.1 mrg } 918 1.3 mrg [(set_attr "type" "accext") 919 1.1 mrg (set_attr "mode" "SI")]) 920 1.1 mrg 921 1.1 mrg (define_insn "mips_extr_rs_w" 922 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 923 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 924 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 925 1.5 mrg UNSPEC_EXTR_RS_W)) 926 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 927 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTR_RS_W))] 928 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 929 1.1 mrg { 930 1.1 mrg if (which_alternative == 0) 931 1.1 mrg { 932 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 933 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 934 1.1 mrg return "extr_rs.w\t%0,%q1,%2"; 935 1.1 mrg } 936 1.1 mrg return "extrv_rs.w\t%0,%q1,%2"; 937 1.1 mrg } 938 1.3 mrg [(set_attr "type" "accext") 939 1.1 mrg (set_attr "mode" "SI")]) 940 1.1 mrg 941 1.1 mrg ;; EXTR*_S.H 942 1.1 mrg (define_insn "mips_extr_s_h" 943 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 944 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 945 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d")] 946 1.5 mrg UNSPEC_EXTR_S_H)) 947 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 948 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTR_S_H))] 949 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 950 1.1 mrg { 951 1.1 mrg if (which_alternative == 0) 952 1.1 mrg { 953 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 954 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 955 1.1 mrg return "extr_s.h\t%0,%q1,%2"; 956 1.1 mrg } 957 1.1 mrg return "extrv_s.h\t%0,%q1,%2"; 958 1.1 mrg } 959 1.3 mrg [(set_attr "type" "accext") 960 1.1 mrg (set_attr "mode" "SI")]) 961 1.1 mrg 962 1.1 mrg ;; EXTP* 963 1.1 mrg (define_insn "mips_extp" 964 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 965 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 966 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d") 967 1.5 mrg (reg:CCDSP CCDSP_PO_REGNUM)] 968 1.5 mrg UNSPEC_EXTP)) 969 1.5 mrg (set (reg:CCDSP CCDSP_EF_REGNUM) 970 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTP))] 971 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 972 1.1 mrg { 973 1.1 mrg if (which_alternative == 0) 974 1.1 mrg { 975 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 976 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 977 1.1 mrg return "extp\t%0,%q1,%2"; 978 1.1 mrg } 979 1.1 mrg return "extpv\t%0,%q1,%2"; 980 1.1 mrg } 981 1.3 mrg [(set_attr "type" "accext") 982 1.1 mrg (set_attr "mode" "SI")]) 983 1.1 mrg 984 1.1 mrg (define_insn "mips_extpdp" 985 1.5 mrg [(set (match_operand:SI 0 "register_operand" "=d,d") 986 1.5 mrg (unspec:SI [(match_operand:DI 1 "register_operand" "a,a") 987 1.5 mrg (match_operand:SI 2 "arith_operand" "I,d") 988 1.5 mrg (reg:CCDSP CCDSP_PO_REGNUM)] 989 1.5 mrg UNSPEC_EXTPDP)) 990 1.5 mrg (set (reg:CCDSP CCDSP_PO_REGNUM) 991 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) 992 1.5 mrg (reg:CCDSP CCDSP_PO_REGNUM)] UNSPEC_EXTPDP)) 993 1.5 mrg (set (reg:CCDSP CCDSP_EF_REGNUM) 994 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2)] UNSPEC_EXTPDP))] 995 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 996 1.1 mrg { 997 1.1 mrg if (which_alternative == 0) 998 1.1 mrg { 999 1.1 mrg if (INTVAL (operands[2]) & ~(unsigned HOST_WIDE_INT) 0x1f) 1000 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x1f); 1001 1.1 mrg return "extpdp\t%0,%q1,%2"; 1002 1.1 mrg } 1003 1.1 mrg return "extpdpv\t%0,%q1,%2"; 1004 1.1 mrg } 1005 1.3 mrg [(set_attr "type" "accext") 1006 1.1 mrg (set_attr "mode" "SI")]) 1007 1.1 mrg 1008 1.1 mrg ;; SHILO* 1009 1.1 mrg (define_insn "mips_shilo" 1010 1.1 mrg [(set (match_operand:DI 0 "register_operand" "=a,a") 1011 1.1 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0,0") 1012 1.1 mrg (match_operand:SI 2 "arith_operand" "I,d")] 1013 1.1 mrg UNSPEC_SHILO))] 1014 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 1015 1.1 mrg { 1016 1.1 mrg if (which_alternative == 0) 1017 1.1 mrg { 1018 1.1 mrg if (INTVAL (operands[2]) < -32 || INTVAL (operands[2]) > 31) 1019 1.1 mrg operands[2] = GEN_INT (INTVAL (operands[2]) & 0x3f); 1020 1.1 mrg return "shilo\t%q0,%2"; 1021 1.1 mrg } 1022 1.1 mrg return "shilov\t%q0,%2"; 1023 1.1 mrg } 1024 1.3 mrg [(set_attr "type" "accmod") 1025 1.1 mrg (set_attr "mode" "SI")]) 1026 1.1 mrg 1027 1.1 mrg ;; MTHLIP* 1028 1.1 mrg (define_insn "mips_mthlip" 1029 1.5 mrg [(set (match_operand:DI 0 "register_operand" "=a") 1030 1.5 mrg (unspec:DI [(match_operand:DI 1 "register_operand" "0") 1031 1.5 mrg (match_operand:SI 2 "register_operand" "d") 1032 1.5 mrg (reg:CCDSP CCDSP_PO_REGNUM)] 1033 1.5 mrg UNSPEC_MTHLIP)) 1034 1.5 mrg (set (reg:CCDSP CCDSP_PO_REGNUM) 1035 1.5 mrg (unspec:CCDSP [(match_dup 1) (match_dup 2) 1036 1.5 mrg (reg:CCDSP CCDSP_PO_REGNUM)] UNSPEC_MTHLIP))] 1037 1.1 mrg "ISA_HAS_DSP && !TARGET_64BIT" 1038 1.1 mrg "mthlip\t%2,%q0" 1039 1.3 mrg [(set_attr "type" "accmod") 1040 1.1 mrg (set_attr "mode" "SI")]) 1041 1.1 mrg 1042 1.1 mrg ;; WRDSP 1043 1.1 mrg (define_insn "mips_wrdsp" 1044 1.5 mrg [(set (reg:CCDSP CCDSP_PO_REGNUM) 1045 1.5 mrg (unspec:CCDSP [(match_operand:SI 0 "register_operand" "d") 1046 1.5 mrg (match_operand:SI 1 "const_uimm6_operand" "YA")] 1047 1.5 mrg UNSPEC_WRDSP)) 1048 1.5 mrg (set (reg:CCDSP CCDSP_SC_REGNUM) 1049 1.5 mrg (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP)) 1050 1.5 mrg (set (reg:CCDSP CCDSP_CA_REGNUM) 1051 1.5 mrg (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP)) 1052 1.5 mrg (set (reg:CCDSP CCDSP_OU_REGNUM) 1053 1.5 mrg (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP)) 1054 1.5 mrg (set (reg:CCDSP CCDSP_CC_REGNUM) 1055 1.5 mrg (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP)) 1056 1.5 mrg (set (reg:CCDSP CCDSP_EF_REGNUM) 1057 1.5 mrg (unspec:CCDSP [(match_dup 0) (match_dup 1)] UNSPEC_WRDSP))] 1058 1.1 mrg "ISA_HAS_DSP" 1059 1.1 mrg "wrdsp\t%0,%1" 1060 1.3 mrg [(set_attr "type" "dspalu") 1061 1.1 mrg (set_attr "mode" "SI")]) 1062 1.1 mrg 1063 1.1 mrg ;; RDDSP 1064 1.1 mrg (define_insn "mips_rddsp" 1065 1.1 mrg [(set (match_operand:SI 0 "register_operand" "=d") 1066 1.1 mrg (unspec:SI [(match_operand:SI 1 "const_uimm6_operand" "YA") 1067 1.1 mrg (reg:CCDSP CCDSP_PO_REGNUM) 1068 1.1 mrg (reg:CCDSP CCDSP_SC_REGNUM) 1069 1.1 mrg (reg:CCDSP CCDSP_CA_REGNUM) 1070 1.1 mrg (reg:CCDSP CCDSP_OU_REGNUM) 1071 1.1 mrg (reg:CCDSP CCDSP_CC_REGNUM) 1072 1.1 mrg (reg:CCDSP CCDSP_EF_REGNUM)] 1073 1.1 mrg UNSPEC_RDDSP))] 1074 1.1 mrg "ISA_HAS_DSP" 1075 1.1 mrg "rddsp\t%0,%1" 1076 1.3 mrg [(set_attr "type" "dspalu") 1077 1.1 mrg (set_attr "mode" "SI")]) 1078 1.1 mrg 1079 1.1 mrg ;; Table 2-7. MIPS DSP ASE Instructions: Indexed-Load 1080 1.1 mrg ;; L*X 1081 1.1 mrg (define_expand "mips_lbux" 1082 1.1 mrg [(match_operand:SI 0 "register_operand") 1083 1.1 mrg (match_operand 1 "pmode_register_operand") 1084 1.1 mrg (match_operand:SI 2 "register_operand")] 1085 1.1 mrg "ISA_HAS_DSP" 1086 1.1 mrg { 1087 1.1 mrg operands[2] = convert_to_mode (Pmode, operands[2], false); 1088 1.3 mrg emit_insn (PMODE_INSN (gen_mips_lbux_extsi, 1089 1.3 mrg (operands[0], operands[1], operands[2]))); 1090 1.1 mrg DONE; 1091 1.1 mrg }) 1092 1.1 mrg 1093 1.3 mrg (define_insn "mips_l<SHORT:size><u>x_ext<GPR:mode>_<P:mode>" 1094 1.3 mrg [(set (match_operand:GPR 0 "register_operand" "=d") 1095 1.3 mrg (any_extend:GPR 1096 1.3 mrg (mem:SHORT (plus:P (match_operand:P 1 "register_operand" "d") 1097 1.3 mrg (match_operand:P 2 "register_operand" "d")))))] 1098 1.3 mrg "ISA_HAS_L<SHORT:SIZE><U>X" 1099 1.3 mrg "l<SHORT:size><u>x\t%0,%2(%1)" 1100 1.1 mrg [(set_attr "type" "load") 1101 1.5 mrg (set_attr "mode" "<GPR:MODE>")]) 1102 1.1 mrg 1103 1.1 mrg (define_expand "mips_lhx" 1104 1.1 mrg [(match_operand:SI 0 "register_operand") 1105 1.1 mrg (match_operand 1 "pmode_register_operand") 1106 1.1 mrg (match_operand:SI 2 "register_operand")] 1107 1.1 mrg "ISA_HAS_DSP" 1108 1.1 mrg { 1109 1.1 mrg operands[2] = convert_to_mode (Pmode, operands[2], false); 1110 1.3 mrg emit_insn (PMODE_INSN (gen_mips_lhx_extsi, 1111 1.3 mrg (operands[0], operands[1], operands[2]))); 1112 1.1 mrg DONE; 1113 1.1 mrg }) 1114 1.1 mrg 1115 1.3 mrg (define_expand "mips_l<size>x" 1116 1.3 mrg [(match_operand:GPR 0 "register_operand") 1117 1.1 mrg (match_operand 1 "pmode_register_operand") 1118 1.1 mrg (match_operand:SI 2 "register_operand")] 1119 1.1 mrg "ISA_HAS_DSP" 1120 1.1 mrg { 1121 1.1 mrg operands[2] = convert_to_mode (Pmode, operands[2], false); 1122 1.3 mrg emit_insn (PMODE_INSN (gen_mips_l<size>x, 1123 1.3 mrg (operands[0], operands[1], operands[2]))); 1124 1.1 mrg DONE; 1125 1.1 mrg }) 1126 1.1 mrg 1127 1.3 mrg (define_insn "mips_l<GPR:size>x_<P:mode>" 1128 1.3 mrg [(set (match_operand:GPR 0 "register_operand" "=d") 1129 1.3 mrg (mem:GPR (plus:P (match_operand:P 1 "register_operand" "d") 1130 1.3 mrg (match_operand:P 2 "register_operand" "d"))))] 1131 1.3 mrg "ISA_HAS_L<GPR:SIZE>X" 1132 1.3 mrg "l<GPR:size>x\t%0,%2(%1)" 1133 1.3 mrg [(set_attr "type" "load") 1134 1.5 mrg (set_attr "mode" "<GPR:MODE>")]) 1135 1.3 mrg 1136 1.3 mrg (define_insn "*mips_lw<u>x_<P:mode>_ext" 1137 1.3 mrg [(set (match_operand:DI 0 "register_operand" "=d") 1138 1.3 mrg (any_extend:DI 1139 1.3 mrg (mem:SI (plus:P (match_operand:P 1 "register_operand" "d") 1140 1.3 mrg (match_operand:P 2 "register_operand" "d")))))] 1141 1.3 mrg "ISA_HAS_LW<U>X && TARGET_64BIT" 1142 1.3 mrg "lw<u>x\t%0,%2(%1)" 1143 1.1 mrg [(set_attr "type" "load") 1144 1.5 mrg (set_attr "mode" "DI")]) 1145 1.1 mrg 1146 1.1 mrg ;; Table 2-8. MIPS DSP ASE Instructions: Branch 1147 1.1 mrg ;; BPOSGE32 1148 1.1 mrg (define_insn "mips_bposge" 1149 1.1 mrg [(set (pc) 1150 1.1 mrg (if_then_else (ge (reg:CCDSP CCDSP_PO_REGNUM) 1151 1.1 mrg (match_operand:SI 1 "immediate_operand" "I")) 1152 1.1 mrg (label_ref (match_operand 0 "" "")) 1153 1.1 mrg (pc)))] 1154 1.1 mrg "ISA_HAS_DSP" 1155 1.1 mrg "%*bposge%1\t%0%/" 1156 1.1 mrg [(set_attr "type" "branch")]) 1157 1.1 mrg 1158 1.3 mrg (define_expand "mips_madd<u>" 1159 1.3 mrg [(set (match_operand:DI 0 "register_operand") 1160 1.3 mrg (plus:DI 1161 1.3 mrg (mult:DI (any_extend:DI (match_operand:SI 2 "register_operand")) 1162 1.3 mrg (any_extend:DI (match_operand:SI 3 "register_operand"))) 1163 1.3 mrg (match_operand:DI 1 "register_operand")))] 1164 1.3 mrg "ISA_HAS_DSP && !TARGET_64BIT") 1165 1.3 mrg 1166 1.3 mrg (define_expand "mips_msub<u>" 1167 1.3 mrg [(set (match_operand:DI 0 "register_operand") 1168 1.3 mrg (minus:DI 1169 1.3 mrg (match_operand:DI 1 "register_operand") 1170 1.3 mrg (mult:DI (any_extend:DI (match_operand:SI 2 "register_operand")) 1171 1.3 mrg (any_extend:DI (match_operand:SI 3 "register_operand")))))] 1172 1.3 mrg "ISA_HAS_DSP && !TARGET_64BIT") 1173