1 ;; Machine description of the Synopsys DesignWare ARC cpu for GNU C compiler
2 ;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
4 ;; This file is part of GCC.
6 ;; GCC is free software; you can redistribute it and/or modify
7 ;; it under the terms of the GNU General Public License as published by
8 ;; the Free Software Foundation; either version 3, or (at your option)
11 ;; GCC is distributed in the hope that it will be useful,
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 ;; GNU General Public License for more details.
16 ;; You should have received a copy of the GNU General Public License
17 ;; along with GCC; see the file COPYING3. If not see
18 ;; <http://www.gnu.org/licenses/>.
20 (define_c_enum "unspec" [
21 ;; Va, Vb, Vc builtins
22 UNSPEC_ARC_SIMD_VADDAW
26 UNSPEC_ARC_SIMD_VDIFAW
28 UNSPEC_ARC_SIMD_VMAXAW
30 UNSPEC_ARC_SIMD_VMINAW
32 UNSPEC_ARC_SIMD_VMULAW
33 UNSPEC_ARC_SIMD_VMULFAW
34 UNSPEC_ARC_SIMD_VMULFW
36 UNSPEC_ARC_SIMD_VSUBAW
38 UNSPEC_ARC_SIMD_VSUMMW
40 UNSPEC_ARC_SIMD_VANDAW
42 UNSPEC_ARC_SIMD_VBICAW
45 UNSPEC_ARC_SIMD_VXORAW
50 UNSPEC_ARC_SIMD_VMR1AW
52 UNSPEC_ARC_SIMD_VMR2AW
54 UNSPEC_ARC_SIMD_VMR3AW
56 UNSPEC_ARC_SIMD_VMR4AW
58 UNSPEC_ARC_SIMD_VMR5AW
60 UNSPEC_ARC_SIMD_VMR6AW
62 UNSPEC_ARC_SIMD_VMR7AW
65 UNSPEC_ARC_SIMD_VH264F
66 UNSPEC_ARC_SIMD_VH264FT
67 UNSPEC_ARC_SIMD_VH264FW
69 UNSPEC_ARC_SIMD_VVC1FT
70 ;; Va, Vb, rc/limm builtins
71 UNSPEC_ARC_SIMD_VBADDW
72 UNSPEC_ARC_SIMD_VBMAXW
73 UNSPEC_ARC_SIMD_VBMINW
74 UNSPEC_ARC_SIMD_VBMULAW
75 UNSPEC_ARC_SIMD_VBMULFW
76 UNSPEC_ARC_SIMD_VBMULW
77 UNSPEC_ARC_SIMD_VBRSUBW
78 UNSPEC_ARC_SIMD_VBSUBW
80 ;; Va, Vb, Ic builtins
83 UNSPEC_ARC_SIMD_VSR8AW
85 ;; Va, Vb, Ic builtins
86 UNSPEC_ARC_SIMD_VASRRWi
87 UNSPEC_ARC_SIMD_VASRSRWi
88 UNSPEC_ARC_SIMD_VASRWi
89 UNSPEC_ARC_SIMD_VASRPWBi
90 UNSPEC_ARC_SIMD_VASRRPWBi
91 UNSPEC_ARC_SIMD_VSR8AWi
94 ;; Va, Vb, u8 (simm) builtins
98 UNSPEC_ARC_SIMD_VD6TAPF
100 ;; Va, rlimm, u8 (simm) builtins
101 UNSPEC_ARC_SIMD_VMOVAW
102 UNSPEC_ARC_SIMD_VMOVW
103 UNSPEC_ARC_SIMD_VMOVZW
106 UNSPEC_ARC_SIMD_VABSAW
107 UNSPEC_ARC_SIMD_VABSW
108 UNSPEC_ARC_SIMD_VADDSUW
109 UNSPEC_ARC_SIMD_VSIGNW
110 UNSPEC_ARC_SIMD_VEXCH1
111 UNSPEC_ARC_SIMD_VEXCH2
112 UNSPEC_ARC_SIMD_VEXCH4
113 UNSPEC_ARC_SIMD_VUPBAW
114 UNSPEC_ARC_SIMD_VUPBW
115 UNSPEC_ARC_SIMD_VUPSBAW
116 UNSPEC_ARC_SIMD_VUPSBW
118 UNSPEC_ARC_SIMD_VDIRUN
119 UNSPEC_ARC_SIMD_VDORUN
120 UNSPEC_ARC_SIMD_VDIWR
121 UNSPEC_ARC_SIMD_VDOWR
125 UNSPEC_ARC_SIMD_VRECRUN
126 UNSPEC_ARC_SIMD_VENDREC
128 UNSPEC_ARC_SIMD_VCAST
129 UNSPEC_ARC_SIMD_VINTI
132 ;; Scheduler descriptions for the simd instructions
133 (define_insn_reservation "simd_lat_0_insn" 1
134 (eq_attr "type" "simd_dma, simd_vstore, simd_vcontrol")
137 (define_insn_reservation "simd_lat_1_insn" 2
138 (eq_attr "type" "simd_vcompare, simd_vlogic,
139 simd_vmove_else_zero, simd_varith_1cycle")
140 "issue+simd_unit, nothing")
142 (define_insn_reservation "simd_lat_2_insn" 3
143 (eq_attr "type" "simd_valign, simd_vpermute,
144 simd_vpack, simd_varith_2cycle")
145 "issue+simd_unit, nothing*2")
147 (define_insn_reservation "simd_lat_3_insn" 4
148 (eq_attr "type" "simd_valign_with_acc, simd_vpack_with_acc,
149 simd_vlogic_with_acc, simd_vload128,
150 simd_vmove_with_acc, simd_vspecial_3cycle,
151 simd_varith_with_acc")
152 "issue+simd_unit, nothing*3")
154 (define_insn_reservation "simd_lat_4_insn" 5
155 (eq_attr "type" "simd_vload, simd_vmove, simd_vspecial_4cycle")
156 "issue+simd_unit, nothing*4")
158 (define_expand "movv8hi"
159 [(set (match_operand:V8HI 0 "general_operand" "")
160 (match_operand:V8HI 1 "general_operand" ""))]
164 /* Everything except mem = const or mem = mem can be done easily. */
166 if (GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)
167 operands[1] = force_reg (V8HImode, operands[1]);
170 ;; This pattern should appear before the movv8hi_insn pattern
171 (define_insn "vld128_insn"
172 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
173 (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
174 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
175 (match_operand:SI 3 "immediate_operand" "P"))))]
177 "vld128 %0, [i%2, %3]"
178 [(set_attr "type" "simd_vload128")
179 (set_attr "length" "4")
180 (set_attr "cond" "nocond")]
183 (define_insn "vst128_insn"
184 [(set (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
185 (parallel [(match_operand:SI 1 "immediate_operand" "L")])))
186 (match_operand:SI 2 "immediate_operand" "P")))
187 (match_operand:V8HI 3 "vector_register_operand" "=v"))]
189 "vst128 %3, [i%1, %2]"
190 [(set_attr "type" "simd_vstore")
191 (set_attr "length" "4")
192 (set_attr "cond" "nocond")]
195 (define_insn "vst64_insn"
196 [(set (mem:V4HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
197 (parallel [(match_operand:SI 1 "immediate_operand" "L")])))
198 (match_operand:SI 2 "immediate_operand" "P")))
199 (vec_select:V4HI (match_operand:V8HI 3 "vector_register_operand" "=v")
200 (parallel [(const_int 0)])))]
202 "vst64 %3, [i%1, %2]"
203 [(set_attr "type" "simd_vstore")
204 (set_attr "length" "4")
205 (set_attr "cond" "nocond")]
208 (define_insn "movv8hi_insn"
209 [(set (match_operand:V8HI 0 "vector_register_or_memory_operand" "=v,m,v")
210 (match_operand:V8HI 1 "vector_register_or_memory_operand" "m,v,v"))]
211 "TARGET_SIMD_SET && !(GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)"
216 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
217 (set_attr "length" "8,8,4")
218 (set_attr "cond" "nocond, nocond, nocond")])
220 (define_insn "movti_insn"
221 [(set (match_operand:TI 0 "vector_register_or_memory_operand" "=v,m,v")
222 (match_operand:TI 1 "vector_register_or_memory_operand" "m,v,v"))]
228 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
229 (set_attr "length" "8,8,4")
230 (set_attr "cond" "nocond, nocond, nocond")])
232 ;; (define_insn "*movv8hi_insn_rr"
233 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
234 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
237 ;; [(set_attr "length" "8")
238 ;; (set_attr "type" "move")])
240 ;; (define_insn "*movv8_out"
241 ;; [(set (match_operand:V8HI 0 "memory_operand" "=m")
242 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
245 ;; [(set_attr "length" "8")
246 ;; (set_attr "type" "move")])
249 ;; (define_insn "addv8hi3"
250 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
251 ;; (plus:V8HI (match_operand:V8HI 1 "vector_register_operand" "v")
252 ;; (match_operand:V8HI 2 "vector_register_operand" "v")))]
254 ;; "vaddw %0, %1, %2"
255 ;; [(set_attr "length" "8")
256 ;; (set_attr "cond" "nocond")])
258 ;; (define_insn "vaddw_insn"
259 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
260 ;; (unspec [(match_operand:V8HI 1 "vector_register_operand" "v")
261 ;; (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
263 ;; "vaddw %0, %1, %2"
264 ;; [(set_attr "length" "8")
265 ;; (set_attr "cond" "nocond")])
268 (define_insn "vaddaw_insn"
269 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
270 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
271 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDAW))]
274 [(set_attr "type" "simd_varith_with_acc")
275 (set_attr "length" "4")
276 (set_attr "cond" "nocond")])
278 (define_insn "vaddw_insn"
279 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
280 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
281 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
284 [(set_attr "type" "simd_varith_1cycle")
285 (set_attr "length" "4")
286 (set_attr "cond" "nocond")])
288 (define_insn "vavb_insn"
289 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
290 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
291 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVB))]
294 [(set_attr "type" "simd_varith_1cycle")
295 (set_attr "length" "4")
296 (set_attr "cond" "nocond")])
298 (define_insn "vavrb_insn"
299 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
300 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
301 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVRB))]
304 [(set_attr "type" "simd_varith_1cycle")
305 (set_attr "length" "4")
306 (set_attr "cond" "nocond")])
308 (define_insn "vdifaw_insn"
309 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
310 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
311 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFAW))]
314 [(set_attr "type" "simd_varith_with_acc")
315 (set_attr "length" "4")
316 (set_attr "cond" "nocond")])
318 (define_insn "vdifw_insn"
319 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
320 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
321 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFW))]
324 [(set_attr "type" "simd_varith_1cycle")
325 (set_attr "length" "4")
326 (set_attr "cond" "nocond")])
328 (define_insn "vmaxaw_insn"
329 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
330 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
331 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXAW))]
334 [(set_attr "type" "simd_varith_with_acc")
335 (set_attr "length" "4")
336 (set_attr "cond" "nocond")])
338 (define_insn "vmaxw_insn"
339 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
340 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
341 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXW))]
344 [(set_attr "type" "simd_varith_1cycle")
345 (set_attr "length" "4")
346 (set_attr "cond" "nocond")])
348 (define_insn "vminaw_insn"
349 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
350 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
351 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINAW))]
354 [(set_attr "type" "simd_varith_with_acc")
355 (set_attr "length" "4")
356 (set_attr "cond" "nocond")])
358 (define_insn "vminw_insn"
359 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
360 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
361 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINW))]
364 [(set_attr "type" "simd_varith_1cycle")
365 (set_attr "length" "4")
366 (set_attr "cond" "nocond")])
368 (define_insn "vmulaw_insn"
369 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
370 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
371 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULAW))]
374 [(set_attr "type" "simd_varith_with_acc")
375 (set_attr "length" "4")
376 (set_attr "cond" "nocond")])
378 (define_insn "vmulfaw_insn"
379 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
380 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
381 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFAW))]
384 [(set_attr "type" "simd_varith_with_acc")
385 (set_attr "length" "4")
386 (set_attr "cond" "nocond")])
388 (define_insn "vmulfw_insn"
389 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
390 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
391 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFW))]
394 [(set_attr "type" "simd_varith_2cycle")
395 (set_attr "length" "4")
396 (set_attr "cond" "nocond")])
398 (define_insn "vmulw_insn"
399 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
400 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
401 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULW))]
404 [(set_attr "type" "simd_varith_2cycle")
405 (set_attr "length" "4")
406 (set_attr "cond" "nocond")])
408 (define_insn "vsubaw_insn"
409 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
410 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
411 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBAW))]
414 [(set_attr "type" "simd_varith_with_acc")
415 (set_attr "length" "4")
416 (set_attr "cond" "nocond")])
418 (define_insn "vsubw_insn"
419 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
420 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
421 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBW))]
424 [(set_attr "type" "simd_varith_1cycle")
425 (set_attr "length" "4")
426 (set_attr "cond" "nocond")])
428 (define_insn "vsummw_insn"
429 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
430 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
431 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUMMW))]
434 [(set_attr "type" "simd_varith_2cycle")
435 (set_attr "length" "4")
436 (set_attr "cond" "nocond")])
438 (define_insn "vand_insn"
439 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
440 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
441 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAND))]
444 [(set_attr "type" "simd_vlogic")
445 (set_attr "length" "4")
446 (set_attr "cond" "nocond")])
448 (define_insn "vandaw_insn"
449 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
450 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
451 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VANDAW))]
454 [(set_attr "type" "simd_vlogic_with_acc")
455 (set_attr "length" "4")
456 (set_attr "cond" "nocond")])
458 (define_insn "vbic_insn"
459 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
460 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
461 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBIC))]
464 [(set_attr "type" "simd_vlogic")
465 (set_attr "length" "4")
466 (set_attr "cond" "nocond")])
468 (define_insn "vbicaw_insn"
469 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
470 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
471 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBICAW))]
474 [(set_attr "type" "simd_vlogic_with_acc")
475 (set_attr "length" "4")
476 (set_attr "cond" "nocond")])
478 (define_insn "vor_insn"
479 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
480 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
481 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VOR))]
484 [(set_attr "type" "simd_vlogic")
485 (set_attr "length" "4")
486 (set_attr "cond" "nocond")])
488 (define_insn "vxor_insn"
489 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
490 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
491 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXOR))]
494 [(set_attr "type" "simd_vlogic")
495 (set_attr "length" "4")
496 (set_attr "cond" "nocond")])
498 (define_insn "vxoraw_insn"
499 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
500 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
501 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXORAW))]
504 [(set_attr "type" "simd_vlogic_with_acc")
505 (set_attr "length" "4")
506 (set_attr "cond" "nocond")])
508 (define_insn "veqw_insn"
509 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
510 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
511 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEQW))]
514 [(set_attr "type" "simd_vcompare")
515 (set_attr "length" "4")
516 (set_attr "cond" "nocond")])
518 (define_insn "vlew_insn"
519 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
520 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
521 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLEW))]
524 [(set_attr "type" "simd_vcompare")
525 (set_attr "length" "4")
526 (set_attr "cond" "nocond")])
528 (define_insn "vltw_insn"
529 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
530 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
531 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLTW))]
534 [(set_attr "type" "simd_vcompare")
535 (set_attr "length" "4")
536 (set_attr "cond" "nocond")])
538 (define_insn "vnew_insn"
539 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
540 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
541 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VNEW))]
544 [(set_attr "type" "simd_vcompare")
545 (set_attr "length" "4")
546 (set_attr "cond" "nocond")])
548 (define_insn "vmr1aw_insn"
549 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
550 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
551 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1AW))]
554 [(set_attr "type" "simd_valign_with_acc")
555 (set_attr "length" "4")
556 (set_attr "cond" "nocond")])
558 (define_insn "vmr1w_insn"
559 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
560 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
561 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1W))]
564 [(set_attr "type" "simd_valign")
565 (set_attr "length" "4")
566 (set_attr "cond" "nocond")])
568 (define_insn "vmr2aw_insn"
569 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
570 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
571 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2AW))]
574 [(set_attr "type" "simd_valign_with_acc")
575 (set_attr "length" "4")
576 (set_attr "cond" "nocond")])
578 (define_insn "vmr2w_insn"
579 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
580 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
581 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2W))]
584 [(set_attr "type" "simd_valign")
585 (set_attr "length" "4")
586 (set_attr "cond" "nocond")])
588 (define_insn "vmr3aw_insn"
589 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
590 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
591 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3AW))]
594 [(set_attr "type" "simd_valign_with_acc")
595 (set_attr "length" "4")
596 (set_attr "cond" "nocond")])
598 (define_insn "vmr3w_insn"
599 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
600 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
601 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3W))]
604 [(set_attr "type" "simd_valign")
605 (set_attr "length" "4")
606 (set_attr "cond" "nocond")])
608 (define_insn "vmr4aw_insn"
609 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
610 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
611 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4AW))]
614 [(set_attr "type" "simd_valign_with_acc")
615 (set_attr "length" "4")
616 (set_attr "cond" "nocond")])
618 (define_insn "vmr4w_insn"
619 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
620 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
621 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4W))]
624 [(set_attr "type" "simd_valign")
625 (set_attr "length" "4")
626 (set_attr "cond" "nocond")])
628 (define_insn "vmr5aw_insn"
629 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
630 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
631 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5AW))]
634 [(set_attr "type" "simd_valign_with_acc")
635 (set_attr "length" "4")
636 (set_attr "cond" "nocond")])
638 (define_insn "vmr5w_insn"
639 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
640 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
641 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5W))]
644 [(set_attr "type" "simd_valign")
645 (set_attr "length" "4")
646 (set_attr "cond" "nocond")])
648 (define_insn "vmr6aw_insn"
649 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
650 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
651 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6AW))]
654 [(set_attr "type" "simd_valign_with_acc")
655 (set_attr "length" "4")
656 (set_attr "cond" "nocond")])
658 (define_insn "vmr6w_insn"
659 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
660 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
661 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6W))]
664 [(set_attr "type" "simd_valign")
665 (set_attr "length" "4")
666 (set_attr "cond" "nocond")])
668 (define_insn "vmr7aw_insn"
669 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
670 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
671 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7AW))]
674 [(set_attr "type" "simd_valign_with_acc")
675 (set_attr "length" "4")
676 (set_attr "cond" "nocond")])
678 (define_insn "vmr7w_insn"
679 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
680 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
681 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7W))]
684 [(set_attr "type" "simd_valign")
685 (set_attr "length" "4")
686 (set_attr "cond" "nocond")])
688 (define_insn "vmrb_insn"
689 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
690 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
691 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMRB))]
694 [(set_attr "type" "simd_valign")
695 (set_attr "length" "4")
696 (set_attr "cond" "nocond")])
698 (define_insn "vh264f_insn"
699 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
700 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
701 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264F))]
704 [(set_attr "type" "simd_vspecial_3cycle")
705 (set_attr "length" "4")
706 (set_attr "cond" "nocond")])
708 (define_insn "vh264ft_insn"
709 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
710 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
711 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FT))]
714 [(set_attr "type" "simd_vspecial_3cycle")
715 (set_attr "length" "4")
716 (set_attr "cond" "nocond")])
718 (define_insn "vh264fw_insn"
719 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
720 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
721 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FW))]
724 [(set_attr "type" "simd_vspecial_3cycle")
725 (set_attr "length" "4")
726 (set_attr "cond" "nocond")])
728 (define_insn "vvc1f_insn"
729 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
730 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
731 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1F))]
734 [(set_attr "type" "simd_vspecial_3cycle")
735 (set_attr "length" "4")
736 (set_attr "cond" "nocond")])
738 (define_insn "vvc1ft_insn"
739 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
740 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
741 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1FT))]
744 [(set_attr "type" "simd_vspecial_3cycle")
745 (set_attr "length" "4")
746 (set_attr "cond" "nocond")])
753 ;; (define_insn "vbaddw_insn"
754 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
755 ;; (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
756 ;; (match_operand:SI 2 "nonmemory_operand" "rCal")] UNSPEC_ARC_SIMD_VBADDW))]
758 ;; "vbaddw %0, %1, %2"
759 ;; [(set_attr "length" "4")
760 ;; (set_attr "cond" "nocond")])
762 (define_insn "vbaddw_insn"
763 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
764 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
765 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBADDW))]
768 [(set_attr "type" "simd_varith_1cycle")
769 (set_attr "length" "4")
770 (set_attr "cond" "nocond")])
772 (define_insn "vbmaxw_insn"
773 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
774 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
775 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMAXW))]
778 [(set_attr "type" "simd_varith_1cycle")
779 (set_attr "length" "4")
780 (set_attr "cond" "nocond")])
782 (define_insn "vbminw_insn"
783 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
784 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
785 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMINW))]
788 [(set_attr "type" "simd_varith_1cycle")
789 (set_attr "length" "4")
790 (set_attr "cond" "nocond")])
792 (define_insn "vbmulaw_insn"
793 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
794 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
795 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULAW))]
798 [(set_attr "type" "simd_varith_with_acc")
799 (set_attr "length" "4")
800 (set_attr "cond" "nocond")])
802 (define_insn "vbmulfw_insn"
803 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
804 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
805 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULFW))]
808 [(set_attr "type" "simd_varith_2cycle")
809 (set_attr "length" "4")
810 (set_attr "cond" "nocond")])
812 (define_insn "vbmulw_insn"
813 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
814 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
815 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULW))]
818 [(set_attr "type" "simd_varith_2cycle")
819 (set_attr "length" "4")
820 (set_attr "cond" "nocond")])
822 (define_insn "vbrsubw_insn"
823 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
824 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
825 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBRSUBW))]
828 [(set_attr "type" "simd_varith_1cycle")
829 (set_attr "length" "4")
830 (set_attr "cond" "nocond")])
832 (define_insn "vbsubw_insn"
833 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
834 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
835 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBSUBW))]
838 [(set_attr "type" "simd_varith_1cycle")
839 (set_attr "length" "4")
840 (set_attr "cond" "nocond")])
841 ; Va, Vb, Ic instructions
843 ; Va, Vb, u6 instructions
844 (define_insn "vasrrwi_insn"
845 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
846 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
847 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRWi))]
850 [(set_attr "type" "simd_varith_2cycle")
851 (set_attr "length" "4")
852 (set_attr "cond" "nocond")])
854 (define_insn "vasrsrwi_insn"
855 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
856 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
857 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRSRWi))]
859 "vasrsrwi %0, %1, %2"
860 [(set_attr "type" "simd_varith_2cycle")
861 (set_attr "length" "4")
862 (set_attr "cond" "nocond")])
864 (define_insn "vasrwi_insn"
865 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
866 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
867 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRWi))]
870 [(set_attr "type" "simd_varith_1cycle")
871 (set_attr "length" "4")
872 (set_attr "cond" "nocond")])
874 (define_insn "vasrpwbi_insn"
875 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
876 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
877 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRPWBi))]
879 "vasrpwbi %0, %1, %2"
880 [(set_attr "type" "simd_vpack")
881 (set_attr "length" "4")
882 (set_attr "cond" "nocond")])
884 (define_insn "vasrrpwbi_insn"
885 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
886 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
887 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRPWBi))]
889 "vasrrpwbi %0, %1, %2"
890 [(set_attr "type" "simd_vpack")
891 (set_attr "length" "4")
892 (set_attr "cond" "nocond")])
894 (define_insn "vsr8awi_insn"
895 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
896 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
897 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8AWi))]
900 [(set_attr "type" "simd_valign_with_acc")
901 (set_attr "length" "4")
902 (set_attr "cond" "nocond")])
904 (define_insn "vsr8i_insn"
905 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
906 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
907 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8i))]
910 [(set_attr "type" "simd_valign")
911 (set_attr "length" "4")
912 (set_attr "cond" "nocond")])
914 ;; Va, Vb, u8 (simm) insns
916 (define_insn "vmvaw_insn"
917 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
918 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
919 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVAW))]
922 [(set_attr "type" "simd_vmove_with_acc")
923 (set_attr "length" "4")
924 (set_attr "cond" "nocond")])
926 (define_insn "vmvw_insn"
927 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
928 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
929 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVW))]
932 [(set_attr "type" "simd_vmove")
933 (set_attr "length" "4")
934 (set_attr "cond" "nocond")])
936 (define_insn "vmvzw_insn"
937 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
938 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
939 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVZW))]
942 [(set_attr "type" "simd_vmove_else_zero")
943 (set_attr "length" "4")
944 (set_attr "cond" "nocond")])
946 (define_insn "vd6tapf_insn"
947 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
948 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
949 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VD6TAPF))]
952 [(set_attr "type" "simd_vspecial_4cycle")
953 (set_attr "length" "4")
954 (set_attr "cond" "nocond")])
956 ;; Va, rlimm, u8 (simm) insns
957 (define_insn "vmovaw_insn"
958 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
959 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
960 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVAW))]
963 [(set_attr "type" "simd_vmove_with_acc")
964 (set_attr "length" "4")
965 (set_attr "cond" "nocond")])
967 (define_insn "vmovw_insn"
968 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
969 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
970 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVW))]
973 [(set_attr "type" "simd_vmove")
974 (set_attr "length" "4")
975 (set_attr "cond" "nocond")])
977 (define_insn "vmovzw_insn"
978 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
979 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
980 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVZW))]
983 [(set_attr "type" "simd_vmove_else_zero")
984 (set_attr "length" "4")
985 (set_attr "cond" "nocond")])
987 ;; Va, rlimm, Ic insns
988 (define_insn "vsr8_insn"
989 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
990 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
991 (match_operand:SI 2 "immediate_operand" "K")
992 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8))]
995 [(set_attr "type" "simd_valign")
996 (set_attr "length" "4")
997 (set_attr "cond" "nocond")])
999 (define_insn "vasrw_insn"
1000 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1001 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
1002 (match_operand:SI 2 "immediate_operand" "K")
1003 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VASRW))]
1006 [(set_attr "type" "simd_varith_1cycle")
1007 (set_attr "length" "4")
1008 (set_attr "cond" "nocond")])
1010 (define_insn "vsr8aw_insn"
1011 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1012 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
1013 (match_operand:SI 2 "immediate_operand" "K")
1014 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8AW))]
1016 "vsr8aw %0, %1, i%2"
1017 [(set_attr "type" "simd_valign_with_acc")
1018 (set_attr "length" "4")
1019 (set_attr "cond" "nocond")])
1022 (define_insn "vabsaw_insn"
1023 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1024 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSAW))]
1027 [(set_attr "type" "simd_varith_with_acc")
1028 (set_attr "length" "4")
1029 (set_attr "cond" "nocond")])
1031 (define_insn "vabsw_insn"
1032 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1033 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSW))]
1036 [(set_attr "type" "simd_varith_1cycle")
1037 (set_attr "length" "4")
1038 (set_attr "cond" "nocond")])
1040 (define_insn "vaddsuw_insn"
1041 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1042 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDSUW))]
1045 [(set_attr "type" "simd_varith_1cycle")
1046 (set_attr "length" "4")
1047 (set_attr "cond" "nocond")])
1049 (define_insn "vsignw_insn"
1050 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1051 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSIGNW))]
1054 [(set_attr "type" "simd_varith_1cycle")
1055 (set_attr "length" "4")
1056 (set_attr "cond" "nocond")])
1058 (define_insn "vexch1_insn"
1059 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1060 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH1))]
1063 [(set_attr "type" "simd_vpermute")
1064 (set_attr "length" "4")
1065 (set_attr "cond" "nocond")])
1067 (define_insn "vexch2_insn"
1068 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1069 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH2))]
1072 [(set_attr "type" "simd_vpermute")
1073 (set_attr "length" "4")
1074 (set_attr "cond" "nocond")])
1076 (define_insn "vexch4_insn"
1077 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1078 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH4))]
1081 [(set_attr "type" "simd_vpermute")
1082 (set_attr "length" "4")
1083 (set_attr "cond" "nocond")])
1085 (define_insn "vupbaw_insn"
1086 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1087 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBAW))]
1090 [(set_attr "type" "simd_vpack_with_acc")
1091 (set_attr "length" "4")
1092 (set_attr "cond" "nocond")])
1094 (define_insn "vupbw_insn"
1095 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1096 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBW))]
1099 [(set_attr "type" "simd_vpack")
1100 (set_attr "length" "4")
1101 (set_attr "cond" "nocond")])
1103 (define_insn "vupsbaw_insn"
1104 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1105 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBAW))]
1108 [(set_attr "type" "simd_vpack_with_acc")
1109 (set_attr "length" "4")
1110 (set_attr "cond" "nocond")])
1112 (define_insn "vupsbw_insn"
1113 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1114 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBW))]
1117 [(set_attr "type" "simd_vpack")
1118 (set_attr "length" "4")
1119 (set_attr "cond" "nocond")])
1121 ; DMA setup instructions
1122 (define_insn "vdirun_insn"
1123 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
1124 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
1125 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDIRUN))]
1128 [(set_attr "type" "simd_dma")
1129 (set_attr "length" "4")
1130 (set_attr "cond" "nocond")])
1132 (define_insn "vdorun_insn"
1133 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
1134 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
1135 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDORUN))]
1138 [(set_attr "type" "simd_dma")
1139 (set_attr "length" "4")
1140 (set_attr "cond" "nocond")])
1142 (define_insn "vdiwr_insn"
1143 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
1144 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDIWR))]
1147 [(set_attr "type" "simd_dma")
1148 (set_attr "length" "4,8")
1149 (set_attr "cond" "nocond,nocond")])
1151 (define_insn "vdowr_insn"
1152 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
1153 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDOWR))]
1156 [(set_attr "type" "simd_dma")
1157 (set_attr "length" "4,8")
1158 (set_attr "cond" "nocond,nocond")])
1160 ;; vector record and run instructions
1161 (define_insn "vrec_insn"
1162 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VREC)]
1165 [(set_attr "type" "simd_vcontrol")
1166 (set_attr "length" "4")
1167 (set_attr "cond" "nocond")])
1169 (define_insn "vrun_insn"
1170 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRUN)]
1173 [(set_attr "type" "simd_vcontrol")
1174 (set_attr "length" "4")
1175 (set_attr "cond" "nocond")])
1177 (define_insn "vrecrun_insn"
1178 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRECRUN)]
1181 [(set_attr "type" "simd_vcontrol")
1182 (set_attr "length" "4")
1183 (set_attr "cond" "nocond")])
1185 (define_insn "vendrec_insn"
1186 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VENDREC)]
1189 [(set_attr "type" "simd_vcontrol")
1190 (set_attr "length" "4")
1191 (set_attr "cond" "nocond")])
1193 (define_insn "vld32wh_insn"
1194 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1195 (vec_concat:V8HI (zero_extend:V4HI (mem:V4QI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1196 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1197 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))))
1198 (vec_select:V4HI (match_dup 0)
1199 (parallel [(const_int 0)]))))]
1201 "vld32wh %0, [i%3,%1]"
1202 [(set_attr "type" "simd_vload")
1203 (set_attr "length" "4")
1204 (set_attr "cond" "nocond")])
1206 (define_insn "vld32wl_insn"
1207 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1208 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1209 (parallel [(const_int 1)]))
1210 (zero_extend:V4HI (mem:V4QI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1211 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1212 (parallel [(match_operand:SI 3 "immediate_operand" "L")])))))) ))]
1214 "vld32wl %0, [i%3,%1]"
1215 [(set_attr "type" "simd_vload")
1216 (set_attr "length" "4")
1217 (set_attr "cond" "nocond")])
1219 (define_insn "vld64w_insn"
1220 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1221 (zero_extend:V8HI (mem:V4HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1222 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
1223 (match_operand:SI 3 "immediate_operand" "P")))))]
1225 "vld64w %0, [i%2, %3]"
1226 [(set_attr "type" "simd_vload")
1227 (set_attr "length" "4")
1228 (set_attr "cond" "nocond")]
1231 (define_insn "vld64_insn"
1232 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1233 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1234 (parallel [(const_int 1)]))
1235 (mem:V4HI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1236 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1237 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))) ))]
1239 "vld64 %0, [i%3,%1]"
1240 [(set_attr "type" "simd_vload")
1241 (set_attr "length" "4")
1242 (set_attr "cond" "nocond")])
1244 (define_insn "vld32_insn"
1245 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1246 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1247 (parallel [(const_int 1)]))
1248 (vec_concat:V4HI (vec_select:V2HI (match_dup 0)
1249 (parallel [(const_int 1)]))
1250 (mem:V2HI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1251 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1252 (parallel [(match_operand:SI 3 "immediate_operand" "L")])))))) ))]
1254 "vld32 %0, [i%3,%1]"
1255 [(set_attr "type" "simd_vload")
1256 (set_attr "length" "4")
1257 (set_attr "cond" "nocond")])
1259 (define_insn "vst16_n_insn"
1260 [(set (mem:HI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
1261 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1262 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
1263 (vec_select:HI (match_operand:V8HI 3 "vector_register_operand" "v")
1264 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
1266 "vst16_%4 %3,[i%2, %0]"
1267 [(set_attr "type" "simd_vstore")
1268 (set_attr "length" "4")
1269 (set_attr "cond" "nocond")])
1271 (define_insn "vst32_n_insn"
1272 [(set (mem:SI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
1273 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1274 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
1275 (vec_select:SI (unspec:V4SI [(match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VCAST)
1276 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
1278 "vst32_%4 %3,[i%2, %0]"
1279 [(set_attr "type" "simd_vstore")
1280 (set_attr "length" "4")
1281 (set_attr "cond" "nocond")])
1283 ;; SIMD unit interrupt
1284 (define_insn "vinti_insn"
1285 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "L")] UNSPEC_ARC_SIMD_VINTI)]
1288 [(set_attr "type" "simd_vcontrol")
1289 (set_attr "length" "4")
1290 (set_attr "cond" "nocond")])