dfp.md revision 1.3 1 1.1 mrg ;; Decimal Floating Point (DFP) patterns.
2 1.3 mrg ;; Copyright (C) 2007-2013 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.1 mrg && TARGET_HARD_FLOAT && TARGET_FPRS"
39 1.1 mrg "stfd%U0%X0 %1,%0"
40 1.3 mrg [(set (attr "type")
41 1.3 mrg (if_then_else
42 1.3 mrg (match_test "update_indexed_address_mem (operands[0], VOIDmode)")
43 1.3 mrg (const_string "fpstore_ux")
44 1.3 mrg (if_then_else
45 1.3 mrg (match_test "update_address_mem (operands[0], VOIDmode)")
46 1.3 mrg (const_string "fpstore_u")
47 1.3 mrg (const_string "fpstore"))))
48 1.1 mrg (set_attr "length" "4")])
49 1.1 mrg
50 1.1 mrg (define_insn "movsd_load"
51 1.1 mrg [(set (match_operand:SD 0 "nonimmediate_operand" "=f")
52 1.1 mrg (unspec:SD [(match_operand:DD 1 "input_operand" "m")]
53 1.1 mrg UNSPEC_MOVSD_LOAD))]
54 1.1 mrg "(gpc_reg_operand (operands[0], SDmode)
55 1.1 mrg || gpc_reg_operand (operands[1], DDmode))
56 1.1 mrg && TARGET_HARD_FLOAT && TARGET_FPRS"
57 1.1 mrg "lfd%U1%X1 %0,%1"
58 1.3 mrg [(set (attr "type")
59 1.3 mrg (if_then_else
60 1.3 mrg (match_test "update_indexed_address_mem (operands[1], VOIDmode)")
61 1.3 mrg (const_string "fpload_ux")
62 1.3 mrg (if_then_else
63 1.3 mrg (match_test "update_address_mem (operands[1], VOIDmode)")
64 1.3 mrg (const_string "fpload_u")
65 1.3 mrg (const_string "fpload"))))
66 1.1 mrg (set_attr "length" "4")])
67 1.1 mrg
68 1.1 mrg ;; Hardware support for decimal floating point operations.
69 1.1 mrg
70 1.1 mrg (define_insn "extendsddd2"
71 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
72 1.1 mrg (float_extend:DD (match_operand:SD 1 "gpc_reg_operand" "f")))]
73 1.1 mrg "TARGET_DFP"
74 1.1 mrg "dctdp %0,%1"
75 1.1 mrg [(set_attr "type" "fp")])
76 1.1 mrg
77 1.1 mrg (define_expand "extendsdtd2"
78 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
79 1.1 mrg (float_extend:TD (match_operand:SD 1 "gpc_reg_operand" "d")))]
80 1.1 mrg "TARGET_DFP"
81 1.1 mrg {
82 1.1 mrg rtx tmp = gen_reg_rtx (DDmode);
83 1.1 mrg emit_insn (gen_extendsddd2 (tmp, operands[1]));
84 1.1 mrg emit_insn (gen_extendddtd2 (operands[0], tmp));
85 1.1 mrg DONE;
86 1.1 mrg })
87 1.1 mrg
88 1.1 mrg (define_insn "truncddsd2"
89 1.1 mrg [(set (match_operand:SD 0 "gpc_reg_operand" "=f")
90 1.1 mrg (float_truncate:SD (match_operand:DD 1 "gpc_reg_operand" "d")))]
91 1.1 mrg "TARGET_DFP"
92 1.1 mrg "drsp %0,%1"
93 1.1 mrg [(set_attr "type" "fp")])
94 1.1 mrg
95 1.1 mrg (define_expand "negdd2"
96 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "")
97 1.1 mrg (neg:DD (match_operand:DD 1 "gpc_reg_operand" "")))]
98 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
99 1.1 mrg "")
100 1.1 mrg
101 1.1 mrg (define_insn "*negdd2_fpr"
102 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
103 1.1 mrg (neg:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
104 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
105 1.1 mrg "fneg %0,%1"
106 1.1 mrg [(set_attr "type" "fp")])
107 1.1 mrg
108 1.1 mrg (define_expand "absdd2"
109 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "")
110 1.1 mrg (abs:DD (match_operand:DD 1 "gpc_reg_operand" "")))]
111 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
112 1.1 mrg "")
113 1.1 mrg
114 1.1 mrg (define_insn "*absdd2_fpr"
115 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
116 1.1 mrg (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
117 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
118 1.1 mrg "fabs %0,%1"
119 1.1 mrg [(set_attr "type" "fp")])
120 1.1 mrg
121 1.1 mrg (define_insn "*nabsdd2_fpr"
122 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
123 1.1 mrg (neg:DD (abs:DD (match_operand:DD 1 "gpc_reg_operand" "d"))))]
124 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
125 1.1 mrg "fnabs %0,%1"
126 1.1 mrg [(set_attr "type" "fp")])
127 1.1 mrg
128 1.1 mrg (define_expand "negtd2"
129 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "")
130 1.1 mrg (neg:TD (match_operand:TD 1 "gpc_reg_operand" "")))]
131 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
132 1.1 mrg "")
133 1.1 mrg
134 1.1 mrg (define_insn "*negtd2_fpr"
135 1.3 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
136 1.3 mrg (neg:TD (match_operand:TD 1 "gpc_reg_operand" "0,d")))]
137 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
138 1.3 mrg "@
139 1.3 mrg fneg %0,%1
140 1.3 mrg fneg %0,%1\;fmr %L0,%L1"
141 1.3 mrg [(set_attr "type" "fp")
142 1.3 mrg (set_attr "length" "4,8")])
143 1.1 mrg
144 1.1 mrg (define_expand "abstd2"
145 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "")
146 1.1 mrg (abs:TD (match_operand:TD 1 "gpc_reg_operand" "")))]
147 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
148 1.1 mrg "")
149 1.1 mrg
150 1.1 mrg (define_insn "*abstd2_fpr"
151 1.3 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
152 1.3 mrg (abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d")))]
153 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
154 1.3 mrg "@
155 1.3 mrg fabs %0,%1
156 1.3 mrg fabs %0,%1\;fmr %L0,%L1"
157 1.3 mrg [(set_attr "type" "fp")
158 1.3 mrg (set_attr "length" "4,8")])
159 1.1 mrg
160 1.1 mrg (define_insn "*nabstd2_fpr"
161 1.3 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d,d")
162 1.3 mrg (neg:TD (abs:TD (match_operand:TD 1 "gpc_reg_operand" "0,d"))))]
163 1.1 mrg "TARGET_HARD_FLOAT && TARGET_FPRS"
164 1.3 mrg "@
165 1.3 mrg fnabs %0,%1
166 1.3 mrg fnabs %0,%1\;fmr %L0,%L1"
167 1.3 mrg [(set_attr "type" "fp")
168 1.3 mrg (set_attr "length" "4,8")])
169 1.1 mrg
170 1.1 mrg ;; Hardware support for decimal floating point operations.
171 1.1 mrg
172 1.1 mrg (define_insn "extendddtd2"
173 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
174 1.1 mrg (float_extend:TD (match_operand:DD 1 "gpc_reg_operand" "d")))]
175 1.1 mrg "TARGET_DFP"
176 1.1 mrg "dctqpq %0,%1"
177 1.1 mrg [(set_attr "type" "fp")])
178 1.1 mrg
179 1.1 mrg ;; The result of drdpq is an even/odd register pair with the converted
180 1.1 mrg ;; value in the even register and zero in the odd register.
181 1.1 mrg ;; FIXME: Avoid the register move by using a reload constraint to ensure
182 1.1 mrg ;; that the result is the first of the pair receiving the result of drdpq.
183 1.1 mrg
184 1.1 mrg (define_insn "trunctddd2"
185 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
186 1.1 mrg (float_truncate:DD (match_operand:TD 1 "gpc_reg_operand" "d")))
187 1.1 mrg (clobber (match_scratch:TD 2 "=d"))]
188 1.1 mrg "TARGET_DFP"
189 1.1 mrg "drdpq %2,%1\;fmr %0,%2"
190 1.1 mrg [(set_attr "type" "fp")])
191 1.1 mrg
192 1.1 mrg (define_insn "adddd3"
193 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
194 1.1 mrg (plus:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
195 1.1 mrg (match_operand:DD 2 "gpc_reg_operand" "d")))]
196 1.1 mrg "TARGET_DFP"
197 1.1 mrg "dadd %0,%1,%2"
198 1.1 mrg [(set_attr "type" "fp")])
199 1.1 mrg
200 1.1 mrg (define_insn "addtd3"
201 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
202 1.1 mrg (plus:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
203 1.1 mrg (match_operand:TD 2 "gpc_reg_operand" "d")))]
204 1.1 mrg "TARGET_DFP"
205 1.1 mrg "daddq %0,%1,%2"
206 1.1 mrg [(set_attr "type" "fp")])
207 1.1 mrg
208 1.1 mrg (define_insn "subdd3"
209 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
210 1.1 mrg (minus:DD (match_operand:DD 1 "gpc_reg_operand" "d")
211 1.1 mrg (match_operand:DD 2 "gpc_reg_operand" "d")))]
212 1.1 mrg "TARGET_DFP"
213 1.1 mrg "dsub %0,%1,%2"
214 1.1 mrg [(set_attr "type" "fp")])
215 1.1 mrg
216 1.1 mrg (define_insn "subtd3"
217 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
218 1.1 mrg (minus:TD (match_operand:TD 1 "gpc_reg_operand" "d")
219 1.1 mrg (match_operand:TD 2 "gpc_reg_operand" "d")))]
220 1.1 mrg "TARGET_DFP"
221 1.1 mrg "dsubq %0,%1,%2"
222 1.1 mrg [(set_attr "type" "fp")])
223 1.1 mrg
224 1.1 mrg (define_insn "muldd3"
225 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
226 1.1 mrg (mult:DD (match_operand:DD 1 "gpc_reg_operand" "%d")
227 1.1 mrg (match_operand:DD 2 "gpc_reg_operand" "d")))]
228 1.1 mrg "TARGET_DFP"
229 1.1 mrg "dmul %0,%1,%2"
230 1.1 mrg [(set_attr "type" "fp")])
231 1.1 mrg
232 1.1 mrg (define_insn "multd3"
233 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
234 1.1 mrg (mult:TD (match_operand:TD 1 "gpc_reg_operand" "%d")
235 1.1 mrg (match_operand:TD 2 "gpc_reg_operand" "d")))]
236 1.1 mrg "TARGET_DFP"
237 1.1 mrg "dmulq %0,%1,%2"
238 1.1 mrg [(set_attr "type" "fp")])
239 1.1 mrg
240 1.1 mrg (define_insn "divdd3"
241 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
242 1.1 mrg (div:DD (match_operand:DD 1 "gpc_reg_operand" "d")
243 1.1 mrg (match_operand:DD 2 "gpc_reg_operand" "d")))]
244 1.1 mrg "TARGET_DFP"
245 1.1 mrg "ddiv %0,%1,%2"
246 1.1 mrg [(set_attr "type" "fp")])
247 1.1 mrg
248 1.1 mrg (define_insn "divtd3"
249 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
250 1.1 mrg (div:TD (match_operand:TD 1 "gpc_reg_operand" "d")
251 1.1 mrg (match_operand:TD 2 "gpc_reg_operand" "d")))]
252 1.1 mrg "TARGET_DFP"
253 1.1 mrg "ddivq %0,%1,%2"
254 1.1 mrg [(set_attr "type" "fp")])
255 1.1 mrg
256 1.1 mrg (define_insn "*cmpdd_internal1"
257 1.1 mrg [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
258 1.1 mrg (compare:CCFP (match_operand:DD 1 "gpc_reg_operand" "d")
259 1.1 mrg (match_operand:DD 2 "gpc_reg_operand" "d")))]
260 1.1 mrg "TARGET_DFP"
261 1.1 mrg "dcmpu %0,%1,%2"
262 1.1 mrg [(set_attr "type" "fpcompare")])
263 1.1 mrg
264 1.1 mrg (define_insn "*cmptd_internal1"
265 1.1 mrg [(set (match_operand:CCFP 0 "cc_reg_operand" "=y")
266 1.1 mrg (compare:CCFP (match_operand:TD 1 "gpc_reg_operand" "d")
267 1.1 mrg (match_operand:TD 2 "gpc_reg_operand" "d")))]
268 1.1 mrg "TARGET_DFP"
269 1.1 mrg "dcmpuq %0,%1,%2"
270 1.1 mrg [(set_attr "type" "fpcompare")])
271 1.1 mrg
272 1.3 mrg (define_insn "floatdidd2"
273 1.3 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
274 1.3 mrg (float:DD (match_operand:DI 1 "gpc_reg_operand" "d")))]
275 1.3 mrg "TARGET_DFP && TARGET_POPCNTD"
276 1.3 mrg "dcffix %0,%1"
277 1.3 mrg [(set_attr "type" "fp")])
278 1.3 mrg
279 1.1 mrg (define_insn "floatditd2"
280 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
281 1.1 mrg (float:TD (match_operand:DI 1 "gpc_reg_operand" "d")))]
282 1.1 mrg "TARGET_DFP"
283 1.1 mrg "dcffixq %0,%1"
284 1.1 mrg [(set_attr "type" "fp")])
285 1.1 mrg
286 1.1 mrg ;; Convert a decimal64 to a decimal64 whose value is an integer.
287 1.1 mrg ;; This is the first stage of converting it to an integer type.
288 1.1 mrg
289 1.1 mrg (define_insn "ftruncdd2"
290 1.1 mrg [(set (match_operand:DD 0 "gpc_reg_operand" "=d")
291 1.1 mrg (fix:DD (match_operand:DD 1 "gpc_reg_operand" "d")))]
292 1.1 mrg "TARGET_DFP"
293 1.1 mrg "drintn. 0,%0,%1,1"
294 1.1 mrg [(set_attr "type" "fp")])
295 1.1 mrg
296 1.1 mrg ;; Convert a decimal64 whose value is an integer to an actual integer.
297 1.1 mrg ;; This is the second stage of converting decimal float to integer type.
298 1.1 mrg
299 1.1 mrg (define_insn "fixdddi2"
300 1.1 mrg [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
301 1.1 mrg (fix:DI (match_operand:DD 1 "gpc_reg_operand" "d")))]
302 1.1 mrg "TARGET_DFP"
303 1.1 mrg "dctfix %0,%1"
304 1.1 mrg [(set_attr "type" "fp")])
305 1.1 mrg
306 1.1 mrg ;; Convert a decimal128 to a decimal128 whose value is an integer.
307 1.1 mrg ;; This is the first stage of converting it to an integer type.
308 1.1 mrg
309 1.1 mrg (define_insn "ftrunctd2"
310 1.1 mrg [(set (match_operand:TD 0 "gpc_reg_operand" "=d")
311 1.1 mrg (fix:TD (match_operand:TD 1 "gpc_reg_operand" "d")))]
312 1.1 mrg "TARGET_DFP"
313 1.1 mrg "drintnq. 0,%0,%1,1"
314 1.1 mrg [(set_attr "type" "fp")])
315 1.1 mrg
316 1.1 mrg ;; Convert a decimal128 whose value is an integer to an actual integer.
317 1.1 mrg ;; This is the second stage of converting decimal float to integer type.
318 1.1 mrg
319 1.1 mrg (define_insn "fixtddi2"
320 1.1 mrg [(set (match_operand:DI 0 "gpc_reg_operand" "=d")
321 1.1 mrg (fix:DI (match_operand:TD 1 "gpc_reg_operand" "d")))]
322 1.1 mrg "TARGET_DFP"
323 1.1 mrg "dctfixq %0,%1"
324 1.1 mrg [(set_attr "type" "fp")])
325 1.3 mrg
326 1.3 mrg
328 1.3 mrg ;; Decimal builtin support
329 1.3 mrg
330 1.3 mrg (define_c_enum "unspec"
331 1.3 mrg [UNSPEC_DDEDPD
332 1.3 mrg UNSPEC_DENBCD
333 1.3 mrg UNSPEC_DXEX
334 1.3 mrg UNSPEC_DIEX
335 1.3 mrg UNSPEC_DSCLI
336 1.3 mrg UNSPEC_DSCRI])
337 1.3 mrg
338 1.3 mrg (define_mode_iterator D64_D128 [DD TD])
339 1.3 mrg
340 1.3 mrg (define_mode_attr dfp_suffix [(DD "")
341 1.3 mrg (TD "q")])
342 1.3 mrg
343 1.3 mrg (define_insn "dfp_ddedpd_<mode>"
344 1.3 mrg [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
345 1.3 mrg (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_3_operand" "i")
346 1.3 mrg (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
347 1.3 mrg UNSPEC_DDEDPD))]
348 1.3 mrg "TARGET_DFP"
349 1.3 mrg "ddedpd<dfp_suffix> %1,%0,%2"
350 1.3 mrg [(set_attr "type" "fp")])
351 1.3 mrg
352 1.3 mrg (define_insn "dfp_denbcd_<mode>"
353 1.3 mrg [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
354 1.3 mrg (unspec:D64_D128 [(match_operand:QI 1 "const_0_to_1_operand" "i")
355 1.3 mrg (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
356 1.3 mrg UNSPEC_DENBCD))]
357 1.3 mrg "TARGET_DFP"
358 1.3 mrg "denbcd<dfp_suffix> %1,%0,%2"
359 1.3 mrg [(set_attr "type" "fp")])
360 1.3 mrg
361 1.3 mrg (define_insn "dfp_dxex_<mode>"
362 1.3 mrg [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
363 1.3 mrg (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")]
364 1.3 mrg UNSPEC_DXEX))]
365 1.3 mrg "TARGET_DFP"
366 1.3 mrg "dxex<dfp_suffix> %0,%1"
367 1.3 mrg [(set_attr "type" "fp")])
368 1.3 mrg
369 1.3 mrg (define_insn "dfp_diex_<mode>"
370 1.3 mrg [(set (match_operand:D64_D128 0 "gpc_reg_operand" "=d")
371 1.3 mrg (unspec:D64_D128 [(match_operand:D64_D128 1 "gpc_reg_operand" "d")
372 1.3 mrg (match_operand:D64_D128 2 "gpc_reg_operand" "d")]
373 1.3 mrg UNSPEC_DXEX))]
374 1.3 mrg "TARGET_DFP"
375 1.3 mrg "diex<dfp_suffix> %0,%1,%2"
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.3 mrg "dscli<dfp_suffix> %0,%1,%2"
385 1.3 mrg [(set_attr "type" "fp")])
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.3 mrg "dscri<dfp_suffix> %0,%1,%2"
394 [(set_attr "type" "fp")])
395