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