Home | History | Annotate | Line # | Download | only in mips
      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