]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/config/arc/simdext.md
Update copyright years.
[thirdparty/gcc.git] / gcc / config / arc / simdext.md
1 ;; Machine description of the Synopsys DesignWare ARC cpu for GNU C compiler
2 ;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
3
4 ;; This file is part of GCC.
5
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.
10
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.
15
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/>.
19
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)
80
81 ;; Va, Vb, Ic builtins
82 (UNSPEC_ARC_SIMD_VASRW 1060)
83 (UNSPEC_ARC_SIMD_VSR8 1061)
84 (UNSPEC_ARC_SIMD_VSR8AW 1062)
85
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)
94
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)
100
101 ;; Va, rlimm, u8 (simm) builtins
102 (UNSPEC_ARC_SIMD_VMOVAW 1080)
103 (UNSPEC_ARC_SIMD_VMOVW 1081)
104 (UNSPEC_ARC_SIMD_VMOVZW 1082)
105
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)
118
119 (UNSPEC_ARC_SIMD_VDIRUN 1100)
120 (UNSPEC_ARC_SIMD_VDORUN 1101)
121 (UNSPEC_ARC_SIMD_VDIWR 1102)
122 (UNSPEC_ARC_SIMD_VDOWR 1103)
123
124 (UNSPEC_ARC_SIMD_VREC 1105)
125 (UNSPEC_ARC_SIMD_VRUN 1106)
126 (UNSPEC_ARC_SIMD_VRECRUN 1107)
127 (UNSPEC_ARC_SIMD_VENDREC 1108)
128
129 (UNSPEC_ARC_SIMD_VCAST 1200)
130 (UNSPEC_ARC_SIMD_VINTI 1201)
131 ]
132 )
133
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")
138
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")
143
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")
148
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")
155
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")
159
160 (define_expand "movv8hi"
161 [(set (match_operand:V8HI 0 "general_operand" "")
162 (match_operand:V8HI 1 "general_operand" ""))]
163 ""
164 "
165 {
166 /* Everything except mem = const or mem = mem can be done easily. */
167
168 if (GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)
169 operands[1] = force_reg (V8HImode, operands[1]);
170 }")
171
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")]
183 )
184
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")]
195 )
196
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")]
208 )
209
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")])
221
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")])
233
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")])
241
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")])
249
250
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")])
259
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")])
268
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")])
279
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")])
289
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")])
299
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")])
309
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")])
319
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")])
329
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")])
339
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")])
349
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")])
359
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")])
369
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")])
379
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")])
389
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")])
399
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")])
409
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")])
419
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")])
429
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")])
439
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")])
449
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")])
459
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")])
469
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")])
479
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")])
489
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")])
499
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")])
509
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")])
519
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")])
529
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")])
539
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")])
549
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")])
559
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")])
569
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")])
579
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")])
589
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")])
599
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")])
609
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")])
619
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")])
629
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")])
639
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")])
649
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")])
659
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")])
669
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")])
679
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")])
689
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")])
699
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")])
709
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")])
719
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")])
729
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")])
739
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")])
749
750
751
752 ;;---
753 ;; V V r/limm Insns
754
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")])
763
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")])
773
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")])
783
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")])
793
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")])
803
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")])
813
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")])
823
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")])
833
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
844
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")])
855
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")])
865
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")])
875
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")])
885
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")])
895
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")])
905
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")])
915
916 ;; Va, Vb, u8 (simm) insns
917
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")])
927
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")])
937
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")])
947
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")])
957
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")])
968
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")])
978
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")])
988
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")])
1000
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")])
1011
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")])
1022
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")])
1032
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")])
1041
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")])
1050
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")])
1059
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")])
1068
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")])
1077
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")])
1086
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")])
1095
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")])
1104
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")])
1113
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")])
1122
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")])
1133
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")])
1143
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")])
1152
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")])
1161
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")])
1170
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")])
1178
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")])
1186
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")])
1194
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")])
1207
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")])
1220
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")]
1231 )
1232
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")])
1245
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")])
1260
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")])
1272
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")])
1284
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")])