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/>.
22 ;; Va, Vb, Vc builtins
23 (UNSPEC_ARC_SIMD_VADDAW 1000)
24 (UNSPEC_ARC_SIMD_VADDW 1001)
25 (UNSPEC_ARC_SIMD_VAVB 1002)
26 (UNSPEC_ARC_SIMD_VAVRB 1003)
27 (UNSPEC_ARC_SIMD_VDIFAW 1004)
28 (UNSPEC_ARC_SIMD_VDIFW 1005)
29 (UNSPEC_ARC_SIMD_VMAXAW 1006)
30 (UNSPEC_ARC_SIMD_VMAXW 1007)
31 (UNSPEC_ARC_SIMD_VMINAW 1008)
32 (UNSPEC_ARC_SIMD_VMINW 1009)
33 (UNSPEC_ARC_SIMD_VMULAW 1010)
34 (UNSPEC_ARC_SIMD_VMULFAW 1011)
35 (UNSPEC_ARC_SIMD_VMULFW 1012)
36 (UNSPEC_ARC_SIMD_VMULW 1013)
37 (UNSPEC_ARC_SIMD_VSUBAW 1014)
38 (UNSPEC_ARC_SIMD_VSUBW 1015)
39 (UNSPEC_ARC_SIMD_VSUMMW 1016)
40 (UNSPEC_ARC_SIMD_VAND 1017)
41 (UNSPEC_ARC_SIMD_VANDAW 1018)
42 (UNSPEC_ARC_SIMD_VBIC 1019)
43 (UNSPEC_ARC_SIMD_VBICAW 1020)
44 (UNSPEC_ARC_SIMD_VOR 1021)
45 (UNSPEC_ARC_SIMD_VXOR 1022)
46 (UNSPEC_ARC_SIMD_VXORAW 1023)
47 (UNSPEC_ARC_SIMD_VEQW 1024)
48 (UNSPEC_ARC_SIMD_VLEW 1025)
49 (UNSPEC_ARC_SIMD_VLTW 1026)
50 (UNSPEC_ARC_SIMD_VNEW 1027)
51 (UNSPEC_ARC_SIMD_VMR1AW 1028)
52 (UNSPEC_ARC_SIMD_VMR1W 1029)
53 (UNSPEC_ARC_SIMD_VMR2AW 1030)
54 (UNSPEC_ARC_SIMD_VMR2W 1031)
55 (UNSPEC_ARC_SIMD_VMR3AW 1032)
56 (UNSPEC_ARC_SIMD_VMR3W 1033)
57 (UNSPEC_ARC_SIMD_VMR4AW 1034)
58 (UNSPEC_ARC_SIMD_VMR4W 1035)
59 (UNSPEC_ARC_SIMD_VMR5AW 1036)
60 (UNSPEC_ARC_SIMD_VMR5W 1037)
61 (UNSPEC_ARC_SIMD_VMR6AW 1038)
62 (UNSPEC_ARC_SIMD_VMR6W 1039)
63 (UNSPEC_ARC_SIMD_VMR7AW 1040)
64 (UNSPEC_ARC_SIMD_VMR7W 1041)
65 (UNSPEC_ARC_SIMD_VMRB 1042)
66 (UNSPEC_ARC_SIMD_VH264F 1043)
67 (UNSPEC_ARC_SIMD_VH264FT 1044)
68 (UNSPEC_ARC_SIMD_VH264FW 1045)
69 (UNSPEC_ARC_SIMD_VVC1F 1046)
70 (UNSPEC_ARC_SIMD_VVC1FT 1047)
71 ;; Va, Vb, rc/limm builtins
72 (UNSPEC_ARC_SIMD_VBADDW 1050)
73 (UNSPEC_ARC_SIMD_VBMAXW 1051)
74 (UNSPEC_ARC_SIMD_VBMINW 1052)
75 (UNSPEC_ARC_SIMD_VBMULAW 1053)
76 (UNSPEC_ARC_SIMD_VBMULFW 1054)
77 (UNSPEC_ARC_SIMD_VBMULW 1055)
78 (UNSPEC_ARC_SIMD_VBRSUBW 1056)
79 (UNSPEC_ARC_SIMD_VBSUBW 1057)
81 ;; Va, Vb, Ic builtins
82 (UNSPEC_ARC_SIMD_VASRW 1060)
83 (UNSPEC_ARC_SIMD_VSR8 1061)
84 (UNSPEC_ARC_SIMD_VSR8AW 1062)
86 ;; Va, Vb, Ic builtins
87 (UNSPEC_ARC_SIMD_VASRRWi 1065)
88 (UNSPEC_ARC_SIMD_VASRSRWi 1066)
89 (UNSPEC_ARC_SIMD_VASRWi 1067)
90 (UNSPEC_ARC_SIMD_VASRPWBi 1068)
91 (UNSPEC_ARC_SIMD_VASRRPWBi 1069)
92 (UNSPEC_ARC_SIMD_VSR8AWi 1070)
93 (UNSPEC_ARC_SIMD_VSR8i 1071)
95 ;; Va, Vb, u8 (simm) builtins
96 (UNSPEC_ARC_SIMD_VMVAW 1075)
97 (UNSPEC_ARC_SIMD_VMVW 1076)
98 (UNSPEC_ARC_SIMD_VMVZW 1077)
99 (UNSPEC_ARC_SIMD_VD6TAPF 1078)
101 ;; Va, rlimm, u8 (simm) builtins
102 (UNSPEC_ARC_SIMD_VMOVAW 1080)
103 (UNSPEC_ARC_SIMD_VMOVW 1081)
104 (UNSPEC_ARC_SIMD_VMOVZW 1082)
107 (UNSPEC_ARC_SIMD_VABSAW 1085)
108 (UNSPEC_ARC_SIMD_VABSW 1086)
109 (UNSPEC_ARC_SIMD_VADDSUW 1087)
110 (UNSPEC_ARC_SIMD_VSIGNW 1088)
111 (UNSPEC_ARC_SIMD_VEXCH1 1089)
112 (UNSPEC_ARC_SIMD_VEXCH2 1090)
113 (UNSPEC_ARC_SIMD_VEXCH4 1091)
114 (UNSPEC_ARC_SIMD_VUPBAW 1092)
115 (UNSPEC_ARC_SIMD_VUPBW 1093)
116 (UNSPEC_ARC_SIMD_VUPSBAW 1094)
117 (UNSPEC_ARC_SIMD_VUPSBW 1095)
119 (UNSPEC_ARC_SIMD_VDIRUN 1100)
120 (UNSPEC_ARC_SIMD_VDORUN 1101)
121 (UNSPEC_ARC_SIMD_VDIWR 1102)
122 (UNSPEC_ARC_SIMD_VDOWR 1103)
124 (UNSPEC_ARC_SIMD_VREC 1105)
125 (UNSPEC_ARC_SIMD_VRUN 1106)
126 (UNSPEC_ARC_SIMD_VRECRUN 1107)
127 (UNSPEC_ARC_SIMD_VENDREC 1108)
129 (UNSPEC_ARC_SIMD_VCAST 1200)
130 (UNSPEC_ARC_SIMD_VINTI 1201)
134 ;; Scheduler descriptions for the simd instructions
135 (define_insn_reservation "simd_lat_0_insn" 1
136 (eq_attr "type" "simd_dma, simd_vstore, simd_vcontrol")
139 (define_insn_reservation "simd_lat_1_insn" 2
140 (eq_attr "type" "simd_vcompare, simd_vlogic,
141 simd_vmove_else_zero, simd_varith_1cycle")
142 "issue+simd_unit, nothing")
144 (define_insn_reservation "simd_lat_2_insn" 3
145 (eq_attr "type" "simd_valign, simd_vpermute,
146 simd_vpack, simd_varith_2cycle")
147 "issue+simd_unit, nothing*2")
149 (define_insn_reservation "simd_lat_3_insn" 4
150 (eq_attr "type" "simd_valign_with_acc, simd_vpack_with_acc,
151 simd_vlogic_with_acc, simd_vload128,
152 simd_vmove_with_acc, simd_vspecial_3cycle,
153 simd_varith_with_acc")
154 "issue+simd_unit, nothing*3")
156 (define_insn_reservation "simd_lat_4_insn" 5
157 (eq_attr "type" "simd_vload, simd_vmove, simd_vspecial_4cycle")
158 "issue+simd_unit, nothing*4")
160 (define_expand "movv8hi"
161 [(set (match_operand:V8HI 0 "general_operand" "")
162 (match_operand:V8HI 1 "general_operand" ""))]
166 /* Everything except mem = const or mem = mem can be done easily. */
168 if (GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)
169 operands[1] = force_reg (V8HImode, operands[1]);
172 ;; This pattern should appear before the movv8hi_insn pattern
173 (define_insn "vld128_insn"
174 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
175 (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
176 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
177 (match_operand:SI 3 "immediate_operand" "P"))))]
179 "vld128 %0, [i%2, %3]"
180 [(set_attr "type" "simd_vload128")
181 (set_attr "length" "4")
182 (set_attr "cond" "nocond")]
185 (define_insn "vst128_insn"
186 [(set (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
187 (parallel [(match_operand:SI 1 "immediate_operand" "L")])))
188 (match_operand:SI 2 "immediate_operand" "P")))
189 (match_operand:V8HI 3 "vector_register_operand" "=v"))]
191 "vst128 %3, [i%1, %2]"
192 [(set_attr "type" "simd_vstore")
193 (set_attr "length" "4")
194 (set_attr "cond" "nocond")]
197 (define_insn "vst64_insn"
198 [(set (mem:V4HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
199 (parallel [(match_operand:SI 1 "immediate_operand" "L")])))
200 (match_operand:SI 2 "immediate_operand" "P")))
201 (vec_select:V4HI (match_operand:V8HI 3 "vector_register_operand" "=v")
202 (parallel [(const_int 0)])))]
204 "vst64 %3, [i%1, %2]"
205 [(set_attr "type" "simd_vstore")
206 (set_attr "length" "4")
207 (set_attr "cond" "nocond")]
210 (define_insn "movv8hi_insn"
211 [(set (match_operand:V8HI 0 "vector_register_or_memory_operand" "=v,m,v")
212 (match_operand:V8HI 1 "vector_register_or_memory_operand" "m,v,v"))]
213 "TARGET_SIMD_SET && !(GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)"
218 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
219 (set_attr "length" "8,8,4")
220 (set_attr "cond" "nocond, nocond, nocond")])
222 (define_insn "movti_insn"
223 [(set (match_operand:TI 0 "vector_register_or_memory_operand" "=v,m,v")
224 (match_operand:TI 1 "vector_register_or_memory_operand" "m,v,v"))]
230 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
231 (set_attr "length" "8,8,4")
232 (set_attr "cond" "nocond, nocond, nocond")])
234 ;; (define_insn "*movv8hi_insn_rr"
235 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
236 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
239 ;; [(set_attr "length" "8")
240 ;; (set_attr "type" "move")])
242 ;; (define_insn "*movv8_out"
243 ;; [(set (match_operand:V8HI 0 "memory_operand" "=m")
244 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
247 ;; [(set_attr "length" "8")
248 ;; (set_attr "type" "move")])
251 ;; (define_insn "addv8hi3"
252 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
253 ;; (plus:V8HI (match_operand:V8HI 1 "vector_register_operand" "v")
254 ;; (match_operand:V8HI 2 "vector_register_operand" "v")))]
256 ;; "vaddw %0, %1, %2"
257 ;; [(set_attr "length" "8")
258 ;; (set_attr "cond" "nocond")])
260 ;; (define_insn "vaddw_insn"
261 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
262 ;; (unspec [(match_operand:V8HI 1 "vector_register_operand" "v")
263 ;; (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
265 ;; "vaddw %0, %1, %2"
266 ;; [(set_attr "length" "8")
267 ;; (set_attr "cond" "nocond")])
270 (define_insn "vaddaw_insn"
271 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
272 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
273 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDAW))]
276 [(set_attr "type" "simd_varith_with_acc")
277 (set_attr "length" "4")
278 (set_attr "cond" "nocond")])
280 (define_insn "vaddw_insn"
281 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
282 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
283 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
286 [(set_attr "type" "simd_varith_1cycle")
287 (set_attr "length" "4")
288 (set_attr "cond" "nocond")])
290 (define_insn "vavb_insn"
291 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
292 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
293 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVB))]
296 [(set_attr "type" "simd_varith_1cycle")
297 (set_attr "length" "4")
298 (set_attr "cond" "nocond")])
300 (define_insn "vavrb_insn"
301 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
302 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
303 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVRB))]
306 [(set_attr "type" "simd_varith_1cycle")
307 (set_attr "length" "4")
308 (set_attr "cond" "nocond")])
310 (define_insn "vdifaw_insn"
311 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
312 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
313 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFAW))]
316 [(set_attr "type" "simd_varith_with_acc")
317 (set_attr "length" "4")
318 (set_attr "cond" "nocond")])
320 (define_insn "vdifw_insn"
321 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
322 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
323 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFW))]
326 [(set_attr "type" "simd_varith_1cycle")
327 (set_attr "length" "4")
328 (set_attr "cond" "nocond")])
330 (define_insn "vmaxaw_insn"
331 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
332 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
333 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXAW))]
336 [(set_attr "type" "simd_varith_with_acc")
337 (set_attr "length" "4")
338 (set_attr "cond" "nocond")])
340 (define_insn "vmaxw_insn"
341 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
342 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
343 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXW))]
346 [(set_attr "type" "simd_varith_1cycle")
347 (set_attr "length" "4")
348 (set_attr "cond" "nocond")])
350 (define_insn "vminaw_insn"
351 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
352 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
353 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINAW))]
356 [(set_attr "type" "simd_varith_with_acc")
357 (set_attr "length" "4")
358 (set_attr "cond" "nocond")])
360 (define_insn "vminw_insn"
361 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
362 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
363 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINW))]
366 [(set_attr "type" "simd_varith_1cycle")
367 (set_attr "length" "4")
368 (set_attr "cond" "nocond")])
370 (define_insn "vmulaw_insn"
371 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
372 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
373 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULAW))]
376 [(set_attr "type" "simd_varith_with_acc")
377 (set_attr "length" "4")
378 (set_attr "cond" "nocond")])
380 (define_insn "vmulfaw_insn"
381 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
382 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
383 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFAW))]
386 [(set_attr "type" "simd_varith_with_acc")
387 (set_attr "length" "4")
388 (set_attr "cond" "nocond")])
390 (define_insn "vmulfw_insn"
391 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
392 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
393 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFW))]
396 [(set_attr "type" "simd_varith_2cycle")
397 (set_attr "length" "4")
398 (set_attr "cond" "nocond")])
400 (define_insn "vmulw_insn"
401 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
402 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
403 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULW))]
406 [(set_attr "type" "simd_varith_2cycle")
407 (set_attr "length" "4")
408 (set_attr "cond" "nocond")])
410 (define_insn "vsubaw_insn"
411 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
412 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
413 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBAW))]
416 [(set_attr "type" "simd_varith_with_acc")
417 (set_attr "length" "4")
418 (set_attr "cond" "nocond")])
420 (define_insn "vsubw_insn"
421 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
422 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
423 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBW))]
426 [(set_attr "type" "simd_varith_1cycle")
427 (set_attr "length" "4")
428 (set_attr "cond" "nocond")])
430 (define_insn "vsummw_insn"
431 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
432 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
433 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUMMW))]
436 [(set_attr "type" "simd_varith_2cycle")
437 (set_attr "length" "4")
438 (set_attr "cond" "nocond")])
440 (define_insn "vand_insn"
441 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
442 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
443 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAND))]
446 [(set_attr "type" "simd_vlogic")
447 (set_attr "length" "4")
448 (set_attr "cond" "nocond")])
450 (define_insn "vandaw_insn"
451 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
452 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
453 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VANDAW))]
456 [(set_attr "type" "simd_vlogic_with_acc")
457 (set_attr "length" "4")
458 (set_attr "cond" "nocond")])
460 (define_insn "vbic_insn"
461 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
462 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
463 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBIC))]
466 [(set_attr "type" "simd_vlogic")
467 (set_attr "length" "4")
468 (set_attr "cond" "nocond")])
470 (define_insn "vbicaw_insn"
471 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
472 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
473 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBICAW))]
476 [(set_attr "type" "simd_vlogic_with_acc")
477 (set_attr "length" "4")
478 (set_attr "cond" "nocond")])
480 (define_insn "vor_insn"
481 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
482 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
483 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VOR))]
486 [(set_attr "type" "simd_vlogic")
487 (set_attr "length" "4")
488 (set_attr "cond" "nocond")])
490 (define_insn "vxor_insn"
491 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
492 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
493 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXOR))]
496 [(set_attr "type" "simd_vlogic")
497 (set_attr "length" "4")
498 (set_attr "cond" "nocond")])
500 (define_insn "vxoraw_insn"
501 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
502 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
503 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXORAW))]
506 [(set_attr "type" "simd_vlogic_with_acc")
507 (set_attr "length" "4")
508 (set_attr "cond" "nocond")])
510 (define_insn "veqw_insn"
511 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
512 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
513 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEQW))]
516 [(set_attr "type" "simd_vcompare")
517 (set_attr "length" "4")
518 (set_attr "cond" "nocond")])
520 (define_insn "vlew_insn"
521 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
522 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
523 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLEW))]
526 [(set_attr "type" "simd_vcompare")
527 (set_attr "length" "4")
528 (set_attr "cond" "nocond")])
530 (define_insn "vltw_insn"
531 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
532 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
533 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLTW))]
536 [(set_attr "type" "simd_vcompare")
537 (set_attr "length" "4")
538 (set_attr "cond" "nocond")])
540 (define_insn "vnew_insn"
541 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
542 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
543 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VNEW))]
546 [(set_attr "type" "simd_vcompare")
547 (set_attr "length" "4")
548 (set_attr "cond" "nocond")])
550 (define_insn "vmr1aw_insn"
551 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
552 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
553 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1AW))]
556 [(set_attr "type" "simd_valign_with_acc")
557 (set_attr "length" "4")
558 (set_attr "cond" "nocond")])
560 (define_insn "vmr1w_insn"
561 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
562 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
563 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1W))]
566 [(set_attr "type" "simd_valign")
567 (set_attr "length" "4")
568 (set_attr "cond" "nocond")])
570 (define_insn "vmr2aw_insn"
571 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
572 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
573 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2AW))]
576 [(set_attr "type" "simd_valign_with_acc")
577 (set_attr "length" "4")
578 (set_attr "cond" "nocond")])
580 (define_insn "vmr2w_insn"
581 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
582 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
583 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2W))]
586 [(set_attr "type" "simd_valign")
587 (set_attr "length" "4")
588 (set_attr "cond" "nocond")])
590 (define_insn "vmr3aw_insn"
591 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
592 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
593 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3AW))]
596 [(set_attr "type" "simd_valign_with_acc")
597 (set_attr "length" "4")
598 (set_attr "cond" "nocond")])
600 (define_insn "vmr3w_insn"
601 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
602 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
603 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3W))]
606 [(set_attr "type" "simd_valign")
607 (set_attr "length" "4")
608 (set_attr "cond" "nocond")])
610 (define_insn "vmr4aw_insn"
611 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
612 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
613 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4AW))]
616 [(set_attr "type" "simd_valign_with_acc")
617 (set_attr "length" "4")
618 (set_attr "cond" "nocond")])
620 (define_insn "vmr4w_insn"
621 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
622 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
623 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4W))]
626 [(set_attr "type" "simd_valign")
627 (set_attr "length" "4")
628 (set_attr "cond" "nocond")])
630 (define_insn "vmr5aw_insn"
631 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
632 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
633 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5AW))]
636 [(set_attr "type" "simd_valign_with_acc")
637 (set_attr "length" "4")
638 (set_attr "cond" "nocond")])
640 (define_insn "vmr5w_insn"
641 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
642 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
643 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5W))]
646 [(set_attr "type" "simd_valign")
647 (set_attr "length" "4")
648 (set_attr "cond" "nocond")])
650 (define_insn "vmr6aw_insn"
651 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
652 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
653 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6AW))]
656 [(set_attr "type" "simd_valign_with_acc")
657 (set_attr "length" "4")
658 (set_attr "cond" "nocond")])
660 (define_insn "vmr6w_insn"
661 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
662 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
663 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6W))]
666 [(set_attr "type" "simd_valign")
667 (set_attr "length" "4")
668 (set_attr "cond" "nocond")])
670 (define_insn "vmr7aw_insn"
671 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
672 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
673 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7AW))]
676 [(set_attr "type" "simd_valign_with_acc")
677 (set_attr "length" "4")
678 (set_attr "cond" "nocond")])
680 (define_insn "vmr7w_insn"
681 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
682 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
683 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7W))]
686 [(set_attr "type" "simd_valign")
687 (set_attr "length" "4")
688 (set_attr "cond" "nocond")])
690 (define_insn "vmrb_insn"
691 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
692 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
693 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMRB))]
696 [(set_attr "type" "simd_valign")
697 (set_attr "length" "4")
698 (set_attr "cond" "nocond")])
700 (define_insn "vh264f_insn"
701 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
702 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
703 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264F))]
706 [(set_attr "type" "simd_vspecial_3cycle")
707 (set_attr "length" "4")
708 (set_attr "cond" "nocond")])
710 (define_insn "vh264ft_insn"
711 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
712 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
713 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FT))]
716 [(set_attr "type" "simd_vspecial_3cycle")
717 (set_attr "length" "4")
718 (set_attr "cond" "nocond")])
720 (define_insn "vh264fw_insn"
721 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
722 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
723 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FW))]
726 [(set_attr "type" "simd_vspecial_3cycle")
727 (set_attr "length" "4")
728 (set_attr "cond" "nocond")])
730 (define_insn "vvc1f_insn"
731 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
732 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
733 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1F))]
736 [(set_attr "type" "simd_vspecial_3cycle")
737 (set_attr "length" "4")
738 (set_attr "cond" "nocond")])
740 (define_insn "vvc1ft_insn"
741 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
742 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
743 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1FT))]
746 [(set_attr "type" "simd_vspecial_3cycle")
747 (set_attr "length" "4")
748 (set_attr "cond" "nocond")])
755 ;; (define_insn "vbaddw_insn"
756 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
757 ;; (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
758 ;; (match_operand:SI 2 "nonmemory_operand" "rCal")] UNSPEC_ARC_SIMD_VBADDW))]
760 ;; "vbaddw %0, %1, %2"
761 ;; [(set_attr "length" "4")
762 ;; (set_attr "cond" "nocond")])
764 (define_insn "vbaddw_insn"
765 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
766 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
767 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBADDW))]
770 [(set_attr "type" "simd_varith_1cycle")
771 (set_attr "length" "4")
772 (set_attr "cond" "nocond")])
774 (define_insn "vbmaxw_insn"
775 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
776 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
777 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMAXW))]
780 [(set_attr "type" "simd_varith_1cycle")
781 (set_attr "length" "4")
782 (set_attr "cond" "nocond")])
784 (define_insn "vbminw_insn"
785 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
786 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
787 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMINW))]
790 [(set_attr "type" "simd_varith_1cycle")
791 (set_attr "length" "4")
792 (set_attr "cond" "nocond")])
794 (define_insn "vbmulaw_insn"
795 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
796 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
797 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULAW))]
800 [(set_attr "type" "simd_varith_with_acc")
801 (set_attr "length" "4")
802 (set_attr "cond" "nocond")])
804 (define_insn "vbmulfw_insn"
805 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
806 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
807 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULFW))]
810 [(set_attr "type" "simd_varith_2cycle")
811 (set_attr "length" "4")
812 (set_attr "cond" "nocond")])
814 (define_insn "vbmulw_insn"
815 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
816 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
817 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULW))]
820 [(set_attr "type" "simd_varith_2cycle")
821 (set_attr "length" "4")
822 (set_attr "cond" "nocond")])
824 (define_insn "vbrsubw_insn"
825 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
826 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
827 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBRSUBW))]
830 [(set_attr "type" "simd_varith_1cycle")
831 (set_attr "length" "4")
832 (set_attr "cond" "nocond")])
834 (define_insn "vbsubw_insn"
835 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
836 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
837 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBSUBW))]
840 [(set_attr "type" "simd_varith_1cycle")
841 (set_attr "length" "4")
842 (set_attr "cond" "nocond")])
843 ; Va, Vb, Ic instructions
845 ; Va, Vb, u6 instructions
846 (define_insn "vasrrwi_insn"
847 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
848 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
849 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRWi))]
852 [(set_attr "type" "simd_varith_2cycle")
853 (set_attr "length" "4")
854 (set_attr "cond" "nocond")])
856 (define_insn "vasrsrwi_insn"
857 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
858 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
859 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRSRWi))]
861 "vasrsrwi %0, %1, %2"
862 [(set_attr "type" "simd_varith_2cycle")
863 (set_attr "length" "4")
864 (set_attr "cond" "nocond")])
866 (define_insn "vasrwi_insn"
867 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
868 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
869 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRWi))]
872 [(set_attr "type" "simd_varith_1cycle")
873 (set_attr "length" "4")
874 (set_attr "cond" "nocond")])
876 (define_insn "vasrpwbi_insn"
877 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
878 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
879 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRPWBi))]
881 "vasrpwbi %0, %1, %2"
882 [(set_attr "type" "simd_vpack")
883 (set_attr "length" "4")
884 (set_attr "cond" "nocond")])
886 (define_insn "vasrrpwbi_insn"
887 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
888 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
889 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRPWBi))]
891 "vasrrpwbi %0, %1, %2"
892 [(set_attr "type" "simd_vpack")
893 (set_attr "length" "4")
894 (set_attr "cond" "nocond")])
896 (define_insn "vsr8awi_insn"
897 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
898 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
899 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8AWi))]
902 [(set_attr "type" "simd_valign_with_acc")
903 (set_attr "length" "4")
904 (set_attr "cond" "nocond")])
906 (define_insn "vsr8i_insn"
907 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
908 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
909 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8i))]
912 [(set_attr "type" "simd_valign")
913 (set_attr "length" "4")
914 (set_attr "cond" "nocond")])
916 ;; Va, Vb, u8 (simm) insns
918 (define_insn "vmvaw_insn"
919 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
920 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
921 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVAW))]
924 [(set_attr "type" "simd_vmove_with_acc")
925 (set_attr "length" "4")
926 (set_attr "cond" "nocond")])
928 (define_insn "vmvw_insn"
929 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
930 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
931 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVW))]
934 [(set_attr "type" "simd_vmove")
935 (set_attr "length" "4")
936 (set_attr "cond" "nocond")])
938 (define_insn "vmvzw_insn"
939 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
940 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
941 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVZW))]
944 [(set_attr "type" "simd_vmove_else_zero")
945 (set_attr "length" "4")
946 (set_attr "cond" "nocond")])
948 (define_insn "vd6tapf_insn"
949 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
950 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
951 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VD6TAPF))]
954 [(set_attr "type" "simd_vspecial_4cycle")
955 (set_attr "length" "4")
956 (set_attr "cond" "nocond")])
958 ;; Va, rlimm, u8 (simm) insns
959 (define_insn "vmovaw_insn"
960 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
961 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
962 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVAW))]
965 [(set_attr "type" "simd_vmove_with_acc")
966 (set_attr "length" "4")
967 (set_attr "cond" "nocond")])
969 (define_insn "vmovw_insn"
970 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
971 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
972 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVW))]
975 [(set_attr "type" "simd_vmove")
976 (set_attr "length" "4")
977 (set_attr "cond" "nocond")])
979 (define_insn "vmovzw_insn"
980 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
981 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
982 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVZW))]
985 [(set_attr "type" "simd_vmove_else_zero")
986 (set_attr "length" "4")
987 (set_attr "cond" "nocond")])
989 ;; Va, rlimm, Ic insns
990 (define_insn "vsr8_insn"
991 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
992 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
993 (match_operand:SI 2 "immediate_operand" "K")
994 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8))]
997 [(set_attr "type" "simd_valign")
998 (set_attr "length" "4")
999 (set_attr "cond" "nocond")])
1001 (define_insn "vasrw_insn"
1002 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1003 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
1004 (match_operand:SI 2 "immediate_operand" "K")
1005 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VASRW))]
1008 [(set_attr "type" "simd_varith_1cycle")
1009 (set_attr "length" "4")
1010 (set_attr "cond" "nocond")])
1012 (define_insn "vsr8aw_insn"
1013 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1014 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
1015 (match_operand:SI 2 "immediate_operand" "K")
1016 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8AW))]
1018 "vsr8aw %0, %1, i%2"
1019 [(set_attr "type" "simd_valign_with_acc")
1020 (set_attr "length" "4")
1021 (set_attr "cond" "nocond")])
1024 (define_insn "vabsaw_insn"
1025 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1026 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSAW))]
1029 [(set_attr "type" "simd_varith_with_acc")
1030 (set_attr "length" "4")
1031 (set_attr "cond" "nocond")])
1033 (define_insn "vabsw_insn"
1034 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1035 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSW))]
1038 [(set_attr "type" "simd_varith_1cycle")
1039 (set_attr "length" "4")
1040 (set_attr "cond" "nocond")])
1042 (define_insn "vaddsuw_insn"
1043 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1044 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDSUW))]
1047 [(set_attr "type" "simd_varith_1cycle")
1048 (set_attr "length" "4")
1049 (set_attr "cond" "nocond")])
1051 (define_insn "vsignw_insn"
1052 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1053 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSIGNW))]
1056 [(set_attr "type" "simd_varith_1cycle")
1057 (set_attr "length" "4")
1058 (set_attr "cond" "nocond")])
1060 (define_insn "vexch1_insn"
1061 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1062 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH1))]
1065 [(set_attr "type" "simd_vpermute")
1066 (set_attr "length" "4")
1067 (set_attr "cond" "nocond")])
1069 (define_insn "vexch2_insn"
1070 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1071 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH2))]
1074 [(set_attr "type" "simd_vpermute")
1075 (set_attr "length" "4")
1076 (set_attr "cond" "nocond")])
1078 (define_insn "vexch4_insn"
1079 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1080 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH4))]
1083 [(set_attr "type" "simd_vpermute")
1084 (set_attr "length" "4")
1085 (set_attr "cond" "nocond")])
1087 (define_insn "vupbaw_insn"
1088 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1089 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBAW))]
1092 [(set_attr "type" "simd_vpack_with_acc")
1093 (set_attr "length" "4")
1094 (set_attr "cond" "nocond")])
1096 (define_insn "vupbw_insn"
1097 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1098 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBW))]
1101 [(set_attr "type" "simd_vpack")
1102 (set_attr "length" "4")
1103 (set_attr "cond" "nocond")])
1105 (define_insn "vupsbaw_insn"
1106 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1107 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBAW))]
1110 [(set_attr "type" "simd_vpack_with_acc")
1111 (set_attr "length" "4")
1112 (set_attr "cond" "nocond")])
1114 (define_insn "vupsbw_insn"
1115 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1116 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBW))]
1119 [(set_attr "type" "simd_vpack")
1120 (set_attr "length" "4")
1121 (set_attr "cond" "nocond")])
1123 ; DMA setup instructions
1124 (define_insn "vdirun_insn"
1125 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
1126 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
1127 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDIRUN))]
1130 [(set_attr "type" "simd_dma")
1131 (set_attr "length" "4")
1132 (set_attr "cond" "nocond")])
1134 (define_insn "vdorun_insn"
1135 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
1136 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
1137 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDORUN))]
1140 [(set_attr "type" "simd_dma")
1141 (set_attr "length" "4")
1142 (set_attr "cond" "nocond")])
1144 (define_insn "vdiwr_insn"
1145 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
1146 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDIWR))]
1149 [(set_attr "type" "simd_dma")
1150 (set_attr "length" "4,8")
1151 (set_attr "cond" "nocond,nocond")])
1153 (define_insn "vdowr_insn"
1154 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
1155 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDOWR))]
1158 [(set_attr "type" "simd_dma")
1159 (set_attr "length" "4,8")
1160 (set_attr "cond" "nocond,nocond")])
1162 ;; vector record and run instructions
1163 (define_insn "vrec_insn"
1164 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VREC)]
1167 [(set_attr "type" "simd_vcontrol")
1168 (set_attr "length" "4")
1169 (set_attr "cond" "nocond")])
1171 (define_insn "vrun_insn"
1172 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRUN)]
1175 [(set_attr "type" "simd_vcontrol")
1176 (set_attr "length" "4")
1177 (set_attr "cond" "nocond")])
1179 (define_insn "vrecrun_insn"
1180 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRECRUN)]
1183 [(set_attr "type" "simd_vcontrol")
1184 (set_attr "length" "4")
1185 (set_attr "cond" "nocond")])
1187 (define_insn "vendrec_insn"
1188 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VENDREC)]
1191 [(set_attr "type" "simd_vcontrol")
1192 (set_attr "length" "4")
1193 (set_attr "cond" "nocond")])
1195 (define_insn "vld32wh_insn"
1196 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1197 (vec_concat:V8HI (zero_extend:V4HI (mem:V4QI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1198 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1199 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))))
1200 (vec_select:V4HI (match_dup 0)
1201 (parallel [(const_int 0)]))))]
1203 "vld32wh %0, [i%3,%1]"
1204 [(set_attr "type" "simd_vload")
1205 (set_attr "length" "4")
1206 (set_attr "cond" "nocond")])
1208 (define_insn "vld32wl_insn"
1209 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1210 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1211 (parallel [(const_int 1)]))
1212 (zero_extend:V4HI (mem:V4QI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1213 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1214 (parallel [(match_operand:SI 3 "immediate_operand" "L")])))))) ))]
1216 "vld32wl %0, [i%3,%1]"
1217 [(set_attr "type" "simd_vload")
1218 (set_attr "length" "4")
1219 (set_attr "cond" "nocond")])
1221 (define_insn "vld64w_insn"
1222 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1223 (zero_extend:V8HI (mem:V4HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1224 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
1225 (match_operand:SI 3 "immediate_operand" "P")))))]
1227 "vld64w %0, [i%2, %3]"
1228 [(set_attr "type" "simd_vload")
1229 (set_attr "length" "4")
1230 (set_attr "cond" "nocond")]
1233 (define_insn "vld64_insn"
1234 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1235 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1236 (parallel [(const_int 1)]))
1237 (mem:V4HI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1238 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1239 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))) ))]
1241 "vld64 %0, [i%3,%1]"
1242 [(set_attr "type" "simd_vload")
1243 (set_attr "length" "4")
1244 (set_attr "cond" "nocond")])
1246 (define_insn "vld32_insn"
1247 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
1248 (vec_concat:V8HI (vec_select:V4HI (match_dup 0)
1249 (parallel [(const_int 1)]))
1250 (vec_concat:V4HI (vec_select:V2HI (match_dup 0)
1251 (parallel [(const_int 1)]))
1252 (mem:V2HI (plus:SI (match_operand:SI 1 "immediate_operand" "P")
1253 (zero_extend: SI (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
1254 (parallel [(match_operand:SI 3 "immediate_operand" "L")])))))) ))]
1256 "vld32 %0, [i%3,%1]"
1257 [(set_attr "type" "simd_vload")
1258 (set_attr "length" "4")
1259 (set_attr "cond" "nocond")])
1261 (define_insn "vst16_n_insn"
1262 [(set (mem:HI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
1263 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1264 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
1265 (vec_select:HI (match_operand:V8HI 3 "vector_register_operand" "v")
1266 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
1268 "vst16_%4 %3,[i%2, %0]"
1269 [(set_attr "type" "simd_vstore")
1270 (set_attr "length" "4")
1271 (set_attr "cond" "nocond")])
1273 (define_insn "vst32_n_insn"
1274 [(set (mem:SI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
1275 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
1276 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
1277 (vec_select:SI (unspec:V4SI [(match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VCAST)
1278 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
1280 "vst32_%4 %3,[i%2, %0]"
1281 [(set_attr "type" "simd_vstore")
1282 (set_attr "length" "4")
1283 (set_attr "cond" "nocond")])
1285 ;; SIMD unit interrupt
1286 (define_insn "vinti_insn"
1287 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "L")] UNSPEC_ARC_SIMD_VINTI)]
1290 [(set_attr "type" "simd_vcontrol")
1291 (set_attr "length" "4")
1292 (set_attr "cond" "nocond")])