Home | History | Annotate | Line # | Download | only in rs6000
dfp.md revision 1.11
      1   1.1  mrg ;; Decimal Floating Point (DFP) patterns.
      2  1.11  mrg ;; Copyright (C) 2007-2019 Free Software Foundation, Inc.
      3   1.1  mrg ;; Contributed by Ben Elliston (bje (a] au.ibm.com) and Peter Bergner
      4   1.1  mrg ;; (bergner (a] vnet.ibm.com).
      5   1.1  mrg 
      6   1.1  mrg ;; This file is part of GCC.
      7   1.1  mrg 
      8   1.1  mrg ;; GCC is free software; you can redistribute it and/or modify it
      9   1.1  mrg ;; under the terms of the GNU General Public License as published
     10   1.1  mrg ;; by the Free Software Foundation; either version 3, or (at your
     11   1.1  mrg ;; option) any later version.
     12   1.1  mrg 
     13   1.1  mrg ;; GCC is distributed in the hope that it will be useful, but WITHOUT
     14   1.1  mrg ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     15   1.1  mrg ;; or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
     16   1.1  mrg ;; License for more details.
     17   1.1  mrg 
     18   1.1  mrg ;; You should have received a copy of the GNU General Public License
     19   1.1  mrg ;; along with GCC; see the file COPYING3.  If not see
     20   1.1  mrg ;; <http://www.gnu.org/licenses/>.
     21   1.1  mrg 
     22   1.1  mrg ;;
     23   1.1  mrg ;; UNSPEC usage
     24   1.1  mrg ;;
     25   1.1  mrg 
     26   1.3  mrg (define_c_enum "unspec"
     27   1.3  mrg   [UNSPEC_MOVSD_LOAD
     28   1.3  mrg    UNSPEC_MOVSD_STORE
     29   1.1  mrg   ])
     30   1.1  mrg 
     31   1.1  mrg 
     32   1.1  mrg (define_insn "movsd_store"
     33   1.1  mrg   [(set (match_operand:DD 0 "nonimmediate_operand" "=m")
     34   1.1  mrg 	(unspec:DD [(match_operand:SD 1 "input_operand" "d")]
     35   1.1  mrg 		   UNSPEC_MOVSD_STORE))]
     36   1.1  mrg   "(gpc_reg_operand (operands[0], DDmode)
     37   1.1  mrg    || gpc_reg_operand (operands[1], SDmode))
     38  1.10  mrg    && TARGET_HARD_FLOAT"
     39   1.1  mrg   "stfd%U0%X0 %1,%0"
     40  1.11  mrg   [(set_attr "type" "fpstore")])
     41   1.1  mrg 
     42   1.1  mrg (define_insn "movsd_load"
     43   1.1  mrg   [(set (match_operand:SD 0 "nonimmediate_operand" "=f")
     44   1.1  mrg 	(unspec:SD [(match_operand:DD 1 "input_operand" "m")]
     45   1.1  mrg 		   UNSPEC_MOVSD_LOAD))]
     46   1.1  mrg   "(gpc_reg_operand (operands[0], SDmode)
     47   1.1  mrg    || gpc_reg_operand (operands[1], DDmode))
     48  1.10  mrg    && TARGET_HARD_FLOAT"
     49   1.1  mrg   "lfd%U1%X1 %0,%1"
     50  1.11  mrg   [(set_attr "type" "fpload")])
     51   1.1  mrg 
     52   1.1  mrg ;; Hardware support for decimal floating point operations.
     53   1.1  mrg 
     54   1.1  mrg (define_insn "extendsddd2"
     55   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
     56   1.1  mrg 	(float_extend:DD (match_operand:SD 1 "gpc_reg_operand" "f")))]
     57   1.1  mrg   "TARGET_DFP"
     58   1.1  mrg   "dctdp %0,%1"
     59   1.7  mrg   [(set_attr "type" "dfp")])
     60   1.1  mrg 
     61   1.1  mrg (define_expand "extendsdtd2"
     62   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
     63   1.1  mrg 	(float_extend:TD (match_operand:SD 1 "gpc_reg_operand" "d")))]
     64   1.1  mrg   "TARGET_DFP"
     65   1.1  mrg {
     66   1.1  mrg   rtx tmp = gen_reg_rtx (DDmode);
     67   1.1  mrg   emit_insn (gen_extendsddd2 (tmp, operands[1]));
     68   1.1  mrg   emit_insn (gen_extendddtd2 (operands[0], tmp));
     69   1.1  mrg   DONE;
     70   1.1  mrg })
     71   1.1  mrg 
     72   1.1  mrg (define_insn "truncddsd2"
     73   1.1  mrg   [(set (match_operand:SD 0 "gpc_reg_operand" "=f")
     74   1.1  mrg 	(float_truncate:SD (match_operand:DD 1 "gpc_reg_operand" "d")))]
     75   1.1  mrg   "TARGET_DFP"
     76   1.1  mrg   "drsp %0,%1"
     77   1.7  mrg   [(set_attr "type" "dfp")])
     78   1.1  mrg 
     79  1.10  mrg (define_insn "negdd2"
     80   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
     81   1.1  mrg 	(neg:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
     82  1.10  mrg   "TARGET_HARD_FLOAT"
     83   1.1  mrg   "fneg %0,%1"
     84   1.7  mrg   [(set_attr "type" "fpsimple")])
     85   1.1  mrg 
     86  1.10  mrg (define_insn "absdd2"
     87   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
     88   1.1  mrg 	(abs:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
     89  1.10  mrg   "TARGET_HARD_FLOAT"
     90   1.1  mrg   "fabs %0,%1"
     91   1.7  mrg   [(set_attr "type" "fpsimple")])
     92   1.1  mrg 
     93   1.1  mrg (define_insn "*nabsdd2_fpr"
     94   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
     95   1.1  mrg 	(neg:DD (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d"))))]
     96  1.10  mrg   "TARGET_HARD_FLOAT"
     97   1.1  mrg   "fnabs %0,%1"
     98   1.7  mrg   [(set_attr "type" "fpsimple")])
     99   1.1  mrg 
    100  1.10  mrg (define_insn "negtd2"
    101   1.3  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
    102   1.3  mrg 	(neg:TD (match_operand:TD 1 "gpc_reg_operand" "0,d")))]
    103  1.10  mrg   "TARGET_HARD_FLOAT"
    104   1.3  mrg   "@
    105   1.3  mrg    fneg %0,%1
    106   1.3  mrg    fneg %0,%1\;fmr %L0,%L1"
    107   1.7  mrg   [(set_attr "type" "fpsimple")
    108   1.3  mrg    (set_attr "length" "4,8")])
    109   1.1  mrg 
    110  1.10  mrg (define_insn "abstd2"
    111   1.3  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
    112   1.3  mrg 	(abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d")))]
    113  1.10  mrg   "TARGET_HARD_FLOAT"
    114   1.3  mrg   "@
    115   1.3  mrg    fabs %0,%1
    116   1.3  mrg    fabs %0,%1\;fmr %L0,%L1"
    117   1.7  mrg   [(set_attr "type" "fpsimple")
    118   1.3  mrg    (set_attr "length" "4,8")])
    119   1.1  mrg 
    120   1.1  mrg (define_insn "*nabstd2_fpr"
    121   1.3  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
    122   1.3  mrg 	(neg:TD (abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d"))))]
    123  1.10  mrg   "TARGET_HARD_FLOAT"
    124   1.3  mrg   "@
    125   1.3  mrg    fnabs %0,%1
    126   1.3  mrg    fnabs %0,%1\;fmr %L0,%L1"
    127   1.7  mrg   [(set_attr "type" "fpsimple")
    128   1.3  mrg    (set_attr "length" "4,8")])
    129   1.1  mrg 
    130   1.1  mrg ;; Hardware support for decimal floating point operations.
    131   1.1  mrg 
    132   1.1  mrg (define_insn "extendddtd2"
    133   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    134   1.1  mrg 	(float_extend:TD (match_operand:DD 1 "gpc_reg_operand" "d")))]
    135   1.1  mrg   "TARGET_DFP"
    136   1.1  mrg   "dctqpq %0,%1"
    137   1.7  mrg   [(set_attr "type" "dfp")])
    138   1.1  mrg 
    139   1.1  mrg ;; The result of drdpq is an even/odd register pair with the converted
    140   1.1  mrg ;; value in the even register and zero in the odd register.
    141   1.1  mrg ;; FIXME: Avoid the register move by using a reload constraint to ensure
    142   1.1  mrg ;; that the result is the first of the pair receiving the result of drdpq.
    143   1.1  mrg 
    144   1.1  mrg (define_insn "trunctddd2"
    145   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    146   1.1  mrg 	(float_truncate:DD (match_operand:TD 1 "gpc_reg_operand" "d")))
    147   1.1  mrg    (clobber (match_scratch:TD 2 "=d"))]
    148   1.1  mrg   "TARGET_DFP"
    149   1.1  mrg   "drdpq %2,%1\;fmr %0,%2"
    150   1.9  mrg   [(set_attr "type" "dfp")
    151   1.9  mrg    (set_attr "length" "8")])
    152   1.1  mrg 
    153   1.1  mrg (define_insn "adddd3"
    154   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    155   1.1  mrg 	(plus:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
    156   1.1  mrg 		 (match_operand:DD 2 "gpc_reg_operand" "d")))]
    157   1.1  mrg   "TARGET_DFP"
    158   1.1  mrg   "dadd %0,%1,%2"
    159   1.7  mrg   [(set_attr "type" "dfp")])
    160   1.1  mrg 
    161   1.1  mrg (define_insn "addtd3"
    162   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    163   1.1  mrg 	(plus:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
    164   1.1  mrg 		 (match_operand:TD 2 "gpc_reg_operand" "d")))]
    165   1.1  mrg   "TARGET_DFP"
    166   1.1  mrg   "daddq %0,%1,%2"
    167   1.7  mrg   [(set_attr "type" "dfp")])
    168   1.1  mrg 
    169   1.1  mrg (define_insn "subdd3"
    170   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    171   1.1  mrg 	(minus:DD (match_operand:DD 1 "gpc_reg_operand" "d")
    172   1.1  mrg 		  (match_operand:DD 2 "gpc_reg_operand" "d")))]
    173   1.1  mrg   "TARGET_DFP"
    174   1.1  mrg   "dsub %0,%1,%2"
    175   1.7  mrg   [(set_attr "type" "dfp")])
    176   1.1  mrg 
    177   1.1  mrg (define_insn "subtd3"
    178   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    179   1.1  mrg 	(minus:TD (match_operand:TD 1 "gpc_reg_operand" "d")
    180   1.1  mrg 		  (match_operand:TD 2 "gpc_reg_operand" "d")))]
    181   1.1  mrg   "TARGET_DFP"
    182   1.1  mrg   "dsubq %0,%1,%2"
    183   1.7  mrg   [(set_attr "type" "dfp")])
    184   1.1  mrg 
    185   1.1  mrg (define_insn "muldd3"
    186   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    187   1.1  mrg 	(mult:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
    188   1.1  mrg 		 (match_operand:DD 2 "gpc_reg_operand" "d")))]
    189   1.1  mrg   "TARGET_DFP"
    190   1.1  mrg   "dmul %0,%1,%2"
    191   1.7  mrg   [(set_attr "type" "dfp")])
    192   1.1  mrg 
    193   1.1  mrg (define_insn "multd3"
    194   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    195   1.1  mrg 	(mult:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
    196   1.1  mrg 		 (match_operand:TD 2 "gpc_reg_operand" "d")))]
    197   1.1  mrg   "TARGET_DFP"
    198   1.1  mrg   "dmulq %0,%1,%2"
    199   1.7  mrg   [(set_attr "type" "dfp")])
    200   1.1  mrg 
    201   1.1  mrg (define_insn "divdd3"
    202   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    203   1.1  mrg 	(div:DD (match_operand:DD 1 "gpc_reg_operand" "d")
    204   1.1  mrg 		(match_operand:DD 2 "gpc_reg_operand" "d")))]
    205   1.1  mrg   "TARGET_DFP"
    206   1.1  mrg   "ddiv %0,%1,%2"
    207   1.7  mrg   [(set_attr "type" "dfp")])
    208   1.1  mrg 
    209   1.1  mrg (define_insn "divtd3"
    210   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    211   1.1  mrg 	(div:TD (match_operand:TD 1 "gpc_reg_operand" "d")
    212   1.1  mrg 		(match_operand:TD 2 "gpc_reg_operand" "d")))]
    213   1.1  mrg   "TARGET_DFP"
    214   1.1  mrg   "ddivq %0,%1,%2"
    215   1.7  mrg   [(set_attr "type" "dfp")])
    216   1.1  mrg 
    217   1.1  mrg (define_insn "*cmpdd_internal1"
    218   1.1  mrg   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
    219   1.1  mrg 	(compare:CCFP (match_operand:DD 1 "gpc_reg_operand" "d")
    220   1.1  mrg 		      (match_operand:DD 2 "gpc_reg_operand" "d")))]
    221   1.1  mrg   "TARGET_DFP"
    222   1.1  mrg   "dcmpu %0,%1,%2"
    223   1.7  mrg   [(set_attr "type" "dfp")])
    224   1.1  mrg 
    225   1.1  mrg (define_insn "*cmptd_internal1"
    226   1.1  mrg   [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
    227   1.1  mrg 	(compare:CCFP (match_operand:TD 1 "gpc_reg_operand" "d")
    228   1.1  mrg 		      (match_operand:TD 2 "gpc_reg_operand" "d")))]
    229   1.1  mrg   "TARGET_DFP"
    230   1.1  mrg   "dcmpuq %0,%1,%2"
    231   1.7  mrg   [(set_attr "type" "dfp")])
    232   1.1  mrg 
    233   1.3  mrg (define_insn "floatdidd2"
    234   1.3  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    235   1.3  mrg 	(float:DD (match_operand:DI 1 "gpc_reg_operand" "d")))]
    236   1.3  mrg   "TARGET_DFP && TARGET_POPCNTD"
    237   1.3  mrg   "dcffix %0,%1"
    238   1.7  mrg   [(set_attr "type" "dfp")])
    239   1.3  mrg 
    240   1.1  mrg (define_insn "floatditd2"
    241   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    242   1.1  mrg 	(float:TD (match_operand:DI 1 "gpc_reg_operand" "d")))]
    243   1.1  mrg   "TARGET_DFP"
    244   1.1  mrg   "dcffixq %0,%1"
    245   1.7  mrg   [(set_attr "type" "dfp")])
    246   1.1  mrg 
    247   1.1  mrg ;; Convert a decimal64 to a decimal64 whose value is an integer.
    248   1.1  mrg ;; This is the first stage of converting it to an integer type.
    249   1.1  mrg 
    250   1.1  mrg (define_insn "ftruncdd2"
    251   1.1  mrg   [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
    252   1.1  mrg 	(fix:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
    253   1.1  mrg   "TARGET_DFP"
    254   1.1  mrg   "drintn. 0,%0,%1,1"
    255   1.7  mrg   [(set_attr "type" "dfp")])
    256   1.1  mrg 
    257   1.1  mrg ;; Convert a decimal64 whose value is an integer to an actual integer.
    258   1.1  mrg ;; This is the second stage of converting decimal float to integer type.
    259   1.1  mrg 
    260   1.1  mrg (define_insn "fixdddi2"
    261   1.1  mrg   [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
    262   1.1  mrg 	(fix:DI (match_operand:DD 1 "gpc_reg_operand" "d")))]
    263   1.1  mrg   "TARGET_DFP"
    264   1.1  mrg   "dctfix %0,%1"
    265   1.7  mrg   [(set_attr "type" "dfp")])
    266   1.1  mrg 
    267   1.1  mrg ;; Convert a decimal128 to a decimal128 whose value is an integer.
    268   1.1  mrg ;; This is the first stage of converting it to an integer type.
    269   1.1  mrg 
    270   1.1  mrg (define_insn "ftrunctd2"
    271   1.1  mrg   [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
    272   1.1  mrg 	(fix:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
    273   1.1  mrg   "TARGET_DFP"
    274   1.1  mrg   "drintnq. 0,%0,%1,1"
    275   1.7  mrg   [(set_attr "type" "dfp")])
    276   1.1  mrg 
    277   1.1  mrg ;; Convert a decimal128 whose value is an integer to an actual integer.
    278   1.1  mrg ;; This is the second stage of converting decimal float to integer type.
    279   1.1  mrg 
    280   1.1  mrg (define_insn "fixtddi2"
    281   1.1  mrg   [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
    282   1.1  mrg 	(fix:DI (match_operand:TD 1 "gpc_reg_operand" "d")))]
    283   1.1  mrg   "TARGET_DFP"
    284   1.1  mrg   "dctfixq %0,%1"
    285   1.7  mrg   [(set_attr "type" "dfp")])
    286   1.3  mrg 
    287   1.3  mrg 
    289   1.3  mrg ;; Decimal builtin support
    290   1.3  mrg 
    291   1.3  mrg (define_c_enum "unspec"
    292   1.3  mrg   [UNSPEC_DDEDPD
    293   1.3  mrg    UNSPEC_DENBCD
    294   1.3  mrg    UNSPEC_DXEX
    295   1.3  mrg    UNSPEC_DIEX
    296   1.7  mrg    UNSPEC_DSCLI
    297   1.3  mrg    UNSPEC_DTSTSFI
    298   1.3  mrg    UNSPEC_DSCRI])
    299   1.7  mrg 
    300   1.7  mrg (define_code_iterator DFP_TEST [eq lt gt unordered])
    301   1.3  mrg 
    302   1.3  mrg (define_mode_iterator D64_D128 [DD TD])
    303   1.3  mrg 
    304   1.3  mrg (define_mode_attr dfp_suffix [(DD "")
    305   1.3  mrg 			      (TD "q")])
    306   1.3  mrg 
    307   1.3  mrg (define_insn "dfp_ddedpd_<mode>"
    308   1.3  mrg   [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
    309   1.3  mrg 	(unspec:D64_D128 [(match_operand:QI 1 "const_0_to_3_operand" "i")
    310   1.3  mrg 			  (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
    311   1.3  mrg 			 UNSPEC_DDEDPD))]
    312   1.3  mrg   "TARGET_DFP"
    313   1.7  mrg   "ddedpd<dfp_suffix> %1,%0,%2"
    314   1.3  mrg   [(set_attr "type" "dfp")])
    315   1.3  mrg 
    316   1.3  mrg (define_insn "dfp_denbcd_<mode>"
    317   1.3  mrg   [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
    318   1.3  mrg 	(unspec:D64_D128 [(match_operand:QI 1 "const_0_to_1_operand" "i")
    319   1.3  mrg 			  (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
    320   1.3  mrg 			 UNSPEC_DENBCD))]
    321   1.3  mrg   "TARGET_DFP"
    322   1.7  mrg   "denbcd<dfp_suffix> %1,%0,%2"
    323   1.3  mrg   [(set_attr "type" "dfp")])
    324   1.3  mrg 
    325   1.6  mrg (define_insn "dfp_dxex_<mode>"
    326   1.6  mrg   [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
    327   1.6  mrg 	(unspec:DI [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
    328   1.3  mrg 		   UNSPEC_DXEX))]
    329   1.3  mrg   "TARGET_DFP"
    330   1.7  mrg   "dxex<dfp_suffix> %0,%1"
    331   1.3  mrg   [(set_attr "type" "dfp")])
    332   1.3  mrg 
    333   1.3  mrg (define_insn "dfp_diex_<mode>"
    334   1.6  mrg   [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
    335   1.3  mrg 	(unspec:D64_D128 [(match_operand:DI 1 "gpc_reg_operand" "d")
    336   1.3  mrg 			  (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
    337   1.3  mrg 			 UNSPEC_DXEX))]
    338   1.3  mrg   "TARGET_DFP"
    339   1.7  mrg   "diex<dfp_suffix> %0,%1,%2"
    340   1.7  mrg   [(set_attr "type" "dfp")])
    341   1.7  mrg 
    342   1.7  mrg (define_expand "dfptstsfi_<code>_<mode>"
    343   1.7  mrg   [(set (match_dup 3)
    344   1.7  mrg 	(compare:CCFP
    345  1.10  mrg          (unspec:D64_D128
    346  1.10  mrg 	  [(match_operand:SI 1 "const_int_operand")
    347   1.7  mrg 	   (match_operand:D64_D128 2 "gpc_reg_operand")]
    348   1.7  mrg 	  UNSPEC_DTSTSFI)
    349  1.10  mrg 	 (match_dup 4)))
    350   1.7  mrg    (set (match_operand:SI 0 "register_operand")
    351   1.7  mrg    	(DFP_TEST:SI (match_dup 3)
    352   1.7  mrg 		     (const_int 0)))
    353   1.7  mrg   ]
    354   1.7  mrg   "TARGET_P9_MISC"
    355   1.7  mrg {
    356   1.7  mrg   operands[3] = gen_reg_rtx (CCFPmode);
    357   1.7  mrg   operands[4] = const0_rtx;
    358   1.7  mrg })
    359   1.7  mrg 
    360   1.7  mrg (define_insn "*dfp_sgnfcnc_<mode>"
    361   1.7  mrg   [(set (match_operand:CCFP 0 "" "=y")
    362   1.7  mrg         (compare:CCFP
    363   1.7  mrg 	 (unspec:D64_D128 [(match_operand:SI 1 "const_int_operand" "n")
    364   1.7  mrg 	 	           (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
    365   1.7  mrg           UNSPEC_DTSTSFI)
    366   1.7  mrg 	 (match_operand:SI 3 "zero_constant" "j")))]
    367   1.7  mrg   "TARGET_P9_MISC"
    368   1.7  mrg {
    369   1.7  mrg   /* If immediate operand is greater than 63, it will behave as if
    370   1.7  mrg      the value had been 63.  The code generator does not support
    371   1.7  mrg      immediate operand values greater than 63.  */
    372   1.7  mrg   if (!(IN_RANGE (INTVAL (operands[1]), 0, 63)))
    373   1.7  mrg     operands[1] = GEN_INT (63);
    374   1.7  mrg   return "dtstsfi<dfp_suffix> %0,%1,%2";
    375   1.3  mrg }
    376   1.3  mrg   [(set_attr "type" "fp")])
    377   1.3  mrg 
    378   1.3  mrg (define_insn "dfp_dscli_<mode>"
    379   1.3  mrg   [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
    380   1.3  mrg 	(unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
    381   1.3  mrg 			  (match_operand:QI 2 "immediate_operand" "i")]
    382   1.3  mrg 			 UNSPEC_DSCLI))]
    383   1.3  mrg   "TARGET_DFP"
    384   1.7  mrg   "dscli<dfp_suffix> %0,%1,%2"
    385   1.3  mrg   [(set_attr "type" "dfp")])
    386   1.3  mrg 
    387   1.3  mrg (define_insn "dfp_dscri_<mode>"
    388   1.3  mrg   [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
    389   1.3  mrg 	(unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
    390   1.3  mrg 			  (match_operand:QI 2 "immediate_operand" "i")]
    391   1.3  mrg 			 UNSPEC_DSCRI))]
    392   1.3  mrg   "TARGET_DFP"
    393   1.7  mrg   "dscri<dfp_suffix> %0,%1,%2"
    394              [(set_attr "type" "dfp")])
    395