1 /* { dg-do compile } */
2 /* { dg-skip-if "" { ! { clmcpu } } } */
3 /* { dg-options "-O2 -Werror-implicit-function-declaration -mARC700 -msimd" } */
4 
5 #define STEST1(name, rettype, op1)		\
6   rettype test_ ## name                         \
7   (void)					\
8   {                                             \
9     return __builtin_arc_ ## name (op1);	\
10   }
11 
12 #define STEST2(name, rettype, op1, op2)  \
13   rettype test_ ## name                         \
14   (void)					\
15   {                                             \
16     return __builtin_arc_ ## name (op1, op2);	\
17   }
18 
19 #define STEST3(name, rettype, op1, op2, op3)	\
20   rettype test_ ## name                         \
21   (void)					\
22   {                                             \
23     return __builtin_arc_ ## name (op1, op2, op3);	\
24   }
25 
26 #define STEST4(name, rettype, op1, op2, op3, op4)	\
27   rettype test_ ## name					\
28   (void)						\
29   {							\
30     return __builtin_arc_ ## name (op1, op2, op3, op4);	\
31   }
32 
33 typedef short v8hi __attribute__ ((vector_size (16)));
34 
35 v8hi Va;
36 v8hi Vb;
37 v8hi Vc;
38 #define rlimm 0xf3eec0fe
39 #define Ic    0x02
40 #define Ib    0x02
41 #define u3    0x02
42 #define u6    0x1F
43 #define u8    0xB0
44 
45 STEST2 ( vaddaw, v8hi, Vb, Vc)
46 STEST2 (  vaddw, v8hi, Vb, Vc)
47 STEST2 (   vavb, v8hi, Vb, Vc)
48 STEST2 (  vavrb, v8hi, Vb, Vc)
49 STEST2 ( vdifaw, v8hi, Vb, Vc)
50 STEST2 (  vdifw, v8hi, Vb, Vc)
51 STEST2 ( vmaxaw, v8hi, Vb, Vc)
52 STEST2 (  vmaxw, v8hi, Vb, Vc)
53 STEST2 ( vminaw, v8hi, Vb, Vc)
54 STEST2 (  vminw, v8hi, Vb, Vc)
55 STEST2 ( vmulaw, v8hi, Vb, Vc)
56 STEST2 (vmulfaw, v8hi, Vb, Vc)
57 STEST2 ( vmulfw, v8hi, Vb, Vc)
58 STEST2 (  vmulw, v8hi, Vb, Vc)
59 STEST2 ( vsubaw, v8hi, Vb, Vc)
60 STEST2 (  vsubw, v8hi, Vb, Vc)
61 STEST2 ( vsummw, v8hi, Vb, Vc)
62 STEST2 (   vand, v8hi, Vb, Vc)
63 STEST2 ( vandaw, v8hi, Vb, Vc)
64 STEST2 (   vbic, v8hi, Vb, Vc)
65 STEST2 ( vbicaw, v8hi, Vb, Vc)
66 STEST2 (    vor, v8hi, Vb, Vc)
67 STEST2 (   vxor, v8hi, Vb, Vc)
68 STEST2 ( vxoraw, v8hi, Vb, Vc)
69 STEST2 (   veqw, v8hi, Vb, Vc)
70 STEST2 (   vlew, v8hi, Vb, Vc)
71 STEST2 (   vltw, v8hi, Vb, Vc)
72 STEST2 (   vnew, v8hi, Vb, Vc)
73 STEST2 ( vmr1aw, v8hi, Vb, Vc)
74 STEST2 (  vmr1w, v8hi, Vb, Vc)
75 STEST2 ( vmr2aw, v8hi, Vb, Vc)
76 STEST2 (  vmr2w, v8hi, Vb, Vc)
77 STEST2 ( vmr3aw, v8hi, Vb, Vc)
78 STEST2 (  vmr3w, v8hi, Vb, Vc)
79 STEST2 ( vmr4aw, v8hi, Vb, Vc)
80 STEST2 (  vmr4w, v8hi, Vb, Vc)
81 STEST2 ( vmr5aw, v8hi, Vb, Vc)
82 STEST2 (  vmr5w, v8hi, Vb, Vc)
83 STEST2 ( vmr6aw, v8hi, Vb, Vc)
84 STEST2 (  vmr6w, v8hi, Vb, Vc)
85 STEST2 ( vmr7aw, v8hi, Vb, Vc)
86 STEST2 (  vmr7w, v8hi, Vb, Vc)
87 STEST2 (   vmrb, v8hi, Vb, Vc)
88 STEST2 ( vh264f, v8hi, Vb, Vc)
89 STEST2 (vh264ft, v8hi, Vb, Vc)
90 STEST2 (vh264fw, v8hi, Vb, Vc)
91 STEST2 (  vvc1f, v8hi, Vb, Vc)
92 STEST2 ( vvc1ft, v8hi, Vb, Vc)
93 
94 STEST2 ( vbaddw, v8hi, Vb, rlimm)
95 STEST2 ( vbmaxw, v8hi, Vb, rlimm)
96 STEST2 ( vbminw, v8hi, Vb, rlimm)
97 STEST2 (vbmulaw, v8hi, Vb, rlimm)
98 STEST2 (vbmulfw, v8hi, Vb, rlimm)
99 STEST2 ( vbmulw, v8hi, Vb, rlimm)
100 STEST2 (vbrsubw, v8hi, Vb, rlimm)
101 STEST2 ( vbsubw, v8hi, Vb, rlimm)
102 
103 
104 /* Va, Vb, Ic instructions.  */
105 STEST2 ( vasrw, v8hi, Vb, Ic)
106 STEST2 (  vsr8, v8hi, Vb, Ic)
107 STEST2 (vsr8aw, v8hi, Vb, Ic)
108 
109 /* Va, Vb, u6 instructions.  */
110 STEST2 (  vasrrwi, v8hi, Vb, u6)
111 STEST2 ( vasrsrwi, v8hi, Vb, u6)
112 STEST2 (   vasrwi, v8hi, Vb, u6)
113 STEST2 ( vasrpwbi, v8hi, Vb, u6)
114 STEST2 (vasrrpwbi, v8hi, Vb, u6)
115 STEST2 (  vsr8awi, v8hi, Vb, u6)
116 STEST2 (    vsr8i, v8hi, Vb, u6)
117 
118 /* Va, Vb, u8 (simm) instructions.  */
119 STEST2 (  vmvaw, v8hi, Vb, u8)
120 STEST2 (   vmvw, v8hi, Vb, u8)
121 STEST2 (  vmvzw, v8hi, Vb, u8)
122 STEST2 (vd6tapf, v8hi, Vb, u8)
123 
124 /* Va, rlimm, u8 (simm) instructions.  */
125 STEST2 (vmovaw, v8hi, rlimm, u8)
126 STEST2 ( vmovw, v8hi, rlimm, u8)
127 STEST2 (vmovzw, v8hi, rlimm, u8)
128 
129 /* Va, Vb instructions.  */
130 STEST1 ( vabsaw, v8hi, Vb)
131 STEST1 (  vabsw, v8hi, Vb)
132 STEST1 (vaddsuw, v8hi, Vb)
133 STEST1 ( vsignw, v8hi, Vb)
134 STEST1 ( vexch1, v8hi, Vb)
135 STEST1 ( vexch2, v8hi, Vb)
136 STEST1 ( vexch4, v8hi, Vb)
137 STEST1 ( vupbaw, v8hi, Vb)
138 STEST1 (  vupbw, v8hi, Vb)
139 STEST1 (vupsbaw, v8hi, Vb)
140 STEST1 ( vupsbw, v8hi, Vb)
141 
142 /* DIb, rlimm, rlimm instructions.  */
143 STEST2 (vdirun, void, rlimm, rlimm)
144 STEST2 (vdorun, void, rlimm, rlimm)
145 
146 /* DIb, limm, rlimm instructions.  */
147 STEST2 (vdiwr, void, u3, rlimm)
148 STEST2 (vdowr, void, u3, rlimm)
149 
150 /* rlimm instructions.  */
151 STEST1 (   vrec, void, rlimm)
152 STEST1 (   vrun, void, rlimm)
153 STEST1 (vrecrun, void, rlimm)
154 STEST1 (vendrec, void, rlimm)
155 
156 /* Va, [Ib,u8] instructions.  */
157 STEST3  (vld32wh, v8hi, Vb, Ic, u8)
158 STEST3  (vld32wl, v8hi, Vb, Ic, u8)
159 STEST3  (  vld64, v8hi, Vb, Ic, u8)
160 STEST3  (  vld32, v8hi, Vb, Ic, u8)
161 
162 STEST2  (vld64w, v8hi, Ib, u8)
163 STEST2  (vld128, v8hi, Ib, u8)
164 
165 STEST3 (vst128, void, Va, Ib, u8)
166 STEST3 ( vst64, void, Va, Ib, u8)
167 
168 /* Va, [Ib, u8] instructions.  */
169 STEST4 (vst16_n, void, Va, u3, Ib, u8)
170 STEST4 (vst32_n, void, Va, u3, Ib, u8)
171 
172 STEST1 (vinti, void, u6)
173