annotate gcc/config/arc/simdext.md @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ;; Machine description of the Synopsys DesignWare ARC cpu for GNU C compiler
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 ;; Copyright (C) 2007-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3
kono
parents:
diff changeset
4 ;; This file is part of GCC.
kono
parents:
diff changeset
5
kono
parents:
diff changeset
6 ;; GCC is free software; you can redistribute it and/or modify
kono
parents:
diff changeset
7 ;; it under the terms of the GNU General Public License as published by
kono
parents:
diff changeset
8 ;; the Free Software Foundation; either version 3, or (at your option)
kono
parents:
diff changeset
9 ;; any later version.
kono
parents:
diff changeset
10
kono
parents:
diff changeset
11 ;; GCC is distributed in the hope that it will be useful,
kono
parents:
diff changeset
12 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
kono
parents:
diff changeset
13 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
kono
parents:
diff changeset
14 ;; GNU General Public License for more details.
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 ;; You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
17 ;; along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
18 ;; <http://www.gnu.org/licenses/>.
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 (define_c_enum "unspec" [
kono
parents:
diff changeset
21 ;; Va, Vb, Vc builtins
kono
parents:
diff changeset
22 UNSPEC_ARC_SIMD_VADDAW
kono
parents:
diff changeset
23 UNSPEC_ARC_SIMD_VADDW
kono
parents:
diff changeset
24 UNSPEC_ARC_SIMD_VAVB
kono
parents:
diff changeset
25 UNSPEC_ARC_SIMD_VAVRB
kono
parents:
diff changeset
26 UNSPEC_ARC_SIMD_VDIFAW
kono
parents:
diff changeset
27 UNSPEC_ARC_SIMD_VDIFW
kono
parents:
diff changeset
28 UNSPEC_ARC_SIMD_VMAXAW
kono
parents:
diff changeset
29 UNSPEC_ARC_SIMD_VMAXW
kono
parents:
diff changeset
30 UNSPEC_ARC_SIMD_VMINAW
kono
parents:
diff changeset
31 UNSPEC_ARC_SIMD_VMINW
kono
parents:
diff changeset
32 UNSPEC_ARC_SIMD_VMULAW
kono
parents:
diff changeset
33 UNSPEC_ARC_SIMD_VMULFAW
kono
parents:
diff changeset
34 UNSPEC_ARC_SIMD_VMULFW
kono
parents:
diff changeset
35 UNSPEC_ARC_SIMD_VMULW
kono
parents:
diff changeset
36 UNSPEC_ARC_SIMD_VSUBAW
kono
parents:
diff changeset
37 UNSPEC_ARC_SIMD_VSUBW
kono
parents:
diff changeset
38 UNSPEC_ARC_SIMD_VSUMMW
kono
parents:
diff changeset
39 UNSPEC_ARC_SIMD_VAND
kono
parents:
diff changeset
40 UNSPEC_ARC_SIMD_VANDAW
kono
parents:
diff changeset
41 UNSPEC_ARC_SIMD_VBIC
kono
parents:
diff changeset
42 UNSPEC_ARC_SIMD_VBICAW
kono
parents:
diff changeset
43 UNSPEC_ARC_SIMD_VOR
kono
parents:
diff changeset
44 UNSPEC_ARC_SIMD_VXOR
kono
parents:
diff changeset
45 UNSPEC_ARC_SIMD_VXORAW
kono
parents:
diff changeset
46 UNSPEC_ARC_SIMD_VEQW
kono
parents:
diff changeset
47 UNSPEC_ARC_SIMD_VLEW
kono
parents:
diff changeset
48 UNSPEC_ARC_SIMD_VLTW
kono
parents:
diff changeset
49 UNSPEC_ARC_SIMD_VNEW
kono
parents:
diff changeset
50 UNSPEC_ARC_SIMD_VMR1AW
kono
parents:
diff changeset
51 UNSPEC_ARC_SIMD_VMR1W
kono
parents:
diff changeset
52 UNSPEC_ARC_SIMD_VMR2AW
kono
parents:
diff changeset
53 UNSPEC_ARC_SIMD_VMR2W
kono
parents:
diff changeset
54 UNSPEC_ARC_SIMD_VMR3AW
kono
parents:
diff changeset
55 UNSPEC_ARC_SIMD_VMR3W
kono
parents:
diff changeset
56 UNSPEC_ARC_SIMD_VMR4AW
kono
parents:
diff changeset
57 UNSPEC_ARC_SIMD_VMR4W
kono
parents:
diff changeset
58 UNSPEC_ARC_SIMD_VMR5AW
kono
parents:
diff changeset
59 UNSPEC_ARC_SIMD_VMR5W
kono
parents:
diff changeset
60 UNSPEC_ARC_SIMD_VMR6AW
kono
parents:
diff changeset
61 UNSPEC_ARC_SIMD_VMR6W
kono
parents:
diff changeset
62 UNSPEC_ARC_SIMD_VMR7AW
kono
parents:
diff changeset
63 UNSPEC_ARC_SIMD_VMR7W
kono
parents:
diff changeset
64 UNSPEC_ARC_SIMD_VMRB
kono
parents:
diff changeset
65 UNSPEC_ARC_SIMD_VH264F
kono
parents:
diff changeset
66 UNSPEC_ARC_SIMD_VH264FT
kono
parents:
diff changeset
67 UNSPEC_ARC_SIMD_VH264FW
kono
parents:
diff changeset
68 UNSPEC_ARC_SIMD_VVC1F
kono
parents:
diff changeset
69 UNSPEC_ARC_SIMD_VVC1FT
kono
parents:
diff changeset
70 ;; Va, Vb, rc/limm builtins
kono
parents:
diff changeset
71 UNSPEC_ARC_SIMD_VBADDW
kono
parents:
diff changeset
72 UNSPEC_ARC_SIMD_VBMAXW
kono
parents:
diff changeset
73 UNSPEC_ARC_SIMD_VBMINW
kono
parents:
diff changeset
74 UNSPEC_ARC_SIMD_VBMULAW
kono
parents:
diff changeset
75 UNSPEC_ARC_SIMD_VBMULFW
kono
parents:
diff changeset
76 UNSPEC_ARC_SIMD_VBMULW
kono
parents:
diff changeset
77 UNSPEC_ARC_SIMD_VBRSUBW
kono
parents:
diff changeset
78 UNSPEC_ARC_SIMD_VBSUBW
kono
parents:
diff changeset
79
kono
parents:
diff changeset
80 ;; Va, Vb, Ic builtins
kono
parents:
diff changeset
81 UNSPEC_ARC_SIMD_VASRW
kono
parents:
diff changeset
82 UNSPEC_ARC_SIMD_VSR8
kono
parents:
diff changeset
83 UNSPEC_ARC_SIMD_VSR8AW
kono
parents:
diff changeset
84
kono
parents:
diff changeset
85 ;; Va, Vb, Ic builtins
kono
parents:
diff changeset
86 UNSPEC_ARC_SIMD_VASRRWi
kono
parents:
diff changeset
87 UNSPEC_ARC_SIMD_VASRSRWi
kono
parents:
diff changeset
88 UNSPEC_ARC_SIMD_VASRWi
kono
parents:
diff changeset
89 UNSPEC_ARC_SIMD_VASRPWBi
kono
parents:
diff changeset
90 UNSPEC_ARC_SIMD_VASRRPWBi
kono
parents:
diff changeset
91 UNSPEC_ARC_SIMD_VSR8AWi
kono
parents:
diff changeset
92 UNSPEC_ARC_SIMD_VSR8i
kono
parents:
diff changeset
93
kono
parents:
diff changeset
94 ;; Va, Vb, u8 (simm) builtins
kono
parents:
diff changeset
95 UNSPEC_ARC_SIMD_VMVAW
kono
parents:
diff changeset
96 UNSPEC_ARC_SIMD_VMVW
kono
parents:
diff changeset
97 UNSPEC_ARC_SIMD_VMVZW
kono
parents:
diff changeset
98 UNSPEC_ARC_SIMD_VD6TAPF
kono
parents:
diff changeset
99
kono
parents:
diff changeset
100 ;; Va, rlimm, u8 (simm) builtins
kono
parents:
diff changeset
101 UNSPEC_ARC_SIMD_VMOVAW
kono
parents:
diff changeset
102 UNSPEC_ARC_SIMD_VMOVW
kono
parents:
diff changeset
103 UNSPEC_ARC_SIMD_VMOVZW
kono
parents:
diff changeset
104
kono
parents:
diff changeset
105 ;; Va, Vb builtins
kono
parents:
diff changeset
106 UNSPEC_ARC_SIMD_VABSAW
kono
parents:
diff changeset
107 UNSPEC_ARC_SIMD_VABSW
kono
parents:
diff changeset
108 UNSPEC_ARC_SIMD_VADDSUW
kono
parents:
diff changeset
109 UNSPEC_ARC_SIMD_VSIGNW
kono
parents:
diff changeset
110 UNSPEC_ARC_SIMD_VEXCH1
kono
parents:
diff changeset
111 UNSPEC_ARC_SIMD_VEXCH2
kono
parents:
diff changeset
112 UNSPEC_ARC_SIMD_VEXCH4
kono
parents:
diff changeset
113 UNSPEC_ARC_SIMD_VUPBAW
kono
parents:
diff changeset
114 UNSPEC_ARC_SIMD_VUPBW
kono
parents:
diff changeset
115 UNSPEC_ARC_SIMD_VUPSBAW
kono
parents:
diff changeset
116 UNSPEC_ARC_SIMD_VUPSBW
kono
parents:
diff changeset
117
kono
parents:
diff changeset
118 UNSPEC_ARC_SIMD_VDIRUN
kono
parents:
diff changeset
119 UNSPEC_ARC_SIMD_VDORUN
kono
parents:
diff changeset
120 UNSPEC_ARC_SIMD_VDIWR
kono
parents:
diff changeset
121 UNSPEC_ARC_SIMD_VDOWR
kono
parents:
diff changeset
122
kono
parents:
diff changeset
123 UNSPEC_ARC_SIMD_VREC
kono
parents:
diff changeset
124 UNSPEC_ARC_SIMD_VRUN
kono
parents:
diff changeset
125 UNSPEC_ARC_SIMD_VRECRUN
kono
parents:
diff changeset
126 UNSPEC_ARC_SIMD_VENDREC
kono
parents:
diff changeset
127
kono
parents:
diff changeset
128 UNSPEC_ARC_SIMD_VCAST
kono
parents:
diff changeset
129 UNSPEC_ARC_SIMD_VINTI
kono
parents:
diff changeset
130 ])
kono
parents:
diff changeset
131
kono
parents:
diff changeset
132 ;; Scheduler descriptions for the simd instructions
kono
parents:
diff changeset
133 (define_insn_reservation "simd_lat_0_insn" 1
kono
parents:
diff changeset
134 (eq_attr "type" "simd_dma, simd_vstore, simd_vcontrol")
kono
parents:
diff changeset
135 "issue+simd_unit")
kono
parents:
diff changeset
136
kono
parents:
diff changeset
137 (define_insn_reservation "simd_lat_1_insn" 2
kono
parents:
diff changeset
138 (eq_attr "type" "simd_vcompare, simd_vlogic,
kono
parents:
diff changeset
139 simd_vmove_else_zero, simd_varith_1cycle")
kono
parents:
diff changeset
140 "issue+simd_unit, nothing")
kono
parents:
diff changeset
141
kono
parents:
diff changeset
142 (define_insn_reservation "simd_lat_2_insn" 3
kono
parents:
diff changeset
143 (eq_attr "type" "simd_valign, simd_vpermute,
kono
parents:
diff changeset
144 simd_vpack, simd_varith_2cycle")
kono
parents:
diff changeset
145 "issue+simd_unit, nothing*2")
kono
parents:
diff changeset
146
kono
parents:
diff changeset
147 (define_insn_reservation "simd_lat_3_insn" 4
kono
parents:
diff changeset
148 (eq_attr "type" "simd_valign_with_acc, simd_vpack_with_acc,
kono
parents:
diff changeset
149 simd_vlogic_with_acc, simd_vload128,
kono
parents:
diff changeset
150 simd_vmove_with_acc, simd_vspecial_3cycle,
kono
parents:
diff changeset
151 simd_varith_with_acc")
kono
parents:
diff changeset
152 "issue+simd_unit, nothing*3")
kono
parents:
diff changeset
153
kono
parents:
diff changeset
154 (define_insn_reservation "simd_lat_4_insn" 5
kono
parents:
diff changeset
155 (eq_attr "type" "simd_vload, simd_vmove, simd_vspecial_4cycle")
kono
parents:
diff changeset
156 "issue+simd_unit, nothing*4")
kono
parents:
diff changeset
157
kono
parents:
diff changeset
158 (define_expand "movv8hi"
kono
parents:
diff changeset
159 [(set (match_operand:V8HI 0 "general_operand" "")
kono
parents:
diff changeset
160 (match_operand:V8HI 1 "general_operand" ""))]
kono
parents:
diff changeset
161 ""
kono
parents:
diff changeset
162 "
kono
parents:
diff changeset
163 {
kono
parents:
diff changeset
164 /* Everything except mem = const or mem = mem can be done easily. */
kono
parents:
diff changeset
165
kono
parents:
diff changeset
166 if (GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)
kono
parents:
diff changeset
167 operands[1] = force_reg (V8HImode, operands[1]);
kono
parents:
diff changeset
168 }")
kono
parents:
diff changeset
169
kono
parents:
diff changeset
170 ;; This pattern should appear before the movv8hi_insn pattern
kono
parents:
diff changeset
171 (define_insn "vld128_insn"
kono
parents:
diff changeset
172 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
173 (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
174 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
kono
parents:
diff changeset
175 (match_operand:SI 3 "immediate_operand" "P"))))]
kono
parents:
diff changeset
176 "TARGET_SIMD_SET"
kono
parents:
diff changeset
177 "vld128 %0, [i%2, %3]"
kono
parents:
diff changeset
178 [(set_attr "type" "simd_vload128")
kono
parents:
diff changeset
179 (set_attr "length" "4")
kono
parents:
diff changeset
180 (set_attr "cond" "nocond")]
kono
parents:
diff changeset
181 )
kono
parents:
diff changeset
182
kono
parents:
diff changeset
183 (define_insn "vst128_insn"
kono
parents:
diff changeset
184 [(set (mem:V8HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
kono
parents:
diff changeset
185 (parallel [(match_operand:SI 1 "immediate_operand" "L")])))
kono
parents:
diff changeset
186 (match_operand:SI 2 "immediate_operand" "P")))
kono
parents:
diff changeset
187 (match_operand:V8HI 3 "vector_register_operand" "=v"))]
kono
parents:
diff changeset
188 "TARGET_SIMD_SET"
kono
parents:
diff changeset
189 "vst128 %3, [i%1, %2]"
kono
parents:
diff changeset
190 [(set_attr "type" "simd_vstore")
kono
parents:
diff changeset
191 (set_attr "length" "4")
kono
parents:
diff changeset
192 (set_attr "cond" "nocond")]
kono
parents:
diff changeset
193 )
kono
parents:
diff changeset
194
kono
parents:
diff changeset
195 (define_insn "vst64_insn"
kono
parents:
diff changeset
196 [(set (mem:V4HI
kono
parents:
diff changeset
197 (plus:SI
kono
parents:
diff changeset
198 (zero_extend:SI
kono
parents:
diff changeset
199 (vec_select:HI (match_operand:V8HI 0 "vector_register_operand" "v")
kono
parents:
diff changeset
200 (parallel
kono
parents:
diff changeset
201 [(match_operand:SI 1 "immediate_operand" "L")])))
kono
parents:
diff changeset
202 (match_operand:SI 2 "immediate_operand" "P")))
kono
parents:
diff changeset
203 (vec_select:V4HI
kono
parents:
diff changeset
204 (match_operand:V8HI 3 "vector_register_operand" "=v")
kono
parents:
diff changeset
205 (parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)])))]
kono
parents:
diff changeset
206 "TARGET_SIMD_SET"
kono
parents:
diff changeset
207 "vst64 %3, [i%1, %2]"
kono
parents:
diff changeset
208 [(set_attr "type" "simd_vstore")
kono
parents:
diff changeset
209 (set_attr "length" "4")
kono
parents:
diff changeset
210 (set_attr "cond" "nocond")]
kono
parents:
diff changeset
211 )
kono
parents:
diff changeset
212
kono
parents:
diff changeset
213 (define_insn "movv8hi_insn"
kono
parents:
diff changeset
214 [(set (match_operand:V8HI 0 "vector_register_or_memory_operand" "=v,m,v")
kono
parents:
diff changeset
215 (match_operand:V8HI 1 "vector_register_or_memory_operand" "m,v,v"))]
kono
parents:
diff changeset
216 "TARGET_SIMD_SET && !(GET_CODE (operands[0]) == MEM && GET_CODE(operands[1]) == MEM)"
kono
parents:
diff changeset
217 "@
kono
parents:
diff changeset
218 vld128r %0, %1
kono
parents:
diff changeset
219 vst128r %1, %0
kono
parents:
diff changeset
220 vmvzw %0,%1,0xffff"
kono
parents:
diff changeset
221 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
kono
parents:
diff changeset
222 (set_attr "length" "8,8,4")
kono
parents:
diff changeset
223 (set_attr "cond" "nocond, nocond, nocond")])
kono
parents:
diff changeset
224
kono
parents:
diff changeset
225 (define_insn "movti_insn"
kono
parents:
diff changeset
226 [(set (match_operand:TI 0 "vector_register_or_memory_operand" "=v,m,v")
kono
parents:
diff changeset
227 (match_operand:TI 1 "vector_register_or_memory_operand" "m,v,v"))]
kono
parents:
diff changeset
228 ""
kono
parents:
diff changeset
229 "@
kono
parents:
diff changeset
230 vld128r %0, %1
kono
parents:
diff changeset
231 vst128r %1, %0
kono
parents:
diff changeset
232 vmvzw %0,%1,0xffff"
kono
parents:
diff changeset
233 [(set_attr "type" "simd_vload128,simd_vstore,simd_vmove_else_zero")
kono
parents:
diff changeset
234 (set_attr "length" "8,8,4")
kono
parents:
diff changeset
235 (set_attr "cond" "nocond, nocond, nocond")])
kono
parents:
diff changeset
236
kono
parents:
diff changeset
237 ;; (define_insn "*movv8hi_insn_rr"
kono
parents:
diff changeset
238 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
239 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
kono
parents:
diff changeset
240 ;; ""
kono
parents:
diff changeset
241 ;; "mov reg,reg"
kono
parents:
diff changeset
242 ;; [(set_attr "length" "8")
kono
parents:
diff changeset
243 ;; (set_attr "type" "move")])
kono
parents:
diff changeset
244
kono
parents:
diff changeset
245 ;; (define_insn "*movv8_out"
kono
parents:
diff changeset
246 ;; [(set (match_operand:V8HI 0 "memory_operand" "=m")
kono
parents:
diff changeset
247 ;; (match_operand:V8HI 1 "vector_register_operand" "v"))]
kono
parents:
diff changeset
248 ;; ""
kono
parents:
diff changeset
249 ;; "mov out"
kono
parents:
diff changeset
250 ;; [(set_attr "length" "8")
kono
parents:
diff changeset
251 ;; (set_attr "type" "move")])
kono
parents:
diff changeset
252
kono
parents:
diff changeset
253
kono
parents:
diff changeset
254 ;; (define_insn "addv8hi3"
kono
parents:
diff changeset
255 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
256 ;; (plus:V8HI (match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
257 ;; (match_operand:V8HI 2 "vector_register_operand" "v")))]
kono
parents:
diff changeset
258 ;; "TARGET_SIMD_SET"
kono
parents:
diff changeset
259 ;; "vaddw %0, %1, %2"
kono
parents:
diff changeset
260 ;; [(set_attr "length" "8")
kono
parents:
diff changeset
261 ;; (set_attr "cond" "nocond")])
kono
parents:
diff changeset
262
kono
parents:
diff changeset
263 ;; (define_insn "vaddw_insn"
kono
parents:
diff changeset
264 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
265 ;; (unspec [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
266 ;; (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
kono
parents:
diff changeset
267 ;; "TARGET_SIMD_SET"
kono
parents:
diff changeset
268 ;; "vaddw %0, %1, %2"
kono
parents:
diff changeset
269 ;; [(set_attr "length" "8")
kono
parents:
diff changeset
270 ;; (set_attr "cond" "nocond")])
kono
parents:
diff changeset
271
kono
parents:
diff changeset
272 ;; V V V Insns
kono
parents:
diff changeset
273 (define_insn "vaddaw_insn"
kono
parents:
diff changeset
274 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
275 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
276 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDAW))]
kono
parents:
diff changeset
277 "TARGET_SIMD_SET"
kono
parents:
diff changeset
278 "vaddaw %0, %1, %2"
kono
parents:
diff changeset
279 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
280 (set_attr "length" "4")
kono
parents:
diff changeset
281 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
282
kono
parents:
diff changeset
283 (define_insn "vaddw_insn"
kono
parents:
diff changeset
284 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
285 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
286 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDW))]
kono
parents:
diff changeset
287 "TARGET_SIMD_SET"
kono
parents:
diff changeset
288 "vaddw %0, %1, %2"
kono
parents:
diff changeset
289 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
290 (set_attr "length" "4")
kono
parents:
diff changeset
291 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
292
kono
parents:
diff changeset
293 (define_insn "vavb_insn"
kono
parents:
diff changeset
294 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
295 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
296 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVB))]
kono
parents:
diff changeset
297 "TARGET_SIMD_SET"
kono
parents:
diff changeset
298 "vavb %0, %1, %2"
kono
parents:
diff changeset
299 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
300 (set_attr "length" "4")
kono
parents:
diff changeset
301 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
302
kono
parents:
diff changeset
303 (define_insn "vavrb_insn"
kono
parents:
diff changeset
304 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
305 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
306 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAVRB))]
kono
parents:
diff changeset
307 "TARGET_SIMD_SET"
kono
parents:
diff changeset
308 "vavrb %0, %1, %2"
kono
parents:
diff changeset
309 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
310 (set_attr "length" "4")
kono
parents:
diff changeset
311 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
312
kono
parents:
diff changeset
313 (define_insn "vdifaw_insn"
kono
parents:
diff changeset
314 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
315 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
316 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFAW))]
kono
parents:
diff changeset
317 "TARGET_SIMD_SET"
kono
parents:
diff changeset
318 "vdifaw %0, %1, %2"
kono
parents:
diff changeset
319 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
320 (set_attr "length" "4")
kono
parents:
diff changeset
321 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
322
kono
parents:
diff changeset
323 (define_insn "vdifw_insn"
kono
parents:
diff changeset
324 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
325 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
326 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VDIFW))]
kono
parents:
diff changeset
327 "TARGET_SIMD_SET"
kono
parents:
diff changeset
328 "vdifw %0, %1, %2"
kono
parents:
diff changeset
329 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
330 (set_attr "length" "4")
kono
parents:
diff changeset
331 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
332
kono
parents:
diff changeset
333 (define_insn "vmaxaw_insn"
kono
parents:
diff changeset
334 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
335 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
336 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXAW))]
kono
parents:
diff changeset
337 "TARGET_SIMD_SET"
kono
parents:
diff changeset
338 "vmaxaw %0, %1, %2"
kono
parents:
diff changeset
339 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
340 (set_attr "length" "4")
kono
parents:
diff changeset
341 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
342
kono
parents:
diff changeset
343 (define_insn "vmaxw_insn"
kono
parents:
diff changeset
344 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
345 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
346 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMAXW))]
kono
parents:
diff changeset
347 "TARGET_SIMD_SET"
kono
parents:
diff changeset
348 "vmaxw %0, %1, %2"
kono
parents:
diff changeset
349 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
350 (set_attr "length" "4")
kono
parents:
diff changeset
351 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
352
kono
parents:
diff changeset
353 (define_insn "vminaw_insn"
kono
parents:
diff changeset
354 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
355 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
356 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINAW))]
kono
parents:
diff changeset
357 "TARGET_SIMD_SET"
kono
parents:
diff changeset
358 "vminaw %0, %1, %2"
kono
parents:
diff changeset
359 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
360 (set_attr "length" "4")
kono
parents:
diff changeset
361 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
362
kono
parents:
diff changeset
363 (define_insn "vminw_insn"
kono
parents:
diff changeset
364 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
365 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
366 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMINW))]
kono
parents:
diff changeset
367 "TARGET_SIMD_SET"
kono
parents:
diff changeset
368 "vminw %0, %1, %2"
kono
parents:
diff changeset
369 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
370 (set_attr "length" "4")
kono
parents:
diff changeset
371 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
372
kono
parents:
diff changeset
373 (define_insn "vmulaw_insn"
kono
parents:
diff changeset
374 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
375 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
376 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULAW))]
kono
parents:
diff changeset
377 "TARGET_SIMD_SET"
kono
parents:
diff changeset
378 "vmulaw %0, %1, %2"
kono
parents:
diff changeset
379 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
380 (set_attr "length" "4")
kono
parents:
diff changeset
381 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
382
kono
parents:
diff changeset
383 (define_insn "vmulfaw_insn"
kono
parents:
diff changeset
384 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
385 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
386 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFAW))]
kono
parents:
diff changeset
387 "TARGET_SIMD_SET"
kono
parents:
diff changeset
388 "vmulfaw %0, %1, %2"
kono
parents:
diff changeset
389 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
390 (set_attr "length" "4")
kono
parents:
diff changeset
391 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
392
kono
parents:
diff changeset
393 (define_insn "vmulfw_insn"
kono
parents:
diff changeset
394 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
395 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
396 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULFW))]
kono
parents:
diff changeset
397 "TARGET_SIMD_SET"
kono
parents:
diff changeset
398 "vmulfw %0, %1, %2"
kono
parents:
diff changeset
399 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
400 (set_attr "length" "4")
kono
parents:
diff changeset
401 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
402
kono
parents:
diff changeset
403 (define_insn "vmulw_insn"
kono
parents:
diff changeset
404 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
405 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
406 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMULW))]
kono
parents:
diff changeset
407 "TARGET_SIMD_SET"
kono
parents:
diff changeset
408 "vmulw %0, %1, %2"
kono
parents:
diff changeset
409 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
410 (set_attr "length" "4")
kono
parents:
diff changeset
411 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
412
kono
parents:
diff changeset
413 (define_insn "vsubaw_insn"
kono
parents:
diff changeset
414 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
415 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
416 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBAW))]
kono
parents:
diff changeset
417 "TARGET_SIMD_SET"
kono
parents:
diff changeset
418 "vsubaw %0, %1, %2"
kono
parents:
diff changeset
419 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
420 (set_attr "length" "4")
kono
parents:
diff changeset
421 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
422
kono
parents:
diff changeset
423 (define_insn "vsubw_insn"
kono
parents:
diff changeset
424 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
425 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
426 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUBW))]
kono
parents:
diff changeset
427 "TARGET_SIMD_SET"
kono
parents:
diff changeset
428 "vsubw %0, %1, %2"
kono
parents:
diff changeset
429 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
430 (set_attr "length" "4")
kono
parents:
diff changeset
431 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
432
kono
parents:
diff changeset
433 (define_insn "vsummw_insn"
kono
parents:
diff changeset
434 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
435 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
436 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSUMMW))]
kono
parents:
diff changeset
437 "TARGET_SIMD_SET"
kono
parents:
diff changeset
438 "vsummw %0, %1, %2"
kono
parents:
diff changeset
439 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
440 (set_attr "length" "4")
kono
parents:
diff changeset
441 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
442
kono
parents:
diff changeset
443 (define_insn "vand_insn"
kono
parents:
diff changeset
444 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
445 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
446 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VAND))]
kono
parents:
diff changeset
447 "TARGET_SIMD_SET"
kono
parents:
diff changeset
448 "vand %0, %1, %2"
kono
parents:
diff changeset
449 [(set_attr "type" "simd_vlogic")
kono
parents:
diff changeset
450 (set_attr "length" "4")
kono
parents:
diff changeset
451 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
452
kono
parents:
diff changeset
453 (define_insn "vandaw_insn"
kono
parents:
diff changeset
454 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
455 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
456 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VANDAW))]
kono
parents:
diff changeset
457 "TARGET_SIMD_SET"
kono
parents:
diff changeset
458 "vandaw %0, %1, %2"
kono
parents:
diff changeset
459 [(set_attr "type" "simd_vlogic_with_acc")
kono
parents:
diff changeset
460 (set_attr "length" "4")
kono
parents:
diff changeset
461 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
462
kono
parents:
diff changeset
463 (define_insn "vbic_insn"
kono
parents:
diff changeset
464 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
465 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
466 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBIC))]
kono
parents:
diff changeset
467 "TARGET_SIMD_SET"
kono
parents:
diff changeset
468 "vbic %0, %1, %2"
kono
parents:
diff changeset
469 [(set_attr "type" "simd_vlogic")
kono
parents:
diff changeset
470 (set_attr "length" "4")
kono
parents:
diff changeset
471 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
472
kono
parents:
diff changeset
473 (define_insn "vbicaw_insn"
kono
parents:
diff changeset
474 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
475 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
476 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VBICAW))]
kono
parents:
diff changeset
477 "TARGET_SIMD_SET"
kono
parents:
diff changeset
478 "vbicaw %0, %1, %2"
kono
parents:
diff changeset
479 [(set_attr "type" "simd_vlogic_with_acc")
kono
parents:
diff changeset
480 (set_attr "length" "4")
kono
parents:
diff changeset
481 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
482
kono
parents:
diff changeset
483 (define_insn "vor_insn"
kono
parents:
diff changeset
484 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
485 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
486 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VOR))]
kono
parents:
diff changeset
487 "TARGET_SIMD_SET"
kono
parents:
diff changeset
488 "vor %0, %1, %2"
kono
parents:
diff changeset
489 [(set_attr "type" "simd_vlogic")
kono
parents:
diff changeset
490 (set_attr "length" "4")
kono
parents:
diff changeset
491 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
492
kono
parents:
diff changeset
493 (define_insn "vxor_insn"
kono
parents:
diff changeset
494 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
495 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
496 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXOR))]
kono
parents:
diff changeset
497 "TARGET_SIMD_SET"
kono
parents:
diff changeset
498 "vxor %0, %1, %2"
kono
parents:
diff changeset
499 [(set_attr "type" "simd_vlogic")
kono
parents:
diff changeset
500 (set_attr "length" "4")
kono
parents:
diff changeset
501 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
502
kono
parents:
diff changeset
503 (define_insn "vxoraw_insn"
kono
parents:
diff changeset
504 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
505 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
506 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VXORAW))]
kono
parents:
diff changeset
507 "TARGET_SIMD_SET"
kono
parents:
diff changeset
508 "vxoraw %0, %1, %2"
kono
parents:
diff changeset
509 [(set_attr "type" "simd_vlogic_with_acc")
kono
parents:
diff changeset
510 (set_attr "length" "4")
kono
parents:
diff changeset
511 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
512
kono
parents:
diff changeset
513 (define_insn "veqw_insn"
kono
parents:
diff changeset
514 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
515 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
516 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEQW))]
kono
parents:
diff changeset
517 "TARGET_SIMD_SET"
kono
parents:
diff changeset
518 "veqw %0, %1, %2"
kono
parents:
diff changeset
519 [(set_attr "type" "simd_vcompare")
kono
parents:
diff changeset
520 (set_attr "length" "4")
kono
parents:
diff changeset
521 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
522
kono
parents:
diff changeset
523 (define_insn "vlew_insn"
kono
parents:
diff changeset
524 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
525 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
526 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLEW))]
kono
parents:
diff changeset
527 "TARGET_SIMD_SET"
kono
parents:
diff changeset
528 "vlew %0, %1, %2"
kono
parents:
diff changeset
529 [(set_attr "type" "simd_vcompare")
kono
parents:
diff changeset
530 (set_attr "length" "4")
kono
parents:
diff changeset
531 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
532
kono
parents:
diff changeset
533 (define_insn "vltw_insn"
kono
parents:
diff changeset
534 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
535 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
536 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VLTW))]
kono
parents:
diff changeset
537 "TARGET_SIMD_SET"
kono
parents:
diff changeset
538 "vltw %0, %1, %2"
kono
parents:
diff changeset
539 [(set_attr "type" "simd_vcompare")
kono
parents:
diff changeset
540 (set_attr "length" "4")
kono
parents:
diff changeset
541 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
542
kono
parents:
diff changeset
543 (define_insn "vnew_insn"
kono
parents:
diff changeset
544 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
545 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
546 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VNEW))]
kono
parents:
diff changeset
547 "TARGET_SIMD_SET"
kono
parents:
diff changeset
548 "vnew %0, %1, %2"
kono
parents:
diff changeset
549 [(set_attr "type" "simd_vcompare")
kono
parents:
diff changeset
550 (set_attr "length" "4")
kono
parents:
diff changeset
551 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
552
kono
parents:
diff changeset
553 (define_insn "vmr1aw_insn"
kono
parents:
diff changeset
554 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
555 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
556 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1AW))]
kono
parents:
diff changeset
557 "TARGET_SIMD_SET"
kono
parents:
diff changeset
558 "vmr1aw %0, %1, %2"
kono
parents:
diff changeset
559 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
560 (set_attr "length" "4")
kono
parents:
diff changeset
561 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
562
kono
parents:
diff changeset
563 (define_insn "vmr1w_insn"
kono
parents:
diff changeset
564 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
565 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
566 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR1W))]
kono
parents:
diff changeset
567 "TARGET_SIMD_SET"
kono
parents:
diff changeset
568 "vmr1w %0, %1, %2"
kono
parents:
diff changeset
569 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
570 (set_attr "length" "4")
kono
parents:
diff changeset
571 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
572
kono
parents:
diff changeset
573 (define_insn "vmr2aw_insn"
kono
parents:
diff changeset
574 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
575 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
576 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2AW))]
kono
parents:
diff changeset
577 "TARGET_SIMD_SET"
kono
parents:
diff changeset
578 "vmr2aw %0, %1, %2"
kono
parents:
diff changeset
579 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
580 (set_attr "length" "4")
kono
parents:
diff changeset
581 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
582
kono
parents:
diff changeset
583 (define_insn "vmr2w_insn"
kono
parents:
diff changeset
584 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
585 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
586 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR2W))]
kono
parents:
diff changeset
587 "TARGET_SIMD_SET"
kono
parents:
diff changeset
588 "vmr2w %0, %1, %2"
kono
parents:
diff changeset
589 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
590 (set_attr "length" "4")
kono
parents:
diff changeset
591 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
592
kono
parents:
diff changeset
593 (define_insn "vmr3aw_insn"
kono
parents:
diff changeset
594 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
595 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
596 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3AW))]
kono
parents:
diff changeset
597 "TARGET_SIMD_SET"
kono
parents:
diff changeset
598 "vmr3aw %0, %1, %2"
kono
parents:
diff changeset
599 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
600 (set_attr "length" "4")
kono
parents:
diff changeset
601 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
602
kono
parents:
diff changeset
603 (define_insn "vmr3w_insn"
kono
parents:
diff changeset
604 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
605 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
606 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR3W))]
kono
parents:
diff changeset
607 "TARGET_SIMD_SET"
kono
parents:
diff changeset
608 "vmr3w %0, %1, %2"
kono
parents:
diff changeset
609 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
610 (set_attr "length" "4")
kono
parents:
diff changeset
611 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
612
kono
parents:
diff changeset
613 (define_insn "vmr4aw_insn"
kono
parents:
diff changeset
614 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
615 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
616 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4AW))]
kono
parents:
diff changeset
617 "TARGET_SIMD_SET"
kono
parents:
diff changeset
618 "vmr4aw %0, %1, %2"
kono
parents:
diff changeset
619 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
620 (set_attr "length" "4")
kono
parents:
diff changeset
621 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
622
kono
parents:
diff changeset
623 (define_insn "vmr4w_insn"
kono
parents:
diff changeset
624 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
625 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
626 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR4W))]
kono
parents:
diff changeset
627 "TARGET_SIMD_SET"
kono
parents:
diff changeset
628 "vmr4w %0, %1, %2"
kono
parents:
diff changeset
629 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
630 (set_attr "length" "4")
kono
parents:
diff changeset
631 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
632
kono
parents:
diff changeset
633 (define_insn "vmr5aw_insn"
kono
parents:
diff changeset
634 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
635 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
636 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5AW))]
kono
parents:
diff changeset
637 "TARGET_SIMD_SET"
kono
parents:
diff changeset
638 "vmr5aw %0, %1, %2"
kono
parents:
diff changeset
639 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
640 (set_attr "length" "4")
kono
parents:
diff changeset
641 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
642
kono
parents:
diff changeset
643 (define_insn "vmr5w_insn"
kono
parents:
diff changeset
644 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
645 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
646 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR5W))]
kono
parents:
diff changeset
647 "TARGET_SIMD_SET"
kono
parents:
diff changeset
648 "vmr5w %0, %1, %2"
kono
parents:
diff changeset
649 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
650 (set_attr "length" "4")
kono
parents:
diff changeset
651 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
652
kono
parents:
diff changeset
653 (define_insn "vmr6aw_insn"
kono
parents:
diff changeset
654 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
655 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
656 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6AW))]
kono
parents:
diff changeset
657 "TARGET_SIMD_SET"
kono
parents:
diff changeset
658 "vmr6aw %0, %1, %2"
kono
parents:
diff changeset
659 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
660 (set_attr "length" "4")
kono
parents:
diff changeset
661 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
662
kono
parents:
diff changeset
663 (define_insn "vmr6w_insn"
kono
parents:
diff changeset
664 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
665 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
666 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR6W))]
kono
parents:
diff changeset
667 "TARGET_SIMD_SET"
kono
parents:
diff changeset
668 "vmr6w %0, %1, %2"
kono
parents:
diff changeset
669 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
670 (set_attr "length" "4")
kono
parents:
diff changeset
671 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
672
kono
parents:
diff changeset
673 (define_insn "vmr7aw_insn"
kono
parents:
diff changeset
674 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
675 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
676 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7AW))]
kono
parents:
diff changeset
677 "TARGET_SIMD_SET"
kono
parents:
diff changeset
678 "vmr7aw %0, %1, %2"
kono
parents:
diff changeset
679 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
680 (set_attr "length" "4")
kono
parents:
diff changeset
681 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
682
kono
parents:
diff changeset
683 (define_insn "vmr7w_insn"
kono
parents:
diff changeset
684 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
685 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
686 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMR7W))]
kono
parents:
diff changeset
687 "TARGET_SIMD_SET"
kono
parents:
diff changeset
688 "vmr7w %0, %1, %2"
kono
parents:
diff changeset
689 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
690 (set_attr "length" "4")
kono
parents:
diff changeset
691 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
692
kono
parents:
diff changeset
693 (define_insn "vmrb_insn"
kono
parents:
diff changeset
694 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
695 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
696 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VMRB))]
kono
parents:
diff changeset
697 "TARGET_SIMD_SET"
kono
parents:
diff changeset
698 "vmrb %0, %1, %2"
kono
parents:
diff changeset
699 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
700 (set_attr "length" "4")
kono
parents:
diff changeset
701 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
702
kono
parents:
diff changeset
703 (define_insn "vh264f_insn"
kono
parents:
diff changeset
704 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
705 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
706 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264F))]
kono
parents:
diff changeset
707 "TARGET_SIMD_SET"
kono
parents:
diff changeset
708 "vh264f %0, %1, %2"
kono
parents:
diff changeset
709 [(set_attr "type" "simd_vspecial_3cycle")
kono
parents:
diff changeset
710 (set_attr "length" "4")
kono
parents:
diff changeset
711 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
712
kono
parents:
diff changeset
713 (define_insn "vh264ft_insn"
kono
parents:
diff changeset
714 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
715 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
716 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FT))]
kono
parents:
diff changeset
717 "TARGET_SIMD_SET"
kono
parents:
diff changeset
718 "vh264ft %0, %1, %2"
kono
parents:
diff changeset
719 [(set_attr "type" "simd_vspecial_3cycle")
kono
parents:
diff changeset
720 (set_attr "length" "4")
kono
parents:
diff changeset
721 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
722
kono
parents:
diff changeset
723 (define_insn "vh264fw_insn"
kono
parents:
diff changeset
724 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
725 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
726 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VH264FW))]
kono
parents:
diff changeset
727 "TARGET_SIMD_SET"
kono
parents:
diff changeset
728 "vh264fw %0, %1, %2"
kono
parents:
diff changeset
729 [(set_attr "type" "simd_vspecial_3cycle")
kono
parents:
diff changeset
730 (set_attr "length" "4")
kono
parents:
diff changeset
731 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
732
kono
parents:
diff changeset
733 (define_insn "vvc1f_insn"
kono
parents:
diff changeset
734 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
735 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
736 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1F))]
kono
parents:
diff changeset
737 "TARGET_SIMD_SET"
kono
parents:
diff changeset
738 "vvc1f %0, %1, %2"
kono
parents:
diff changeset
739 [(set_attr "type" "simd_vspecial_3cycle")
kono
parents:
diff changeset
740 (set_attr "length" "4")
kono
parents:
diff changeset
741 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
742
kono
parents:
diff changeset
743 (define_insn "vvc1ft_insn"
kono
parents:
diff changeset
744 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
745 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
746 (match_operand:V8HI 2 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VVC1FT))]
kono
parents:
diff changeset
747 "TARGET_SIMD_SET"
kono
parents:
diff changeset
748 "vvc1ft %0, %1, %2"
kono
parents:
diff changeset
749 [(set_attr "type" "simd_vspecial_3cycle")
kono
parents:
diff changeset
750 (set_attr "length" "4")
kono
parents:
diff changeset
751 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
752
kono
parents:
diff changeset
753
kono
parents:
diff changeset
754
kono
parents:
diff changeset
755 ;;---
kono
parents:
diff changeset
756 ;; V V r/limm Insns
kono
parents:
diff changeset
757
kono
parents:
diff changeset
758 ;; (define_insn "vbaddw_insn"
kono
parents:
diff changeset
759 ;; [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
760 ;; (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
761 ;; (match_operand:SI 2 "nonmemory_operand" "rCal")] UNSPEC_ARC_SIMD_VBADDW))]
kono
parents:
diff changeset
762 ;; "TARGET_SIMD_SET"
kono
parents:
diff changeset
763 ;; "vbaddw %0, %1, %2"
kono
parents:
diff changeset
764 ;; [(set_attr "length" "4")
kono
parents:
diff changeset
765 ;; (set_attr "cond" "nocond")])
kono
parents:
diff changeset
766
kono
parents:
diff changeset
767 (define_insn "vbaddw_insn"
kono
parents:
diff changeset
768 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
769 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
770 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBADDW))]
kono
parents:
diff changeset
771 "TARGET_SIMD_SET"
kono
parents:
diff changeset
772 "vbaddw %0, %1, %2"
kono
parents:
diff changeset
773 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
774 (set_attr "length" "4")
kono
parents:
diff changeset
775 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
776
kono
parents:
diff changeset
777 (define_insn "vbmaxw_insn"
kono
parents:
diff changeset
778 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
779 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
780 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMAXW))]
kono
parents:
diff changeset
781 "TARGET_SIMD_SET"
kono
parents:
diff changeset
782 "vbmaxw %0, %1, %2"
kono
parents:
diff changeset
783 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
784 (set_attr "length" "4")
kono
parents:
diff changeset
785 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
786
kono
parents:
diff changeset
787 (define_insn "vbminw_insn"
kono
parents:
diff changeset
788 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
789 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
790 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMINW))]
kono
parents:
diff changeset
791 "TARGET_SIMD_SET"
kono
parents:
diff changeset
792 "vbminw %0, %1, %2"
kono
parents:
diff changeset
793 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
794 (set_attr "length" "4")
kono
parents:
diff changeset
795 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
796
kono
parents:
diff changeset
797 (define_insn "vbmulaw_insn"
kono
parents:
diff changeset
798 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
799 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
800 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULAW))]
kono
parents:
diff changeset
801 "TARGET_SIMD_SET"
kono
parents:
diff changeset
802 "vbmulaw %0, %1, %2"
kono
parents:
diff changeset
803 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
804 (set_attr "length" "4")
kono
parents:
diff changeset
805 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
806
kono
parents:
diff changeset
807 (define_insn "vbmulfw_insn"
kono
parents:
diff changeset
808 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
809 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
810 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULFW))]
kono
parents:
diff changeset
811 "TARGET_SIMD_SET"
kono
parents:
diff changeset
812 "vbmulfw %0, %1, %2"
kono
parents:
diff changeset
813 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
814 (set_attr "length" "4")
kono
parents:
diff changeset
815 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
816
kono
parents:
diff changeset
817 (define_insn "vbmulw_insn"
kono
parents:
diff changeset
818 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
819 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
820 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBMULW))]
kono
parents:
diff changeset
821 "TARGET_SIMD_SET"
kono
parents:
diff changeset
822 "vbmulw %0, %1, %2"
kono
parents:
diff changeset
823 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
824 (set_attr "length" "4")
kono
parents:
diff changeset
825 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
826
kono
parents:
diff changeset
827 (define_insn "vbrsubw_insn"
kono
parents:
diff changeset
828 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
829 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
830 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBRSUBW))]
kono
parents:
diff changeset
831 "TARGET_SIMD_SET"
kono
parents:
diff changeset
832 "vbrsubw %0, %1, %2"
kono
parents:
diff changeset
833 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
834 (set_attr "length" "4")
kono
parents:
diff changeset
835 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
836
kono
parents:
diff changeset
837 (define_insn "vbsubw_insn"
kono
parents:
diff changeset
838 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
839 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
840 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VBSUBW))]
kono
parents:
diff changeset
841 "TARGET_SIMD_SET"
kono
parents:
diff changeset
842 "vbsubw %0, %1, %2"
kono
parents:
diff changeset
843 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
844 (set_attr "length" "4")
kono
parents:
diff changeset
845 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
846 ; Va, Vb, Ic instructions
kono
parents:
diff changeset
847
kono
parents:
diff changeset
848 ; Va, Vb, u6 instructions
kono
parents:
diff changeset
849 (define_insn "vasrrwi_insn"
kono
parents:
diff changeset
850 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
851 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
852 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRWi))]
kono
parents:
diff changeset
853 "TARGET_SIMD_SET"
kono
parents:
diff changeset
854 "vasrrwi %0, %1, %2"
kono
parents:
diff changeset
855 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
856 (set_attr "length" "4")
kono
parents:
diff changeset
857 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
858
kono
parents:
diff changeset
859 (define_insn "vasrsrwi_insn"
kono
parents:
diff changeset
860 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
861 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
862 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRSRWi))]
kono
parents:
diff changeset
863 "TARGET_SIMD_SET"
kono
parents:
diff changeset
864 "vasrsrwi %0, %1, %2"
kono
parents:
diff changeset
865 [(set_attr "type" "simd_varith_2cycle")
kono
parents:
diff changeset
866 (set_attr "length" "4")
kono
parents:
diff changeset
867 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
868
kono
parents:
diff changeset
869 (define_insn "vasrwi_insn"
kono
parents:
diff changeset
870 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
871 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
872 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRWi))]
kono
parents:
diff changeset
873 "TARGET_SIMD_SET"
kono
parents:
diff changeset
874 "vasrwi %0, %1, %2"
kono
parents:
diff changeset
875 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
876 (set_attr "length" "4")
kono
parents:
diff changeset
877 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
878
kono
parents:
diff changeset
879 (define_insn "vasrpwbi_insn"
kono
parents:
diff changeset
880 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
881 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
882 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRPWBi))]
kono
parents:
diff changeset
883 "TARGET_SIMD_SET"
kono
parents:
diff changeset
884 "vasrpwbi %0, %1, %2"
kono
parents:
diff changeset
885 [(set_attr "type" "simd_vpack")
kono
parents:
diff changeset
886 (set_attr "length" "4")
kono
parents:
diff changeset
887 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
888
kono
parents:
diff changeset
889 (define_insn "vasrrpwbi_insn"
kono
parents:
diff changeset
890 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
891 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
892 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VASRRPWBi))]
kono
parents:
diff changeset
893 "TARGET_SIMD_SET"
kono
parents:
diff changeset
894 "vasrrpwbi %0, %1, %2"
kono
parents:
diff changeset
895 [(set_attr "type" "simd_vpack")
kono
parents:
diff changeset
896 (set_attr "length" "4")
kono
parents:
diff changeset
897 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
898
kono
parents:
diff changeset
899 (define_insn "vsr8awi_insn"
kono
parents:
diff changeset
900 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
901 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
902 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8AWi))]
kono
parents:
diff changeset
903 "TARGET_SIMD_SET"
kono
parents:
diff changeset
904 "vsr8awi %0, %1, %2"
kono
parents:
diff changeset
905 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
906 (set_attr "length" "4")
kono
parents:
diff changeset
907 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
908
kono
parents:
diff changeset
909 (define_insn "vsr8i_insn"
kono
parents:
diff changeset
910 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
911 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
912 (match_operand:SI 2 "immediate_operand" "L")] UNSPEC_ARC_SIMD_VSR8i))]
kono
parents:
diff changeset
913 "TARGET_SIMD_SET"
kono
parents:
diff changeset
914 "vsr8i %0, %1, %2"
kono
parents:
diff changeset
915 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
916 (set_attr "length" "4")
kono
parents:
diff changeset
917 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
918
kono
parents:
diff changeset
919 ;; Va, Vb, u8 (simm) insns
kono
parents:
diff changeset
920
kono
parents:
diff changeset
921 (define_insn "vmvaw_insn"
kono
parents:
diff changeset
922 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
923 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
924 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVAW))]
kono
parents:
diff changeset
925 "TARGET_SIMD_SET"
kono
parents:
diff changeset
926 "vmvaw %0, %1, %2"
kono
parents:
diff changeset
927 [(set_attr "type" "simd_vmove_with_acc")
kono
parents:
diff changeset
928 (set_attr "length" "4")
kono
parents:
diff changeset
929 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
930
kono
parents:
diff changeset
931 (define_insn "vmvw_insn"
kono
parents:
diff changeset
932 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
933 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
934 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVW))]
kono
parents:
diff changeset
935 "TARGET_SIMD_SET"
kono
parents:
diff changeset
936 "vmvw %0, %1, %2"
kono
parents:
diff changeset
937 [(set_attr "type" "simd_vmove")
kono
parents:
diff changeset
938 (set_attr "length" "4")
kono
parents:
diff changeset
939 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
940
kono
parents:
diff changeset
941 (define_insn "vmvzw_insn"
kono
parents:
diff changeset
942 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
943 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
944 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMVZW))]
kono
parents:
diff changeset
945 "TARGET_SIMD_SET"
kono
parents:
diff changeset
946 "vmvzw %0, %1, %2"
kono
parents:
diff changeset
947 [(set_attr "type" "simd_vmove_else_zero")
kono
parents:
diff changeset
948 (set_attr "length" "4")
kono
parents:
diff changeset
949 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
950
kono
parents:
diff changeset
951 (define_insn "vd6tapf_insn"
kono
parents:
diff changeset
952 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
953 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
954 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VD6TAPF))]
kono
parents:
diff changeset
955 "TARGET_SIMD_SET"
kono
parents:
diff changeset
956 "vd6tapf %0, %1, %2"
kono
parents:
diff changeset
957 [(set_attr "type" "simd_vspecial_4cycle")
kono
parents:
diff changeset
958 (set_attr "length" "4")
kono
parents:
diff changeset
959 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
960
kono
parents:
diff changeset
961 ;; Va, rlimm, u8 (simm) insns
kono
parents:
diff changeset
962 (define_insn "vmovaw_insn"
kono
parents:
diff changeset
963 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
964 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
kono
parents:
diff changeset
965 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVAW))]
kono
parents:
diff changeset
966 "TARGET_SIMD_SET"
kono
parents:
diff changeset
967 "vmovaw %0, %1, %2"
kono
parents:
diff changeset
968 [(set_attr "type" "simd_vmove_with_acc")
kono
parents:
diff changeset
969 (set_attr "length" "4")
kono
parents:
diff changeset
970 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
971
kono
parents:
diff changeset
972 (define_insn "vmovw_insn"
kono
parents:
diff changeset
973 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
974 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
kono
parents:
diff changeset
975 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVW))]
kono
parents:
diff changeset
976 "TARGET_SIMD_SET"
kono
parents:
diff changeset
977 "vmovw %0, %1, %2"
kono
parents:
diff changeset
978 [(set_attr "type" "simd_vmove")
kono
parents:
diff changeset
979 (set_attr "length" "4")
kono
parents:
diff changeset
980 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
981
kono
parents:
diff changeset
982 (define_insn "vmovzw_insn"
kono
parents:
diff changeset
983 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
984 (unspec:V8HI [(match_operand:SI 1 "nonmemory_operand" "r")
kono
parents:
diff changeset
985 (match_operand:SI 2 "immediate_operand" "P")] UNSPEC_ARC_SIMD_VMOVZW))]
kono
parents:
diff changeset
986 "TARGET_SIMD_SET"
kono
parents:
diff changeset
987 "vmovzw %0, %1, %2"
kono
parents:
diff changeset
988 [(set_attr "type" "simd_vmove_else_zero")
kono
parents:
diff changeset
989 (set_attr "length" "4")
kono
parents:
diff changeset
990 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
991
kono
parents:
diff changeset
992 ;; Va, rlimm, Ic insns
kono
parents:
diff changeset
993 (define_insn "vsr8_insn"
kono
parents:
diff changeset
994 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
995 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
996 (match_operand:SI 2 "immediate_operand" "K")
kono
parents:
diff changeset
997 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8))]
kono
parents:
diff changeset
998 "TARGET_SIMD_SET"
kono
parents:
diff changeset
999 "vsr8 %0, %1, i%2"
kono
parents:
diff changeset
1000 [(set_attr "type" "simd_valign")
kono
parents:
diff changeset
1001 (set_attr "length" "4")
kono
parents:
diff changeset
1002 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1003
kono
parents:
diff changeset
1004 (define_insn "vasrw_insn"
kono
parents:
diff changeset
1005 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1006 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
1007 (match_operand:SI 2 "immediate_operand" "K")
kono
parents:
diff changeset
1008 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VASRW))]
kono
parents:
diff changeset
1009 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1010 "vasrw %0, %1, i%2"
kono
parents:
diff changeset
1011 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
1012 (set_attr "length" "4")
kono
parents:
diff changeset
1013 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1014
kono
parents:
diff changeset
1015 (define_insn "vsr8aw_insn"
kono
parents:
diff changeset
1016 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1017 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
1018 (match_operand:SI 2 "immediate_operand" "K")
kono
parents:
diff changeset
1019 (match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSR8AW))]
kono
parents:
diff changeset
1020 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1021 "vsr8aw %0, %1, i%2"
kono
parents:
diff changeset
1022 [(set_attr "type" "simd_valign_with_acc")
kono
parents:
diff changeset
1023 (set_attr "length" "4")
kono
parents:
diff changeset
1024 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1025
kono
parents:
diff changeset
1026 ;; Va, Vb insns
kono
parents:
diff changeset
1027 (define_insn "vabsaw_insn"
kono
parents:
diff changeset
1028 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1029 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSAW))]
kono
parents:
diff changeset
1030 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1031 "vabsaw %0, %1"
kono
parents:
diff changeset
1032 [(set_attr "type" "simd_varith_with_acc")
kono
parents:
diff changeset
1033 (set_attr "length" "4")
kono
parents:
diff changeset
1034 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1035
kono
parents:
diff changeset
1036 (define_insn "vabsw_insn"
kono
parents:
diff changeset
1037 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1038 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VABSW))]
kono
parents:
diff changeset
1039 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1040 "vabsw %0, %1"
kono
parents:
diff changeset
1041 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
1042 (set_attr "length" "4")
kono
parents:
diff changeset
1043 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1044
kono
parents:
diff changeset
1045 (define_insn "vaddsuw_insn"
kono
parents:
diff changeset
1046 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1047 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VADDSUW))]
kono
parents:
diff changeset
1048 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1049 "vaddsuw %0, %1"
kono
parents:
diff changeset
1050 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
1051 (set_attr "length" "4")
kono
parents:
diff changeset
1052 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1053
kono
parents:
diff changeset
1054 (define_insn "vsignw_insn"
kono
parents:
diff changeset
1055 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1056 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VSIGNW))]
kono
parents:
diff changeset
1057 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1058 "vsignw %0, %1"
kono
parents:
diff changeset
1059 [(set_attr "type" "simd_varith_1cycle")
kono
parents:
diff changeset
1060 (set_attr "length" "4")
kono
parents:
diff changeset
1061 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1062
kono
parents:
diff changeset
1063 (define_insn "vexch1_insn"
kono
parents:
diff changeset
1064 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1065 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH1))]
kono
parents:
diff changeset
1066 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1067 "vexch1 %0, %1"
kono
parents:
diff changeset
1068 [(set_attr "type" "simd_vpermute")
kono
parents:
diff changeset
1069 (set_attr "length" "4")
kono
parents:
diff changeset
1070 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1071
kono
parents:
diff changeset
1072 (define_insn "vexch2_insn"
kono
parents:
diff changeset
1073 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1074 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH2))]
kono
parents:
diff changeset
1075 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1076 "vexch2 %0, %1"
kono
parents:
diff changeset
1077 [(set_attr "type" "simd_vpermute")
kono
parents:
diff changeset
1078 (set_attr "length" "4")
kono
parents:
diff changeset
1079 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1080
kono
parents:
diff changeset
1081 (define_insn "vexch4_insn"
kono
parents:
diff changeset
1082 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1083 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VEXCH4))]
kono
parents:
diff changeset
1084 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1085 "vexch4 %0, %1"
kono
parents:
diff changeset
1086 [(set_attr "type" "simd_vpermute")
kono
parents:
diff changeset
1087 (set_attr "length" "4")
kono
parents:
diff changeset
1088 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1089
kono
parents:
diff changeset
1090 (define_insn "vupbaw_insn"
kono
parents:
diff changeset
1091 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1092 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBAW))]
kono
parents:
diff changeset
1093 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1094 "vupbaw %0, %1"
kono
parents:
diff changeset
1095 [(set_attr "type" "simd_vpack_with_acc")
kono
parents:
diff changeset
1096 (set_attr "length" "4")
kono
parents:
diff changeset
1097 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1098
kono
parents:
diff changeset
1099 (define_insn "vupbw_insn"
kono
parents:
diff changeset
1100 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1101 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPBW))]
kono
parents:
diff changeset
1102 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1103 "vupbw %0, %1"
kono
parents:
diff changeset
1104 [(set_attr "type" "simd_vpack")
kono
parents:
diff changeset
1105 (set_attr "length" "4")
kono
parents:
diff changeset
1106 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1107
kono
parents:
diff changeset
1108 (define_insn "vupsbaw_insn"
kono
parents:
diff changeset
1109 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1110 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBAW))]
kono
parents:
diff changeset
1111 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1112 "vupsbaw %0, %1"
kono
parents:
diff changeset
1113 [(set_attr "type" "simd_vpack_with_acc")
kono
parents:
diff changeset
1114 (set_attr "length" "4")
kono
parents:
diff changeset
1115 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1116
kono
parents:
diff changeset
1117 (define_insn "vupsbw_insn"
kono
parents:
diff changeset
1118 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1119 (unspec:V8HI [(match_operand:V8HI 1 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VUPSBW))]
kono
parents:
diff changeset
1120 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1121 "vupsbw %0, %1"
kono
parents:
diff changeset
1122 [(set_attr "type" "simd_vpack")
kono
parents:
diff changeset
1123 (set_attr "length" "4")
kono
parents:
diff changeset
1124 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1125
kono
parents:
diff changeset
1126 ; DMA setup instructions
kono
parents:
diff changeset
1127 (define_insn "vdirun_insn"
kono
parents:
diff changeset
1128 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
kono
parents:
diff changeset
1129 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
kono
parents:
diff changeset
1130 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDIRUN))]
kono
parents:
diff changeset
1131 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1132 "vdirun %1, %2"
kono
parents:
diff changeset
1133 [(set_attr "type" "simd_dma")
kono
parents:
diff changeset
1134 (set_attr "length" "4")
kono
parents:
diff changeset
1135 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1136
kono
parents:
diff changeset
1137 (define_insn "vdorun_insn"
kono
parents:
diff changeset
1138 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d")
kono
parents:
diff changeset
1139 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r")
kono
parents:
diff changeset
1140 (match_operand:SI 2 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VDORUN))]
kono
parents:
diff changeset
1141 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1142 "vdorun %1, %2"
kono
parents:
diff changeset
1143 [(set_attr "type" "simd_dma")
kono
parents:
diff changeset
1144 (set_attr "length" "4")
kono
parents:
diff changeset
1145 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1146
kono
parents:
diff changeset
1147 (define_insn "vdiwr_insn"
kono
parents:
diff changeset
1148 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
kono
parents:
diff changeset
1149 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDIWR))]
kono
parents:
diff changeset
1150 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1151 "vdiwr %0, %1"
kono
parents:
diff changeset
1152 [(set_attr "type" "simd_dma")
kono
parents:
diff changeset
1153 (set_attr "length" "4,8")
kono
parents:
diff changeset
1154 (set_attr "cond" "nocond,nocond")])
kono
parents:
diff changeset
1155
kono
parents:
diff changeset
1156 (define_insn "vdowr_insn"
kono
parents:
diff changeset
1157 [(set (match_operand:SI 0 "arc_simd_dma_register_operand" "=d,d")
kono
parents:
diff changeset
1158 (unspec_volatile:SI [(match_operand:SI 1 "nonmemory_operand" "r,Cal")] UNSPEC_ARC_SIMD_VDOWR))]
kono
parents:
diff changeset
1159 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1160 "vdowr %0, %1"
kono
parents:
diff changeset
1161 [(set_attr "type" "simd_dma")
kono
parents:
diff changeset
1162 (set_attr "length" "4,8")
kono
parents:
diff changeset
1163 (set_attr "cond" "nocond,nocond")])
kono
parents:
diff changeset
1164
kono
parents:
diff changeset
1165 ;; vector record and run instructions
kono
parents:
diff changeset
1166 (define_insn "vrec_insn"
kono
parents:
diff changeset
1167 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VREC)]
kono
parents:
diff changeset
1168 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1169 "vrec %0"
kono
parents:
diff changeset
1170 [(set_attr "type" "simd_vcontrol")
kono
parents:
diff changeset
1171 (set_attr "length" "4")
kono
parents:
diff changeset
1172 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1173
kono
parents:
diff changeset
1174 (define_insn "vrun_insn"
kono
parents:
diff changeset
1175 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRUN)]
kono
parents:
diff changeset
1176 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1177 "vrun %0"
kono
parents:
diff changeset
1178 [(set_attr "type" "simd_vcontrol")
kono
parents:
diff changeset
1179 (set_attr "length" "4")
kono
parents:
diff changeset
1180 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1181
kono
parents:
diff changeset
1182 (define_insn "vrecrun_insn"
kono
parents:
diff changeset
1183 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VRECRUN)]
kono
parents:
diff changeset
1184 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1185 "vrecrun %0"
kono
parents:
diff changeset
1186 [(set_attr "type" "simd_vcontrol")
kono
parents:
diff changeset
1187 (set_attr "length" "4")
kono
parents:
diff changeset
1188 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1189
kono
parents:
diff changeset
1190 (define_insn "vendrec_insn"
kono
parents:
diff changeset
1191 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "r")] UNSPEC_ARC_SIMD_VENDREC)]
kono
parents:
diff changeset
1192 "TARGET_SIMD_SET"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1193 "vendrec %0"
111
kono
parents:
diff changeset
1194 [(set_attr "type" "simd_vcontrol")
kono
parents:
diff changeset
1195 (set_attr "length" "4")
kono
parents:
diff changeset
1196 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1197
kono
parents:
diff changeset
1198 (define_insn "vld32wh_insn"
kono
parents:
diff changeset
1199 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1200 (vec_concat:V8HI
kono
parents:
diff changeset
1201 (zero_extend:V4HI
kono
parents:
diff changeset
1202 (mem:V4QI
kono
parents:
diff changeset
1203 (plus:SI
kono
parents:
diff changeset
1204 (match_operand:SI 1 "immediate_operand" "P")
kono
parents:
diff changeset
1205 (zero_extend:SI
kono
parents:
diff changeset
1206 (vec_select:HI
kono
parents:
diff changeset
1207 (match_operand:V8HI 2 "vector_register_operand" "v")
kono
parents:
diff changeset
1208 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))))
kono
parents:
diff changeset
1209 (vec_select:V4HI
kono
parents:
diff changeset
1210 (match_dup 0)
kono
parents:
diff changeset
1211 (parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)])
kono
parents:
diff changeset
1212 )))]
kono
parents:
diff changeset
1213 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1214 "vld32wh %0, [i%3,%1]"
kono
parents:
diff changeset
1215 [(set_attr "type" "simd_vload")
kono
parents:
diff changeset
1216 (set_attr "length" "4")
kono
parents:
diff changeset
1217 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1218
kono
parents:
diff changeset
1219 (define_insn "vld32wl_insn"
kono
parents:
diff changeset
1220 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1221 (vec_concat:V8HI
kono
parents:
diff changeset
1222 (vec_select:V4HI
kono
parents:
diff changeset
1223 (match_dup 0)
kono
parents:
diff changeset
1224 (parallel [(const_int 4) (const_int 5) (const_int 6) (const_int 7)]))
kono
parents:
diff changeset
1225 (zero_extend:V4HI
kono
parents:
diff changeset
1226 (mem:V4QI
kono
parents:
diff changeset
1227 (plus:SI
kono
parents:
diff changeset
1228 (match_operand:SI 1 "immediate_operand" "P")
kono
parents:
diff changeset
1229 (zero_extend:SI
kono
parents:
diff changeset
1230 (vec_select:HI (match_operand:V8HI 2 "vector_register_operand" "v")
kono
parents:
diff changeset
1231 (parallel
kono
parents:
diff changeset
1232 [(match_operand:SI 3 "immediate_operand" "L")]))
kono
parents:
diff changeset
1233 ))))))]
kono
parents:
diff changeset
1234 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1235 "vld32wl %0, [i%3,%1]"
kono
parents:
diff changeset
1236 [(set_attr "type" "simd_vload")
kono
parents:
diff changeset
1237 (set_attr "length" "4")
kono
parents:
diff changeset
1238 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1239
kono
parents:
diff changeset
1240 (define_insn "vld64w_insn"
kono
parents:
diff changeset
1241 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1242 (zero_extend:V8HI (mem:V4HI (plus:SI (zero_extend:SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
1243 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))
kono
parents:
diff changeset
1244 (match_operand:SI 3 "immediate_operand" "P")))))]
kono
parents:
diff changeset
1245 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1246 "vld64w %0, [i%2, %3]"
kono
parents:
diff changeset
1247 [(set_attr "type" "simd_vload")
kono
parents:
diff changeset
1248 (set_attr "length" "4")
kono
parents:
diff changeset
1249 (set_attr "cond" "nocond")]
kono
parents:
diff changeset
1250 )
kono
parents:
diff changeset
1251
kono
parents:
diff changeset
1252 (define_insn "vld64_insn"
kono
parents:
diff changeset
1253 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1254 (vec_concat:V8HI
kono
parents:
diff changeset
1255 (vec_select:V4HI
kono
parents:
diff changeset
1256 (match_dup 0)
kono
parents:
diff changeset
1257 (parallel [(const_int 4) (const_int 5) (const_int 6) (const_int 7)]))
kono
parents:
diff changeset
1258 (mem:V4HI
kono
parents:
diff changeset
1259 (plus:SI
kono
parents:
diff changeset
1260 (match_operand:SI 1 "immediate_operand" "P")
kono
parents:
diff changeset
1261 (zero_extend:SI
kono
parents:
diff changeset
1262 (vec_select:HI
kono
parents:
diff changeset
1263 (match_operand:V8HI 2 "vector_register_operand" "v")
kono
parents:
diff changeset
1264 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))
kono
parents:
diff changeset
1265 )))))]
kono
parents:
diff changeset
1266 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1267 "vld64 %0, [i%3,%1]"
kono
parents:
diff changeset
1268 [(set_attr "type" "simd_vload")
kono
parents:
diff changeset
1269 (set_attr "length" "4")
kono
parents:
diff changeset
1270 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1271
kono
parents:
diff changeset
1272 (define_insn "vld32_insn"
kono
parents:
diff changeset
1273 [(set (match_operand:V8HI 0 "vector_register_operand" "=v")
kono
parents:
diff changeset
1274 (vec_concat:V8HI
kono
parents:
diff changeset
1275 (vec_select:V4HI
kono
parents:
diff changeset
1276 (match_dup 0)
kono
parents:
diff changeset
1277 (parallel [(const_int 4) (const_int 5) (const_int 6) (const_int 7)]))
kono
parents:
diff changeset
1278 (vec_concat:V4HI
kono
parents:
diff changeset
1279 (vec_select:V2HI
kono
parents:
diff changeset
1280 (match_dup 0)
kono
parents:
diff changeset
1281 (parallel [(const_int 2) (const_int 3)]))
kono
parents:
diff changeset
1282 (mem:V2HI
kono
parents:
diff changeset
1283 (plus:SI
kono
parents:
diff changeset
1284 (match_operand:SI 1 "immediate_operand" "P")
kono
parents:
diff changeset
1285 (zero_extend:SI
kono
parents:
diff changeset
1286 (vec_select:HI
kono
parents:
diff changeset
1287 (match_operand:V8HI 2 "vector_register_operand" "v")
kono
parents:
diff changeset
1288 (parallel [(match_operand:SI 3 "immediate_operand" "L")]))))))))]
kono
parents:
diff changeset
1289 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1290 "vld32 %0, [i%3,%1]"
kono
parents:
diff changeset
1291 [(set_attr "type" "simd_vload")
kono
parents:
diff changeset
1292 (set_attr "length" "4")
kono
parents:
diff changeset
1293 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1294
kono
parents:
diff changeset
1295 (define_insn "vst16_n_insn"
kono
parents:
diff changeset
1296 [(set (mem:HI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
kono
parents:
diff changeset
1297 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
1298 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
kono
parents:
diff changeset
1299 (vec_select:HI (match_operand:V8HI 3 "vector_register_operand" "v")
kono
parents:
diff changeset
1300 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
kono
parents:
diff changeset
1301 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1302 "vst16_%4 %3,[i%2, %0]"
kono
parents:
diff changeset
1303 [(set_attr "type" "simd_vstore")
kono
parents:
diff changeset
1304 (set_attr "length" "4")
kono
parents:
diff changeset
1305 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1306
kono
parents:
diff changeset
1307 (define_insn "vst32_n_insn"
kono
parents:
diff changeset
1308 [(set (mem:SI (plus:SI (match_operand:SI 0 "immediate_operand" "P")
kono
parents:
diff changeset
1309 (zero_extend: SI (vec_select:HI (match_operand:V8HI 1 "vector_register_operand" "v")
kono
parents:
diff changeset
1310 (parallel [(match_operand:SI 2 "immediate_operand" "L")])))))
kono
parents:
diff changeset
1311 (vec_select:SI (unspec:V4SI [(match_operand:V8HI 3 "vector_register_operand" "v")] UNSPEC_ARC_SIMD_VCAST)
kono
parents:
diff changeset
1312 (parallel [(match_operand:SI 4 "immediate_operand" "L")])))]
kono
parents:
diff changeset
1313 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1314 "vst32_%4 %3,[i%2, %0]"
kono
parents:
diff changeset
1315 [(set_attr "type" "simd_vstore")
kono
parents:
diff changeset
1316 (set_attr "length" "4")
kono
parents:
diff changeset
1317 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1318
kono
parents:
diff changeset
1319 ;; SIMD unit interrupt
kono
parents:
diff changeset
1320 (define_insn "vinti_insn"
kono
parents:
diff changeset
1321 [(unspec_volatile [(match_operand:SI 0 "nonmemory_operand" "L")] UNSPEC_ARC_SIMD_VINTI)]
kono
parents:
diff changeset
1322 "TARGET_SIMD_SET"
kono
parents:
diff changeset
1323 "vinti %0"
kono
parents:
diff changeset
1324 [(set_attr "type" "simd_vcontrol")
kono
parents:
diff changeset
1325 (set_attr "length" "4")
kono
parents:
diff changeset
1326 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1327
kono
parents:
diff changeset
1328 ;; New ARCv2 SIMD extensions
kono
parents:
diff changeset
1329
kono
parents:
diff changeset
1330 ;;64-bit vectors of halwords and words
kono
parents:
diff changeset
1331 (define_mode_iterator VWH [V4HI V2SI])
kono
parents:
diff changeset
1332
kono
parents:
diff changeset
1333 ;;double element vectors
kono
parents:
diff changeset
1334 (define_mode_iterator VDV [V2HI V2SI])
kono
parents:
diff changeset
1335 (define_mode_attr V_addsub [(V2HI "HI") (V2SI "SI")])
kono
parents:
diff changeset
1336 (define_mode_attr V_addsub_suffix [(V2HI "2h") (V2SI "")])
kono
parents:
diff changeset
1337
kono
parents:
diff changeset
1338 ;;all vectors
kono
parents:
diff changeset
1339 (define_mode_iterator VCT [V2HI V4HI V2SI])
kono
parents:
diff changeset
1340 (define_mode_attr V_suffix [(V2HI "2h") (V4HI "4h") (V2SI "2")])
kono
parents:
diff changeset
1341
kono
parents:
diff changeset
1342 ;; Widening operations.
kono
parents:
diff changeset
1343 (define_code_iterator SE [sign_extend zero_extend])
kono
parents:
diff changeset
1344 (define_code_attr V_US [(sign_extend "s") (zero_extend "u")])
kono
parents:
diff changeset
1345 (define_code_attr V_US_suffix [(sign_extend "") (zero_extend "u")])
kono
parents:
diff changeset
1346
kono
parents:
diff changeset
1347
kono
parents:
diff changeset
1348 ;; Move patterns
kono
parents:
diff changeset
1349 (define_expand "movv2hi"
kono
parents:
diff changeset
1350 [(set (match_operand:V2HI 0 "move_dest_operand" "")
kono
parents:
diff changeset
1351 (match_operand:V2HI 1 "general_operand" ""))]
kono
parents:
diff changeset
1352 ""
kono
parents:
diff changeset
1353 "{
kono
parents:
diff changeset
1354 if (prepare_move_operands (operands, V2HImode))
kono
parents:
diff changeset
1355 DONE;
kono
parents:
diff changeset
1356 }")
kono
parents:
diff changeset
1357
kono
parents:
diff changeset
1358 (define_insn_and_split "*movv2hi_insn"
kono
parents:
diff changeset
1359 [(set (match_operand:V2HI 0 "move_dest_operand" "=r,r,r,m")
kono
parents:
diff changeset
1360 (match_operand:V2HI 1 "general_operand" "i,r,m,r"))]
kono
parents:
diff changeset
1361 "(register_operand (operands[0], V2HImode)
kono
parents:
diff changeset
1362 || register_operand (operands[1], V2HImode))"
kono
parents:
diff changeset
1363 "@
kono
parents:
diff changeset
1364 #
kono
parents:
diff changeset
1365 mov%? %0, %1
kono
parents:
diff changeset
1366 ld%U1%V1 %0,%1
kono
parents:
diff changeset
1367 st%U0%V0 %1,%0"
kono
parents:
diff changeset
1368 "reload_completed && GET_CODE (operands[1]) == CONST_VECTOR"
kono
parents:
diff changeset
1369 [(set (match_dup 0) (match_dup 2))]
kono
parents:
diff changeset
1370 {
kono
parents:
diff changeset
1371 HOST_WIDE_INT intval = INTVAL (XVECEXP (operands[1], 0, 1)) << 16;
kono
parents:
diff changeset
1372 intval |= INTVAL (XVECEXP (operands[1], 0, 0)) & 0xFFFF;
kono
parents:
diff changeset
1373
kono
parents:
diff changeset
1374 operands[0] = gen_rtx_REG (SImode, REGNO (operands[0]));
kono
parents:
diff changeset
1375 operands[2] = GEN_INT (trunc_int_for_mode (intval, SImode));
kono
parents:
diff changeset
1376 }
kono
parents:
diff changeset
1377 [(set_attr "type" "move,move,load,store")
kono
parents:
diff changeset
1378 (set_attr "predicable" "yes,yes,no,no")
kono
parents:
diff changeset
1379 (set_attr "iscompact" "false,false,false,false")
kono
parents:
diff changeset
1380 ])
kono
parents:
diff changeset
1381
kono
parents:
diff changeset
1382 (define_expand "movmisalignv2hi"
kono
parents:
diff changeset
1383 [(set (match_operand:V2HI 0 "general_operand" "")
kono
parents:
diff changeset
1384 (match_operand:V2HI 1 "general_operand" ""))]
kono
parents:
diff changeset
1385 ""
kono
parents:
diff changeset
1386 "{
kono
parents:
diff changeset
1387 if (prepare_move_operands (operands, V2HImode))
kono
parents:
diff changeset
1388 DONE;
kono
parents:
diff changeset
1389 }")
kono
parents:
diff changeset
1390
kono
parents:
diff changeset
1391 (define_expand "mov<mode>"
kono
parents:
diff changeset
1392 [(set (match_operand:VWH 0 "move_dest_operand" "")
kono
parents:
diff changeset
1393 (match_operand:VWH 1 "general_operand" ""))]
kono
parents:
diff changeset
1394 ""
kono
parents:
diff changeset
1395 "{
kono
parents:
diff changeset
1396 if (prepare_move_operands (operands, <MODE>mode))
kono
parents:
diff changeset
1397 DONE;
kono
parents:
diff changeset
1398 }")
kono
parents:
diff changeset
1399
kono
parents:
diff changeset
1400 (define_insn_and_split "*mov<mode>_insn"
kono
parents:
diff changeset
1401 [(set (match_operand:VWH 0 "move_dest_operand" "=r,r,r,m")
kono
parents:
diff changeset
1402 (match_operand:VWH 1 "general_operand" "i,r,m,r"))]
kono
parents:
diff changeset
1403 "TARGET_PLUS_QMACW
kono
parents:
diff changeset
1404 && (register_operand (operands[0], <MODE>mode)
kono
parents:
diff changeset
1405 || register_operand (operands[1], <MODE>mode))"
kono
parents:
diff changeset
1406 "*
kono
parents:
diff changeset
1407 {
kono
parents:
diff changeset
1408 switch (which_alternative)
kono
parents:
diff changeset
1409 {
kono
parents:
diff changeset
1410 default:
kono
parents:
diff changeset
1411 return \"#\";
kono
parents:
diff changeset
1412
kono
parents:
diff changeset
1413 case 1:
kono
parents:
diff changeset
1414 return \"vadd2 %0, %1, 0\";
kono
parents:
diff changeset
1415
kono
parents:
diff changeset
1416 case 2:
kono
parents:
diff changeset
1417 if (TARGET_LL64)
kono
parents:
diff changeset
1418 return \"ldd%U1%V1 %0,%1\";
kono
parents:
diff changeset
1419 return \"#\";
kono
parents:
diff changeset
1420
kono
parents:
diff changeset
1421 case 3:
kono
parents:
diff changeset
1422 if (TARGET_LL64)
kono
parents:
diff changeset
1423 return \"std%U0%V0 %1,%0\";
kono
parents:
diff changeset
1424 return \"#\";
kono
parents:
diff changeset
1425 }
kono
parents:
diff changeset
1426 }"
kono
parents:
diff changeset
1427 "reload_completed"
kono
parents:
diff changeset
1428 [(const_int 0)]
kono
parents:
diff changeset
1429 {
kono
parents:
diff changeset
1430 arc_split_move (operands);
kono
parents:
diff changeset
1431 DONE;
kono
parents:
diff changeset
1432 }
kono
parents:
diff changeset
1433 [(set_attr "type" "move,move,load,store")
kono
parents:
diff changeset
1434 (set_attr "predicable" "yes,no,no,no")
kono
parents:
diff changeset
1435 (set_attr "iscompact" "false,false,false,false")
kono
parents:
diff changeset
1436 ])
kono
parents:
diff changeset
1437
kono
parents:
diff changeset
1438 (define_expand "movmisalign<mode>"
kono
parents:
diff changeset
1439 [(set (match_operand:VWH 0 "general_operand" "")
kono
parents:
diff changeset
1440 (match_operand:VWH 1 "general_operand" ""))]
kono
parents:
diff changeset
1441 ""
kono
parents:
diff changeset
1442 "{
kono
parents:
diff changeset
1443 if (prepare_move_operands (operands, <MODE>mode))
kono
parents:
diff changeset
1444 DONE;
kono
parents:
diff changeset
1445 }")
kono
parents:
diff changeset
1446
kono
parents:
diff changeset
1447 (define_insn "bswapv2hi2"
kono
parents:
diff changeset
1448 [(set (match_operand:V2HI 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1449 (bswap:V2HI (match_operand:V2HI 1 "nonmemory_operand" "r,i")))]
kono
parents:
diff changeset
1450 "TARGET_V2 && TARGET_SWAP"
kono
parents:
diff changeset
1451 "swape %0, %1"
kono
parents:
diff changeset
1452 [(set_attr "length" "4,8")
kono
parents:
diff changeset
1453 (set_attr "type" "two_cycle_core")])
kono
parents:
diff changeset
1454
kono
parents:
diff changeset
1455 ;; Simple arithmetic insns
kono
parents:
diff changeset
1456 (define_insn "add<mode>3"
kono
parents:
diff changeset
1457 [(set (match_operand:VCT 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1458 (plus:VCT (match_operand:VCT 1 "register_operand" "0,r")
kono
parents:
diff changeset
1459 (match_operand:VCT 2 "register_operand" "r,r")))]
kono
parents:
diff changeset
1460 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1461 "vadd<V_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1462 [(set_attr "length" "4")
kono
parents:
diff changeset
1463 (set_attr "type" "multi")
kono
parents:
diff changeset
1464 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1465 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1466
kono
parents:
diff changeset
1467 (define_insn "sub<mode>3"
kono
parents:
diff changeset
1468 [(set (match_operand:VCT 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1469 (minus:VCT (match_operand:VCT 1 "register_operand" "0,r")
kono
parents:
diff changeset
1470 (match_operand:VCT 2 "register_operand" "r,r")))]
kono
parents:
diff changeset
1471 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1472 "vsub<V_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1473 [(set_attr "length" "4")
kono
parents:
diff changeset
1474 (set_attr "type" "multi")
kono
parents:
diff changeset
1475 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1476 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1477
kono
parents:
diff changeset
1478 ;; Combined arithmetic ops
kono
parents:
diff changeset
1479 (define_insn "addsub<mode>3"
kono
parents:
diff changeset
1480 [(set (match_operand:VDV 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1481 (vec_concat:VDV
kono
parents:
diff changeset
1482 (plus:<V_addsub> (vec_select:<V_addsub> (match_operand:VDV 1 "register_operand" "0,r")
kono
parents:
diff changeset
1483 (parallel [(const_int 0)]))
kono
parents:
diff changeset
1484 (vec_select:<V_addsub> (match_operand:VDV 2 "register_operand" "r,r")
kono
parents:
diff changeset
1485 (parallel [(const_int 0)])))
kono
parents:
diff changeset
1486 (minus:<V_addsub> (vec_select:<V_addsub> (match_dup 1) (parallel [(const_int 1)]))
kono
parents:
diff changeset
1487 (vec_select:<V_addsub> (match_dup 2) (parallel [(const_int 1)])))))]
kono
parents:
diff changeset
1488 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1489 "vaddsub<V_addsub_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1490 [(set_attr "length" "4")
kono
parents:
diff changeset
1491 (set_attr "type" "multi")
kono
parents:
diff changeset
1492 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1493 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1494
kono
parents:
diff changeset
1495 (define_insn "subadd<mode>3"
kono
parents:
diff changeset
1496 [(set (match_operand:VDV 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1497 (vec_concat:VDV
kono
parents:
diff changeset
1498 (minus:<V_addsub> (vec_select:<V_addsub> (match_operand:VDV 1 "register_operand" "0,r")
kono
parents:
diff changeset
1499 (parallel [(const_int 0)]))
kono
parents:
diff changeset
1500 (vec_select:<V_addsub> (match_operand:VDV 2 "register_operand" "r,r")
kono
parents:
diff changeset
1501 (parallel [(const_int 0)])))
kono
parents:
diff changeset
1502 (plus:<V_addsub> (vec_select:<V_addsub> (match_dup 1) (parallel [(const_int 1)]))
kono
parents:
diff changeset
1503 (vec_select:<V_addsub> (match_dup 2) (parallel [(const_int 1)])))))]
kono
parents:
diff changeset
1504 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1505 "vsubadd<V_addsub_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1506 [(set_attr "length" "4")
kono
parents:
diff changeset
1507 (set_attr "type" "multi")
kono
parents:
diff changeset
1508 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1509 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1510
kono
parents:
diff changeset
1511 (define_insn "addsubv4hi3"
kono
parents:
diff changeset
1512 [(set (match_operand:V4HI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1513 (vec_concat:V4HI
kono
parents:
diff changeset
1514 (vec_concat:V2HI
kono
parents:
diff changeset
1515 (plus:HI (vec_select:HI (match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1516 (parallel [(const_int 0)]))
kono
parents:
diff changeset
1517 (vec_select:HI (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1518 (parallel [(const_int 0)])))
kono
parents:
diff changeset
1519 (minus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 1)]))
kono
parents:
diff changeset
1520 (vec_select:HI (match_dup 2) (parallel [(const_int 1)]))))
kono
parents:
diff changeset
1521 (vec_concat:V2HI
kono
parents:
diff changeset
1522 (plus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 2)]))
kono
parents:
diff changeset
1523 (vec_select:HI (match_dup 2) (parallel [(const_int 2)])))
kono
parents:
diff changeset
1524 (minus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 3)]))
kono
parents:
diff changeset
1525 (vec_select:HI (match_dup 2) (parallel [(const_int 3)]))))
kono
parents:
diff changeset
1526 ))]
kono
parents:
diff changeset
1527 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1528 "vaddsub4h%? %0, %1, %2"
kono
parents:
diff changeset
1529 [(set_attr "length" "4")
kono
parents:
diff changeset
1530 (set_attr "type" "multi")
kono
parents:
diff changeset
1531 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1532 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1533
kono
parents:
diff changeset
1534 (define_insn "subaddv4hi3"
kono
parents:
diff changeset
1535 [(set (match_operand:V4HI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1536 (vec_concat:V4HI
kono
parents:
diff changeset
1537 (vec_concat:V2HI
kono
parents:
diff changeset
1538 (minus:HI (vec_select:HI (match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1539 (parallel [(const_int 0)]))
kono
parents:
diff changeset
1540 (vec_select:HI (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1541 (parallel [(const_int 0)])))
kono
parents:
diff changeset
1542 (plus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 1)]))
kono
parents:
diff changeset
1543 (vec_select:HI (match_dup 2) (parallel [(const_int 1)]))))
kono
parents:
diff changeset
1544 (vec_concat:V2HI
kono
parents:
diff changeset
1545 (minus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 2)]))
kono
parents:
diff changeset
1546 (vec_select:HI (match_dup 2) (parallel [(const_int 2)])))
kono
parents:
diff changeset
1547 (plus:HI (vec_select:HI (match_dup 1) (parallel [(const_int 3)]))
kono
parents:
diff changeset
1548 (vec_select:HI (match_dup 2) (parallel [(const_int 3)]))))
kono
parents:
diff changeset
1549 ))]
kono
parents:
diff changeset
1550 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1551 "vsubadd4h%? %0, %1, %2"
kono
parents:
diff changeset
1552 [(set_attr "length" "4")
kono
parents:
diff changeset
1553 (set_attr "type" "multi")
kono
parents:
diff changeset
1554 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1555 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1556
kono
parents:
diff changeset
1557 ;; Multiplication
kono
parents:
diff changeset
1558 (define_insn "dmpyh<V_US_suffix>"
kono
parents:
diff changeset
1559 [(set (match_operand:SI 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1560 (plus:SI
kono
parents:
diff changeset
1561 (mult:SI
kono
parents:
diff changeset
1562 (SE:SI
kono
parents:
diff changeset
1563 (vec_select:HI (match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1564 (parallel [(const_int 0)])))
kono
parents:
diff changeset
1565 (SE:SI
kono
parents:
diff changeset
1566 (vec_select:HI (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1567 (parallel [(const_int 0)]))))
kono
parents:
diff changeset
1568 (mult:SI
kono
parents:
diff changeset
1569 (SE:SI (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
kono
parents:
diff changeset
1570 (SE:SI (vec_select:HI (match_dup 2) (parallel [(const_int 1)]))))))
kono
parents:
diff changeset
1571 (set (reg:DI ARCV2_ACC)
kono
parents:
diff changeset
1572 (zero_extend:DI
kono
parents:
diff changeset
1573 (plus:SI
kono
parents:
diff changeset
1574 (mult:SI
kono
parents:
diff changeset
1575 (SE:SI (vec_select:HI (match_dup 1) (parallel [(const_int 0)])))
kono
parents:
diff changeset
1576 (SE:SI (vec_select:HI (match_dup 2) (parallel [(const_int 0)]))))
kono
parents:
diff changeset
1577 (mult:SI
kono
parents:
diff changeset
1578 (SE:SI (vec_select:HI (match_dup 1) (parallel [(const_int 1)])))
kono
parents:
diff changeset
1579 (SE:SI (vec_select:HI (match_dup 2) (parallel [(const_int 1)])))))))]
kono
parents:
diff changeset
1580 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1581 "dmpyh<V_US_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1582 [(set_attr "length" "4")
kono
parents:
diff changeset
1583 (set_attr "type" "multi")
kono
parents:
diff changeset
1584 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1585 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1586
kono
parents:
diff changeset
1587 ;; We can use dmac as well here. To be investigated which version
kono
parents:
diff changeset
1588 ;; brings more.
kono
parents:
diff changeset
1589 (define_expand "sdot_prodv2hi"
kono
parents:
diff changeset
1590 [(match_operand:SI 0 "register_operand" "")
kono
parents:
diff changeset
1591 (match_operand:V2HI 1 "register_operand" "")
kono
parents:
diff changeset
1592 (match_operand:V2HI 2 "register_operand" "")
kono
parents:
diff changeset
1593 (match_operand:SI 3 "register_operand" "")]
kono
parents:
diff changeset
1594 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1595 {
kono
parents:
diff changeset
1596 rtx t = gen_reg_rtx (SImode);
kono
parents:
diff changeset
1597 emit_insn (gen_dmpyh (t, operands[1], operands[2]));
kono
parents:
diff changeset
1598 emit_insn (gen_addsi3 (operands[0], operands[3], t));
kono
parents:
diff changeset
1599 DONE;
kono
parents:
diff changeset
1600 })
kono
parents:
diff changeset
1601
kono
parents:
diff changeset
1602 (define_expand "udot_prodv2hi"
kono
parents:
diff changeset
1603 [(match_operand:SI 0 "register_operand" "")
kono
parents:
diff changeset
1604 (match_operand:V2HI 1 "register_operand" "")
kono
parents:
diff changeset
1605 (match_operand:V2HI 2 "register_operand" "")
kono
parents:
diff changeset
1606 (match_operand:SI 3 "register_operand" "")]
kono
parents:
diff changeset
1607 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1608 {
kono
parents:
diff changeset
1609 rtx t = gen_reg_rtx (SImode);
kono
parents:
diff changeset
1610 emit_insn (gen_dmpyhu (t, operands[1], operands[2]));
kono
parents:
diff changeset
1611 emit_insn (gen_addsi3 (operands[0], operands[3], t));
kono
parents:
diff changeset
1612 DONE;
kono
parents:
diff changeset
1613 })
kono
parents:
diff changeset
1614
kono
parents:
diff changeset
1615 (define_insn "arc_vec_<V_US>mult_lo_v4hi"
kono
parents:
diff changeset
1616 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1617 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1618 (match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1619 (parallel [(const_int 0) (const_int 1)])))
kono
parents:
diff changeset
1620 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1621 (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1622 (parallel [(const_int 0) (const_int 1)])))))
kono
parents:
diff changeset
1623 (set (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1624 (mult:V2SI (SE:V2SI (vec_select:V2HI (match_dup 1)
kono
parents:
diff changeset
1625 (parallel [(const_int 0) (const_int 1)])))
kono
parents:
diff changeset
1626 (SE:V2SI (vec_select:V2HI (match_dup 2)
kono
parents:
diff changeset
1627 (parallel [(const_int 0) (const_int 1)])))))
kono
parents:
diff changeset
1628 ]
kono
parents:
diff changeset
1629 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1630 "vmpy2h<V_US_suffix>%? %0, %1, %2"
kono
parents:
diff changeset
1631 [(set_attr "length" "4")
kono
parents:
diff changeset
1632 (set_attr "type" "multi")
kono
parents:
diff changeset
1633 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1634 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1635
kono
parents:
diff changeset
1636 (define_insn "arc_vec_<V_US>multacc_lo_v4hi"
kono
parents:
diff changeset
1637 [(set (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1638 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1639 (match_operand:V4HI 0 "even_register_operand" "r")
kono
parents:
diff changeset
1640 (parallel [(const_int 0) (const_int 1)])))
kono
parents:
diff changeset
1641 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1642 (match_operand:V4HI 1 "even_register_operand" "r")
kono
parents:
diff changeset
1643 (parallel [(const_int 0) (const_int 1)])))))
kono
parents:
diff changeset
1644 ]
kono
parents:
diff changeset
1645 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1646 "vmpy2h<V_US_suffix>%? 0, %0, %1"
kono
parents:
diff changeset
1647 [(set_attr "length" "4")
kono
parents:
diff changeset
1648 (set_attr "type" "multi")
kono
parents:
diff changeset
1649 (set_attr "predicable" "no")
kono
parents:
diff changeset
1650 (set_attr "cond" "nocond")])
kono
parents:
diff changeset
1651
kono
parents:
diff changeset
1652 (define_expand "vec_widen_<V_US>mult_lo_v4hi"
kono
parents:
diff changeset
1653 [(set (match_operand:V2SI 0 "even_register_operand" "")
kono
parents:
diff changeset
1654 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1655 (match_operand:V4HI 1 "even_register_operand" "")
kono
parents:
diff changeset
1656 (parallel [(const_int 0) (const_int 1)])))
kono
parents:
diff changeset
1657 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1658 (match_operand:V4HI 2 "even_register_operand" "")
kono
parents:
diff changeset
1659 (parallel [(const_int 0) (const_int 1)])))))]
kono
parents:
diff changeset
1660 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1661 {
kono
parents:
diff changeset
1662 emit_insn (gen_arc_vec_<V_US>mult_lo_v4hi (operands[0],
kono
parents:
diff changeset
1663 operands[1],
kono
parents:
diff changeset
1664 operands[2]));
kono
parents:
diff changeset
1665 DONE;
kono
parents:
diff changeset
1666 }
kono
parents:
diff changeset
1667 )
kono
parents:
diff changeset
1668
kono
parents:
diff changeset
1669 (define_insn "arc_vec_<V_US>mult_hi_v4hi"
kono
parents:
diff changeset
1670 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1671 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1672 (match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1673 (parallel [(const_int 2) (const_int 3)])))
kono
parents:
diff changeset
1674 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1675 (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1676 (parallel [(const_int 2) (const_int 3)])))))
kono
parents:
diff changeset
1677 (set (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1678 (mult:V2SI (SE:V2SI (vec_select:V2HI (match_dup 1)
kono
parents:
diff changeset
1679 (parallel [(const_int 2) (const_int 3)])))
kono
parents:
diff changeset
1680 (SE:V2SI (vec_select:V2HI (match_dup 2)
kono
parents:
diff changeset
1681 (parallel [(const_int 2) (const_int 3)])))))
kono
parents:
diff changeset
1682 ]
kono
parents:
diff changeset
1683 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1684 "vmpy2h<V_US_suffix>%? %0, %R1, %R2"
kono
parents:
diff changeset
1685 [(set_attr "length" "4")
kono
parents:
diff changeset
1686 (set_attr "type" "multi")
kono
parents:
diff changeset
1687 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1688 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1689
kono
parents:
diff changeset
1690 (define_expand "vec_widen_<V_US>mult_hi_v4hi"
kono
parents:
diff changeset
1691 [(set (match_operand:V2SI 0 "even_register_operand" "")
kono
parents:
diff changeset
1692 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1693 (match_operand:V4HI 1 "even_register_operand" "")
kono
parents:
diff changeset
1694 (parallel [(const_int 2) (const_int 3)])))
kono
parents:
diff changeset
1695 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1696 (match_operand:V4HI 2 "even_register_operand" "")
kono
parents:
diff changeset
1697 (parallel [(const_int 2) (const_int 3)])))))]
kono
parents:
diff changeset
1698 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1699 {
kono
parents:
diff changeset
1700 emit_insn (gen_arc_vec_<V_US>mult_hi_v4hi (operands[0],
kono
parents:
diff changeset
1701 operands[1],
kono
parents:
diff changeset
1702 operands[2]));
kono
parents:
diff changeset
1703 DONE;
kono
parents:
diff changeset
1704 }
kono
parents:
diff changeset
1705 )
kono
parents:
diff changeset
1706
kono
parents:
diff changeset
1707 (define_insn "arc_vec_<V_US>mac_hi_v4hi"
kono
parents:
diff changeset
1708 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1709 (plus:V2SI
kono
parents:
diff changeset
1710 (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1711 (mult:V2SI (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1712 (match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1713 (parallel [(const_int 2) (const_int 3)])))
kono
parents:
diff changeset
1714 (SE:V2SI (vec_select:V2HI
kono
parents:
diff changeset
1715 (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1716 (parallel [(const_int 2) (const_int 3)]))))))
kono
parents:
diff changeset
1717 (set (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1718 (plus:V2SI
kono
parents:
diff changeset
1719 (reg:V2SI ARCV2_ACC)
kono
parents:
diff changeset
1720 (mult:V2SI (SE:V2SI (vec_select:V2HI (match_dup 1)
kono
parents:
diff changeset
1721 (parallel [(const_int 2) (const_int 3)])))
kono
parents:
diff changeset
1722 (SE:V2SI (vec_select:V2HI (match_dup 2)
kono
parents:
diff changeset
1723 (parallel [(const_int 2) (const_int 3)]))))))
kono
parents:
diff changeset
1724 ]
kono
parents:
diff changeset
1725 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1726 "vmac2h<V_US_suffix>%? %0, %R1, %R2"
kono
parents:
diff changeset
1727 [(set_attr "length" "4")
kono
parents:
diff changeset
1728 (set_attr "type" "multi")
kono
parents:
diff changeset
1729 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1730 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1731
kono
parents:
diff changeset
1732 ;; Builtins
kono
parents:
diff changeset
1733 (define_insn "dmach"
kono
parents:
diff changeset
1734 [(set (match_operand:SI 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1735 (unspec:SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1736 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1737 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1738 UNSPEC_ARC_DMACH))
kono
parents:
diff changeset
1739 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1740 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1741 "dmach%? %0, %1, %2"
kono
parents:
diff changeset
1742 [(set_attr "length" "4")
kono
parents:
diff changeset
1743 (set_attr "type" "multi")
kono
parents:
diff changeset
1744 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1745 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1746
kono
parents:
diff changeset
1747 (define_insn "dmachu"
kono
parents:
diff changeset
1748 [(set (match_operand:SI 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1749 (unspec:SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1750 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1751 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1752 UNSPEC_ARC_DMACHU))
kono
parents:
diff changeset
1753 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1754 "TARGET_PLUS_DMPY"
kono
parents:
diff changeset
1755 "dmachu%? %0, %1, %2"
kono
parents:
diff changeset
1756 [(set_attr "length" "4")
kono
parents:
diff changeset
1757 (set_attr "type" "multi")
kono
parents:
diff changeset
1758 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1759 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1760
kono
parents:
diff changeset
1761 (define_insn "dmacwh"
kono
parents:
diff changeset
1762 [(set (match_operand:DI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1763 (unspec:DI [(match_operand:V2SI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1764 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1765 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1766 UNSPEC_ARC_DMACWH))
kono
parents:
diff changeset
1767 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1768 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1769 "dmacwh%? %0, %1, %2"
kono
parents:
diff changeset
1770 [(set_attr "length" "4")
kono
parents:
diff changeset
1771 (set_attr "type" "multi")
kono
parents:
diff changeset
1772 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1773 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1774
kono
parents:
diff changeset
1775 (define_insn "dmacwhu"
kono
parents:
diff changeset
1776 [(set (match_operand:DI 0 "register_operand" "=r,r")
kono
parents:
diff changeset
1777 (unspec:DI [(match_operand:V2SI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1778 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1779 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1780 UNSPEC_ARC_DMACWHU))
kono
parents:
diff changeset
1781 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1782 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1783 "dmacwhu%? %0, %1, %2"
kono
parents:
diff changeset
1784 [(set_attr "length" "4")
kono
parents:
diff changeset
1785 (set_attr "type" "multi")
kono
parents:
diff changeset
1786 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1787 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1788
kono
parents:
diff changeset
1789 (define_insn "vmac2h"
kono
parents:
diff changeset
1790 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1791 (unspec:V2SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1792 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1793 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1794 UNSPEC_ARC_VMAC2H))
kono
parents:
diff changeset
1795 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1796 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1797 "vmac2h%? %0, %1, %2"
kono
parents:
diff changeset
1798 [(set_attr "length" "4")
kono
parents:
diff changeset
1799 (set_attr "type" "multi")
kono
parents:
diff changeset
1800 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1801 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1802
kono
parents:
diff changeset
1803 (define_insn "vmac2hu"
kono
parents:
diff changeset
1804 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1805 (unspec:V2SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1806 (match_operand:V2HI 2 "register_operand" "r,r")
kono
parents:
diff changeset
1807 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1808 UNSPEC_ARC_VMAC2HU))
kono
parents:
diff changeset
1809 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1810 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1811 "vmac2hu%? %0, %1, %2"
kono
parents:
diff changeset
1812 [(set_attr "length" "4")
kono
parents:
diff changeset
1813 (set_attr "type" "multi")
kono
parents:
diff changeset
1814 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1815 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1816
kono
parents:
diff changeset
1817 (define_insn "vmpy2h"
kono
parents:
diff changeset
1818 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1819 (unspec:V2SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1820 (match_operand:V2HI 2 "register_operand" "r,r")]
kono
parents:
diff changeset
1821 UNSPEC_ARC_VMPY2H))
kono
parents:
diff changeset
1822 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1823 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1824 "vmpy2h%? %0, %1, %2"
kono
parents:
diff changeset
1825 [(set_attr "length" "4")
kono
parents:
diff changeset
1826 (set_attr "type" "multi")
kono
parents:
diff changeset
1827 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1828 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1829
kono
parents:
diff changeset
1830 (define_insn "vmpy2hu"
kono
parents:
diff changeset
1831 [(set (match_operand:V2SI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1832 (unspec:V2SI [(match_operand:V2HI 1 "register_operand" "0,r")
kono
parents:
diff changeset
1833 (match_operand:V2HI 2 "register_operand" "r,r")]
kono
parents:
diff changeset
1834 UNSPEC_ARC_VMPY2HU))
kono
parents:
diff changeset
1835 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1836 "TARGET_PLUS_MACD"
kono
parents:
diff changeset
1837 "vmpy2hu%? %0, %1, %2"
kono
parents:
diff changeset
1838 [(set_attr "length" "4")
kono
parents:
diff changeset
1839 (set_attr "type" "multi")
kono
parents:
diff changeset
1840 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1841 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1842
kono
parents:
diff changeset
1843 (define_insn "qmach"
kono
parents:
diff changeset
1844 [(set (match_operand:DI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1845 (unspec:DI [(match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1846 (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1847 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1848 UNSPEC_ARC_QMACH))
kono
parents:
diff changeset
1849 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1850 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1851 "qmach%? %0, %1, %2"
kono
parents:
diff changeset
1852 [(set_attr "length" "4")
kono
parents:
diff changeset
1853 (set_attr "type" "multi")
kono
parents:
diff changeset
1854 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1855 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1856
kono
parents:
diff changeset
1857 (define_insn "qmachu"
kono
parents:
diff changeset
1858 [(set (match_operand:DI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1859 (unspec:DI [(match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1860 (match_operand:V4HI 2 "even_register_operand" "r,r")
kono
parents:
diff changeset
1861 (reg:DI ARCV2_ACC)]
kono
parents:
diff changeset
1862 UNSPEC_ARC_QMACHU))
kono
parents:
diff changeset
1863 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1864 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1865 "qmachu%? %0, %1, %2"
kono
parents:
diff changeset
1866 [(set_attr "length" "4")
kono
parents:
diff changeset
1867 (set_attr "type" "multi")
kono
parents:
diff changeset
1868 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1869 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1870
kono
parents:
diff changeset
1871 (define_insn "qmpyh"
kono
parents:
diff changeset
1872 [(set (match_operand:DI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1873 (unspec:DI [(match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1874 (match_operand:V4HI 2 "even_register_operand" "r,r")]
kono
parents:
diff changeset
1875 UNSPEC_ARC_QMPYH))
kono
parents:
diff changeset
1876 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1877 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1878 "qmpyh%? %0, %1, %2"
kono
parents:
diff changeset
1879 [(set_attr "length" "4")
kono
parents:
diff changeset
1880 (set_attr "type" "multi")
kono
parents:
diff changeset
1881 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1882 (set_attr "cond" "canuse,nocond")])
kono
parents:
diff changeset
1883
kono
parents:
diff changeset
1884 (define_insn "qmpyhu"
kono
parents:
diff changeset
1885 [(set (match_operand:DI 0 "even_register_operand" "=r,r")
kono
parents:
diff changeset
1886 (unspec:DI [(match_operand:V4HI 1 "even_register_operand" "0,r")
kono
parents:
diff changeset
1887 (match_operand:V4HI 2 "even_register_operand" "r,r")]
kono
parents:
diff changeset
1888 UNSPEC_ARC_QMPYHU))
kono
parents:
diff changeset
1889 (clobber (reg:DI ARCV2_ACC))]
kono
parents:
diff changeset
1890 "TARGET_PLUS_QMACW"
kono
parents:
diff changeset
1891 "qmpyhu%? %0, %1, %2"
kono
parents:
diff changeset
1892 [(set_attr "length" "4")
kono
parents:
diff changeset
1893 (set_attr "type" "multi")
kono
parents:
diff changeset
1894 (set_attr "predicable" "yes,no")
kono
parents:
diff changeset
1895 (set_attr "cond" "canuse,nocond")])