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