* config/arc/simdext.md (UNSPEC_ARC_SIMD_VLD32WH): Delete.
[official-gcc.git] / gcc / config / arc / simdext.md
blob15187827478a003f067c17a37a43804fb292d8ec
1 ;; Machine description of the Synopsys DesignWare ARC cpu for GNU C compiler
2 ;; Copyright (C) 2007-2012 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)
9 ;; any later version.
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_constants
21   [
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)
106   ;; Va, Vb builtins
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)
131    ]
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")
137   "issue+simd_unit")
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" ""))]
163   ""
164   "
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"))))]
178  "TARGET_SIMD_SET"
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"))]
190  "TARGET_SIMD_SET"
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)])))]
203  "TARGET_SIMD_SET"
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)"
214   "@
215     vld128r %0, %1
216     vst128r %1, %0
217     vmvzw %0,%1,0xffff"
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"))]
225   ""
226   "@
227     vld128r %0, %1
228     vst128r %1, %0
229     vmvzw %0,%1,0xffff"
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"))]
237 ;;   ""
238 ;;   "mov reg,reg"
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"))]
245 ;;   ""
246 ;;   "mov out"
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")))]
255 ;;   "TARGET_SIMD_SET"
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))]
264 ;;   "TARGET_SIMD_SET"
265 ;;   "vaddw %0, %1, %2"
266 ;;   [(set_attr "length" "8")
267 ;;    (set_attr "cond" "nocond")])
269 ;; V V V Insns
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))]
274   "TARGET_SIMD_SET"
275   "vaddaw %0, %1, %2"
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))]
284   "TARGET_SIMD_SET"
285   "vaddw %0, %1, %2"
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))]
294   "TARGET_SIMD_SET"
295   "vavb %0, %1, %2"
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))]
304   "TARGET_SIMD_SET"
305   "vavrb %0, %1, %2"
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))]
314   "TARGET_SIMD_SET"
315   "vdifaw %0, %1, %2"
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))]
324   "TARGET_SIMD_SET"
325   "vdifw %0, %1, %2"
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))]
334   "TARGET_SIMD_SET"
335   "vmaxaw %0, %1, %2"
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))]
344   "TARGET_SIMD_SET"
345   "vmaxw %0, %1, %2"
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))]
354   "TARGET_SIMD_SET"
355   "vminaw %0, %1, %2"
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))]
364   "TARGET_SIMD_SET"
365   "vminw %0, %1, %2"
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))]
374   "TARGET_SIMD_SET"
375   "vmulaw %0, %1, %2"
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))]
384   "TARGET_SIMD_SET"
385   "vmulfaw %0, %1, %2"
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))]
394   "TARGET_SIMD_SET"
395   "vmulfw %0, %1, %2"
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))]
404   "TARGET_SIMD_SET"
405   "vmulw %0, %1, %2"
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))]
414   "TARGET_SIMD_SET"
415   "vsubaw %0, %1, %2"
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))]
424   "TARGET_SIMD_SET"
425   "vsubw %0, %1, %2"
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))]
434   "TARGET_SIMD_SET"
435   "vsummw %0, %1, %2"
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))]
444   "TARGET_SIMD_SET"
445   "vand %0, %1, %2"
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))]
454   "TARGET_SIMD_SET"
455   "vandaw %0, %1, %2"
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))]
464   "TARGET_SIMD_SET"
465   "vbic %0, %1, %2"
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))]
474   "TARGET_SIMD_SET"
475   "vbicaw %0, %1, %2"
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))]
484   "TARGET_SIMD_SET"
485   "vor %0, %1, %2"
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))]
494   "TARGET_SIMD_SET"
495   "vxor %0, %1, %2"
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))]
504   "TARGET_SIMD_SET"
505   "vxoraw %0, %1, %2"
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))]
514   "TARGET_SIMD_SET"
515   "veqw %0, %1, %2"
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))]
524   "TARGET_SIMD_SET"
525   "vlew %0, %1, %2"
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))]
534   "TARGET_SIMD_SET"
535   "vltw %0, %1, %2"
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))]
544   "TARGET_SIMD_SET"
545   "vnew %0, %1, %2"
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))]
554   "TARGET_SIMD_SET"
555   "vmr1aw %0, %1, %2"
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))]
564   "TARGET_SIMD_SET"
565   "vmr1w %0, %1, %2"
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))]
574   "TARGET_SIMD_SET"
575   "vmr2aw %0, %1, %2"
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))]
584   "TARGET_SIMD_SET"
585   "vmr2w %0, %1, %2"
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))]
594   "TARGET_SIMD_SET"
595   "vmr3aw %0, %1, %2"
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))]
604   "TARGET_SIMD_SET"
605   "vmr3w %0, %1, %2"
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))]
614   "TARGET_SIMD_SET"
615   "vmr4aw %0, %1, %2"
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))]
624   "TARGET_SIMD_SET"
625   "vmr4w %0, %1, %2"
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))]
634   "TARGET_SIMD_SET"
635   "vmr5aw %0, %1, %2"
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))]
644   "TARGET_SIMD_SET"
645   "vmr5w %0, %1, %2"
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))]
654   "TARGET_SIMD_SET"
655   "vmr6aw %0, %1, %2"
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))]
664   "TARGET_SIMD_SET"
665   "vmr6w %0, %1, %2"
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))]
674   "TARGET_SIMD_SET"
675   "vmr7aw %0, %1, %2"
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))]
684   "TARGET_SIMD_SET"
685   "vmr7w %0, %1, %2"
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))]
694   "TARGET_SIMD_SET"
695   "vmrb %0, %1, %2"
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))]
704   "TARGET_SIMD_SET"
705   "vh264f %0, %1, %2"
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))]
714   "TARGET_SIMD_SET"
715   "vh264ft %0, %1, %2"
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))]
724   "TARGET_SIMD_SET"
725   "vh264fw %0, %1, %2"
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))]
734   "TARGET_SIMD_SET"
735   "vvc1f %0, %1, %2"
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))]
744   "TARGET_SIMD_SET"
745   "vvc1ft %0, %1, %2"
746   [(set_attr "type" "simd_vspecial_3cycle")
747    (set_attr "length" "4")
748    (set_attr "cond" "nocond")])
752 ;;---
753 ;; V V r/limm Insns
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))]
759 ;;   "TARGET_SIMD_SET"
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))]
768   "TARGET_SIMD_SET"
769   "vbaddw %0, %1, %2"
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))]
778   "TARGET_SIMD_SET"
779   "vbmaxw %0, %1, %2"
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))]
788   "TARGET_SIMD_SET"
789   "vbminw %0, %1, %2"
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))]
798   "TARGET_SIMD_SET"
799   "vbmulaw %0, %1, %2"
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))]
808   "TARGET_SIMD_SET"
809   "vbmulfw %0, %1, %2"
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))]
818   "TARGET_SIMD_SET"
819   "vbmulw %0, %1, %2"
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))]
828   "TARGET_SIMD_SET"
829   "vbrsubw %0, %1, %2"
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))]
838   "TARGET_SIMD_SET"
839   "vbsubw %0, %1, %2"
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))]
850   "TARGET_SIMD_SET"
851   "vasrrwi %0, %1, %2"
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))]
860   "TARGET_SIMD_SET"
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))]
870   "TARGET_SIMD_SET"
871   "vasrwi %0, %1, %2"
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))]
880   "TARGET_SIMD_SET"
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))]
890   "TARGET_SIMD_SET"
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))]
900   "TARGET_SIMD_SET"
901   "vsr8awi %0, %1, %2"
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))]
910   "TARGET_SIMD_SET"
911   "vsr8i %0, %1, %2"
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))]
922   "TARGET_SIMD_SET"
923   "vmvaw %0, %1, %2"
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))]
932   "TARGET_SIMD_SET"
933   "vmvw %0, %1, %2"
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))]
942   "TARGET_SIMD_SET"
943   "vmvzw %0, %1, %2"
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))]
952   "TARGET_SIMD_SET"
953   "vd6tapf %0, %1, %2"
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))]
963   "TARGET_SIMD_SET"
964   "vmovaw %0, %1, %2"
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))]
973   "TARGET_SIMD_SET"
974   "vmovw %0, %1, %2"
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))]
983   "TARGET_SIMD_SET"
984   "vmovzw %0, %1, %2"
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))]
995   "TARGET_SIMD_SET"
996   "vsr8 %0, %1, i%2"
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))]
1006   "TARGET_SIMD_SET"
1007   "vasrw %0, %1, i%2"
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))]
1017   "TARGET_SIMD_SET"
1018   "vsr8aw %0, %1, i%2"
1019   [(set_attr "type" "simd_valign_with_acc")
1020    (set_attr "length" "4")
1021    (set_attr "cond" "nocond")])
1023 ;; Va, Vb insns
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))]
1027   "TARGET_SIMD_SET"
1028   "vabsaw %0, %1"
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))]
1036   "TARGET_SIMD_SET"
1037   "vabsw %0, %1"
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))]
1045   "TARGET_SIMD_SET"
1046   "vaddsuw %0, %1"
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))]
1054   "TARGET_SIMD_SET"
1055   "vsignw %0, %1"
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))]
1063   "TARGET_SIMD_SET"
1064   "vexch1 %0, %1"
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))]
1072   "TARGET_SIMD_SET"
1073   "vexch2 %0, %1"
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))]
1081   "TARGET_SIMD_SET"
1082   "vexch4 %0, %1"
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))]
1090   "TARGET_SIMD_SET"
1091   "vupbaw %0, %1"
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))]
1099   "TARGET_SIMD_SET"
1100   "vupbw %0, %1"
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))]
1108   "TARGET_SIMD_SET"
1109   "vupsbaw %0, %1"
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))]
1117   "TARGET_SIMD_SET"
1118   "vupsbw %0, %1"
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))]
1128   "TARGET_SIMD_SET"
1129   "vdirun %1, %2"
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))]
1138   "TARGET_SIMD_SET"
1139   "vdorun %1, %2"
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))]
1147   "TARGET_SIMD_SET"
1148   "vdiwr %0, %1"
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))]
1156   "TARGET_SIMD_SET"
1157   "vdowr %0, %1"
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)]
1165   "TARGET_SIMD_SET"
1166   "vrec %0"
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)]
1173   "TARGET_SIMD_SET"
1174   "vrun %0"
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)]
1181   "TARGET_SIMD_SET"
1182   "vrecrun %0"
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)]
1189   "TARGET_SIMD_SET"
1190   "vendrec %S0"
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)]))))]
1202   "TARGET_SIMD_SET"
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")])))))) ))]
1215   "TARGET_SIMD_SET"
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")))))]
1226  "TARGET_SIMD_SET"
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")]))))) ))]
1240   "TARGET_SIMD_SET"
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")])))))) ))]
1255   "TARGET_SIMD_SET"
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")])))]
1267  "TARGET_SIMD_SET"
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")])))]
1279  "TARGET_SIMD_SET"
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)]
1288   "TARGET_SIMD_SET"
1289   "vinti %0"
1290   [(set_attr "type" "simd_vcontrol")
1291    (set_attr "length" "4")
1292    (set_attr "cond" "nocond")])