annotate gcc/config/nds32/nds32-intrinsic.c @ 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 /* Intrinsic functions of Andes NDS32 cpu for GNU compiler
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2012-2020 Free Software Foundation, Inc.
111
kono
parents:
diff changeset
3 Contributed by Andes Technology Corporation.
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 This file is part of GCC.
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 GCC is free software; you can redistribute it and/or modify it
kono
parents:
diff changeset
8 under the terms of the GNU General Public License as published
kono
parents:
diff changeset
9 by the Free Software Foundation; either version 3, or (at your
kono
parents:
diff changeset
10 option) any later version.
kono
parents:
diff changeset
11
kono
parents:
diff changeset
12 GCC is distributed in the hope that it will be useful, but WITHOUT
kono
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
kono
parents:
diff changeset
14 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
kono
parents:
diff changeset
15 License for more details.
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
kono
parents:
diff changeset
18 along with GCC; see the file COPYING3. If not see
kono
parents:
diff changeset
19 <http://www.gnu.org/licenses/>. */
kono
parents:
diff changeset
20
kono
parents:
diff changeset
21 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
22
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
23 #define IN_TARGET_CODE 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
24
111
kono
parents:
diff changeset
25 #include "config.h"
kono
parents:
diff changeset
26 #include "system.h"
kono
parents:
diff changeset
27 #include "coretypes.h"
kono
parents:
diff changeset
28 #include "backend.h"
kono
parents:
diff changeset
29 #include "target.h"
kono
parents:
diff changeset
30 #include "rtl.h"
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
31 #include "memmodel.h"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
32 #include "emit-rtl.h"
111
kono
parents:
diff changeset
33 #include "tree.h"
kono
parents:
diff changeset
34 #include "memmodel.h"
kono
parents:
diff changeset
35 #include "optabs.h" /* For GEN_FCN. */
kono
parents:
diff changeset
36 #include "diagnostic-core.h"
kono
parents:
diff changeset
37 #include "stor-layout.h"
kono
parents:
diff changeset
38 #include "expr.h"
kono
parents:
diff changeset
39 #include "langhooks.h" /* For add_builtin_function(). */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
40 #include "recog.h"
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
41 #include "explow.h"
111
kono
parents:
diff changeset
42
kono
parents:
diff changeset
43 /* ------------------------------------------------------------------------ */
kono
parents:
diff changeset
44
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
45 /* Read the requested argument from the EXP given by INDEX.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
46 Return the value as an rtx. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
47 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
48 nds32_read_argument (tree exp, unsigned int index)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
49 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
50 return expand_normal (CALL_EXPR_ARG (exp, index));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
51 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
52
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
53 /* Return a legitimate rtx for instruction ICODE's return value. Use TARGET
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
54 if it's not null, has the right mode, and satisfies operand 0's
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
55 predicate. */
111
kono
parents:
diff changeset
56 static rtx
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
57 nds32_legitimize_target (enum insn_code icode, rtx target)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
58 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
59 enum machine_mode mode = insn_data[icode].operand[0].mode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
60
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
61 if (! target
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
62 || GET_MODE (target) != mode
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
63 || ! (*insn_data[icode].operand[0].predicate) (target, mode))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
64 return gen_reg_rtx (mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
65 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
66 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
67 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
68
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
69 /* Given that ARG is being passed as operand OPNUM to instruction ICODE,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
70 check whether ARG satisfies the operand's constraints. If it doesn't,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
71 copy ARG to a temporary register and return that. Otherwise return ARG
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
72 itself. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
73 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
74 nds32_legitimize_argument (enum insn_code icode, int opnum, rtx arg)
111
kono
parents:
diff changeset
75 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
76 enum machine_mode mode = insn_data[icode].operand[opnum].mode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
77
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
78 if ((*insn_data[icode].operand[opnum].predicate) (arg, mode))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
79 return arg;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
80 else if (VECTOR_MODE_P (mode) && CONST_INT_P (arg))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
81 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
82 /* Handle CONST_INT covert to CONST_VECTOR. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
83 int nunits = GET_MODE_NUNITS (mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
84 int i, shift = 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
85 rtvec v = rtvec_alloc (nunits);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
86 int val = INTVAL (arg);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
87 enum machine_mode val_mode = (mode == V4QImode) ? QImode : HImode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
88 int shift_acc = (val_mode == QImode) ? 8 : 16;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
89 int mask = (val_mode == QImode) ? 0xff : 0xffff;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
90 int tmp_val = val;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
91
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
92 if (TARGET_BIG_ENDIAN)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
93 for (i = 0; i < nunits; i++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
94 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
95 tmp_val = (val >> shift) & mask;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
96 RTVEC_ELT (v, nunits - i - 1) = gen_int_mode (tmp_val, val_mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
97 shift += shift_acc;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
98 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
99 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
100 for (i = 0; i < nunits; i++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
101 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
102 tmp_val = (val >> shift) & mask;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
103 RTVEC_ELT (v, i) = gen_int_mode (tmp_val, val_mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
104 shift += shift_acc;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
105 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
106
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
107 return copy_to_mode_reg (mode, gen_rtx_CONST_VECTOR (mode, v));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
108 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
109 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 rtx tmp_rtx = gen_reg_rtx (mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 convert_move (tmp_rtx, arg, false);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
113 return tmp_rtx;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
114 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
115 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
116
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
117 /* Return true if OPVAL can be used for operand OPNUM of instruction ICODE.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
118 The instruction should require a constant operand of some sort. The
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
119 function prints an error if OPVAL is not valid. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
120 static int
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
121 nds32_check_constant_argument (enum insn_code icode, int opnum, rtx opval,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
122 const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
123 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
124 if (GET_CODE (opval) != CONST_INT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
125 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
126 error ("invalid argument to built-in function %s", name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
127 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
128 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
129 if (! (*insn_data[icode].operand[opnum].predicate) (opval, VOIDmode))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
130 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
131 error ("constant argument out of range for %s", name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
132
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
133 return false;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
134 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
135 return true;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
136 }
111
kono
parents:
diff changeset
137
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
138 /* Expand builtins that return target. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
139 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
140 nds32_expand_noarg_builtin (enum insn_code icode, rtx target)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
141 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
142 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
143
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
144 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
145
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
146 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
147 pat = GEN_FCN (icode) (target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
148 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
149 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
150
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
151 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
152 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
153 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
154
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
155 /* Expand builtins that take one operand. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
156 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
157 nds32_expand_unop_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
158 bool return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
159 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
160 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
161 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
162 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
163
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
164 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
165 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
166
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
167 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
168
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
169 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
170 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
171 pat = GEN_FCN (icode) (target, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
172 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
173 pat = GEN_FCN (icode) (op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
174
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
175 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
176 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
177
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
178 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
179 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
180 }
111
kono
parents:
diff changeset
181
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
182 /* Expand builtins that take one operands and the first is immediate. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
183 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
184 nds32_expand_unopimm_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
185 bool return_p, const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
186 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
187 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
188 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
189 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
190
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
191 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
192 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
193
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
194 if (!nds32_check_constant_argument (icode, op0_num, op0, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
195 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
197 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
199 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
200 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 pat = GEN_FCN (icode) (target, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
202 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 pat = GEN_FCN (icode) (op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
205 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
206 return NULL_RTX;
111
kono
parents:
diff changeset
207
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
208 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
210 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
211
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
212 /* Expand builtins that take two operands. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
214 nds32_expand_binop_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 bool return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
217 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
218 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 int op1_num = return_p ? 2 : 1;
111
kono
parents:
diff changeset
222
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
223 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
224 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
226 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
227 op1 = nds32_legitimize_argument (icode, op1_num, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
228
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
229 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
230 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
231 pat = GEN_FCN (icode) (target, op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
232 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
233 pat = GEN_FCN (icode) (op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
234
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
235 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
236 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
237
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
238 emit_insn (pat);
111
kono
parents:
diff changeset
239 return target;
kono
parents:
diff changeset
240 }
kono
parents:
diff changeset
241
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
242 /* Expand builtins that take two operands and the second is immediate. */
111
kono
parents:
diff changeset
243 static rtx
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
244 nds32_expand_binopimm_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
245 bool return_p, const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
246 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
247 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
248 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
249 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
250 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
251 int op1_num = return_p ? 2 : 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
252
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
253 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
254 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
255
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
256 if (!nds32_check_constant_argument (icode, op1_num, op1, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
257 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
258
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
259 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
260 op1 = nds32_legitimize_argument (icode, op1_num, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
261
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
262 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
263 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
264 pat = GEN_FCN (icode) (target, op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
265 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
266 pat = GEN_FCN (icode) (op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
267
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
268 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
269 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
270
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
271 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
272 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
273 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
274
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
275 /* Expand builtins that take three operands. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
276 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
277 nds32_expand_triop_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
278 bool return_p)
111
kono
parents:
diff changeset
279 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283 rtx op2 = nds32_read_argument (exp, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
284 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
285 int op1_num = return_p ? 2 : 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
286 int op2_num = return_p ? 3 : 2;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
287
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
288 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
289 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
290
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
291 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
292 op1 = nds32_legitimize_argument (icode, op1_num, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
293 op2 = nds32_legitimize_argument (icode, op2_num, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
294
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
295 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
296 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
297 pat = GEN_FCN (icode) (target, op0, op1, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
298 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
299 pat = GEN_FCN (icode) (op0, op1, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
300
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
301 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
302 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
303
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
304 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
305 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
306 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
307
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
308 /* Expand builtins that take three operands and the third is immediate. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
309 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
310 nds32_expand_triopimm_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
311 bool return_p, const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
312 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
313 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
314 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
315 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
316 rtx op2 = nds32_read_argument (exp, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
317 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
318 int op1_num = return_p ? 2 : 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
319 int op2_num = return_p ? 3 : 2;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
320
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
321 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
322 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
323
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
324 if (!nds32_check_constant_argument (icode, op2_num, op2, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
325 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
326
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
327 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
328 op1 = nds32_legitimize_argument (icode, op1_num, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
329 op2 = nds32_legitimize_argument (icode, op2_num, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
330
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
331 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
332 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
333 pat = GEN_FCN (icode) (target, op0, op1, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
334 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
335 pat = GEN_FCN (icode) (op0, op1, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
336
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
337 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
338 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
339
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
340 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
341 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
342 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
343
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
344 /* Expand builtins for load. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
345 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
346 nds32_expand_builtin_load (enum insn_code icode, tree exp, rtx target)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
347 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
348 /* Load address format is [$ra + $rb],
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
349 but input arguments not enough,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
350 so we need another temp register as $rb.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
351 Generating assembly code:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
352 movi $temp, 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
353 llw $rt, [$ra + $temp] */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
354 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
355 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
356 rtx addr_helper = gen_reg_rtx (insn_data[icode].operand[1].mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
357
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
358 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
359 op0 = nds32_legitimize_argument (icode, 1, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
360
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
361 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
362 pat = GEN_FCN (icode) (target, op0, addr_helper);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
363 if (!pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
364 return NULL_RTX;
111
kono
parents:
diff changeset
365
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
366 emit_move_insn (addr_helper, GEN_INT (0));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
367 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
368 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
369 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
370
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
371 /* Expand builtins for store. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
372 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
373 nds32_expand_builtin_store (enum insn_code icode, tree exp, rtx target)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
374 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
375 /* Store address format is [$ra + $rb],
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
376 but input arguments not enough,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
377 so we need another temp register as $rb.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
378 Generating assembly code:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
379 movi $temp, 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
380 store $rt, [$ra + $temp] */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
381 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
382 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
383 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
384 rtx addr_helper = gen_reg_rtx (insn_data[icode].operand[1].mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
385
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
386 op0 = nds32_legitimize_argument (icode, 0, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
387 op1 = nds32_legitimize_argument (icode, 2, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
388
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
389 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
390 pat = GEN_FCN (icode) (op0, addr_helper, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
391 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
392 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
393
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
394 emit_move_insn (addr_helper, GEN_INT (0));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
395 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
396 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
397 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
398
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
399 /* Expand cctl builtins. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
400 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
401 nds32_expand_cctl_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
402 bool return_p, const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
403 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
404 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
405 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
406 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
407 int op0_num = return_p ? 1 : 0;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
408 int op1_num = return_p ? 2 : 1;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
409
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
410 if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
411 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
412
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
413 if (!nds32_check_constant_argument (icode, op0_num, op0, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
414 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
415
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
416 op0 = nds32_legitimize_argument (icode, op0_num, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
417 op1 = nds32_legitimize_argument (icode, op1_num, op1);
111
kono
parents:
diff changeset
418
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
419 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
420 if (icode == CODE_FOR_cctl_idx_write)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
421 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
422 /* cctl_idx_write is three argument,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
423 so create operand2 for cctl_idx_write pattern. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
424 rtx op2 = nds32_read_argument (exp, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
425 op2 = nds32_legitimize_argument (icode, 2, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
426 pat = GEN_FCN (icode) (op0, op1, op2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
427 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
428 else if (return_p)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
429 pat = GEN_FCN (icode) (target, op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
430 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
431 pat = GEN_FCN (icode) (op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
432
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
433 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
434 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
435
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
436 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
437 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
438 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
439
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
440 /* Expand scw builtins. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
441 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
442 nds32_expand_scw_builtin (enum insn_code icode, tree exp, rtx target)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
443 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
444 /* SCW address format is [$ra + $rb], but input arguments not enough,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
445 so we need another temp register as $rb.
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
446 Generating assembly code:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
447 movi $temp, 0
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
448 scw $rt, [$ra + $temp] */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
449 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
450 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
451 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
452 rtx addr_helper = gen_reg_rtx (insn_data[icode].operand[1].mode);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
453
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
454 target = nds32_legitimize_target (icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
455 op0 = nds32_legitimize_argument (icode, 1, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
456 op1 = nds32_legitimize_argument (icode, 2, op1);
111
kono
parents:
diff changeset
457
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
458 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
459 pat = GEN_FCN (icode) (target, op0, addr_helper, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
460
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
461 if (!pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
462 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
463
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
464 emit_move_insn (addr_helper, GEN_INT (0));
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
465 emit_move_insn (target, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
466 emit_insn (pat);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
467 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
468 }
111
kono
parents:
diff changeset
469
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
470 /* Expand set int priority builtins. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
471 static rtx
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
472 nds32_expand_priority_builtin (enum insn_code icode, tree exp, rtx target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
473 const char *name)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
474 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
475 rtx pat;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
476 rtx op0 = nds32_read_argument (exp, 0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
477 rtx op1 = nds32_read_argument (exp, 1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
478
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
479 /* set_int_priority intrinsic function that two arguments are immediate,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
480 so check whether auguments are immedite. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
481
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
482 if (!nds32_check_constant_argument (icode, 0, op0, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
483 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
484
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
485 if (!nds32_check_constant_argument (icode, 1, op1, name))
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
486 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
487
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
488 op0 = nds32_legitimize_argument (icode, 0, op0);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
489 op1 = nds32_legitimize_argument (icode, 1, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
490
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
491 /* Emit and return the new instruction. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
492 pat = GEN_FCN (icode) (op0, op1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
493
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
494 if (! pat)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
495 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
496
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
497 emit_insn (pat);
111
kono
parents:
diff changeset
498 return target;
kono
parents:
diff changeset
499 }
kono
parents:
diff changeset
500
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
501 struct builtin_description
111
kono
parents:
diff changeset
502 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
503 const enum insn_code icode;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
504 const char *name;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
505 enum nds32_builtins code;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
506 bool return_p;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
507 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
508
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
509 #define NDS32_BUILTIN(code, string, builtin) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
510 { CODE_FOR_##code, "__nds32__" string, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
511 NDS32_BUILTIN_##builtin, true },
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
512
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
513 #define NDS32_NO_TARGET_BUILTIN(code, string, builtin) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
514 { CODE_FOR_##code, "__nds32__" string, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
515 NDS32_BUILTIN_##builtin, false },
111
kono
parents:
diff changeset
516
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
517 /* Intrinsics that no argument, and that return value. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
518 static struct builtin_description bdesc_noarg[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
519 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
520 NDS32_BUILTIN(unspec_fmfcfg, "fmfcfg", FMFCFG)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
521 NDS32_BUILTIN(unspec_fmfcsr, "fmfcsr", FMFCSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
522 NDS32_BUILTIN(unspec_volatile_rdov, "rdov", RDOV)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
523 NDS32_BUILTIN(unspec_get_current_sp, "get_current_sp", GET_CURRENT_SP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
524 NDS32_BUILTIN(unspec_return_address, "return_address", RETURN_ADDRESS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
525 NDS32_BUILTIN(unspec_get_all_pending_int, "get_all_pending_int",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
526 GET_ALL_PENDING_INT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
527 NDS32_BUILTIN(unspec_unaligned_feature, "unaligned_feature",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
528 UNALIGNED_FEATURE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
529 NDS32_NO_TARGET_BUILTIN(unspec_enable_unaligned, "enable_unaligned",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
530 ENABLE_UNALIGNED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
531 NDS32_NO_TARGET_BUILTIN(unspec_disable_unaligned, "disable_unaligned",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
532 DISABLE_UNALIGNED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
533 };
111
kono
parents:
diff changeset
534
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
535 /* Intrinsics that take just one argument. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
536 static struct builtin_description bdesc_1arg[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
537 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
538 NDS32_BUILTIN(unspec_ssabssi2, "abs", ABS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
539 NDS32_BUILTIN(clzsi2, "clz", CLZ)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
540 NDS32_BUILTIN(unspec_clo, "clo", CLO)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
541 NDS32_BUILTIN(unspec_wsbh, "wsbh", WSBH)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
542 NDS32_BUILTIN(unspec_tlbop_pb, "tlbop_pb",TLBOP_PB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
543 NDS32_BUILTIN(unaligned_load_hw, "unaligned_load_hw", UALOAD_HW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
544 NDS32_BUILTIN(unaligned_loadsi, "unaligned_load_w", UALOAD_W)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
545 NDS32_BUILTIN(unaligned_loaddi, "unaligned_load_dw", UALOAD_DW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
546 NDS32_NO_TARGET_BUILTIN(unspec_volatile_isync, "isync", ISYNC)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
547 NDS32_NO_TARGET_BUILTIN(unspec_fmtcsr, "fmtcsr", FMTCSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
548 NDS32_NO_TARGET_BUILTIN(unspec_jr_itoff, "jr_itoff", JR_ITOFF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
549 NDS32_NO_TARGET_BUILTIN(unspec_jr_toff, "jr_toff", JR_TOFF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
550 NDS32_NO_TARGET_BUILTIN(unspec_jral_ton, "jral_ton", JRAL_TON)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
551 NDS32_NO_TARGET_BUILTIN(unspec_ret_toff, "ret_toff", RET_TOFF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
552 NDS32_NO_TARGET_BUILTIN(unspec_jral_iton, "jral_iton",JRAL_ITON)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
553 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_trd, "tlbop_trd", TLBOP_TRD)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
554 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_twr, "tlbop_twr", TLBOP_TWR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
555 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_rwr, "tlbop_rwr", TLBOP_RWR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
556 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_rwlk, "tlbop_rwlk", TLBOP_RWLK)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
557 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_unlk, "tlbop_unlk", TLBOP_UNLK)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
558 NDS32_NO_TARGET_BUILTIN(unspec_tlbop_inv, "tlbop_inv", TLBOP_INV)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
559 NDS32_NO_TARGET_BUILTIN(unspec_ret_itoff, "ret_itoff", RET_ITOFF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
560 NDS32_NO_TARGET_BUILTIN(unspec_set_current_sp,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
561 "set_current_sp", SET_CURRENT_SP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
562 NDS32_BUILTIN(kabsv2hi2, "kabs16", KABS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
563 NDS32_BUILTIN(kabsv2hi2, "v_kabs16", V_KABS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
564 NDS32_BUILTIN(kabsv4qi2, "kabs8", KABS8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
565 NDS32_BUILTIN(kabsv4qi2, "v_kabs8", V_KABS8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
566 NDS32_BUILTIN(sunpkd810, "sunpkd810", SUNPKD810)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
567 NDS32_BUILTIN(sunpkd810, "v_sunpkd810", V_SUNPKD810)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
568 NDS32_BUILTIN(sunpkd820, "sunpkd820", SUNPKD820)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
569 NDS32_BUILTIN(sunpkd820, "v_sunpkd820", V_SUNPKD820)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
570 NDS32_BUILTIN(sunpkd830, "sunpkd830", SUNPKD830)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
571 NDS32_BUILTIN(sunpkd830, "v_sunpkd830", V_SUNPKD830)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
572 NDS32_BUILTIN(sunpkd831, "sunpkd831", SUNPKD831)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
573 NDS32_BUILTIN(sunpkd831, "v_sunpkd831", V_SUNPKD831)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
574 NDS32_BUILTIN(zunpkd810, "zunpkd810", ZUNPKD810)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
575 NDS32_BUILTIN(zunpkd810, "v_zunpkd810", V_ZUNPKD810)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
576 NDS32_BUILTIN(zunpkd820, "zunpkd820", ZUNPKD820)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
577 NDS32_BUILTIN(zunpkd820, "v_zunpkd820", V_ZUNPKD820)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
578 NDS32_BUILTIN(zunpkd830, "zunpkd830", ZUNPKD830)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
579 NDS32_BUILTIN(zunpkd830, "v_zunpkd830", V_ZUNPKD830)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
580 NDS32_BUILTIN(zunpkd831, "zunpkd831", ZUNPKD831)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
581 NDS32_BUILTIN(zunpkd831, "v_zunpkd831", V_ZUNPKD831)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
582 NDS32_BUILTIN(unspec_kabs, "kabs", KABS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
583 NDS32_BUILTIN(unaligned_loadv2hi, "get_unaligned_u16x2", UALOAD_U16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
584 NDS32_BUILTIN(unaligned_loadv2hi, "get_unaligned_s16x2", UALOAD_S16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
585 NDS32_BUILTIN(unaligned_loadv4qi, "get_unaligned_u8x4", UALOAD_U8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
586 NDS32_BUILTIN(unaligned_loadv4qi, "get_unaligned_s8x4", UALOAD_S8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
587 };
111
kono
parents:
diff changeset
588
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
589 /* Intrinsics that take just one argument. and the argument is immediate. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
590 static struct builtin_description bdesc_1argimm[] =
111
kono
parents:
diff changeset
591 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
592 NDS32_BUILTIN(unspec_volatile_mfsr, "mfsr", MFSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
593 NDS32_BUILTIN(unspec_volatile_mfusr, "mfsr", MFUSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
594 NDS32_BUILTIN(unspec_get_pending_int, "get_pending_int", GET_PENDING_INT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
595 NDS32_BUILTIN(unspec_get_int_priority, "get_int_priority", GET_INT_PRIORITY)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
596 NDS32_NO_TARGET_BUILTIN(unspec_trap, "trap", TRAP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
597 NDS32_NO_TARGET_BUILTIN(unspec_break, "break", BREAK)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
598 NDS32_NO_TARGET_BUILTIN(unspec_syscall, "syscall", SYSCALL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
599 NDS32_NO_TARGET_BUILTIN(unspec_enable_int, "enable_int", ENABLE_INT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
600 NDS32_NO_TARGET_BUILTIN(unspec_disable_int, "disable_int", DISABLE_INT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
601 NDS32_NO_TARGET_BUILTIN(unspec_clr_pending_hwint, "clr_pending_hwint",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
602 CLR_PENDING_HWINT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
603 NDS32_NO_TARGET_BUILTIN(unspec_set_trig_level, "set_trig_level",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
604 SET_TRIG_LEVEL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
605 NDS32_NO_TARGET_BUILTIN(unspec_set_trig_edge, "set_trig_edge",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
606 SET_TRIG_EDGE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
607 NDS32_BUILTIN(unspec_get_trig_type, "get_trig_type", GET_TRIG_TYPE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
608 };
111
kono
parents:
diff changeset
609
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
610 /* Intrinsics that take two arguments. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
611 static struct builtin_description bdesc_2arg[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
612 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
613 NDS32_BUILTIN(unspec_fcpynss, "fcpynss", FCPYNSS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
614 NDS32_BUILTIN(unspec_fcpyss, "fcpyss", FCPYSS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
615 NDS32_BUILTIN(unspec_fcpynsd, "fcpynsd", FCPYNSD)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
616 NDS32_BUILTIN(unspec_fcpysd, "fcpysd", FCPYSD)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
617 NDS32_BUILTIN(unspec_ave, "ave", AVE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
618 NDS32_BUILTIN(unspec_pbsad, "pbsad", PBSAD)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
619 NDS32_BUILTIN(unspec_ffb, "ffb", FFB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
620 NDS32_BUILTIN(unspec_ffmism, "ffmsim", FFMISM)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
621 NDS32_BUILTIN(unspec_flmism, "flmism", FLMISM)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
622 NDS32_BUILTIN(unspec_kaddw, "kaddw", KADDW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
623 NDS32_BUILTIN(unspec_kaddh, "kaddh", KADDH)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
624 NDS32_BUILTIN(unspec_ksubw, "ksubw", KSUBW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
625 NDS32_BUILTIN(unspec_ksubh, "ksubh", KSUBH)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
626 NDS32_BUILTIN(unspec_kdmbb, "kdmbb", KDMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
627 NDS32_BUILTIN(unspec_kdmbb, "v_kdmbb", V_KDMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
628 NDS32_BUILTIN(unspec_kdmbt, "kdmbt", KDMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
629 NDS32_BUILTIN(unspec_kdmbt, "v_kdmbt", V_KDMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
630 NDS32_BUILTIN(unspec_kdmtb, "kdmtb", KDMTB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
631 NDS32_BUILTIN(unspec_kdmtb, "v_kdmtb", V_KDMTB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
632 NDS32_BUILTIN(unspec_kdmtt, "kdmtt", KDMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
633 NDS32_BUILTIN(unspec_kdmtt, "v_kdmtt", V_KDMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
634 NDS32_BUILTIN(unspec_khmbb, "khmbb", KHMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
635 NDS32_BUILTIN(unspec_khmbb, "v_khmbb", V_KHMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
636 NDS32_BUILTIN(unspec_khmbt, "khmbt", KHMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
637 NDS32_BUILTIN(unspec_khmbt, "v_khmbt", V_KHMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
638 NDS32_BUILTIN(unspec_khmtb, "khmtb", KHMTB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
639 NDS32_BUILTIN(unspec_khmtb, "v_khmtb", V_KHMTB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
640 NDS32_BUILTIN(unspec_khmtt, "khmtt", KHMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
641 NDS32_BUILTIN(unspec_khmtt, "v_khmtt", V_KHMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
642 NDS32_BUILTIN(unspec_kslraw, "kslraw", KSLRAW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
643 NDS32_BUILTIN(unspec_kslrawu, "kslraw_u", KSLRAW_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
644 NDS32_BUILTIN(rotrsi3, "rotr", ROTR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
645 NDS32_BUILTIN(unspec_sva, "sva", SVA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
646 NDS32_BUILTIN(unspec_svs, "svs", SVS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
647 NDS32_NO_TARGET_BUILTIN(mtsr_isb, "mtsr_isb", MTSR_ISB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
648 NDS32_NO_TARGET_BUILTIN(mtsr_dsb, "mtsr_dsb", MTSR_DSB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
649 NDS32_NO_TARGET_BUILTIN(unspec_volatile_mtsr, "mtsr", MTSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
650 NDS32_NO_TARGET_BUILTIN(unspec_volatile_mtusr, "mtusr", MTUSR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
651 NDS32_NO_TARGET_BUILTIN(unaligned_store_hw, "unaligned_store_hw", UASTORE_HW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
652 NDS32_NO_TARGET_BUILTIN(unaligned_storesi, "unaligned_store_hw", UASTORE_W)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
653 NDS32_NO_TARGET_BUILTIN(unaligned_storedi, "unaligned_store_hw", UASTORE_DW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
654 NDS32_BUILTIN(addv2hi3, "add16", ADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
655 NDS32_BUILTIN(addv2hi3, "v_uadd16", V_UADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
656 NDS32_BUILTIN(addv2hi3, "v_sadd16", V_SADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
657 NDS32_BUILTIN(raddv2hi3, "radd16", RADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
658 NDS32_BUILTIN(raddv2hi3, "v_radd16", V_RADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
659 NDS32_BUILTIN(uraddv2hi3, "uradd16", URADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
660 NDS32_BUILTIN(uraddv2hi3, "v_uradd16", V_URADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
661 NDS32_BUILTIN(kaddv2hi3, "kadd16", KADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
662 NDS32_BUILTIN(kaddv2hi3, "v_kadd16", V_KADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
663 NDS32_BUILTIN(ukaddv2hi3, "ukadd16", UKADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
664 NDS32_BUILTIN(ukaddv2hi3, "v_ukadd16", V_UKADD16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
665 NDS32_BUILTIN(subv2hi3, "sub16", SUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
666 NDS32_BUILTIN(subv2hi3, "v_usub16", V_USUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
667 NDS32_BUILTIN(subv2hi3, "v_ssub16", V_SSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
668 NDS32_BUILTIN(rsubv2hi3, "rsub16", RSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
669 NDS32_BUILTIN(rsubv2hi3, "v_rsub16", V_RSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
670 NDS32_BUILTIN(ursubv2hi3, "ursub16", URSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
671 NDS32_BUILTIN(ursubv2hi3, "v_ursub16", V_URSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
672 NDS32_BUILTIN(ksubv2hi3, "ksub16", KSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
673 NDS32_BUILTIN(ksubv2hi3, "v_ksub16", V_KSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
674 NDS32_BUILTIN(uksubv2hi3, "uksub16", UKSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
675 NDS32_BUILTIN(uksubv2hi3, "v_uksub16", V_UKSUB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
676 NDS32_BUILTIN(cras16_1, "cras16", CRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
677 NDS32_BUILTIN(cras16_1, "v_ucras16", V_UCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
678 NDS32_BUILTIN(cras16_1, "v_scras16", V_SCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
679 NDS32_BUILTIN(rcras16_1, "rcras16", RCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
680 NDS32_BUILTIN(rcras16_1, "v_rcras16", V_RCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
681 NDS32_BUILTIN(urcras16_1, "urcras16", URCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
682 NDS32_BUILTIN(urcras16_1, "v_urcras16", V_URCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
683 NDS32_BUILTIN(kcras16_1, "kcras16", KCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
684 NDS32_BUILTIN(kcras16_1, "v_kcras16", V_KCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
685 NDS32_BUILTIN(ukcras16_1, "ukcras16", UKCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
686 NDS32_BUILTIN(ukcras16_1, "v_ukcras16", V_UKCRAS16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
687 NDS32_BUILTIN(crsa16_1, "crsa16", CRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
688 NDS32_BUILTIN(crsa16_1, "v_ucrsa16", V_UCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
689 NDS32_BUILTIN(crsa16_1, "v_scrsa16", V_SCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
690 NDS32_BUILTIN(rcrsa16_1, "rcrsa16", RCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
691 NDS32_BUILTIN(rcrsa16_1, "v_rcrsa16", V_RCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
692 NDS32_BUILTIN(urcrsa16_1, "urcrsa16", URCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
693 NDS32_BUILTIN(urcrsa16_1, "v_urcrsa16", V_URCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
694 NDS32_BUILTIN(kcrsa16_1, "kcrsa16", KCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
695 NDS32_BUILTIN(kcrsa16_1, "v_kcrsa16", V_KCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
696 NDS32_BUILTIN(ukcrsa16_1, "ukcrsa16", UKCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
697 NDS32_BUILTIN(ukcrsa16_1, "v_ukcrsa16", V_UKCRSA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
698 NDS32_BUILTIN(addv4qi3, "add8", ADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
699 NDS32_BUILTIN(addv4qi3, "v_uadd8", V_UADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
700 NDS32_BUILTIN(addv4qi3, "v_sadd8", V_SADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
701 NDS32_BUILTIN(raddv4qi3, "radd8", RADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
702 NDS32_BUILTIN(raddv4qi3, "v_radd8", V_RADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
703 NDS32_BUILTIN(uraddv4qi3, "uradd8", URADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
704 NDS32_BUILTIN(uraddv4qi3, "v_uradd8", V_URADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
705 NDS32_BUILTIN(kaddv4qi3, "kadd8", KADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
706 NDS32_BUILTIN(kaddv4qi3, "v_kadd8", V_KADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
707 NDS32_BUILTIN(ukaddv4qi3, "ukadd8", UKADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
708 NDS32_BUILTIN(ukaddv4qi3, "v_ukadd8", V_UKADD8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
709 NDS32_BUILTIN(subv4qi3, "sub8", SUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
710 NDS32_BUILTIN(subv4qi3, "v_usub8", V_USUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
711 NDS32_BUILTIN(subv4qi3, "v_ssub8", V_SSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
712 NDS32_BUILTIN(rsubv4qi3, "rsub8", RSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
713 NDS32_BUILTIN(rsubv4qi3, "v_rsub8", V_RSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
714 NDS32_BUILTIN(ursubv4qi3, "ursub8", URSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
715 NDS32_BUILTIN(ursubv4qi3, "v_ursub8", V_URSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
716 NDS32_BUILTIN(ksubv4qi3, "ksub8", KSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
717 NDS32_BUILTIN(ksubv4qi3, "v_ksub8", V_KSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
718 NDS32_BUILTIN(uksubv4qi3, "uksub8", UKSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
719 NDS32_BUILTIN(uksubv4qi3, "v_uksub8", V_UKSUB8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
720 NDS32_BUILTIN(ashrv2hi3, "sra16", SRA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
721 NDS32_BUILTIN(ashrv2hi3, "v_sra16", V_SRA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
722 NDS32_BUILTIN(sra16_round, "sra16_u", SRA16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
723 NDS32_BUILTIN(sra16_round, "v_sra16_u", V_SRA16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
724 NDS32_BUILTIN(lshrv2hi3, "srl16", SRL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
725 NDS32_BUILTIN(lshrv2hi3, "v_srl16", V_SRL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
726 NDS32_BUILTIN(srl16_round, "srl16_u", SRL16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
727 NDS32_BUILTIN(srl16_round, "v_srl16_u", V_SRL16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
728 NDS32_BUILTIN(ashlv2hi3, "sll16", SLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
729 NDS32_BUILTIN(ashlv2hi3, "v_sll16", V_SLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
730 NDS32_BUILTIN(kslli16, "ksll16", KSLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
731 NDS32_BUILTIN(kslli16, "v_ksll16", V_KSLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
732 NDS32_BUILTIN(kslra16, "kslra16", KSLRA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
733 NDS32_BUILTIN(kslra16, "v_kslra16", V_KSLRA16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
734 NDS32_BUILTIN(kslra16_round, "kslra16_u", KSLRA16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
735 NDS32_BUILTIN(kslra16_round, "v_kslra16_u", V_KSLRA16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
736 NDS32_BUILTIN(cmpeq16, "cmpeq16", CMPEQ16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
737 NDS32_BUILTIN(cmpeq16, "v_scmpeq16", V_SCMPEQ16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
738 NDS32_BUILTIN(cmpeq16, "v_ucmpeq16", V_UCMPEQ16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
739 NDS32_BUILTIN(scmplt16, "scmplt16", SCMPLT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
740 NDS32_BUILTIN(scmplt16, "v_scmplt16", V_SCMPLT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
741 NDS32_BUILTIN(scmple16, "scmple16", SCMPLE16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
742 NDS32_BUILTIN(scmple16, "v_scmple16", V_SCMPLE16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
743 NDS32_BUILTIN(ucmplt16, "ucmplt16", UCMPLT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
744 NDS32_BUILTIN(ucmplt16, "v_ucmplt16", V_UCMPLT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
745 NDS32_BUILTIN(ucmplt16, "ucmple16", UCMPLE16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
746 NDS32_BUILTIN(ucmplt16, "v_ucmple16", V_UCMPLE16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
747 NDS32_BUILTIN(cmpeq8, "cmpeq8", CMPEQ8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
748 NDS32_BUILTIN(cmpeq8, "v_scmpeq8", V_SCMPEQ8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
749 NDS32_BUILTIN(cmpeq8, "v_ucmpeq8", V_UCMPEQ8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
750 NDS32_BUILTIN(scmplt8, "scmplt8", SCMPLT8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
751 NDS32_BUILTIN(scmplt8, "v_scmplt8", V_SCMPLT8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
752 NDS32_BUILTIN(scmple8, "scmple8", SCMPLE8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
753 NDS32_BUILTIN(scmple8, "v_scmple8", V_SCMPLE8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
754 NDS32_BUILTIN(ucmplt8, "ucmplt8", UCMPLT8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
755 NDS32_BUILTIN(ucmplt8, "v_ucmplt8", V_UCMPLT8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
756 NDS32_BUILTIN(ucmplt8, "ucmple8", UCMPLE8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
757 NDS32_BUILTIN(ucmplt8, "v_ucmple8", V_UCMPLE8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
758 NDS32_BUILTIN(sminv2hi3, "smin16", SMIN16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
759 NDS32_BUILTIN(sminv2hi3, "v_smin16", V_SMIN16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
760 NDS32_BUILTIN(uminv2hi3, "umin16", UMIN16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
761 NDS32_BUILTIN(uminv2hi3, "v_umin16", V_UMIN16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
762 NDS32_BUILTIN(smaxv2hi3, "smax16", SMAX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
763 NDS32_BUILTIN(smaxv2hi3, "v_smax16", V_SMAX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
764 NDS32_BUILTIN(umaxv2hi3, "umax16", UMAX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
765 NDS32_BUILTIN(umaxv2hi3, "v_umax16", V_UMAX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
766 NDS32_BUILTIN(khm16, "khm16", KHM16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
767 NDS32_BUILTIN(khm16, "v_khm16", V_KHM16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
768 NDS32_BUILTIN(khmx16, "khmx16", KHMX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
769 NDS32_BUILTIN(khmx16, "v_khmx16", V_KHMX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
770 NDS32_BUILTIN(sminv4qi3, "smin8", SMIN8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
771 NDS32_BUILTIN(sminv4qi3, "v_smin8", V_SMIN8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
772 NDS32_BUILTIN(uminv4qi3, "umin8", UMIN8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
773 NDS32_BUILTIN(uminv4qi3, "v_umin8", V_UMIN8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
774 NDS32_BUILTIN(smaxv4qi3, "smax8", SMAX8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
775 NDS32_BUILTIN(smaxv4qi3, "v_smax8", V_SMAX8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
776 NDS32_BUILTIN(umaxv4qi3, "umax8", UMAX8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
777 NDS32_BUILTIN(umaxv4qi3, "v_umax8", V_UMAX8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
778 NDS32_BUILTIN(raddsi3, "raddw", RADDW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
779 NDS32_BUILTIN(uraddsi3, "uraddw", URADDW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
780 NDS32_BUILTIN(rsubsi3, "rsubw", RSUBW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
781 NDS32_BUILTIN(ursubsi3, "ursubw", URSUBW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
782 NDS32_BUILTIN(sraiu, "sra_u", SRA_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
783 NDS32_BUILTIN(kssl, "ksll", KSLL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
784 NDS32_BUILTIN(pkbb, "pkbb16", PKBB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
785 NDS32_BUILTIN(pkbb, "v_pkbb16", V_PKBB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
786 NDS32_BUILTIN(pkbt, "pkbt16", PKBT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
787 NDS32_BUILTIN(pkbt, "v_pkbt16", V_PKBT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
788 NDS32_BUILTIN(pktb, "pktb16", PKTB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
789 NDS32_BUILTIN(pktb, "v_pktb16", V_PKTB16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
790 NDS32_BUILTIN(pktt, "pktt16", PKTT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
791 NDS32_BUILTIN(pktt, "v_pktt16", V_PKTT16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
792 NDS32_BUILTIN(smulsi3_highpart, "smmul", SMMUL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
793 NDS32_BUILTIN(smmul_round, "smmul_u", SMMUL_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
794 NDS32_BUILTIN(smmwb, "smmwb", SMMWB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
795 NDS32_BUILTIN(smmwb, "v_smmwb", V_SMMWB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
796 NDS32_BUILTIN(smmwb_round, "smmwb_u", SMMWB_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
797 NDS32_BUILTIN(smmwb_round, "v_smmwb_u", V_SMMWB_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
798 NDS32_BUILTIN(smmwt, "smmwt", SMMWT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
799 NDS32_BUILTIN(smmwt, "v_smmwt", V_SMMWT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
800 NDS32_BUILTIN(smmwt_round, "smmwt_u", SMMWT_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
801 NDS32_BUILTIN(smmwt_round, "v_smmwt_u", V_SMMWT_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
802 NDS32_BUILTIN(smbb, "smbb", SMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
803 NDS32_BUILTIN(smbb, "v_smbb", V_SMBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
804 NDS32_BUILTIN(smbt, "smbt", SMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
805 NDS32_BUILTIN(smbt, "v_smbt", V_SMBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
806 NDS32_BUILTIN(smtt, "smtt", SMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
807 NDS32_BUILTIN(smtt, "v_smtt", V_SMTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
808 NDS32_BUILTIN(kmda, "kmda", KMDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
809 NDS32_BUILTIN(kmda, "v_kmda", V_KMDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
810 NDS32_BUILTIN(kmxda, "kmxda", KMXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
811 NDS32_BUILTIN(kmxda, "v_kmxda", V_KMXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
812 NDS32_BUILTIN(smds, "smds", SMDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
813 NDS32_BUILTIN(smds, "v_smds", V_SMDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
814 NDS32_BUILTIN(smdrs, "smdrs", SMDRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
815 NDS32_BUILTIN(smdrs, "v_smdrs", V_SMDRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
816 NDS32_BUILTIN(smxdsv, "smxds", SMXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
817 NDS32_BUILTIN(smxdsv, "v_smxds", V_SMXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
818 NDS32_BUILTIN(smal1, "smal", SMAL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
819 NDS32_BUILTIN(smal1, "v_smal", V_SMAL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
820 NDS32_BUILTIN(bitrev, "bitrev", BITREV)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
821 NDS32_BUILTIN(wext, "wext", WEXT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
822 NDS32_BUILTIN(adddi3, "sadd64", SADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
823 NDS32_BUILTIN(adddi3, "uadd64", UADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
824 NDS32_BUILTIN(radddi3, "radd64", RADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
825 NDS32_BUILTIN(uradddi3, "uradd64", URADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
826 NDS32_BUILTIN(kadddi3, "kadd64", KADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
827 NDS32_BUILTIN(ukadddi3, "ukadd64", UKADD64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
828 NDS32_BUILTIN(subdi3, "ssub64", SSUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
829 NDS32_BUILTIN(subdi3, "usub64", USUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
830 NDS32_BUILTIN(rsubdi3, "rsub64", RSUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
831 NDS32_BUILTIN(ursubdi3, "ursub64", URSUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
832 NDS32_BUILTIN(ksubdi3, "ksub64", KSUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
833 NDS32_BUILTIN(uksubdi3, "uksub64", UKSUB64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
834 NDS32_BUILTIN(smul16, "smul16", SMUL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
835 NDS32_BUILTIN(smul16, "v_smul16", V_SMUL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
836 NDS32_BUILTIN(smulx16, "smulx16", SMULX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
837 NDS32_BUILTIN(smulx16, "v_smulx16", V_SMULX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
838 NDS32_BUILTIN(umul16, "umul16", UMUL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
839 NDS32_BUILTIN(umul16, "v_umul16", V_UMUL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
840 NDS32_BUILTIN(umulx16, "umulx16", UMULX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
841 NDS32_BUILTIN(umulx16, "v_umulx16", V_UMULX16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
842 NDS32_BUILTIN(kwmmul, "kwmmul", KWMMUL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
843 NDS32_BUILTIN(kwmmul_round, "kwmmul_u", KWMMUL_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
844 NDS32_NO_TARGET_BUILTIN(unaligned_storev2hi,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
845 "put_unaligned_u16x2", UASTORE_U16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
846 NDS32_NO_TARGET_BUILTIN(unaligned_storev2hi,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
847 "put_unaligned_s16x2", UASTORE_S16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
848 NDS32_NO_TARGET_BUILTIN(unaligned_storev4qi, "put_unaligned_u8x4", UASTORE_U8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
849 NDS32_NO_TARGET_BUILTIN(unaligned_storev4qi, "put_unaligned_s8x4", UASTORE_S8)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
850 };
111
kono
parents:
diff changeset
851
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
852 /* Two-argument intrinsics with an immediate second argument. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
853 static struct builtin_description bdesc_2argimm[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
854 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
855 NDS32_BUILTIN(unspec_bclr, "bclr", BCLR)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
856 NDS32_BUILTIN(unspec_bset, "bset", BSET)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
857 NDS32_BUILTIN(unspec_btgl, "btgl", BTGL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
858 NDS32_BUILTIN(unspec_btst, "btst", BTST)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
859 NDS32_BUILTIN(unspec_clip, "clip", CLIP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
860 NDS32_BUILTIN(unspec_clips, "clips", CLIPS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
861 NDS32_NO_TARGET_BUILTIN(unspec_teqz, "teqz", TEQZ)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
862 NDS32_NO_TARGET_BUILTIN(unspec_tnez, "tnez", TNEZ)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
863 NDS32_BUILTIN(ashrv2hi3, "srl16", SRL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
864 NDS32_BUILTIN(ashrv2hi3, "v_srl16", V_SRL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
865 NDS32_BUILTIN(srl16_round, "srl16_u", SRL16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
866 NDS32_BUILTIN(srl16_round, "v_srl16_u", V_SRL16_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
867 NDS32_BUILTIN(kslli16, "ksll16", KSLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
868 NDS32_BUILTIN(kslli16, "v_ksll16", V_KSLL16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
869 NDS32_BUILTIN(sclip16, "sclip16", SCLIP16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
870 NDS32_BUILTIN(sclip16, "v_sclip16", V_SCLIP16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
871 NDS32_BUILTIN(uclip16, "uclip16", UCLIP16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
872 NDS32_BUILTIN(uclip16, "v_uclip16", V_UCLIP16)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
873 NDS32_BUILTIN(sraiu, "sra_u", SRA_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
874 NDS32_BUILTIN(kssl, "ksll", KSLL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
875 NDS32_BUILTIN(bitrev, "bitrev", BITREV)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
876 NDS32_BUILTIN(wext, "wext", WEXT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
877 NDS32_BUILTIN(uclip32, "uclip32", UCLIP32)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
878 NDS32_BUILTIN(sclip32, "sclip32", SCLIP32)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
879 };
111
kono
parents:
diff changeset
880
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
881 /* Intrinsics that take three arguments. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
882 static struct builtin_description bdesc_3arg[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
883 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
884 NDS32_BUILTIN(unspec_pbsada, "pbsada", PBSADA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
885 NDS32_NO_TARGET_BUILTIN(bse, "bse", BSE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
886 NDS32_NO_TARGET_BUILTIN(bsp, "bsp", BSP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
887 NDS32_BUILTIN(kmabb, "kmabb", KMABB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
888 NDS32_BUILTIN(kmabb, "v_kmabb", V_KMABB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
889 NDS32_BUILTIN(kmabt, "kmabt", KMABT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
890 NDS32_BUILTIN(kmabt, "v_kmabt", V_KMABT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
891 NDS32_BUILTIN(kmatt, "kmatt", KMATT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
892 NDS32_BUILTIN(kmatt, "v_kmatt", V_KMATT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
893 NDS32_BUILTIN(kmada, "kmada", KMADA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
894 NDS32_BUILTIN(kmada, "v_kmada", V_KMADA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
895 NDS32_BUILTIN(kmaxda, "kmaxda", KMAXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
896 NDS32_BUILTIN(kmaxda, "v_kmaxda", V_KMAXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
897 NDS32_BUILTIN(kmads, "kmads", KMADS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
898 NDS32_BUILTIN(kmads, "v_kmads", V_KMADS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
899 NDS32_BUILTIN(kmadrs, "kmadrs", KMADRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
900 NDS32_BUILTIN(kmadrs, "v_kmadrs", V_KMADRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
901 NDS32_BUILTIN(kmaxds, "kmaxds", KMAXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
902 NDS32_BUILTIN(kmaxds, "v_kmaxds", V_KMAXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
903 NDS32_BUILTIN(kmsda, "kmsda", KMSDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
904 NDS32_BUILTIN(kmsda, "v_kmsda", V_KMSDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
905 NDS32_BUILTIN(kmsxda, "kmsxda", KMSXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
906 NDS32_BUILTIN(kmsxda, "v_kmsxda", V_KMSXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
907 NDS32_BUILTIN(bpick1, "bpick", BPICK)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
908 NDS32_BUILTIN(smar64_1, "smar64", SMAR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
909 NDS32_BUILTIN(smsr64, "smsr64", SMSR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
910 NDS32_BUILTIN(umar64_1, "umar64", UMAR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
911 NDS32_BUILTIN(umsr64, "umsr64", UMSR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
912 NDS32_BUILTIN(kmar64_1, "kmar64", KMAR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
913 NDS32_BUILTIN(kmsr64, "kmsr64", KMSR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
914 NDS32_BUILTIN(ukmar64_1, "ukmar64", UKMAR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
915 NDS32_BUILTIN(ukmsr64, "ukmsr64", UKMSR64)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
916 NDS32_BUILTIN(smalbb, "smalbb", SMALBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
917 NDS32_BUILTIN(smalbb, "v_smalbb", V_SMALBB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
918 NDS32_BUILTIN(smalbt, "smalbt", SMALBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
919 NDS32_BUILTIN(smalbt, "v_smalbt", V_SMALBT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
920 NDS32_BUILTIN(smaltt, "smaltt", SMALTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
921 NDS32_BUILTIN(smaltt, "v_smaltt", V_SMALTT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
922 NDS32_BUILTIN(smalda1, "smalda", SMALDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
923 NDS32_BUILTIN(smalda1, "v_smalda", V_SMALDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
924 NDS32_BUILTIN(smalxda1, "smalxda", SMALXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
925 NDS32_BUILTIN(smalxda1, "v_smalxda", V_SMALXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
926 NDS32_BUILTIN(smalds1, "smalds", SMALDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
927 NDS32_BUILTIN(smalds1, "v_smalds", V_SMALDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
928 NDS32_BUILTIN(smaldrs3, "smaldrs", SMALDRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
929 NDS32_BUILTIN(smaldrs3, "v_smaldrs", V_SMALDRS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
930 NDS32_BUILTIN(smalxds1, "smalxds", SMALXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
931 NDS32_BUILTIN(smalxds1, "v_smalxds", V_SMALXDS)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
932 NDS32_BUILTIN(smslda1, "smslda", SMSLDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
933 NDS32_BUILTIN(smslda1, "v_smslda", V_SMSLDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
934 NDS32_BUILTIN(smslxda1, "smslxda", SMSLXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
935 NDS32_BUILTIN(smslxda1, "v_smslxda", V_SMSLXDA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
936 NDS32_BUILTIN(kmmawb, "kmmawb", KMMAWB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
937 NDS32_BUILTIN(kmmawb, "v_kmmawb", V_KMMAWB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
938 NDS32_BUILTIN(kmmawb_round, "kmmawb_u", KMMAWB_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
939 NDS32_BUILTIN(kmmawb_round, "v_kmmawb_u", V_KMMAWB_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
940 NDS32_BUILTIN(kmmawt, "kmmawt", KMMAWT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
941 NDS32_BUILTIN(kmmawt, "v_kmmawt", V_KMMAWT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
942 NDS32_BUILTIN(kmmawt_round, "kmmawt_u", KMMAWT_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
943 NDS32_BUILTIN(kmmawt_round, "v_kmmawt_u", V_KMMAWT_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
944 NDS32_BUILTIN(kmmac, "kmmac", KMMAC)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
945 NDS32_BUILTIN(kmmac_round, "kmmac_u", KMMAC_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
946 NDS32_BUILTIN(kmmsb, "kmmsb", KMMSB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
947 NDS32_BUILTIN(kmmsb_round, "kmmsb_u", KMMSB_U)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
948 };
111
kono
parents:
diff changeset
949
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
950 /* Three-argument intrinsics with an immediate third argument. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
951 static struct builtin_description bdesc_3argimm[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
952 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
953 NDS32_NO_TARGET_BUILTIN(prefetch_qw, "prefetch_qw", DPREF_QW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
954 NDS32_NO_TARGET_BUILTIN(prefetch_hw, "prefetch_hw", DPREF_HW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
955 NDS32_NO_TARGET_BUILTIN(prefetch_w, "prefetch_w", DPREF_W)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
956 NDS32_NO_TARGET_BUILTIN(prefetch_dw, "prefetch_dw", DPREF_DW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
957 NDS32_BUILTIN(insb, "insb", INSB)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
958 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
959
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
960 /* Intrinsics that load a value. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
961 static struct builtin_description bdesc_load[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
962 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
963 NDS32_BUILTIN(unspec_volatile_llw, "llw", LLW)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
964 NDS32_BUILTIN(unspec_lwup, "lwup", LWUP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
965 NDS32_BUILTIN(unspec_lbup, "lbup", LBUP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
966 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
967
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
968 /* Intrinsics that store a value. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
969 static struct builtin_description bdesc_store[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
970 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
971 NDS32_BUILTIN(unspec_swup, "swup", SWUP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
972 NDS32_BUILTIN(unspec_sbup, "sbup", SBUP)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
973 };
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
974
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
975 static struct builtin_description bdesc_cctl[] =
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
976 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
977 NDS32_BUILTIN(cctl_idx_read, "cctl_idx_read", CCTL_IDX_READ)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
978 NDS32_NO_TARGET_BUILTIN(cctl_idx_write, "cctl_idx_write", CCTL_IDX_WRITE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
979 NDS32_NO_TARGET_BUILTIN(cctl_va_lck, "cctl_va_lck", CCTL_VA_LCK)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
980 NDS32_NO_TARGET_BUILTIN(cctl_idx_wbinval,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
981 "cctl_idx_wbinval", CCTL_IDX_WBINVAL)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
982 NDS32_NO_TARGET_BUILTIN(cctl_va_wbinval_l1,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
983 "cctl_va_wbinval_l1", CCTL_VA_WBINVAL_L1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
984 NDS32_NO_TARGET_BUILTIN(cctl_va_wbinval_la,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
985 "cctl_va_wbinval_la", CCTL_VA_WBINVAL_LA)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
986 };
111
kono
parents:
diff changeset
987
kono
parents:
diff changeset
988 rtx
kono
parents:
diff changeset
989 nds32_expand_builtin_impl (tree exp,
kono
parents:
diff changeset
990 rtx target,
kono
parents:
diff changeset
991 rtx subtarget ATTRIBUTE_UNUSED,
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
992 enum machine_mode mode ATTRIBUTE_UNUSED,
111
kono
parents:
diff changeset
993 int ignore ATTRIBUTE_UNUSED)
kono
parents:
diff changeset
994 {
kono
parents:
diff changeset
995 tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
996 unsigned int fcode = DECL_MD_FUNCTION_CODE (fndecl);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
997 unsigned i;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
998 struct builtin_description *d;
111
kono
parents:
diff changeset
999
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1000 if (!NDS32_EXT_DSP_P ()
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1001 && fcode > NDS32_BUILTIN_DSP_BEGIN
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1002 && fcode < NDS32_BUILTIN_DSP_END)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1003 error ("don%'t support DSP extension instructions");
111
kono
parents:
diff changeset
1004
kono
parents:
diff changeset
1005 switch (fcode)
kono
parents:
diff changeset
1006 {
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1007 /* FPU Register Transfer. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1008 case NDS32_BUILTIN_FMFCFG:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1009 case NDS32_BUILTIN_FMFCSR:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1010 case NDS32_BUILTIN_FMTCSR:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1011 case NDS32_BUILTIN_FCPYNSS:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1012 case NDS32_BUILTIN_FCPYSS:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1013 /* Both v3s and v3f toolchains define TARGET_FPU_SINGLE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1014 if (!TARGET_FPU_SINGLE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1015 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1016 error ("this builtin function is only available "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1017 "on the v3s or v3f toolchain");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1018 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1019 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1020 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1021
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1022 /* FPU Register Transfer. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1023 case NDS32_BUILTIN_FCPYNSD:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1024 case NDS32_BUILTIN_FCPYSD:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1025 /* Only v3f toolchain defines TARGET_FPU_DOUBLE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1026 if (!TARGET_FPU_DOUBLE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1027 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1028 error ("this builtin function is only available "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1029 "on the v3f toolchain");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1030 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1031 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1032 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1033
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1034 /* Load and Store */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1035 case NDS32_BUILTIN_LLW:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1036 case NDS32_BUILTIN_LWUP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1037 case NDS32_BUILTIN_LBUP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1038 case NDS32_BUILTIN_SCW:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1039 case NDS32_BUILTIN_SWUP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1040 case NDS32_BUILTIN_SBUP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1041 if (TARGET_ISA_V3M)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1042 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1043 error ("this builtin function not support "
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1044 "on the v3m toolchain");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1045 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1046 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1047 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1048
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1049 /* Performance Extension */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1050 case NDS32_BUILTIN_ABS:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1051 case NDS32_BUILTIN_AVE:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1052 case NDS32_BUILTIN_BCLR:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1053 case NDS32_BUILTIN_BSET:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1054 case NDS32_BUILTIN_BTGL:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1055 case NDS32_BUILTIN_BTST:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1056 case NDS32_BUILTIN_CLIP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1057 case NDS32_BUILTIN_CLIPS:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1058 case NDS32_BUILTIN_CLZ:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1059 case NDS32_BUILTIN_CLO:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1060 if (!TARGET_EXT_PERF)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1061 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1062 error ("don%'t support performance extension instructions");
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1063 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1064 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1065 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1066
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1067 /* Performance Extension 2 */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1068 case NDS32_BUILTIN_PBSAD:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1069 case NDS32_BUILTIN_PBSADA:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1070 case NDS32_BUILTIN_BSE:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1071 case NDS32_BUILTIN_BSP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1072 if (!TARGET_EXT_PERF2)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1073 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1074 error ("don%'t support performance extension "
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1075 "version 2 instructions");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1076 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1077 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1078 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1079
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1080 /* String Extension */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1081 case NDS32_BUILTIN_FFB:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1082 case NDS32_BUILTIN_FFMISM:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1083 case NDS32_BUILTIN_FLMISM:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1084 if (!TARGET_EXT_STRING)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1085 {
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
1086 error ("don%'t support string extension instructions");
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1087 return NULL_RTX;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1088 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1089 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1090
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1091 default:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1092 break;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1093 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1094
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1095 /* Since there are no result and operands, we can simply emit this rtx. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1096 switch (fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1097 {
111
kono
parents:
diff changeset
1098 case NDS32_BUILTIN_ISB:
kono
parents:
diff changeset
1099 emit_insn (gen_unspec_volatile_isb ());
kono
parents:
diff changeset
1100 return target;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1101 case NDS32_BUILTIN_DSB:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1102 emit_insn (gen_unspec_dsb ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1103 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1104 case NDS32_BUILTIN_MSYNC_ALL:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1105 emit_insn (gen_unspec_msync_all ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1106 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1107 case NDS32_BUILTIN_MSYNC_STORE:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1108 emit_insn (gen_unspec_msync_store ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1109 return target;
111
kono
parents:
diff changeset
1110 case NDS32_BUILTIN_SETGIE_EN:
kono
parents:
diff changeset
1111 emit_insn (gen_unspec_volatile_setgie_en ());
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1112 emit_insn (gen_unspec_dsb ());
111
kono
parents:
diff changeset
1113 return target;
kono
parents:
diff changeset
1114 case NDS32_BUILTIN_SETGIE_DIS:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1115 emit_insn (gen_unspec_volatile_setgie_dis ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1116 emit_insn (gen_unspec_dsb ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1117 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1118 case NDS32_BUILTIN_GIE_DIS:
111
kono
parents:
diff changeset
1119 emit_insn (gen_unspec_volatile_setgie_dis ());
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1120 emit_insn (gen_unspec_dsb ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1121 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1122 case NDS32_BUILTIN_GIE_EN:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1123 emit_insn (gen_unspec_volatile_setgie_en ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1124 emit_insn (gen_unspec_dsb ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1125 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1126 case NDS32_BUILTIN_SET_PENDING_SWINT:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1127 emit_insn (gen_unspec_set_pending_swint ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1128 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1129 case NDS32_BUILTIN_CLR_PENDING_SWINT:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1130 emit_insn (gen_unspec_clr_pending_swint ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1131 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1132 case NDS32_BUILTIN_CCTL_L1D_INVALALL:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1133 emit_insn (gen_cctl_l1d_invalall());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1134 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1135 case NDS32_BUILTIN_CCTL_L1D_WBALL_ALVL:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1136 emit_insn (gen_cctl_l1d_wball_alvl());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1137 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1138 case NDS32_BUILTIN_CCTL_L1D_WBALL_ONE_LVL:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1139 emit_insn (gen_cctl_l1d_wball_one_lvl());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1140 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1141 case NDS32_BUILTIN_CLROV:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1142 emit_insn (gen_unspec_volatile_clrov ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1143 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1144 case NDS32_BUILTIN_STANDBY_NO_WAKE_GRANT:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1145 emit_insn (gen_unspec_standby_no_wake_grant ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1146 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1147 case NDS32_BUILTIN_STANDBY_WAKE_GRANT:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1148 emit_insn (gen_unspec_standby_wake_grant ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1149 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1150 case NDS32_BUILTIN_STANDBY_WAKE_DONE:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1151 emit_insn (gen_unspec_standby_wait_done ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1152 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1153 case NDS32_BUILTIN_SETEND_BIG:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1154 emit_insn (gen_unspec_setend_big ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1155 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1156 case NDS32_BUILTIN_SETEND_LITTLE:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1157 emit_insn (gen_unspec_setend_little ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1158 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1159 case NDS32_BUILTIN_NOP:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1160 emit_insn (gen_unspec_nop ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1161 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1162 case NDS32_BUILTIN_SCHE_BARRIER:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1163 emit_insn (gen_blockage ());
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1164 return target;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1165 case NDS32_BUILTIN_TLBOP_FLUA:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1166 emit_insn (gen_unspec_tlbop_flua ());
111
kono
parents:
diff changeset
1167 return target;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1168 case NDS32_BUILTIN_SCW:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1169 return nds32_expand_scw_builtin (CODE_FOR_unspec_volatile_scw,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1170 exp, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1171 case NDS32_BUILTIN_SET_INT_PRIORITY:
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1172 return nds32_expand_priority_builtin (CODE_FOR_unspec_set_int_priority,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1173 exp, target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1174 "__nds32__set_int_priority");
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1175 return target;
111
kono
parents:
diff changeset
1176 default:
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1177 break;
111
kono
parents:
diff changeset
1178 }
kono
parents:
diff changeset
1179
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1180 /* Expand groups of builtins. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1181 for (i = 0, d = bdesc_noarg; i < ARRAY_SIZE (bdesc_noarg); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1182 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1183 return nds32_expand_noarg_builtin (d->icode, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1184
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1185 for (i = 0, d = bdesc_1arg; i < ARRAY_SIZE (bdesc_1arg); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1186 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1187 return nds32_expand_unop_builtin (d->icode, exp, target, d->return_p);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1188
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1189 for (i = 0, d = bdesc_1argimm; i < ARRAY_SIZE (bdesc_1argimm); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1190 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1191 return nds32_expand_unopimm_builtin (d->icode, exp, target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1192 d->return_p, d->name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1193
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1194 for (i = 0, d = bdesc_2arg; i < ARRAY_SIZE (bdesc_2arg); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1195 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1196 return nds32_expand_binop_builtin (d->icode, exp, target, d->return_p);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1197
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1198 for (i = 0, d = bdesc_2argimm; i < ARRAY_SIZE (bdesc_2argimm); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1199 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1200 return nds32_expand_binopimm_builtin (d->icode, exp, target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1201 d->return_p, d->name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1202
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1203 for (i = 0, d = bdesc_3arg; i < ARRAY_SIZE (bdesc_3arg); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1204 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1205 return nds32_expand_triop_builtin (d->icode, exp, target, d->return_p);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1206
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1207 for (i = 0, d = bdesc_3argimm; i < ARRAY_SIZE (bdesc_3argimm); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1208 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1209 return nds32_expand_triopimm_builtin (d->icode, exp, target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1210 d->return_p, d->name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1211
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1212 for (i = 0, d = bdesc_load; i < ARRAY_SIZE (bdesc_load); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1213 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1214 return nds32_expand_builtin_load (d->icode, exp, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1215
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1216 for (i = 0, d = bdesc_store; i < ARRAY_SIZE (bdesc_store); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1217 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1218 return nds32_expand_builtin_store (d->icode, exp, target);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1219
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1220 for (i = 0, d = bdesc_cctl; i < ARRAY_SIZE (bdesc_cctl); i++, d++)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1221 if (d->code == fcode)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1222 return nds32_expand_cctl_builtin (d->icode, exp, target,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1223 d->return_p, d->name);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1224
111
kono
parents:
diff changeset
1225 return NULL_RTX;
kono
parents:
diff changeset
1226 }
kono
parents:
diff changeset
1227
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1228 static GTY(()) tree nds32_builtin_decls[NDS32_BUILTIN_COUNT];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1229
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1230 /* Return the NDS32 builtin for CODE. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1231 tree
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1232 nds32_builtin_decl_impl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1233 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1234 if (code >= NDS32_BUILTIN_COUNT)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1235 return error_mark_node;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1236
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1237 return nds32_builtin_decls[code];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1238 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1239
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1240 void
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1241 nds32_init_builtins_impl (void)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1242 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1243 #define ADD_NDS32_BUILTIN0(NAME, RET_TYPE, CODE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1244 nds32_builtin_decls[NDS32_BUILTIN_ ## CODE] = \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1245 add_builtin_function ("__builtin_nds32_" NAME, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1246 build_function_type_list (RET_TYPE##_type_node, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1247 NULL_TREE), \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1248 NDS32_BUILTIN_ ## CODE, BUILT_IN_MD, NULL, NULL_TREE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1249
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1250 #define ADD_NDS32_BUILTIN1(NAME, RET_TYPE, ARG_TYPE, CODE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1251 nds32_builtin_decls[NDS32_BUILTIN_ ## CODE] = \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1252 add_builtin_function ("__builtin_nds32_" NAME, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1253 build_function_type_list (RET_TYPE##_type_node, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1254 ARG_TYPE##_type_node, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1255 NULL_TREE), \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1256 NDS32_BUILTIN_ ## CODE, BUILT_IN_MD, NULL, NULL_TREE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1257
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1258 #define ADD_NDS32_BUILTIN2(NAME, RET_TYPE, ARG_TYPE1, ARG_TYPE2, CODE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1259 nds32_builtin_decls[NDS32_BUILTIN_ ## CODE] = \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1260 add_builtin_function ("__builtin_nds32_" NAME, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1261 build_function_type_list (RET_TYPE##_type_node, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1262 ARG_TYPE1##_type_node,\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1263 ARG_TYPE2##_type_node,\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1264 NULL_TREE), \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1265 NDS32_BUILTIN_ ## CODE, BUILT_IN_MD, NULL, NULL_TREE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1266
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1267 #define ADD_NDS32_BUILTIN3(NAME, RET_TYPE, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1268 ARG_TYPE1, ARG_TYPE2, ARG_TYPE3, CODE) \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1269 nds32_builtin_decls[NDS32_BUILTIN_ ## CODE] = \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1270 add_builtin_function ("__builtin_nds32_" NAME, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1271 build_function_type_list (RET_TYPE##_type_node, \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1272 ARG_TYPE1##_type_node,\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1273 ARG_TYPE2##_type_node,\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1274 ARG_TYPE3##_type_node,\
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1275 NULL_TREE), \
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1276 NDS32_BUILTIN_ ## CODE, BUILT_IN_MD, NULL, NULL_TREE)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1277
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1278 /* Looking for return type and argument can be found in tree.h file. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1279 tree ptr_char_type_node = build_pointer_type (char_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1280 tree ptr_uchar_type_node = build_pointer_type (unsigned_char_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1281 tree ptr_ushort_type_node = build_pointer_type (short_unsigned_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1282 tree ptr_short_type_node = build_pointer_type (short_integer_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1283 tree ptr_uint_type_node = build_pointer_type (unsigned_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1284 tree ptr_ulong_type_node = build_pointer_type (long_long_unsigned_type_node);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1285 tree v4qi_type_node = build_vector_type (intQI_type_node, 4);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1286 tree u_v4qi_type_node = build_vector_type (unsigned_intQI_type_node, 4);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1287 tree v2hi_type_node = build_vector_type (intHI_type_node, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1288 tree u_v2hi_type_node = build_vector_type (unsigned_intHI_type_node, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1289 tree v2si_type_node = build_vector_type (intSI_type_node, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1290 tree u_v2si_type_node = build_vector_type (unsigned_intSI_type_node, 2);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1291
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1292 /* Cache. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1293 ADD_NDS32_BUILTIN1 ("isync", void, ptr_uint, ISYNC);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1294 ADD_NDS32_BUILTIN0 ("isb", void, ISB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1295 ADD_NDS32_BUILTIN0 ("dsb", void, DSB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1296 ADD_NDS32_BUILTIN0 ("msync_all", void, MSYNC_ALL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1297 ADD_NDS32_BUILTIN0 ("msync_store", void, MSYNC_STORE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1298
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1299 /* Register Transfer. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1300 ADD_NDS32_BUILTIN1 ("mfsr", unsigned, integer, MFSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1301 ADD_NDS32_BUILTIN1 ("mfusr", unsigned, integer, MFUSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1302 ADD_NDS32_BUILTIN2 ("mtsr", void, unsigned, integer, MTSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1303 ADD_NDS32_BUILTIN2 ("mtsr_isb", void, unsigned, integer, MTSR_ISB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1304 ADD_NDS32_BUILTIN2 ("mtsr_dsb", void, unsigned, integer, MTSR_DSB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1305 ADD_NDS32_BUILTIN2 ("mtusr", void, unsigned, integer, MTUSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1306
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1307 /* FPU Register Transfer. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1308 ADD_NDS32_BUILTIN0 ("fmfcsr", unsigned, FMFCSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1309 ADD_NDS32_BUILTIN1 ("fmtcsr", void, unsigned, FMTCSR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1310 ADD_NDS32_BUILTIN0 ("fmfcfg", unsigned, FMFCFG);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1311 ADD_NDS32_BUILTIN2 ("fcpyss", float, float, float, FCPYSS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1312 ADD_NDS32_BUILTIN2 ("fcpynss", float, float, float, FCPYNSS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1313 ADD_NDS32_BUILTIN2 ("fcpysd", double, double, double, FCPYSD);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1314 ADD_NDS32_BUILTIN2 ("fcpynsd", double, double, double, FCPYNSD);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1315
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1316 /* Interrupt. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1317 ADD_NDS32_BUILTIN0 ("setgie_en", void, SETGIE_EN);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1318 ADD_NDS32_BUILTIN0 ("setgie_dis", void, SETGIE_DIS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1319 ADD_NDS32_BUILTIN0 ("gie_en", void, GIE_EN);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1320 ADD_NDS32_BUILTIN0 ("gie_dis", void, GIE_DIS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1321 ADD_NDS32_BUILTIN1 ("enable_int", void, integer, ENABLE_INT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1322 ADD_NDS32_BUILTIN1 ("disable_int", void, integer, DISABLE_INT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1323 ADD_NDS32_BUILTIN0 ("set_pending_swint", void, SET_PENDING_SWINT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1324 ADD_NDS32_BUILTIN0 ("clr_pending_swint", void, CLR_PENDING_SWINT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1325 ADD_NDS32_BUILTIN0 ("get_all_pending_int", unsigned, GET_ALL_PENDING_INT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1326 ADD_NDS32_BUILTIN1 ("get_pending_int", unsigned, integer, GET_PENDING_INT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1327 ADD_NDS32_BUILTIN1 ("get_int_priority", unsigned, integer, GET_INT_PRIORITY);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1328 ADD_NDS32_BUILTIN2 ("set_int_priority", void, integer, integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1329 SET_INT_PRIORITY);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1330 ADD_NDS32_BUILTIN1 ("clr_pending_hwint", void, integer, CLR_PENDING_HWINT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1331 ADD_NDS32_BUILTIN1 ("set_trig_level", void, integer, SET_TRIG_LEVEL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1332 ADD_NDS32_BUILTIN1 ("set_trig_edge", void, integer, SET_TRIG_EDGE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1333 ADD_NDS32_BUILTIN1 ("get_trig_type", unsigned, integer, GET_TRIG_TYPE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1334
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1335 /* Load and Store */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1336 ADD_NDS32_BUILTIN1 ("llw", unsigned, ptr_uint, LLW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1337 ADD_NDS32_BUILTIN1 ("lwup", unsigned, ptr_uint, LWUP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1338 ADD_NDS32_BUILTIN1 ("lbup", char, ptr_uchar, LBUP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1339 ADD_NDS32_BUILTIN2 ("scw", unsigned, ptr_uint, unsigned, SCW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1340 ADD_NDS32_BUILTIN2 ("swup", void, ptr_uint, unsigned, SWUP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1341 ADD_NDS32_BUILTIN2 ("sbup", void, ptr_uchar, char, SBUP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1342
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1343 /* CCTL */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1344 ADD_NDS32_BUILTIN0 ("cctl_l1d_invalall", void, CCTL_L1D_INVALALL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1345 ADD_NDS32_BUILTIN0 ("cctl_l1d_wball_alvl", void, CCTL_L1D_WBALL_ALVL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1346 ADD_NDS32_BUILTIN0 ("cctl_l1d_wball_one_lvl", void, CCTL_L1D_WBALL_ONE_LVL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1347 ADD_NDS32_BUILTIN2 ("cctl_va_lck", void, integer, ptr_uint, CCTL_VA_LCK);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1348 ADD_NDS32_BUILTIN2 ("cctl_idx_wbinval", void, integer, unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1349 CCTL_IDX_WBINVAL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1350 ADD_NDS32_BUILTIN2 ("cctl_va_wbinval_l1", void, integer, ptr_uint,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1351 CCTL_VA_WBINVAL_L1);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1352 ADD_NDS32_BUILTIN2 ("cctl_va_wbinval_la", void, integer, ptr_uint,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1353 CCTL_VA_WBINVAL_LA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1354 ADD_NDS32_BUILTIN2 ("cctl_idx_read", unsigned, integer, unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1355 CCTL_IDX_READ);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1356 ADD_NDS32_BUILTIN3 ("cctl_idx_write", void, integer, unsigned, unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1357 CCTL_IDX_WRITE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1358
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1359 /* PREFETCH */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1360 ADD_NDS32_BUILTIN3 ("dpref_qw", void, ptr_uchar, unsigned, integer, DPREF_QW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1361 ADD_NDS32_BUILTIN3 ("dpref_hw", void, ptr_ushort, unsigned, integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1362 DPREF_HW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1363 ADD_NDS32_BUILTIN3 ("dpref_w", void, ptr_uint, unsigned, integer, DPREF_W);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1364 ADD_NDS32_BUILTIN3 ("dpref_dw", void, ptr_ulong, unsigned, integer, DPREF_DW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1365
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1366 /* Performance Extension */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1367 ADD_NDS32_BUILTIN1 ("pe_abs", integer, integer, ABS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1368 ADD_NDS32_BUILTIN2 ("pe_ave", integer, integer, integer, AVE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1369 ADD_NDS32_BUILTIN2 ("pe_bclr", unsigned, unsigned, unsigned, BCLR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1370 ADD_NDS32_BUILTIN2 ("pe_bset", unsigned, unsigned, unsigned, BSET);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1371 ADD_NDS32_BUILTIN2 ("pe_btgl", unsigned, unsigned, unsigned, BTGL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1372 ADD_NDS32_BUILTIN2 ("pe_btst", unsigned, unsigned, unsigned, BTST);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1373 ADD_NDS32_BUILTIN2 ("pe_clip", unsigned, integer, unsigned, CLIP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1374 ADD_NDS32_BUILTIN2 ("pe_clips", integer, integer, unsigned, CLIPS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1375 ADD_NDS32_BUILTIN1 ("pe_clz", unsigned, unsigned, CLZ);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1376 ADD_NDS32_BUILTIN1 ("pe_clo", unsigned, unsigned, CLO);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1377
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1378 /* Performance Extension 2 */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1379 ADD_NDS32_BUILTIN3 ("pe2_bse", void, ptr_uint, unsigned, ptr_uint, BSE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1380 ADD_NDS32_BUILTIN3 ("pe2_bsp", void, ptr_uint, unsigned, ptr_uint, BSP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1381 ADD_NDS32_BUILTIN2 ("pe2_pbsad", unsigned, unsigned, unsigned, PBSAD);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1382 ADD_NDS32_BUILTIN3 ("pe2_pbsada", unsigned, unsigned, unsigned, unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1383 PBSADA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1384
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1385 /* String Extension */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1386 ADD_NDS32_BUILTIN2 ("se_ffb", integer, unsigned, unsigned, FFB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1387 ADD_NDS32_BUILTIN2 ("se_ffmism", integer, unsigned, unsigned, FFMISM);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1388 ADD_NDS32_BUILTIN2 ("se_flmism", integer, unsigned, unsigned, FLMISM);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1389
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1390 /* SATURATION */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1391 ADD_NDS32_BUILTIN2 ("kaddw", integer, integer, integer, KADDW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1392 ADD_NDS32_BUILTIN2 ("ksubw", integer, integer, integer, KSUBW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1393 ADD_NDS32_BUILTIN2 ("kaddh", integer, integer, integer, KADDH);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1394 ADD_NDS32_BUILTIN2 ("ksubh", integer, integer, integer, KSUBH);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1395 ADD_NDS32_BUILTIN2 ("kdmbb", integer, unsigned, unsigned, KDMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1396 ADD_NDS32_BUILTIN2 ("v_kdmbb", integer, v2hi, v2hi, V_KDMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1397 ADD_NDS32_BUILTIN2 ("kdmbt", integer, unsigned, unsigned, KDMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1398 ADD_NDS32_BUILTIN2 ("v_kdmbt", integer, v2hi, v2hi, V_KDMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1399 ADD_NDS32_BUILTIN2 ("kdmtb", integer, unsigned, unsigned, KDMTB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1400 ADD_NDS32_BUILTIN2 ("v_kdmtb", integer, v2hi, v2hi, V_KDMTB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1401 ADD_NDS32_BUILTIN2 ("kdmtt", integer, unsigned, unsigned, KDMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1402 ADD_NDS32_BUILTIN2 ("v_kdmtt", integer, v2hi, v2hi, V_KDMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1403 ADD_NDS32_BUILTIN2 ("khmbb", integer, unsigned, unsigned, KHMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1404 ADD_NDS32_BUILTIN2 ("v_khmbb", integer, v2hi, v2hi, V_KHMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1405 ADD_NDS32_BUILTIN2 ("khmbt", integer, unsigned, unsigned, KHMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1406 ADD_NDS32_BUILTIN2 ("v_khmbt", integer, v2hi, v2hi, V_KHMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1407 ADD_NDS32_BUILTIN2 ("khmtb", integer, unsigned, unsigned, KHMTB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1408 ADD_NDS32_BUILTIN2 ("v_khmtb", integer, v2hi, v2hi, V_KHMTB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1409 ADD_NDS32_BUILTIN2 ("khmtt", integer, unsigned, unsigned, KHMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1410 ADD_NDS32_BUILTIN2 ("v_khmtt", integer, v2hi, v2hi, V_KHMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1411 ADD_NDS32_BUILTIN2 ("kslraw", integer, integer, integer, KSLRAW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1412 ADD_NDS32_BUILTIN2 ("kslraw_u", integer, integer, integer, KSLRAW_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1413 ADD_NDS32_BUILTIN0 ("rdov", unsigned, RDOV);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1414 ADD_NDS32_BUILTIN0 ("clrov", void, CLROV);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1415
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1416 /* ROTR */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1417 ADD_NDS32_BUILTIN2 ("rotr", unsigned, unsigned, unsigned, ROTR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1418
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1419 /* Swap */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1420 ADD_NDS32_BUILTIN1 ("wsbh", unsigned, unsigned, WSBH);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1421
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1422 /* System */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1423 ADD_NDS32_BUILTIN2 ("svs", unsigned, integer, integer, SVS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1424 ADD_NDS32_BUILTIN2 ("sva", unsigned, integer, integer, SVA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1425 ADD_NDS32_BUILTIN1 ("jr_itoff", void, unsigned, JR_ITOFF);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1426 ADD_NDS32_BUILTIN1 ("jr_toff", void, unsigned, JR_TOFF);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1427 ADD_NDS32_BUILTIN1 ("jral_iton", void, unsigned, JRAL_ITON);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1428 ADD_NDS32_BUILTIN1 ("jral_ton", void, unsigned, JRAL_TON);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1429 ADD_NDS32_BUILTIN1 ("ret_itoff", void, unsigned, RET_ITOFF);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1430 ADD_NDS32_BUILTIN1 ("ret_toff", void, unsigned, RET_TOFF);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1431 ADD_NDS32_BUILTIN0 ("standby_no_wake_grant", void, STANDBY_NO_WAKE_GRANT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1432 ADD_NDS32_BUILTIN0 ("standby_wake_grant", void, STANDBY_WAKE_GRANT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1433 ADD_NDS32_BUILTIN0 ("standby_wait_done", void, STANDBY_WAKE_DONE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1434 ADD_NDS32_BUILTIN1 ("break", void, unsigned, BREAK);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1435 ADD_NDS32_BUILTIN1 ("syscall", void, unsigned, SYSCALL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1436 ADD_NDS32_BUILTIN0 ("nop", void, NOP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1437 ADD_NDS32_BUILTIN0 ("get_current_sp", unsigned, GET_CURRENT_SP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1438 ADD_NDS32_BUILTIN1 ("set_current_sp", void, unsigned, SET_CURRENT_SP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1439 ADD_NDS32_BUILTIN2 ("teqz", void, unsigned, unsigned, TEQZ);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1440 ADD_NDS32_BUILTIN2 ("tnez", void, unsigned, unsigned, TNEZ);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1441 ADD_NDS32_BUILTIN1 ("trap", void, unsigned, TRAP);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1442 ADD_NDS32_BUILTIN0 ("return_address", unsigned, RETURN_ADDRESS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1443 ADD_NDS32_BUILTIN0 ("setend_big", void, SETEND_BIG);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1444 ADD_NDS32_BUILTIN0 ("setend_little", void, SETEND_LITTLE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1445
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1446 /* Schedule Barrier */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1447 ADD_NDS32_BUILTIN0 ("schedule_barrier", void, SCHE_BARRIER);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1448
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1449 /* TLBOP */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1450 ADD_NDS32_BUILTIN1 ("tlbop_trd", void, unsigned, TLBOP_TRD);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1451 ADD_NDS32_BUILTIN1 ("tlbop_twr", void, unsigned, TLBOP_TWR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1452 ADD_NDS32_BUILTIN1 ("tlbop_rwr", void, unsigned, TLBOP_RWR);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1453 ADD_NDS32_BUILTIN1 ("tlbop_rwlk", void, unsigned, TLBOP_RWLK);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1454 ADD_NDS32_BUILTIN1 ("tlbop_unlk", void, unsigned, TLBOP_UNLK);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1455 ADD_NDS32_BUILTIN1 ("tlbop_pb", unsigned, unsigned, TLBOP_PB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1456 ADD_NDS32_BUILTIN1 ("tlbop_inv", void, unsigned, TLBOP_INV);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1457 ADD_NDS32_BUILTIN0 ("tlbop_flua", void, TLBOP_FLUA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1458
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1459 /* Unaligned Load/Store */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1460 ADD_NDS32_BUILTIN1 ("unaligned_load_hw", short_unsigned, ptr_ushort,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1461 UALOAD_HW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1462 ADD_NDS32_BUILTIN1 ("unaligned_load_w", unsigned, ptr_uint, UALOAD_W);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1463 ADD_NDS32_BUILTIN1 ("unaligned_load_dw", long_long_unsigned, ptr_ulong,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1464 UALOAD_DW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1465 ADD_NDS32_BUILTIN2 ("unaligned_store_hw", void, ptr_ushort, short_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1466 UASTORE_HW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1467 ADD_NDS32_BUILTIN2 ("unaligned_store_w", void, ptr_uint, unsigned, UASTORE_W);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1468 ADD_NDS32_BUILTIN2 ("unaligned_store_dw", void, ptr_ulong, long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1469 UASTORE_DW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1470 ADD_NDS32_BUILTIN0 ("unaligned_feature", unsigned, UNALIGNED_FEATURE);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1471 ADD_NDS32_BUILTIN0 ("enable_unaligned", void, ENABLE_UNALIGNED);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1472 ADD_NDS32_BUILTIN0 ("disable_unaligned", void, DISABLE_UNALIGNED);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1473
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1474 /* DSP Extension: SIMD 16bit Add and Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1475 ADD_NDS32_BUILTIN2 ("add16", unsigned, unsigned, unsigned, ADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1476 ADD_NDS32_BUILTIN2 ("v_uadd16", u_v2hi, u_v2hi, u_v2hi, V_UADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1477 ADD_NDS32_BUILTIN2 ("v_sadd16", v2hi, v2hi, v2hi, V_SADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1478 ADD_NDS32_BUILTIN2 ("radd16", unsigned, unsigned, unsigned, RADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1479 ADD_NDS32_BUILTIN2 ("v_radd16", v2hi, v2hi, v2hi, V_RADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1480 ADD_NDS32_BUILTIN2 ("uradd16", unsigned, unsigned, unsigned, URADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1481 ADD_NDS32_BUILTIN2 ("v_uradd16", u_v2hi, u_v2hi, u_v2hi, V_URADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1482 ADD_NDS32_BUILTIN2 ("kadd16", unsigned, unsigned, unsigned, KADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1483 ADD_NDS32_BUILTIN2 ("v_kadd16", v2hi, v2hi, v2hi, V_KADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1484 ADD_NDS32_BUILTIN2 ("ukadd16", unsigned, unsigned, unsigned, UKADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1485 ADD_NDS32_BUILTIN2 ("v_ukadd16", u_v2hi, u_v2hi, u_v2hi, V_UKADD16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1486 ADD_NDS32_BUILTIN2 ("sub16", unsigned, unsigned, unsigned, SUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1487 ADD_NDS32_BUILTIN2 ("v_usub16", u_v2hi, u_v2hi, u_v2hi, V_USUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1488 ADD_NDS32_BUILTIN2 ("v_ssub16", v2hi, v2hi, v2hi, V_SSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1489 ADD_NDS32_BUILTIN2 ("rsub16", unsigned, unsigned, unsigned, RSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1490 ADD_NDS32_BUILTIN2 ("v_rsub16", v2hi, v2hi, v2hi, V_RSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1491 ADD_NDS32_BUILTIN2 ("ursub16", unsigned, unsigned, unsigned, URSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1492 ADD_NDS32_BUILTIN2 ("v_ursub16", u_v2hi, u_v2hi, u_v2hi, V_URSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1493 ADD_NDS32_BUILTIN2 ("ksub16", unsigned, unsigned, unsigned, KSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1494 ADD_NDS32_BUILTIN2 ("v_ksub16", v2hi, v2hi, v2hi, V_KSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1495 ADD_NDS32_BUILTIN2 ("uksub16", unsigned, unsigned, unsigned, UKSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1496 ADD_NDS32_BUILTIN2 ("v_uksub16", u_v2hi, u_v2hi, u_v2hi, V_UKSUB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1497 ADD_NDS32_BUILTIN2 ("cras16", unsigned, unsigned, unsigned, CRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1498 ADD_NDS32_BUILTIN2 ("v_ucras16", u_v2hi, u_v2hi, u_v2hi, V_UCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1499 ADD_NDS32_BUILTIN2 ("v_scras16", v2hi, v2hi, v2hi, V_SCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1500 ADD_NDS32_BUILTIN2 ("rcras16", unsigned, unsigned, unsigned, RCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1501 ADD_NDS32_BUILTIN2 ("v_rcras16", v2hi, v2hi, v2hi, V_RCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1502 ADD_NDS32_BUILTIN2 ("urcras16", unsigned, unsigned, unsigned, URCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1503 ADD_NDS32_BUILTIN2 ("v_urcras16", u_v2hi, u_v2hi, u_v2hi, V_URCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1504 ADD_NDS32_BUILTIN2 ("kcras16", unsigned, unsigned, unsigned, KCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1505 ADD_NDS32_BUILTIN2 ("v_kcras16", v2hi, v2hi, v2hi, V_KCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1506 ADD_NDS32_BUILTIN2 ("ukcras16", unsigned, unsigned, unsigned, UKCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1507 ADD_NDS32_BUILTIN2 ("v_ukcras16", u_v2hi, u_v2hi, u_v2hi, V_UKCRAS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1508 ADD_NDS32_BUILTIN2 ("crsa16", unsigned, unsigned, unsigned, CRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1509 ADD_NDS32_BUILTIN2 ("v_ucrsa16", u_v2hi, u_v2hi, u_v2hi, V_UCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1510 ADD_NDS32_BUILTIN2 ("v_scrsa16", v2hi, v2hi, v2hi, V_SCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1511 ADD_NDS32_BUILTIN2 ("rcrsa16", unsigned, unsigned, unsigned, RCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1512 ADD_NDS32_BUILTIN2 ("v_rcrsa16", v2hi, v2hi, v2hi, V_RCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1513 ADD_NDS32_BUILTIN2 ("urcrsa16", unsigned, unsigned, unsigned, URCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1514 ADD_NDS32_BUILTIN2 ("v_urcrsa16", u_v2hi, u_v2hi, u_v2hi, V_URCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1515 ADD_NDS32_BUILTIN2 ("kcrsa16", unsigned, unsigned, unsigned, KCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1516 ADD_NDS32_BUILTIN2 ("v_kcrsa16", v2hi, v2hi, v2hi, V_KCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1517 ADD_NDS32_BUILTIN2 ("ukcrsa16", unsigned, unsigned, unsigned, UKCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1518 ADD_NDS32_BUILTIN2 ("v_ukcrsa16", u_v2hi, u_v2hi, u_v2hi, V_UKCRSA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1519
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1520 /* DSP Extension: SIMD 8bit Add and Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1521 ADD_NDS32_BUILTIN2 ("add8", integer, integer, integer, ADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1522 ADD_NDS32_BUILTIN2 ("v_uadd8", u_v4qi, u_v4qi, u_v4qi, V_UADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1523 ADD_NDS32_BUILTIN2 ("v_sadd8", v4qi, v4qi, v4qi, V_SADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1524 ADD_NDS32_BUILTIN2 ("radd8", unsigned, unsigned, unsigned, RADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1525 ADD_NDS32_BUILTIN2 ("v_radd8", v4qi, v4qi, v4qi, V_RADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1526 ADD_NDS32_BUILTIN2 ("uradd8", unsigned, unsigned, unsigned, URADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1527 ADD_NDS32_BUILTIN2 ("v_uradd8", u_v4qi, u_v4qi, u_v4qi, V_URADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1528 ADD_NDS32_BUILTIN2 ("kadd8", unsigned, unsigned, unsigned, KADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1529 ADD_NDS32_BUILTIN2 ("v_kadd8", v4qi, v4qi, v4qi, V_KADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1530 ADD_NDS32_BUILTIN2 ("ukadd8", unsigned, unsigned, unsigned, UKADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1531 ADD_NDS32_BUILTIN2 ("v_ukadd8", u_v4qi, u_v4qi, u_v4qi, V_UKADD8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1532 ADD_NDS32_BUILTIN2 ("sub8", integer, integer, integer, SUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1533 ADD_NDS32_BUILTIN2 ("v_usub8", u_v4qi, u_v4qi, u_v4qi, V_USUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1534 ADD_NDS32_BUILTIN2 ("v_ssub8", v4qi, v4qi, v4qi, V_SSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1535 ADD_NDS32_BUILTIN2 ("rsub8", unsigned, unsigned, unsigned, RSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1536 ADD_NDS32_BUILTIN2 ("v_rsub8", v4qi, v4qi, v4qi, V_RSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1537 ADD_NDS32_BUILTIN2 ("ursub8", unsigned, unsigned, unsigned, URSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1538 ADD_NDS32_BUILTIN2 ("v_ursub8", u_v4qi, u_v4qi, u_v4qi, V_URSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1539 ADD_NDS32_BUILTIN2 ("ksub8", unsigned, unsigned, unsigned, KSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1540 ADD_NDS32_BUILTIN2 ("v_ksub8", v4qi, v4qi, v4qi, V_KSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1541 ADD_NDS32_BUILTIN2 ("uksub8", unsigned, unsigned, unsigned, UKSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1542 ADD_NDS32_BUILTIN2 ("v_uksub8", u_v4qi, u_v4qi, u_v4qi, V_UKSUB8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1543
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1544 /* DSP Extension: SIMD 16bit Shift. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1545 ADD_NDS32_BUILTIN2 ("sra16", unsigned, unsigned, unsigned, SRA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1546 ADD_NDS32_BUILTIN2 ("v_sra16", v2hi, v2hi, unsigned, V_SRA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1547 ADD_NDS32_BUILTIN2 ("sra16_u", unsigned, unsigned, unsigned, SRA16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1548 ADD_NDS32_BUILTIN2 ("v_sra16_u", v2hi, v2hi, unsigned, V_SRA16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1549 ADD_NDS32_BUILTIN2 ("srl16", unsigned, unsigned, unsigned, SRL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1550 ADD_NDS32_BUILTIN2 ("v_srl16", u_v2hi, u_v2hi, unsigned, V_SRL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1551 ADD_NDS32_BUILTIN2 ("srl16_u", unsigned, unsigned, unsigned, SRL16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1552 ADD_NDS32_BUILTIN2 ("v_srl16_u", u_v2hi, u_v2hi, unsigned, V_SRL16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1553 ADD_NDS32_BUILTIN2 ("sll16", unsigned, unsigned, unsigned, SLL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1554 ADD_NDS32_BUILTIN2 ("v_sll16", u_v2hi, u_v2hi, unsigned, V_SLL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1555 ADD_NDS32_BUILTIN2 ("ksll16", unsigned, unsigned, unsigned, KSLL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1556 ADD_NDS32_BUILTIN2 ("v_ksll16", v2hi, v2hi, unsigned, V_KSLL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1557 ADD_NDS32_BUILTIN2 ("kslra16", unsigned, unsigned, unsigned, KSLRA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1558 ADD_NDS32_BUILTIN2 ("v_kslra16", v2hi, v2hi, unsigned, V_KSLRA16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1559 ADD_NDS32_BUILTIN2 ("kslra16_u", unsigned, unsigned, unsigned, KSLRA16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1560 ADD_NDS32_BUILTIN2 ("v_kslra16_u", v2hi, v2hi, unsigned, V_KSLRA16_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1561
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1562 /* DSP Extension: 16bit Compare. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1563 ADD_NDS32_BUILTIN2 ("cmpeq16", unsigned, unsigned, unsigned, CMPEQ16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1564 ADD_NDS32_BUILTIN2 ("v_scmpeq16", u_v2hi, v2hi, v2hi, V_SCMPEQ16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1565 ADD_NDS32_BUILTIN2 ("v_ucmpeq16", u_v2hi, u_v2hi, u_v2hi, V_UCMPEQ16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1566 ADD_NDS32_BUILTIN2 ("scmplt16", unsigned, unsigned, unsigned, SCMPLT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1567 ADD_NDS32_BUILTIN2 ("v_scmplt16", u_v2hi, v2hi, v2hi, V_SCMPLT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1568 ADD_NDS32_BUILTIN2 ("scmple16", unsigned, unsigned, unsigned, SCMPLE16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1569 ADD_NDS32_BUILTIN2 ("v_scmple16", u_v2hi, v2hi, v2hi, V_SCMPLE16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1570 ADD_NDS32_BUILTIN2 ("ucmplt16", unsigned, unsigned, unsigned, UCMPLT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1571 ADD_NDS32_BUILTIN2 ("v_ucmplt16", u_v2hi, u_v2hi, u_v2hi, V_UCMPLT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1572 ADD_NDS32_BUILTIN2 ("ucmple16", unsigned, unsigned, unsigned, UCMPLE16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1573 ADD_NDS32_BUILTIN2 ("v_ucmple16", u_v2hi, u_v2hi, u_v2hi, V_UCMPLE16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1574
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1575 /* DSP Extension: 8bit Compare. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1576 ADD_NDS32_BUILTIN2 ("cmpeq8", unsigned, unsigned, unsigned, CMPEQ8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1577 ADD_NDS32_BUILTIN2 ("v_scmpeq8", u_v4qi, v4qi, v4qi, V_SCMPEQ8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1578 ADD_NDS32_BUILTIN2 ("v_ucmpeq8", u_v4qi, u_v4qi, u_v4qi, V_UCMPEQ8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1579 ADD_NDS32_BUILTIN2 ("scmplt8", unsigned, unsigned, unsigned, SCMPLT8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1580 ADD_NDS32_BUILTIN2 ("v_scmplt8", u_v4qi, v4qi, v4qi, V_SCMPLT8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1581 ADD_NDS32_BUILTIN2 ("scmple8", unsigned, unsigned, unsigned, SCMPLE8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1582 ADD_NDS32_BUILTIN2 ("v_scmple8", u_v4qi, v4qi, v4qi, V_SCMPLE8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1583 ADD_NDS32_BUILTIN2 ("ucmplt8", unsigned, unsigned, unsigned, UCMPLT8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1584 ADD_NDS32_BUILTIN2 ("v_ucmplt8", u_v4qi, u_v4qi, u_v4qi, V_UCMPLT8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1585 ADD_NDS32_BUILTIN2 ("ucmple8", unsigned, unsigned, unsigned, UCMPLE8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1586 ADD_NDS32_BUILTIN2 ("v_ucmple8", u_v4qi, u_v4qi, u_v4qi, V_UCMPLE8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1587
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1588 /* DSP Extension: SIMD 16bit MISC. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1589 ADD_NDS32_BUILTIN2 ("smin16", unsigned, unsigned, unsigned, SMIN16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1590 ADD_NDS32_BUILTIN2 ("v_smin16", v2hi, v2hi, v2hi, V_SMIN16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1591 ADD_NDS32_BUILTIN2 ("umin16", unsigned, unsigned, unsigned, UMIN16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1592 ADD_NDS32_BUILTIN2 ("v_umin16", u_v2hi, u_v2hi, u_v2hi, V_UMIN16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1593 ADD_NDS32_BUILTIN2 ("smax16", unsigned, unsigned, unsigned, SMAX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1594 ADD_NDS32_BUILTIN2 ("v_smax16", v2hi, v2hi, v2hi, V_SMAX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1595 ADD_NDS32_BUILTIN2 ("umax16", unsigned, unsigned, unsigned, UMAX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1596 ADD_NDS32_BUILTIN2 ("v_umax16", u_v2hi, u_v2hi, u_v2hi, V_UMAX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1597 ADD_NDS32_BUILTIN2 ("sclip16", unsigned, unsigned, unsigned, SCLIP16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1598 ADD_NDS32_BUILTIN2 ("v_sclip16", v2hi, v2hi, unsigned, V_SCLIP16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1599 ADD_NDS32_BUILTIN2 ("uclip16", unsigned, unsigned, unsigned, UCLIP16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1600 ADD_NDS32_BUILTIN2 ("v_uclip16", v2hi, v2hi, unsigned, V_UCLIP16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1601 ADD_NDS32_BUILTIN2 ("khm16", unsigned, unsigned, unsigned, KHM16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1602 ADD_NDS32_BUILTIN2 ("v_khm16", v2hi, v2hi, v2hi, V_KHM16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1603 ADD_NDS32_BUILTIN2 ("khmx16", unsigned, unsigned, unsigned, KHMX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1604 ADD_NDS32_BUILTIN2 ("v_khmx16", v2hi, v2hi, v2hi, V_KHMX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1605 ADD_NDS32_BUILTIN1 ("kabs16", unsigned, unsigned, KABS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1606 ADD_NDS32_BUILTIN1 ("v_kabs16", v2hi, v2hi, V_KABS16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1607 ADD_NDS32_BUILTIN2 ("smul16", long_long_unsigned, unsigned, unsigned, SMUL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1608 ADD_NDS32_BUILTIN2 ("v_smul16", v2si, v2hi, v2hi, V_SMUL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1609 ADD_NDS32_BUILTIN2 ("smulx16",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1610 long_long_unsigned, unsigned, unsigned, SMULX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1611 ADD_NDS32_BUILTIN2 ("v_smulx16", v2si, v2hi, v2hi, V_SMULX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1612 ADD_NDS32_BUILTIN2 ("umul16", long_long_unsigned, unsigned, unsigned, UMUL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1613 ADD_NDS32_BUILTIN2 ("v_umul16", u_v2si, u_v2hi, u_v2hi, V_UMUL16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1614 ADD_NDS32_BUILTIN2 ("umulx16",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1615 long_long_unsigned, unsigned, unsigned, UMULX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1616 ADD_NDS32_BUILTIN2 ("v_umulx16", u_v2si, u_v2hi, u_v2hi, V_UMULX16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1617
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1618 /* DSP Extension: SIMD 8bit MISC. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1619 ADD_NDS32_BUILTIN2 ("smin8", unsigned, unsigned, unsigned, SMIN8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1620 ADD_NDS32_BUILTIN2 ("v_smin8", v4qi, v4qi, v4qi, V_SMIN8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1621 ADD_NDS32_BUILTIN2 ("umin8", unsigned, unsigned, unsigned, UMIN8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1622 ADD_NDS32_BUILTIN2 ("v_umin8", u_v4qi, u_v4qi, u_v4qi, V_UMIN8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1623 ADD_NDS32_BUILTIN2 ("smax8", unsigned, unsigned, unsigned, SMAX8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1624 ADD_NDS32_BUILTIN2 ("v_smax8", v4qi, v4qi, v4qi, V_SMAX8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1625 ADD_NDS32_BUILTIN2 ("umax8", unsigned, unsigned, unsigned, UMAX8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1626 ADD_NDS32_BUILTIN2 ("v_umax8", u_v4qi, u_v4qi, u_v4qi, V_UMAX8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1627 ADD_NDS32_BUILTIN1 ("kabs8", unsigned, unsigned, KABS8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1628 ADD_NDS32_BUILTIN1 ("v_kabs8", v4qi, v4qi, V_KABS8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1629
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1630 /* DSP Extension: 8bit Unpacking. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1631 ADD_NDS32_BUILTIN1 ("sunpkd810", unsigned, unsigned, SUNPKD810);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1632 ADD_NDS32_BUILTIN1 ("v_sunpkd810", v2hi, v4qi, V_SUNPKD810);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1633 ADD_NDS32_BUILTIN1 ("sunpkd820", unsigned, unsigned, SUNPKD820);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1634 ADD_NDS32_BUILTIN1 ("v_sunpkd820", v2hi, v4qi, V_SUNPKD820);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1635 ADD_NDS32_BUILTIN1 ("sunpkd830", unsigned, unsigned, SUNPKD830);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1636 ADD_NDS32_BUILTIN1 ("v_sunpkd830", v2hi, v4qi, V_SUNPKD830);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1637 ADD_NDS32_BUILTIN1 ("sunpkd831", unsigned, unsigned, SUNPKD831);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1638 ADD_NDS32_BUILTIN1 ("v_sunpkd831", v2hi, v4qi, V_SUNPKD831);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1639 ADD_NDS32_BUILTIN1 ("zunpkd810", unsigned, unsigned, ZUNPKD810);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1640 ADD_NDS32_BUILTIN1 ("v_zunpkd810", u_v2hi, u_v4qi, V_ZUNPKD810);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1641 ADD_NDS32_BUILTIN1 ("zunpkd820", unsigned, unsigned, ZUNPKD820);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1642 ADD_NDS32_BUILTIN1 ("v_zunpkd820", u_v2hi, u_v4qi, V_ZUNPKD820);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1643 ADD_NDS32_BUILTIN1 ("zunpkd830", unsigned, unsigned, ZUNPKD830);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1644 ADD_NDS32_BUILTIN1 ("v_zunpkd830", u_v2hi, u_v4qi, V_ZUNPKD830);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1645 ADD_NDS32_BUILTIN1 ("zunpkd831", unsigned, unsigned, ZUNPKD831);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1646 ADD_NDS32_BUILTIN1 ("v_zunpkd831", u_v2hi, u_v4qi, V_ZUNPKD831);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1647
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1648 /* DSP Extension: 32bit Add and Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1649 ADD_NDS32_BUILTIN2 ("raddw", integer, integer, integer, RADDW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1650 ADD_NDS32_BUILTIN2 ("uraddw", unsigned, unsigned, unsigned, URADDW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1651 ADD_NDS32_BUILTIN2 ("rsubw", integer, integer, integer, RSUBW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1652 ADD_NDS32_BUILTIN2 ("ursubw", unsigned, unsigned, unsigned, URSUBW);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1653
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1654 /* DSP Extension: 32bit Shift. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1655 ADD_NDS32_BUILTIN2 ("sra_u", integer, integer, unsigned, SRA_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1656 ADD_NDS32_BUILTIN2 ("ksll", integer, integer, unsigned, KSLL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1657
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1658 /* DSP Extension: 16bit Packing. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1659 ADD_NDS32_BUILTIN2 ("pkbb16", unsigned, unsigned, unsigned, PKBB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1660 ADD_NDS32_BUILTIN2 ("v_pkbb16", u_v2hi, u_v2hi, u_v2hi, V_PKBB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1661 ADD_NDS32_BUILTIN2 ("pkbt16", unsigned, unsigned, unsigned, PKBT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1662 ADD_NDS32_BUILTIN2 ("v_pkbt16", u_v2hi, u_v2hi, u_v2hi, V_PKBT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1663 ADD_NDS32_BUILTIN2 ("pktb16", unsigned, unsigned, unsigned, PKTB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1664 ADD_NDS32_BUILTIN2 ("v_pktb16", u_v2hi, u_v2hi, u_v2hi, V_PKTB16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1665 ADD_NDS32_BUILTIN2 ("pktt16", unsigned, unsigned, unsigned, PKTT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1666 ADD_NDS32_BUILTIN2 ("v_pktt16", u_v2hi, u_v2hi, u_v2hi, V_PKTT16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1667
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1668 /* DSP Extension: Signed MSW 32x32 Multiply and ADD. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1669 ADD_NDS32_BUILTIN2 ("smmul", integer, integer, integer, SMMUL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1670 ADD_NDS32_BUILTIN2 ("smmul_u", integer, integer, integer, SMMUL_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1671 ADD_NDS32_BUILTIN3 ("kmmac", integer, integer, integer, integer, KMMAC);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1672 ADD_NDS32_BUILTIN3 ("kmmac_u", integer, integer, integer, integer, KMMAC_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1673 ADD_NDS32_BUILTIN3 ("kmmsb", integer, integer, integer, integer, KMMSB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1674 ADD_NDS32_BUILTIN3 ("kmmsb_u", integer, integer, integer, integer, KMMSB_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1675 ADD_NDS32_BUILTIN2 ("kwmmul", integer, integer, integer, KWMMUL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1676 ADD_NDS32_BUILTIN2 ("kwmmul_u", integer, integer, integer, KWMMUL_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1677
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1678 /* DSP Extension: Most Significant Word 32x16 Multiply and ADD. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1679 ADD_NDS32_BUILTIN2 ("smmwb", integer, integer, unsigned, SMMWB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1680 ADD_NDS32_BUILTIN2 ("v_smmwb", integer, integer, v2hi, V_SMMWB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1681 ADD_NDS32_BUILTIN2 ("smmwb_u", integer, integer, unsigned, SMMWB_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1682 ADD_NDS32_BUILTIN2 ("v_smmwb_u", integer, integer, v2hi, V_SMMWB_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1683 ADD_NDS32_BUILTIN2 ("smmwt", integer, integer, unsigned, SMMWT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1684 ADD_NDS32_BUILTIN2 ("v_smmwt", integer, integer, v2hi, V_SMMWT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1685 ADD_NDS32_BUILTIN2 ("smmwt_u", integer, integer, unsigned, SMMWT_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1686 ADD_NDS32_BUILTIN2 ("v_smmwt_u", integer, integer, v2hi, V_SMMWT_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1687 ADD_NDS32_BUILTIN3 ("kmmawb", integer, integer, integer, unsigned, KMMAWB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1688 ADD_NDS32_BUILTIN3 ("v_kmmawb", integer, integer, integer, v2hi, V_KMMAWB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1689 ADD_NDS32_BUILTIN3 ("kmmawb_u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1690 integer, integer, integer, unsigned, KMMAWB_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1691 ADD_NDS32_BUILTIN3 ("v_kmmawb_u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1692 integer, integer, integer, v2hi, V_KMMAWB_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1693 ADD_NDS32_BUILTIN3 ("kmmawt", integer, integer, integer, unsigned, KMMAWT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1694 ADD_NDS32_BUILTIN3 ("v_kmmawt", integer, integer, integer, v2hi, V_KMMAWT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1695 ADD_NDS32_BUILTIN3 ("kmmawt_u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1696 integer, integer, integer, unsigned, KMMAWT_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1697 ADD_NDS32_BUILTIN3 ("v_kmmawt_u",
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1698 integer, integer, integer, v2hi, V_KMMAWT_U);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1699
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1700 /* DSP Extension: Signed 16bit Multiply with ADD/Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1701 ADD_NDS32_BUILTIN2 ("smbb", integer, unsigned, unsigned, SMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1702 ADD_NDS32_BUILTIN2 ("v_smbb", integer, v2hi, v2hi, V_SMBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1703 ADD_NDS32_BUILTIN2 ("smbt", integer, unsigned, unsigned, SMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1704 ADD_NDS32_BUILTIN2 ("v_smbt", integer, v2hi, v2hi, V_SMBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1705 ADD_NDS32_BUILTIN2 ("smtt", integer, unsigned, unsigned, SMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1706 ADD_NDS32_BUILTIN2 ("v_smtt", integer, v2hi, v2hi, V_SMTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1707 ADD_NDS32_BUILTIN2 ("kmda", integer, unsigned, unsigned, KMDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1708 ADD_NDS32_BUILTIN2 ("v_kmda", integer, v2hi, v2hi, V_KMDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1709 ADD_NDS32_BUILTIN2 ("kmxda", integer, unsigned, unsigned, KMXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1710 ADD_NDS32_BUILTIN2 ("v_kmxda", integer, v2hi, v2hi, V_KMXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1711 ADD_NDS32_BUILTIN2 ("smds", integer, unsigned, unsigned, SMDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1712 ADD_NDS32_BUILTIN2 ("v_smds", integer, v2hi, v2hi, V_SMDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1713 ADD_NDS32_BUILTIN2 ("smdrs", integer, unsigned, unsigned, SMDRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1714 ADD_NDS32_BUILTIN2 ("v_smdrs", integer, v2hi, v2hi, V_SMDRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1715 ADD_NDS32_BUILTIN2 ("smxds", integer, unsigned, unsigned, SMXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1716 ADD_NDS32_BUILTIN2 ("v_smxds", integer, v2hi, v2hi, V_SMXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1717 ADD_NDS32_BUILTIN3 ("kmabb", integer, integer, unsigned, unsigned, KMABB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1718 ADD_NDS32_BUILTIN3 ("v_kmabb", integer, integer, v2hi, v2hi, V_KMABB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1719 ADD_NDS32_BUILTIN3 ("kmabt", integer, integer, unsigned, unsigned, KMABT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1720 ADD_NDS32_BUILTIN3 ("v_kmabt", integer, integer, v2hi, v2hi, V_KMABT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1721 ADD_NDS32_BUILTIN3 ("kmatt", integer, integer, unsigned, unsigned, KMATT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1722 ADD_NDS32_BUILTIN3 ("v_kmatt", integer, integer, v2hi, v2hi, V_KMATT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1723 ADD_NDS32_BUILTIN3 ("kmada", integer, integer, unsigned, unsigned, KMADA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1724 ADD_NDS32_BUILTIN3 ("v_kmada", integer, integer, v2hi, v2hi, V_KMADA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1725 ADD_NDS32_BUILTIN3 ("kmaxda", integer, integer, unsigned, unsigned, KMAXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1726 ADD_NDS32_BUILTIN3 ("v_kmaxda", integer, integer, v2hi, v2hi, V_KMAXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1727 ADD_NDS32_BUILTIN3 ("kmads", integer, integer, unsigned, unsigned, KMADS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1728 ADD_NDS32_BUILTIN3 ("v_kmads", integer, integer, v2hi, v2hi, V_KMADS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1729 ADD_NDS32_BUILTIN3 ("kmadrs", integer, integer, unsigned, unsigned, KMADRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1730 ADD_NDS32_BUILTIN3 ("v_kmadrs", integer, integer, v2hi, v2hi, V_KMADRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1731 ADD_NDS32_BUILTIN3 ("kmaxds", integer, integer, unsigned, unsigned, KMAXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1732 ADD_NDS32_BUILTIN3 ("v_kmaxds", integer, integer, v2hi, v2hi, V_KMAXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1733 ADD_NDS32_BUILTIN3 ("kmsda", integer, integer, unsigned, unsigned, KMSDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1734 ADD_NDS32_BUILTIN3 ("v_kmsda", integer, integer, v2hi, v2hi, V_KMSDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1735 ADD_NDS32_BUILTIN3 ("kmsxda", integer, integer, unsigned, unsigned, KMSXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1736 ADD_NDS32_BUILTIN3 ("v_kmsxda", integer, integer, v2hi, v2hi, V_KMSXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1737
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1738 /* DSP Extension: Signed 16bit Multiply with 64bit ADD/Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1739 ADD_NDS32_BUILTIN2 ("smal", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1740 long_long_integer, unsigned, SMAL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1741 ADD_NDS32_BUILTIN2 ("v_smal", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1742 long_long_integer, v2hi, V_SMAL);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1743
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1744 /* DSP Extension: 32bit MISC. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1745 ADD_NDS32_BUILTIN2 ("bitrev", unsigned, unsigned, unsigned, BITREV);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1746 ADD_NDS32_BUILTIN2 ("wext", unsigned, long_long_integer, unsigned, WEXT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1747 ADD_NDS32_BUILTIN3 ("bpick", unsigned, unsigned, unsigned, unsigned, BPICK);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1748 ADD_NDS32_BUILTIN3 ("insb", unsigned, unsigned, unsigned, unsigned, INSB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1749
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1750 /* DSP Extension: 64bit Add and Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1751 ADD_NDS32_BUILTIN2 ("sadd64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1752 long_long_integer, long_long_integer, SADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1753 ADD_NDS32_BUILTIN2 ("uadd64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1754 long_long_unsigned, long_long_unsigned, UADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1755 ADD_NDS32_BUILTIN2 ("radd64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1756 long_long_integer, long_long_integer, RADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1757 ADD_NDS32_BUILTIN2 ("uradd64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1758 long_long_unsigned, long_long_unsigned, URADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1759 ADD_NDS32_BUILTIN2 ("kadd64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1760 long_long_integer, long_long_integer, KADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1761 ADD_NDS32_BUILTIN2 ("ukadd64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1762 long_long_unsigned, long_long_unsigned, UKADD64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1763 ADD_NDS32_BUILTIN2 ("ssub64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1764 long_long_integer, long_long_integer, SSUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1765 ADD_NDS32_BUILTIN2 ("usub64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1766 long_long_unsigned, long_long_unsigned, USUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1767 ADD_NDS32_BUILTIN2 ("rsub64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1768 long_long_integer, long_long_integer, RSUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1769 ADD_NDS32_BUILTIN2 ("ursub64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1770 long_long_unsigned, long_long_unsigned, URSUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1771 ADD_NDS32_BUILTIN2 ("ksub64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1772 long_long_integer, long_long_integer, KSUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1773 ADD_NDS32_BUILTIN2 ("uksub64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1774 long_long_unsigned, long_long_unsigned, UKSUB64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1775
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1776 /* DSP Extension: 32bit Multiply with 64bit Add/Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1777 ADD_NDS32_BUILTIN3 ("smar64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1778 long_long_integer, integer, integer, SMAR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1779 ADD_NDS32_BUILTIN3 ("smsr64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1780 long_long_integer, integer, integer, SMSR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1781 ADD_NDS32_BUILTIN3 ("umar64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1782 long_long_unsigned, unsigned, unsigned, UMAR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1783 ADD_NDS32_BUILTIN3 ("umsr64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1784 long_long_unsigned, unsigned, unsigned, UMSR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1785 ADD_NDS32_BUILTIN3 ("kmar64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1786 long_long_integer, integer, integer, KMAR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1787 ADD_NDS32_BUILTIN3 ("kmsr64", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1788 long_long_integer, integer, integer, KMSR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1789 ADD_NDS32_BUILTIN3 ("ukmar64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1790 long_long_unsigned, unsigned, unsigned, UKMAR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1791 ADD_NDS32_BUILTIN3 ("ukmsr64", long_long_unsigned,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1792 long_long_unsigned, unsigned, unsigned, UKMSR64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1793
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1794 /* DSP Extension: Signed 16bit Multiply with 64bit Add/Subtract. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1795 ADD_NDS32_BUILTIN3 ("smalbb", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1796 long_long_integer, unsigned, unsigned, SMALBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1797 ADD_NDS32_BUILTIN3 ("v_smalbb", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1798 long_long_integer, v2hi, v2hi, V_SMALBB);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1799 ADD_NDS32_BUILTIN3 ("smalbt", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1800 long_long_integer, unsigned, unsigned, SMALBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1801 ADD_NDS32_BUILTIN3 ("v_smalbt", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1802 long_long_integer, v2hi, v2hi, V_SMALBT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1803 ADD_NDS32_BUILTIN3 ("smaltt", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1804 long_long_integer, unsigned, unsigned, SMALTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1805 ADD_NDS32_BUILTIN3 ("v_smaltt", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1806 long_long_integer, v2hi, v2hi, V_SMALTT);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1807 ADD_NDS32_BUILTIN3 ("smalda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1808 long_long_integer, unsigned, unsigned, SMALDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1809 ADD_NDS32_BUILTIN3 ("v_smalda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1810 long_long_integer, v2hi, v2hi, V_SMALDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1811 ADD_NDS32_BUILTIN3 ("smalxda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1812 long_long_integer, unsigned, unsigned, SMALXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1813 ADD_NDS32_BUILTIN3 ("v_smalxda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1814 long_long_integer, v2hi, v2hi, V_SMALXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1815 ADD_NDS32_BUILTIN3 ("smalds", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1816 long_long_integer, unsigned, unsigned, SMALDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1817 ADD_NDS32_BUILTIN3 ("v_smalds", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1818 long_long_integer, v2hi, v2hi, V_SMALDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1819 ADD_NDS32_BUILTIN3 ("smaldrs", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1820 long_long_integer, unsigned, unsigned, SMALDRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1821 ADD_NDS32_BUILTIN3 ("v_smaldrs", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1822 long_long_integer, v2hi, v2hi, V_SMALDRS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1823 ADD_NDS32_BUILTIN3 ("smalxds", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1824 long_long_integer, unsigned, unsigned, SMALXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1825 ADD_NDS32_BUILTIN3 ("v_smalxds", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1826 long_long_integer, v2hi, v2hi, V_SMALXDS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1827 ADD_NDS32_BUILTIN3 ("smslda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1828 long_long_integer, unsigned, unsigned, SMSLDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1829 ADD_NDS32_BUILTIN3 ("v_smslda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1830 long_long_integer, v2hi, v2hi, V_SMSLDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1831 ADD_NDS32_BUILTIN3 ("smslxda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1832 long_long_integer, unsigned, unsigned, SMSLXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1833 ADD_NDS32_BUILTIN3 ("v_smslxda", long_long_integer,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1834 long_long_integer, v2hi, v2hi, V_SMSLXDA);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1835
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1836 /* DSP Extension: augmented baseline. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1837 ADD_NDS32_BUILTIN2 ("uclip32", unsigned, integer, unsigned, UCLIP32);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1838 ADD_NDS32_BUILTIN2 ("sclip32", integer, integer, unsigned, SCLIP32);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1839 ADD_NDS32_BUILTIN1 ("kabs", integer, integer, KABS);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1840
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1841 /* DSP Extension: vector type unaligned Load/Store */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1842 ADD_NDS32_BUILTIN1 ("get_unaligned_u16x2", u_v2hi, ptr_ushort, UALOAD_U16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1843 ADD_NDS32_BUILTIN1 ("get_unaligned_s16x2", v2hi, ptr_short, UALOAD_S16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1844 ADD_NDS32_BUILTIN1 ("get_unaligned_u8x4", u_v4qi, ptr_uchar, UALOAD_U8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1845 ADD_NDS32_BUILTIN1 ("get_unaligned_s8x4", v4qi, ptr_char, UALOAD_S8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1846 ADD_NDS32_BUILTIN2 ("put_unaligned_u16x2", void, ptr_ushort,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1847 u_v2hi, UASTORE_U16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1848 ADD_NDS32_BUILTIN2 ("put_unaligned_s16x2", void, ptr_short,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1849 v2hi, UASTORE_S16);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1850 ADD_NDS32_BUILTIN2 ("put_unaligned_u8x4", void, ptr_uchar,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1851 u_v4qi, UASTORE_U8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1852 ADD_NDS32_BUILTIN2 ("put_unaligned_s8x4", void, ptr_char,
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1853 v4qi, UASTORE_S8);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
1854 }