]>
Commit | Line | Data |
---|---|---|
5aa04b01 | 1 | ;; Multiplication patterns for TI C6X. |
2 | ;; This file is processed by genmult.sh to produce two variants of each | |
3 | ;; pattern, a normal one and a real_mult variant for modulo scheduling. | |
f1717362 | 4 | ;; Copyright (C) 2010-2016 Free Software Foundation, Inc. |
5aa04b01 | 5 | ;; Contributed by Bernd Schmidt <bernds@codesourcery.com> |
6 | ;; Contributed by CodeSourcery. | |
7 | ;; | |
8 | ;; This file is part of GCC. | |
9 | ;; | |
10 | ;; GCC is free software; you can redistribute it and/or modify | |
11 | ;; it under the terms of the GNU General Public License as published by | |
12 | ;; the Free Software Foundation; either version 3, or (at your option) | |
13 | ;; any later version. | |
14 | ;; | |
15 | ;; GCC is distributed in the hope that it will be useful, | |
16 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
18 | ;; GNU General Public License for more details. | |
19 | ;; | |
20 | ;; You should have received a copy of the GNU General Public License | |
21 | ;; along with GCC; see the file COPYING3. If not see | |
22 | ;; <http://www.gnu.org/licenses/>. | |
23 | ||
24 | ;; ------------------------------------------------------------------------- | |
25 | ;; Miscellaneous insns that execute on the M units | |
26 | ;; ------------------------------------------------------------------------- | |
27 | ||
28 | (define_insn "rotlsi3_VARIANT_" | |
29 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
30 | (rotate:SI (match_operand:SI 1 "register_operand" "a,b,?b,?a") | |
31 | (match_operand:SI 2 "reg_or_ucst5_operand" "aIu5,bIu5,aIu5,bIu5"))_CBRK_)] | |
32 | "TARGET_INSNS_64" | |
33 | "%|%.\\trotl\\t%$\\t%1, %2, %_MODk_0" | |
34 | [(set_attr "units" "m") | |
35 | (set_attr "type" "mpy2") | |
36 | (set_attr "cross" "n,n,y,y")]) | |
37 | ||
38 | (define_insn "bitrevsi2_VARIANT_" | |
39 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_A_,_B_,_B_") | |
40 | (unspec:SI [(match_operand:SI 1 "register_operand" "a,?b,b,?a")] | |
41 | UNSPEC_BITREV)_CBRK_)] | |
42 | "TARGET_INSNS_64" | |
43 | "%|%.\\tbitr\\t%$\\t%1, %_MODk_0" | |
44 | [(set_attr "units" "m") | |
45 | (set_attr "type" "mpy2") | |
46 | (set_attr "cross" "n,y,n,y")]) | |
47 | ||
48 | ;; Vector average. | |
49 | ||
50 | (define_insn "avgv2hi3_VARIANT_" | |
51 | [(_SET_ _OBRK_(match_operand:_MV2HI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
52 | (unspec:V2HI [(match_operand:V2HI 1 "register_operand" "a,b,?b,?a") | |
53 | (match_operand:V2HI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG)_CBRK_)] | |
54 | "TARGET_INSNS_64" | |
55 | "%|%.\\tavg2\\t%$\\t%1, %2, %_MODk_0" | |
56 | [(set_attr "units" "m") | |
57 | (set_attr "type" "mpy2") | |
58 | (set_attr "cross" "n,n,y,y")]) | |
59 | ||
60 | (define_insn "uavgv4qi3_VARIANT_" | |
61 | [(_SET_ _OBRK_(match_operand:_MV4QI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
62 | (unspec:V4QI [(match_operand:V4QI 1 "register_operand" "a,b,?b,?a") | |
63 | (match_operand:V4QI 2 "register_operand" "a,b,a,b")] UNSPEC_AVG)_CBRK_)] | |
64 | "TARGET_INSNS_64" | |
65 | "%|%.\\tavgu4\\t%$\\t%1, %2, %_MODk_0" | |
66 | [(set_attr "units" "m") | |
67 | (set_attr "type" "mpy2") | |
68 | (set_attr "cross" "n,n,y,y")]) | |
69 | ||
70 | ;; ------------------------------------------------------------------------- | |
71 | ;; Multiplication | |
72 | ;; ------------------------------------------------------------------------- | |
73 | ||
74 | (define_insn "mulhi3_VARIANT_" | |
75 | [(_SET_ _OBRK_(match_operand:HI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
76 | (mult:HI (match_operand:HI 1 "register_operand" "a,b,?b,?a") | |
77 | (match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,aIs5,bIs5"))_CBRK_)] | |
78 | "" | |
79 | "%|%.\\tmpy\\t%$\\t%2, %1, %_MODk_0" | |
80 | [(set_attr "type" "mpy2") | |
81 | (set_attr "units" "m") | |
9a4c7d5b | 82 | (set_attr "op_pattern" "sxs") |
5aa04b01 | 83 | (set_attr "cross" "n,n,y,y")]) |
84 | ||
85 | (define_insn "mulhisi3_const_VARIANT_" | |
86 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A__B_") | |
87 | (mult:SI (sign_extend:SI | |
88 | (match_operand:HI 1 "register_operand" "a,b,?ab")) | |
89 | (match_operand:HI 2 "scst5_operand" "Is5,Is5,Is5"))_CBRK_)] | |
90 | "" | |
91 | "%|%.\\tmpy\\t%$\\t%2, %1, %_MODk_0" | |
92 | [(set_attr "type" "mpy2") | |
93 | (set_attr "units" "m") | |
94 | (set_attr "cross" "n,n,y")]) | |
95 | ||
96 | (define_insn "*mulhisi3_insn_VARIANT_" | |
97 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
98 | (mult:SI (sign_extend:SI | |
99 | (match_operand:HI 1 "register_operand" "%a,b,?a,?b")) | |
100 | (sign_extend:SI | |
101 | (match_operand:HI 2 "reg_or_scst5_operand" "a,b,b,a")))_CBRK_)] | |
102 | "" | |
103 | "%|%.\\tmpy\\t%$\\t%1, %2, %_MODk_0" | |
104 | [(set_attr "type" "mpy2") | |
105 | (set_attr "units" "m") | |
9a4c7d5b | 106 | (set_attr "op_pattern" "ssx") |
5aa04b01 | 107 | (set_attr "cross" "n,n,y,y")]) |
108 | ||
109 | (define_insn "mulhisi3_lh_VARIANT_" | |
110 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
111 | (mult:SI (sign_extend:SI | |
112 | (match_operand:HI 1 "register_operand" "a,b,?a,?b")) | |
113 | (ashiftrt:SI | |
114 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
115 | (const_int 16)))_CBRK_)] | |
116 | "" | |
117 | "%|%.\\tmpylh\\t%$\\t%1, %2, %_MODk_0" | |
118 | [(set_attr "type" "mpy2") | |
119 | (set_attr "units" "m") | |
120 | (set_attr "cross" "n,n,y,y")]) | |
121 | ||
122 | (define_insn "mulhisi3_hl_VARIANT_" | |
123 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
124 | (mult:SI (ashiftrt:SI | |
125 | (match_operand:SI 1 "register_operand" "a,b,?a,?b") | |
126 | (const_int 16)) | |
127 | (sign_extend:SI | |
128 | (match_operand:HI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
129 | "" | |
130 | "%|%.\\tmpyhl\\t%$\\t%1, %2, %_MODk_0" | |
131 | [(set_attr "type" "mpy2") | |
132 | (set_attr "units" "m") | |
133 | (set_attr "cross" "n,n,y,y")]) | |
134 | ||
135 | (define_insn "mulhisi3_hh_VARIANT_" | |
136 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
137 | (mult:SI (ashiftrt:SI | |
138 | (match_operand:SI 1 "register_operand" "%a,b,?a,?b") | |
139 | (const_int 16)) | |
140 | (ashiftrt:SI | |
141 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
142 | (const_int 16)))_CBRK_)] | |
143 | "" | |
144 | "%|%.\\tmpyh\\t%$\\t%1, %2, %_MODk_0" | |
145 | [(set_attr "type" "mpy2") | |
146 | (set_attr "units" "m") | |
147 | (set_attr "cross" "n,n,y,y")]) | |
148 | ||
149 | (define_insn "umulhisi3_VARIANT_" | |
150 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
151 | (mult:SI (zero_extend:SI | |
152 | (match_operand:HI 1 "register_operand" "%a,b,?a,?b")) | |
153 | (zero_extend:SI | |
154 | (match_operand:HI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
155 | "" | |
156 | "%|%.\\tmpyu\\t%$\\t%1, %2, %_MODk_0" | |
157 | [(set_attr "type" "mpy2") | |
158 | (set_attr "units" "m") | |
159 | (set_attr "cross" "n,n,y,y")]) | |
160 | ||
161 | (define_insn "umulhisi3_lh_VARIANT_" | |
162 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
163 | (mult:SI (zero_extend:SI | |
164 | (match_operand:HI 1 "register_operand" "a,b,?a,?b")) | |
165 | (lshiftrt:SI | |
166 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
167 | (const_int 16)))_CBRK_)] | |
168 | "" | |
169 | "%|%.\\tmpylhu\\t%$\\t%1, %2, %_MODk_0" | |
170 | [(set_attr "type" "mpy2") | |
171 | (set_attr "units" "m") | |
172 | (set_attr "cross" "n,n,y,y")]) | |
173 | ||
174 | (define_insn "umulhisi3_hl_VARIANT_" | |
175 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
176 | (mult:SI (lshiftrt:SI | |
177 | (match_operand:SI 1 "register_operand" "a,b,?a,?b") | |
178 | (const_int 16)) | |
179 | (zero_extend:SI | |
180 | (match_operand:HI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
181 | "" | |
182 | "%|%.\\tmpyhlu\\t%$\\t%1, %2, %_MODk_0" | |
183 | [(set_attr "type" "mpy2") | |
184 | (set_attr "units" "m") | |
185 | (set_attr "cross" "n,n,y,y")]) | |
186 | ||
187 | (define_insn "umulhisi3_hh_VARIANT_" | |
188 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
189 | (mult:SI (lshiftrt:SI | |
190 | (match_operand:SI 1 "register_operand" "%a,b,?a,?b") | |
191 | (const_int 16)) | |
192 | (lshiftrt:SI | |
193 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
194 | (const_int 16)))_CBRK_)] | |
195 | "" | |
196 | "%|%.\\tmpyhu\\t%$\\t%1, %2, %_MODk_0" | |
197 | [(set_attr "type" "mpy2") | |
198 | (set_attr "units" "m") | |
199 | (set_attr "cross" "n,n,y,y")]) | |
200 | ||
201 | (define_insn "usmulhisi3_const_VARIANT_" | |
202 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A__B_") | |
203 | (mult:SI (zero_extend:SI | |
204 | (match_operand:HI 1 "register_operand" "a,b,?ab")) | |
205 | (match_operand:SI 2 "scst5_operand" "Is5,Is5,Is5"))_CBRK_)] | |
206 | "" | |
207 | "%|%.\\tmpysu\\t%$\\t%2, %1, %_MODk_0" | |
208 | [(set_attr "type" "mpy2") | |
209 | (set_attr "units" "m") | |
210 | (set_attr "cross" "n,n,y")]) | |
211 | ||
212 | (define_insn "*usmulhisi3_insn_VARIANT_" | |
213 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
214 | (mult:SI (zero_extend:SI | |
215 | (match_operand:HI 1 "register_operand" "a,b,?a,?b")) | |
216 | (sign_extend:SI | |
217 | (match_operand:HI 2 "reg_or_scst5_operand" "aIs5,bIs5,bIs5,aIs5")))_CBRK_)] | |
218 | "" | |
219 | "%|%.\\tmpyus\\t%$\\t%1, %2, %_MODk_0" | |
220 | [(set_attr "type" "mpy2") | |
221 | (set_attr "units" "m") | |
222 | (set_attr "cross" "n,n,y,y")]) | |
223 | ||
224 | (define_insn "usmulhisi3_lh_VARIANT_" | |
225 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
226 | (mult:SI (zero_extend:SI | |
227 | (match_operand:HI 1 "register_operand" "a,b,?a,?b")) | |
228 | (ashiftrt:SI | |
229 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
230 | (const_int 16)))_CBRK_)] | |
231 | "" | |
232 | "%|%.\\tmpyluhs\\t%$\\t%1, %2, %_MODk_0" | |
233 | [(set_attr "type" "mpy2") | |
234 | (set_attr "units" "m") | |
235 | (set_attr "cross" "n,n,y,y")]) | |
236 | ||
237 | (define_insn "usmulhisi3_hl_VARIANT_" | |
238 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
239 | (mult:SI (lshiftrt:SI | |
240 | (match_operand:SI 1 "register_operand" "a,b,?a,?b") | |
241 | (const_int 16)) | |
242 | (sign_extend:SI | |
243 | (match_operand:HI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
244 | "" | |
245 | "%|%.\\tmpyhuls\\t%$\\t%1, %2, %_MODk_0" | |
246 | [(set_attr "type" "mpy2") | |
247 | (set_attr "units" "m") | |
248 | (set_attr "cross" "n,n,y,y")]) | |
249 | ||
250 | (define_insn "usmulhisi3_hh_VARIANT_" | |
251 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
252 | (mult:SI (lshiftrt:SI | |
253 | (match_operand:SI 1 "register_operand" "a,b,?a,?b") | |
254 | (const_int 16)) | |
255 | (ashiftrt:SI | |
256 | (match_operand:SI 2 "register_operand" "a,b,b,a") | |
257 | (const_int 16)))_CBRK_)] | |
258 | "" | |
259 | "%|%.\\tmpyhus\\t%$\\t%1, %2, %_MODk_0" | |
260 | [(set_attr "type" "mpy2") | |
261 | (set_attr "units" "m") | |
262 | (set_attr "cross" "n,n,y,y")]) | |
263 | ||
264 | (define_insn "mulsi3_insn_VARIANT_" | |
265 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
266 | (mult:SI (match_operand:SI 1 "register_operand" "%a,b,?a,?b") | |
267 | (match_operand:SI 2 "register_operand" "a,b,b,a"))_CBRK_)] | |
268 | "TARGET_MPY32" | |
269 | "%|%.\\tmpy32\\t%$\\t%1, %2, %_MODk_0" | |
270 | [(set_attr "type" "mpy4") | |
271 | (set_attr "units" "m") | |
272 | (set_attr "cross" "n,n,y,y")]) | |
273 | ||
274 | (define_insn "<u>mulsidi3_VARIANT_" | |
275 | [(_SET_ _OBRK_(match_operand:DI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
276 | (mult:DI (any_ext:DI | |
277 | (match_operand:SI 1 "register_operand" "%a,b,?a,?b")) | |
278 | (any_ext:DI | |
279 | (match_operand:SI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
280 | "TARGET_MPY32" | |
281 | "%|%.\\tmpy32<u>\\t%$\\t%1, %2, %_MODK_0" | |
282 | [(set_attr "type" "mpy4") | |
283 | (set_attr "units" "m") | |
284 | (set_attr "cross" "n,n,y,y")]) | |
285 | ||
286 | (define_insn "usmulsidi3_VARIANT_" | |
287 | [(_SET_ _OBRK_(match_operand:DI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
288 | (mult:DI (zero_extend:DI | |
289 | (match_operand:SI 1 "register_operand" "a,b,?a,?b")) | |
290 | (sign_extend:DI | |
291 | (match_operand:SI 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
292 | "TARGET_MPY32" | |
293 | "%|%.\\tmpy32us\\t%$\\t%1, %2, %_MODK_0" | |
294 | [(set_attr "type" "mpy4") | |
295 | (set_attr "units" "m") | |
296 | (set_attr "cross" "n,n,y,y")]) | |
297 | ||
298 | ;; Widening vector multiply and dot product | |
299 | ||
300 | (define_insn "mulv2hiv2si3_VARIANT_" | |
301 | [(_SET_ _OBRK_(match_operand:V2SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
302 | (mult:V2SI | |
303 | (sign_extend:V2SI (match_operand:V2HI 1 "register_operand" "a,b,a,b")) | |
304 | (sign_extend:V2SI (match_operand:V2HI 2 "register_operand" "a,b,?b,?a")))_CBRK_)] | |
305 | "TARGET_INSNS_64" | |
306 | "%|%.\\tmpy2\\t%$\\t%1, %2, %_MODk_0" | |
307 | [(set_attr "type" "mpy4") | |
308 | (set_attr "units" "m") | |
309 | (set_attr "cross" "n,n,y,y")]) | |
310 | ||
311 | (define_insn "umulv4qiv4hi3_VARIANT_" | |
312 | [(_SET_ _OBRK_(match_operand:V4HI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
313 | (mult:V4HI | |
314 | (zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,a,b")) | |
315 | (zero_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,?b,?a")))_CBRK_)] | |
316 | "TARGET_INSNS_64" | |
317 | "%|%.\\tmpyu4\\t%$\\t%1, %2, %_MODk_0" | |
318 | [(set_attr "type" "mpy4") | |
319 | (set_attr "units" "m") | |
320 | (set_attr "cross" "n,n,y,y")]) | |
321 | ||
322 | (define_insn "usmulv4qiv4hi3_VARIANT_" | |
323 | [(_SET_ _OBRK_(match_operand:V4HI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
324 | (mult:V4HI | |
325 | (zero_extend:V4HI (match_operand:V4QI 1 "register_operand" "a,b,?b,?a")) | |
326 | (sign_extend:V4HI (match_operand:V4QI 2 "register_operand" "a,b,a,b")))_CBRK_)] | |
327 | "TARGET_INSNS_64" | |
328 | "%|%.\\tmpyus4\\t%$\\t%1, %2, %_MODk_0" | |
329 | [(set_attr "type" "mpy4") | |
330 | (set_attr "units" "m") | |
331 | (set_attr "cross" "n,n,y,y")]) | |
332 | ||
333 | (define_insn "dotv2hi_VARIANT_" | |
334 | [(_SET_ _OBRK_(match_operand:SI 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
335 | (plus:SI | |
336 | (mult:SI | |
337 | (sign_extend:SI | |
338 | (vec_select:HI | |
339 | (match_operand:V2HI 1 "register_operand" "a,b,a,b") | |
340 | (parallel [(const_int 0)]))) | |
341 | (sign_extend:SI | |
342 | (vec_select:HI | |
343 | (match_operand:V2HI 2 "register_operand" "a,b,?b,?a") | |
344 | (parallel [(const_int 0)])))) | |
345 | (mult:SI | |
346 | (sign_extend:SI | |
347 | (vec_select:HI (match_dup 1) (parallel [(const_int 1)]))) | |
348 | (sign_extend:SI | |
349 | (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))_CBRK_)] | |
350 | "TARGET_INSNS_64" | |
351 | "%|%.\\tdotp2\\t%$\\t%1, %2, %_MODk_0" | |
352 | [(set_attr "type" "mpy4") | |
353 | (set_attr "units" "m") | |
354 | (set_attr "cross" "n,n,y,y")]) | |
355 | ||
356 | ;; Fractional multiply | |
357 | ||
358 | (define_insn "mulv2hqv2sq3_VARIANT_" | |
359 | [(_SET_ _OBRK_(match_operand:_MV2SQ 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
360 | (ss_mult:V2SQ | |
361 | (fract_convert:V2SQ | |
362 | (match_operand:V2HQ 1 "register_operand" "%a,b,?a,?b")) | |
363 | (fract_convert:V2SQ | |
364 | (match_operand:V2HQ 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
365 | "" | |
366 | "%|%.\\tsmpy2\\t%$\\t%1, %2, %_MODk_0" | |
367 | [(set_attr "type" "mpy4") | |
368 | (set_attr "units" "m") | |
369 | (set_attr "cross" "n,n,y,y")]) | |
370 | ||
371 | (define_insn "mulhqsq3_VARIANT_" | |
372 | [(_SET_ _OBRK_(match_operand:_MSQ 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
373 | (ss_mult:SQ | |
374 | (fract_convert:SQ | |
375 | (match_operand:HQ 1 "register_operand" "%a,b,?a,?b")) | |
376 | (fract_convert:SQ | |
377 | (match_operand:HQ 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
378 | "" | |
379 | "%|%.\\tsmpy\\t%$\\t%1, %2, %_MODk_0" | |
380 | [(set_attr "type" "mpy2") | |
381 | (set_attr "units" "m") | |
382 | (set_attr "cross" "n,n,y,y")]) | |
383 | ||
384 | (define_insn "mulhqsq3_lh_VARIANT_" | |
385 | [(_SET_ _OBRK_(match_operand:_MSQ 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
386 | (ss_mult:SQ | |
387 | (fract_convert:SQ | |
388 | (match_operand:HQ 1 "register_operand" "a,b,?a,?b")) | |
389 | (fract_convert:SQ | |
390 | (truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a"))))_CBRK_)] | |
391 | "" | |
392 | "%|%.\\tsmpylh\\t%$\\t%1, %2, %_MODk_0" | |
393 | [(set_attr "type" "mpy2") | |
394 | (set_attr "units" "m") | |
395 | (set_attr "cross" "n,n,y,y")]) | |
396 | ||
397 | (define_insn "mulhqsq3_hl_VARIANT_" | |
398 | [(_SET_ _OBRK_(match_operand:_MSQ 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
399 | (ss_mult:SQ | |
400 | (fract_convert:SQ | |
401 | (truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a"))) | |
402 | (fract_convert:SQ | |
403 | (match_operand:HQ 2 "register_operand" "a,b,b,a")))_CBRK_)] | |
404 | "" | |
405 | "%|%.\\tsmpyhl\\t%$\\t%1, %2, %_MODk_0" | |
406 | [(set_attr "type" "mpy2") | |
407 | (set_attr "units" "m") | |
408 | (set_attr "cross" "n,n,y,y")]) | |
409 | ||
410 | (define_insn "mulhqsq3_hh_VARIANT_" | |
411 | [(_SET_ _OBRK_(match_operand:_MSQ 0 "_DESTOPERAND_" "=_A_,_B_,_A_,_B_") | |
412 | (ss_mult:SQ | |
413 | (fract_convert:SQ | |
414 | (truncate:HQ (match_operand:SQ 1 "register_operand" "a,b,b,a"))) | |
415 | (fract_convert:SQ | |
416 | (truncate:HQ (match_operand:SQ 2 "register_operand" "a,b,b,a"))))_CBRK_)] | |
417 | "" | |
418 | "%|%.\\tsmpyh\\t%$\\t%1, %2, %_MODk_0" | |
419 | [(set_attr "type" "mpy2") | |
420 | (set_attr "units" "m") | |
421 | (set_attr "cross" "n,n,y,y")]) |