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