1/* TI C6X opcode table.
2   Copyright 2010, 2011
3   Free Software Foundation, Inc.
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License as published by
7   the Free Software Foundation; either version 3 of the License, or
8   (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU General Public License for more details.
14
15   You should have received a copy of the GNU General Public License
16   along with this program; if not, write to the Free Software
17   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
18   MA 02110-1301, USA.  */
19
20/* Define the INSN macro before including this file; it takes as
21   arguments the fields from tic6x_opcode (defined in tic6x.h).  The
22   name is given as an identifier; the subsequent four operands should
23   have "tic6x_func_unit_", "tic6x_insn_format_", "tic6x_pipeline_"
24   and "TIC6X_INSN_", respectively, prepended to them by the macro
25   definition.  Also define INSNE, which has a second argument that
26   goes after tic6x_opcode_NAME_ to form the enumeration value for
27   this instruction, where the value otherwise formed from the name,
28   functional unit and format is ambiguous, but otherwise has the same
29   arguments as INSN.  */
30
31#define TIC6X_INSN_C64X_AND_C67X TIC6X_INSN_C64X|TIC6X_INSN_C67X
32#define tic6x_insn_format_nfu_s_branch_nop_cst	\
33  tic6x_insn_format_s_branch_nop_cst
34#define tic6x_insn_format_s_l_1_or_2_src tic6x_insn_format_l_1_or_2_src
35#define RAN(id, min, max) { CONCAT2(tic6x_field_,id), (min), (max) }
36#define FIX(id, val) RAN(id, val, val)
37#define FIX0() 0, { { 0, 0, 0 } }
38#define FIX1(a) 1, { a }
39#define FIX2(a, b) 2, { a, b }
40#define FIX3(a, b, c) 3, { a, b, c }
41#define FIX4(a, b, c, d) 4, { a, b, c, d }
42#define OP0() 0, { { 0, 0, FALSE, 0, 0, 0, 0 } }
43#define OP1(a) 1, { a }
44#define OP2(a, b) 2, { a, b }
45#define OP3(a, b, c) 3, { a, b, c }
46#define OP4(a, b, c, d) 4, { a, b, c, d }
47#define OACST { tic6x_operand_asm_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
48#define OLCST { tic6x_operand_link_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
49#define OFULIST { tic6x_operand_func_unit, 0, tic6x_rw_none, 0, 0, 0, 0 }
50#define ORIRP1 { tic6x_operand_irp, 4, tic6x_rw_read, 1, 1, 0, 0 }
51#define ORNRP1 { tic6x_operand_nrp, 4, tic6x_rw_read, 1, 1, 0, 0 }
52#define OWREG1 { tic6x_operand_reg, 4, tic6x_rw_write, 1, 1, 0, 0 }
53#define OWRETREG1 { tic6x_operand_retreg, 4, tic6x_rw_write, 1, 1, 0, 0 }
54#define ORREG1 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 1, 0, 0 }
55#define ORDREG1 { tic6x_operand_dreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
56#define ORWREG1 { tic6x_operand_reg, 4, tic6x_rw_read_write, 1, 1, 0, 0 }
57#define ORAREG1 { tic6x_operand_areg, 4, tic6x_rw_read, 1, 1, 0, 0 }
58#define ORXREG1 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
59#define ORREG12 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 2, 0, 0 }
60#define ORREG14 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 4, 0, 0 }
61#define ORXREG14 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 4, 0, 0 }
62#define OWREG2 { tic6x_operand_reg, 4, tic6x_rw_write, 2, 2, 0, 0 }
63#define OWREG4 { tic6x_operand_reg, 4, tic6x_rw_write, 4, 4, 0, 0 }
64#define OWREG9 { tic6x_operand_reg, 4, tic6x_rw_write, 9, 9, 0, 0 }
65#define OWDREG5 { tic6x_operand_dreg, 4, tic6x_rw_write, 5, 5, 0, 0 }
66#define OWREGL1 { tic6x_operand_regpair, 5, tic6x_rw_write, 1, 1, 1, 1 }
67#define ORREGL1 { tic6x_operand_regpair, 5, tic6x_rw_read, 1, 1, 1, 1 }
68#define OWREGD1 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 1, 1 }
69#define OWREGD12 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 2, 2 }
70#define OWREGD4 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 4, 4 }
71#define ORREGD1 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
72#define OWREGD45 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 5, 5 }
73#define OWREGD67 { tic6x_operand_regpair, 8, tic6x_rw_write, 6, 6, 7, 7 }
74#define ORDREGD1 { tic6x_operand_dregpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
75#define OWDREGD5 { tic6x_operand_dregpair, 8, tic6x_rw_write, 5, 5, 5, 5 }
76#define ORREGD12 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
77#define ORXREGD12 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
78#define ORREGD1234 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 2, 3, 4 }
79#define ORREGD1324 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 3, 2, 4 }
80#define OWREGD910 { tic6x_operand_regpair, 8, tic6x_rw_write, 9, 9, 10, 10 }
81#define ORCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_read, 1, 1, 0, 0 }
82#define OWCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_write, 1, 1, 0, 0 }
83#define ORMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_read, 3, 3, 0, 0 }
84#define OWMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_write, 3, 3, 0, 0 }
85#define ORMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_read, 3, 3, 0, 0 }
86#define OWMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_write, 3, 3, 0, 0 }
87#define ORMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_read, 3, 3, 0, 0 }
88#define OWMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_write, 3, 3, 0, 0 }
89#define ORMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_read, 3, 3, 0, 0 }
90#define OWMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_write, 3, 3, 0, 0 }
91#define ORMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_read, 3, 3, 0, 0 }
92#define OWMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_write, 3, 3, 0, 0 }
93#define ORMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_read, 3, 3, 0, 0 }
94#define OWMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_write, 3, 3, 0, 0 }
95#define ORMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_read, 3, 3, 0, 0 }
96#define OWMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_write, 3, 3, 0, 0 }
97#define ORMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_read, 3, 3, 0, 0 }
98#define OWMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_write, 3, 3, 0, 0 }
99#define ORMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_read, 3, 3, 0, 0 }
100#define OWMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_write, 3, 3, 0, 0 }
101#define ENC(id, meth, op) {			\
102    CONCAT2(tic6x_field_,id),			\
103    CONCAT2(tic6x_coding_,meth),		\
104    op						\
105  }
106#define ENC0() 0, { { 0, 0, 0 } }
107#define ENC1(a) 1, { a }
108#define ENC2(a, b) 2, { a, b }
109#define ENC3(a, b, c) 3, { a, b, c }
110#define ENC4(a, b, c, d) 4, { a, b, c, d }
111#define ENC5(a, b, c, d, e) 5, { a, b, c, d, e }
112#define ENC6(a, b, c, d, e, f) 6, { a, b, c, d, e, f }
113#define ENC7(a, b, c, d, e, f, g) 7, { a, b, c, d, e, f, g }
114
115INSN(abs, l, unary, 1cycle, C62X, 0,
116     FIX1(FIX(op, 0)),
117     OP2(ORXREG1, OWREG1),
118     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
119	  ENC(dst, reg, 1)))
120INSN(abs, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
121     FIX3(FIX(op, 0x38), FIX(x, 0), FIX(src1, 0)),
122     OP2(ORREGL1, OWREGL1),
123     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
124
125INSN(abs2, l, unary, 1cycle, C64X, 0,
126     FIX1(FIX(op, 0x4)),
127     OP2(ORXREG1, OWREG1),
128     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
129	  ENC(dst, reg, 1)))
130
131INSN(absdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
132     FIX3(FIX(op, 0x2c), FIX(x, 0), FIX(src1, 0)),
133     OP2(ORREGD1, OWREGD12),
134     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
135
136INSN(abssp, s, unary, 1cycle, C67X, 0,
137     FIX1(FIX(op, 0)),
138     OP2(ORXREG1, OWREG1),
139     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
140	  ENC(dst, reg, 1)))
141
142INSNE(add, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
143      FIX1(FIX(op, 0x3)),
144      OP3(ORREG1, ORXREG1, OWREG1),
145      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
146	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
147INSNE(add, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, 0,
148      FIX1(FIX(op, 0x23)),
149      OP3(ORREG1, ORXREG1, OWREGL1),
150      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
151	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
152INSNE(add, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
153      FIX1(FIX(op, 0x21)),
154      OP3(ORXREG1, ORREGL1, OWREGL1),
155      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
156	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
157INSNE(add, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
158      FIX1(FIX(op, 0x2)),
159      OP3(OACST, ORXREG1, OWREG1),
160      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
161	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
162INSNE(add, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
163      FIX2(FIX(op, 0x20), FIX(x, 0)),
164      OP3(OACST, ORREGL1, OWREGL1),
165      ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
166	   ENC(dst, reg, 2)))
167INSNE(add, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
168      FIX1(FIX(op, 0x7)),
169      OP3(ORREG1, ORXREG1, OWREG1),
170      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
171	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
172INSNE(add, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
173      FIX1(FIX(op, 0x6)),
174      OP3(OACST, ORXREG1, OWREG1),
175      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
176	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
177INSNE(add, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
178      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
179      FIX1(FIX(op, 0x10)),
180      OP3(ORREG1, ORREG1, OWREG1),
181      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
182	   ENC(dst, reg, 2)))
183INSNE(add, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
184      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
185      FIX1(FIX(op, 0x12)),
186      OP3(ORREG1, OACST, OWREG1),
187      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
188	   ENC(dst, reg, 2)))
189INSNE(add, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
190      FIX1(FIX(op, 0xa)),
191      OP3(ORREG1, ORXREG1, OWREG1),
192      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
193	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
194INSNE(add, d_xsi_s5_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
195      FIX1(FIX(op, 0xb)),
196      OP3(ORXREG1, OACST, OWREG1),
197      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
198	   ENC(src1, scst, 1), ENC(dst, reg, 2)))
199
200INSNE(addab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
201      FIX1(FIX(op, 0x30)),
202      OP3(ORREG1, ORREG1, OWREG1),
203      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
204	   ENC(dst, reg, 2)))
205INSNE(addab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
206      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
207      FIX1(FIX(op, 0x32)),
208      OP3(ORREG1, OACST, OWREG1),
209      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
210	   ENC(dst, reg, 2)))
211INSN(addab, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
212     FIX1(FIX(op, 3)),
213     OP3(ORAREG1, OLCST, OWREG1),
214     ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 1),
215	  ENC(dst, reg, 2)))
216
217INSNE(addad, d_si_si_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
218      TIC6X_FLAG_NO_CROSS,
219      FIX1(FIX(op, 0x3c)),
220      OP3(ORREG1, ORREG1, OWREG1),
221      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
222	   ENC(dst, reg, 2)))
223INSNE(addad, d_si_u5_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
224      TIC6X_FLAG_NO_CROSS,
225      FIX1(FIX(op, 0x3d)),
226      OP3(ORREG1, OACST, OWREG1),
227      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
228	   ENC(dst, reg, 2)))
229
230INSNE(addah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
231      FIX1(FIX(op, 0x34)),
232      OP3(ORREG1, ORREG1, OWREG1),
233      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
234	   ENC(dst, reg, 2)))
235INSNE(addah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
236      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
237      FIX1(FIX(op, 0x36)),
238      OP3(ORREG1, OACST, OWREG1),
239      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
240	   ENC(dst, reg, 2)))
241INSN(addah, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
242     FIX1(FIX(op, 5)),
243     OP3(ORAREG1, OLCST, OWREG1),
244     ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 1),
245	  ENC(dst, reg, 2)))
246
247INSNE(addaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
248      FIX1(FIX(op, 0x38)),
249      OP3(ORREG1, ORREG1, OWREG1),
250      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
251	   ENC(dst, reg, 2)))
252INSNE(addaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
253      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
254      FIX1(FIX(op, 0x3a)),
255      OP3(ORREG1, OACST, OWREG1),
256      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
257	   ENC(dst, reg, 2)))
258INSN(addaw, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
259     FIX1(FIX(op, 7)),
260     OP3(ORAREG1, OLCST, OWREG1),
261     ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 1),
262	  ENC(dst, reg, 2)))
263
264INSN(adddp, l, 1_or_2_src, addsubdp, C67X, 0,
265     FIX1(FIX(op, 0x18)),
266     OP3(ORREGD12, ORXREGD12, OWREGD67),
267     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
268	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
269INSN(adddp, s, l_1_or_2_src, addsubdp, C67XP, 0,
270     FIX1(FIX(op, 0x72)),
271     OP3(ORREGD12, ORXREGD12, OWREGD67),
272     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
273	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
274
275INSN(addk, s, addk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
276     FIX0(),
277     OP2(OLCST, OWREG1),
278     ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
279
280INSN(addkpc, s, addkpc, 1cycle, C64X,
281     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_SIDE_B_ONLY,
282     FIX1(FIX(s, 1)),
283     OP3(OLCST, OWREG1, OACST),
284     ENC3(ENC(src1, pcrel, 0), ENC(dst, reg, 1), ENC(src2, ucst, 2)))
285
286INSN(addsp, l, 1_or_2_src, 4cycle, C67X, 0,
287     FIX1(FIX(op, 0x10)),
288     OP3(ORREG1, ORXREG1, OWREG4),
289     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
290	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
291INSN(addsp, s, l_1_or_2_src, 4cycle, C67XP, 0,
292     FIX1(FIX(op, 0x70)),
293     OP3(ORREG1, ORXREG1, OWREG4),
294     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
295	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
296
297INSN(addsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
298     FIX1(FIX(op, 0xc)),
299     OP3(ORREG1, ORXREG1, OWREGD1),
300     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
301	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
302
303INSN(addsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
304     FIX1(FIX(op, 0xd)),
305     OP3(ORREG1, ORXREG1, OWREGD1),
306     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
307	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
308
309INSNE(addu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, 0,
310      FIX1(FIX(op, 0x2b)),
311      OP3(ORREG1, ORXREG1, OWREGL1),
312      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
313	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
314INSNE(addu, l_xui_ul_ul, l, 1_or_2_src, 1cycle, C62X, 0,
315      FIX1(FIX(op, 0x29)),
316      OP3(ORXREG1, ORREGL1, OWREGL1),
317      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
318	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
319
320INSN(add2, s, 1_or_2_src, 1cycle, C62X, 0,
321     FIX1(FIX(op, 0x1)),
322     OP3(ORREG1, ORXREG1, OWREG1),
323     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
324	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
325INSN(add2, l, 1_or_2_src, 1cycle, C64X, 0,
326     FIX1(FIX(op, 0x5)),
327     OP3(ORREG1, ORXREG1, OWREG1),
328     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
329	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
330INSN(add2, d, ext_1_or_2_src, 1cycle, C64X, 0,
331     FIX1(FIX(op, 0x4)),
332     OP3(ORREG1, ORXREG1, OWREG1),
333     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
334	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
335
336INSN(add4, l, 1_or_2_src, 1cycle, C64X, 0,
337     FIX1(FIX(op, 0x65)),
338     OP3(ORREG1, ORXREG1, OWREG1),
339     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
340	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
341
342INSNE(and, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
343      FIX1(FIX(op, 0x7b)),
344      OP3(ORREG1, ORXREG1, OWREG1),
345      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
346	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
347INSNE(and, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
348      FIX1(FIX(op, 0x7a)),
349      OP3(OACST, ORXREG1, OWREG1),
350      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
351	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
352INSNE(and, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
353      FIX1(FIX(op, 0x1f)),
354      OP3(ORREG1, ORXREG1, OWREG1),
355      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
356	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
357INSNE(and, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
358      FIX1(FIX(op, 0x1e)),
359      OP3(OACST, ORXREG1, OWREG1),
360      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
361	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
362INSNE(and, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
363      FIX1(FIX(op, 0x6)),
364      OP3(ORREG1, ORXREG1, OWREG1),
365      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
366	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
367INSNE(and, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
368      FIX1(FIX(op, 0x7)),
369      OP3(OACST, ORXREG1, OWREG1),
370      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
371	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
372
373INSN(andn, l, 1_or_2_src, 1cycle, C64X, 0,
374     FIX1(FIX(op, 0x7c)),
375     OP3(ORREG1, ORXREG1, OWREG1),
376     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
377	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
378INSN(andn, s, ext_1_or_2_src, 1cycle, C64X, 0,
379     FIX1(FIX(op, 0x6)),
380     OP3(ORREG1, ORXREG1, OWREG1),
381     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
382	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
383INSN(andn, d, ext_1_or_2_src, 1cycle, C64X, 0,
384     FIX1(FIX(op, 0x0)),
385     OP3(ORREG1, ORXREG1, OWREG1),
386     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
387	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
388
389INSN(avg2, m, compound, 1616_m, C64X, 0,
390     FIX1(FIX(op, 0x13)),
391     OP3(ORREG1, ORXREG1, OWREG2),
392     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
393	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
394
395INSN(avgu4, m, compound, 1616_m, C64X, 0,
396     FIX1(FIX(op, 0x12)),
397     OP3(ORREG1, ORXREG1, OWREG2),
398     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
399	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
400
401INSN(b, s, ext_branch_cond_imm, branch, C62X, TIC6X_FLAG_NO_CROSS,
402     FIX0(),
403     OP1(OLCST),
404     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
405INSN(b, s, branch, branch, C62X, TIC6X_FLAG_SIDE_B_ONLY,
406     FIX1(FIX(s, 1)),
407     OP1(ORXREG1),
408     ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
409INSN(b, s, b_irp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
410     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
411     OP1(ORIRP1),
412     ENC0())
413INSN(b, s, b_nrp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
414     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
415     OP1(ORNRP1),
416     ENC0())
417
418INSN(bdec, s, bdec, branch, C64X, TIC6X_FLAG_NO_CROSS,
419     FIX0(),
420     OP2(OLCST, ORWREG1),
421     ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
422
423INSN(bitc4, m, unary, 1616_m, C64X, 0,
424     FIX1(FIX(op, 0x1e)),
425     OP2(ORXREG1, OWREG2),
426     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
427	  ENC(dst, reg, 1)))
428
429INSN(bitr, m, unary, 1616_m, C64X, 0,
430     FIX1(FIX(op, 0x1f)),
431     OP2(ORXREG1, OWREG2),
432     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
433	  ENC(dst, reg, 1)))
434
435INSN(bnop, s, branch_nop_cst, branch, C64X,
436     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
437     FIX0(),
438     OP2(OLCST, OACST),
439     ENC3(ENC(s, fu, 0), ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
440INSN(bnop, nfu, s_branch_nop_cst, branch, C64XP,
441     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP,
442     FIX1(FIX(s, 0)),
443     OP2(OLCST, OACST),
444     ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
445INSN(bnop, s, branch_nop_reg, branch, C64X,
446     TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP,
447     FIX1(FIX(s, 1)),
448     OP2(ORXREG1, OACST),
449     ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
450
451INSN(bpos, s, bpos, branch, C64X, TIC6X_FLAG_NO_CROSS,
452     FIX0(),
453     OP2(OLCST, ORREG1),
454     ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
455
456INSN(call, s, ext_branch_cond_imm, branch, C62X,
457     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
458     FIX0(),
459     OP1(OLCST),
460     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
461INSN(call, s, branch, branch, C62X,
462     TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
463     FIX1(FIX(s, 1)),
464     OP1(ORXREG1),
465     ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
466INSN(call, s, b_irp, branch, C62X,
467     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
468     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
469     OP1(ORIRP1),
470     ENC0())
471INSN(call, s, b_nrp, branch, C62X,
472     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
473     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
474     OP1(ORNRP1),
475     ENC0())
476
477INSN(callnop, s, branch_nop_cst, branch, C64X,
478     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
479     FIX0(),
480     OP2(OLCST, OACST),
481     ENC3(ENC(s, fu, 0), ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
482INSN(callnop, nfu, s_branch_nop_cst, branch, C64XP,
483     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
484     FIX1(FIX(s, 0)),
485     OP2(OLCST, OACST),
486     ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
487INSN(callnop, s, branch_nop_reg, branch, C64X,
488     TIC6X_FLAG_MACRO|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
489     FIX1(FIX(s, 1)),
490     OP2(ORXREG1, OACST),
491     ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
492
493INSN(callp, s, call_imm_nop, branch, C64XP,
494     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
495     FIX1(FIX(z, 1)),
496     OP2(OLCST, OWRETREG1),
497     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
498
499INSN(callret, s, ext_branch_cond_imm, branch, C62X,
500     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
501     FIX0(),
502     OP1(OLCST),
503     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
504INSN(callret, s, branch, branch, C62X,
505     TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
506     FIX1(FIX(s, 1)),
507     OP1(ORXREG1),
508     ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
509INSN(callret, s, b_irp, branch, C62X,
510     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
511     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
512     OP1(ORIRP1),
513     ENC0())
514INSN(callret, s, b_nrp, branch, C62X,
515     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
516     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
517     OP1(ORNRP1),
518     ENC0())
519
520INSN(clr, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
521     FIX1(FIX(op, 0x3)),
522     OP4(ORREG1, OACST, OACST, OWREG1),
523     ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
524	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
525INSN(clr, s, 1_or_2_src, 1cycle, C62X, 0,
526     FIX1(FIX(op, 0x3f)),
527     OP3(ORXREG1, ORREG1, OWREG1),
528     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
529	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
530
531INSNE(cmpeq, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
532      FIX1(FIX(op, 0x53)),
533      OP3(ORREG1, ORXREG1, OWREG1),
534      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
535	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
536INSNE(cmpeq, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
537      FIX1(FIX(op, 0x52)),
538      OP3(OACST, ORXREG1, OWREG1),
539      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
540	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
541INSNE(cmpeq, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
542      FIX1(FIX(op, 0x51)),
543      OP3(ORXREG1, ORREGL1, OWREG1),
544      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
545	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
546INSNE(cmpeq, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
547      FIX2(FIX(op, 0x50), FIX(x, 0)),
548      OP3(OACST, ORREGL1, OWREG1),
549      ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
550	   ENC(dst, reg, 2)))
551
552INSN(cmpeq2, s, 1_or_2_src, 1cycle, C64X, 0,
553     FIX1(FIX(op, 0x1d)),
554     OP3(ORREG1, ORXREG1, OWREG1),
555     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
556	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
557
558INSN(cmpeq4, s, 1_or_2_src, 1cycle, C64X, 0,
559     FIX1(FIX(op, 0x1c)),
560     OP3(ORREG1, ORXREG1, OWREG1),
561     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
562	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
563
564INSN(cmpeqdp, s, 1_or_2_src, dpcmp, C67X, 0,
565     FIX1(FIX(op, 0x28)),
566     OP3(ORREGD12, ORXREGD12, OWREG2),
567     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
568	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
569
570INSN(cmpeqsp, s, 1_or_2_src, 1cycle, C67X, 0,
571     FIX1(FIX(op, 0x38)),
572     OP3(ORREG1, ORXREG1, OWREG1),
573     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
574	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
575
576INSNE(cmpgt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
577      FIX1(FIX(op, 0x47)),
578      OP3(ORREG1, ORXREG1, OWREG1),
579      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
580	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
581INSNE(cmpgt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
582      FIX1(FIX(op, 0x46)),
583      OP3(OACST, ORXREG1, OWREG1),
584      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
585	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
586INSNE(cmpgt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
587      FIX1(FIX(op, 0x45)),
588      OP3(ORXREG1, ORREGL1, OWREG1),
589      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
590	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
591INSNE(cmpgt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
592      FIX2(FIX(op, 0x44), FIX(x, 0)),
593      OP3(OACST, ORREGL1, OWREG1),
594      ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
595	   ENC(dst, reg, 2)))
596INSNE(cmpgt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
597      TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
598      FIX1(FIX(op, 0x57)),
599      OP3(ORXREG1, ORREG1, OWREG1),
600      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
601	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
602INSNE(cmpgt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
603      FIX1(FIX(op, 0x56)),
604      OP3(ORXREG1, OACST, OWREG1),
605      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
606	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
607INSNE(cmpgt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
608      FIX1(FIX(op, 0x55)),
609      OP3(ORREGL1, ORXREG1, OWREG1),
610      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
611	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
612INSNE(cmpgt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
613      TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
614      FIX2(FIX(op, 0x54), FIX(x, 0)),
615      OP3(ORREGL1, OACST, OWREG1),
616      ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
617	   ENC(dst, reg, 2)))
618
619INSN(cmpgt2, s, 1_or_2_src, 1cycle, C64X, 0,
620     FIX1(FIX(op, 0x14)),
621     OP3(ORREG1, ORXREG1, OWREG1),
622     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
623	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
624
625INSN(cmpgtdp, s, 1_or_2_src, dpcmp, C67X, 0,
626     FIX1(FIX(op, 0x29)),
627     OP3(ORREGD12, ORXREGD12, OWREG2),
628     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
629	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
630
631INSN(cmpgtsp, s, 1_or_2_src, 1cycle, C67X, 0,
632     FIX1(FIX(op, 0x39)),
633     OP3(ORREG1, ORXREG1, OWREG1),
634     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
635	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
636
637INSNE(cmpgtu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
638      FIX1(FIX(op, 0x4f)),
639      OP3(ORREG1, ORXREG1, OWREG1),
640      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
641	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
642INSNE(cmpgtu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
643      FIX2(FIX(op, 0x4e), RAN(src1, 0, 15)),
644      OP3(OACST, ORXREG1, OWREG1),
645      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
646	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
647/* Although not mentioned in SPRUFE8, CMPGTU and CMPLTU support a
648   5-bit unsigned constant operand on C64X and above.  */
649INSNE(cmpgtu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
650      FIX2(FIX(op, 0x4e), RAN(src1, 16, 31)),
651      OP3(OACST, ORXREG1, OWREG1),
652      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
653	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
654INSNE(cmpgtu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
655      FIX1(FIX(op, 0x4d)),
656      OP3(ORXREG1, ORREGL1, OWREG1),
657      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
658	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
659INSNE(cmpgtu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
660      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
661      FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 0, 15)),
662      OP3(OACST, ORREGL1, OWREG1),
663      ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
664	   ENC(dst, reg, 2)))
665INSNE(cmpgtu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
666      FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 16, 31)),
667      OP3(OACST, ORREGL1, OWREG1),
668      ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
669	   ENC(dst, reg, 2)))
670
671INSN(cmpgtu4, s, 1_or_2_src, 1cycle, C64X, 0,
672     FIX1(FIX(op, 0x15)),
673     OP3(ORREG1, ORXREG1, OWREG1),
674     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
675	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
676
677INSNE(cmplt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
678      FIX1(FIX(op, 0x57)),
679      OP3(ORREG1, ORXREG1, OWREG1),
680      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
681	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
682INSNE(cmplt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
683      FIX1(FIX(op, 0x56)),
684      OP3(OACST, ORXREG1, OWREG1),
685      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
686	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
687INSNE(cmplt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
688      FIX1(FIX(op, 0x55)),
689      OP3(ORXREG1, ORREGL1, OWREG1),
690      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
691	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
692INSNE(cmplt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
693      FIX2(FIX(op, 0x54), FIX(x, 0)),
694      OP3(OACST, ORREGL1, OWREG1),
695      ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
696	   ENC(dst, reg, 2)))
697INSNE(cmplt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
698      TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
699      FIX1(FIX(op, 0x47)),
700      OP3(ORXREG1, ORREG1, OWREG1),
701      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
702	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
703INSNE(cmplt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
704      FIX1(FIX(op, 0x46)),
705      OP3(ORXREG1, OACST, OWREG1),
706      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
707	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
708INSNE(cmplt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
709      FIX1(FIX(op, 0x45)),
710      OP3(ORREGL1, ORXREG1, OWREG1),
711      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
712	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
713INSNE(cmplt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
714      TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
715      FIX2(FIX(op, 0x44), FIX(x, 0)),
716      OP3(ORREGL1, OACST, OWREG1),
717      ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
718	   ENC(dst, reg, 2)))
719
720INSN(cmplt2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
721     FIX1(FIX(op, 0x14)),
722     OP3(ORXREG1, ORREG1, OWREG1),
723     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
724	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
725
726INSN(cmpltdp, s, 1_or_2_src, dpcmp, C67X, 0,
727     FIX1(FIX(op, 0x2a)),
728     OP3(ORREGD12, ORXREGD12, OWREG2),
729     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
730	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
731
732INSN(cmpltsp, s, 1_or_2_src, 1cycle, C67X, 0,
733     FIX1(FIX(op, 0x3a)),
734     OP3(ORREG1, ORXREG1, OWREG1),
735     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
736	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
737
738INSNE(cmpltu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
739      FIX1(FIX(op, 0x5f)),
740      OP3(ORREG1, ORXREG1, OWREG1),
741      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
742	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
743INSNE(cmpltu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
744      FIX2(FIX(op, 0x5e), RAN(src1, 0, 15)),
745      OP3(OACST, ORXREG1, OWREG1),
746      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
747	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
748INSNE(cmpltu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
749      FIX2(FIX(op, 0x5e), RAN(src1, 16, 31)),
750      OP3(OACST, ORXREG1, OWREG1),
751      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
752	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
753INSNE(cmpltu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
754      FIX1(FIX(op, 0x5d)),
755      OP3(ORXREG1, ORREGL1, OWREG1),
756      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
757	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
758INSNE(cmpltu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
759      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
760      FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 0, 15)),
761      OP3(OACST, ORREGL1, OWREG1),
762      ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
763	   ENC(dst, reg, 2)))
764INSNE(cmpltu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
765      FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 16, 31)),
766      OP3(OACST, ORREGL1, OWREG1),
767      ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
768	   ENC(dst, reg, 2)))
769
770INSN(cmpltu4, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
771     FIX1(FIX(op, 0x15)),
772     OP3(ORXREG1, ORREG1, OWREG1),
773     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
774	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
775
776INSN(cmpy, m, 1_or_2_src, 4cycle, C64XP, 0,
777     FIX1(FIX(op, 0xa)),
778     OP3(ORREG1, ORXREG1, OWREGD4),
779     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
780	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
781
782INSN(cmpyr, m, 1_or_2_src, 4cycle, C64XP, 0,
783     FIX1(FIX(op, 0xb)),
784     OP3(ORREG1, ORXREG1, OWREG4),
785     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
786	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
787
788INSN(cmpyr1, m, 1_or_2_src, 4cycle, C64XP, 0,
789     FIX1(FIX(op, 0xc)),
790     OP3(ORREG1, ORXREG1, OWREG4),
791     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
792	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
793
794INSN(cmtl, d, 1_or_2_src, load, C64XP,
795     TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
796     FIX3(FIX(s, 1), FIX(op, 0xe), FIX(src1, 0)),
797     OP2(ORMEMDW, OWDREG5),
798     ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
799
800INSN(ddotp4, m, 1_or_2_src, 4cycle, C64XP, 0,
801     FIX1(FIX(op, 0x18)),
802     OP3(ORREG1, ORXREG1, OWREGD4),
803     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
804	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
805
806INSN(ddotph2, m, 1_or_2_src, 4cycle, C64XP, 0,
807     FIX1(FIX(op, 0x17)),
808     OP3(ORREGD1, ORXREG1, OWREGD4),
809     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
810	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
811
812INSN(ddotph2r, m, 1_or_2_src, 4cycle, C64XP, 0,
813     FIX1(FIX(op, 0x15)),
814     OP3(ORREGD1, ORXREG1, OWREG4),
815     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
816	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
817
818INSN(ddotpl2, m, 1_or_2_src, 4cycle, C64XP, 0,
819     FIX1(FIX(op, 0x16)),
820     OP3(ORREGD1, ORXREG1, OWREGD4),
821     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
822	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
823
824INSN(ddotpl2r, m, 1_or_2_src, 4cycle, C64XP, 0,
825     FIX1(FIX(op, 0x14)),
826     OP3(ORREGD1, ORXREG1, OWREG4),
827     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
828	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
829
830INSN(deal, m, unary, 1616_m, C64X, 0,
831     FIX1(FIX(op, 0x1d)),
832     OP2(ORXREG1, OWREG2),
833     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
834	  ENC(dst, reg, 1)))
835
836INSN(dint, nfu, dint, 1cycle, C64XP, 0,
837     FIX1(FIX(s, 0)),
838     OP0(),
839     ENC0())
840
841INSN(dmv, s, ext_1_or_2_src, 1cycle, C64XP, 0,
842     FIX1(FIX(op, 0xb)),
843     OP3(ORREG1, ORXREG1, OWREGD1),
844     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
845	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
846
847INSNE(dotp2, m_s2_xs2_si, m, compound, 4cycle, C64X, 0,
848      FIX1(FIX(op, 0xc)),
849      OP3(ORREG1, ORXREG1, OWREG4),
850      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
851	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
852INSNE(dotp2, m_s2_xs2_sll, m, compound, 4cycle, C64X, 0,
853      FIX1(FIX(op, 0xb)),
854      OP3(ORREG1, ORXREG1, OWREGD4),
855      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
856	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
857
858INSN(dotpn2, m, compound, 4cycle, C64X, 0,
859     FIX1(FIX(op, 0x9)),
860     OP3(ORREG1, ORXREG1, OWREG4),
861     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
862	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
863
864INSN(dotpnrsu2, m, compound, 4cycle, C64X, 0,
865     FIX1(FIX(op, 0x7)),
866     OP3(ORREG1, ORXREG1, OWREG4),
867     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
868	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
869
870INSN(dotpnrus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
871     FIX1(FIX(op, 0x7)),
872     OP3(ORXREG1, ORREG1, OWREG4),
873     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
874	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
875
876INSN(dotprsu2, m, compound, 4cycle, C64X, 0,
877     FIX1(FIX(op, 0xd)),
878     OP3(ORREG1, ORXREG1, OWREG4),
879     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
880	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
881
882INSN(dotprus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
883     FIX1(FIX(op, 0xd)),
884     OP3(ORXREG1, ORREG1, OWREG4),
885     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
886	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
887
888INSN(dotpsu4, m, compound, 4cycle, C64X, 0,
889     FIX1(FIX(op, 0x2)),
890     OP3(ORREG1, ORXREG1, OWREG4),
891     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
892	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
893
894INSN(dotpus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
895     FIX1(FIX(op, 0x2)),
896     OP3(ORXREG1, ORREG1, OWREG4),
897     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
898	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
899
900INSN(dotpu4, m, compound, 4cycle, C64X, 0,
901     FIX1(FIX(op, 0x6)),
902     OP3(ORREG1, ORXREG1, OWREG4),
903     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
904	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
905
906INSN(dpack2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
907     FIX1(FIX(op, 0x34)),
908     OP3(ORREG1, ORXREG1, OWREGD1),
909     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
910	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
911
912INSN(dpackx2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
913     FIX1(FIX(op, 0x33)),
914     OP3(ORREG1, ORXREG1, OWREGD1),
915     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
916	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
917
918INSN(dpint, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
919     FIX3(FIX(op, 0x8), FIX(x, 0), FIX(src1, 0)),
920     OP2(ORREGD1, OWREG4),
921     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
922
923INSN(dpsp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
924     FIX3(FIX(op, 0x9), FIX(x, 0), FIX(src1, 0)),
925     OP2(ORREGD1, OWREG4),
926     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
927
928INSN(dptrunc, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
929     FIX3(FIX(op, 0x1), FIX(x, 0), FIX(src1, 0)),
930     OP2(ORREGD1, OWREG4),
931     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
932
933INSN(ext, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
934     FIX1(FIX(op, 0x1)),
935     OP4(ORREG1, OACST, OACST, OWREG1),
936     ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
937	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
938INSN(ext, s, 1_or_2_src, 1cycle, C62X, 0,
939     FIX1(FIX(op, 0x2f)),
940     OP3(ORXREG1, ORREG1, OWREG1),
941     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
942	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
943
944INSN(extu, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
945     FIX1(FIX(op, 0x0)),
946     OP4(ORREG1, OACST, OACST, OWREG1),
947     ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
948	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
949INSN(extu, s, 1_or_2_src, 1cycle, C62X, 0,
950     FIX1(FIX(op, 0x2b)),
951     OP3(ORXREG1, ORREG1, OWREG1),
952     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
953	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
954
955INSN(gmpy, m, 1_or_2_src, 4cycle, C64XP, TIC6X_FLAG_NO_CROSS,
956     FIX2(FIX(op, 0x1f), FIX(x, 0)),
957     OP3(ORREG1, ORREG1, OWREG4),
958     ENC4(ENC(s, fu, 0), ENC(src1, reg, 0), ENC(src2, reg, 1),
959	  ENC(dst, reg, 2)))
960
961/* This instruction can be predicated as usual; SPRUFE8 is incorrect
962   where it shows the "z" field as fixed to 1.  */
963INSN(gmpy4, m, compound, 4cycle, C64X, 0,
964     FIX1(FIX(op, 0x11)),
965     OP3(ORREG1, ORXREG1, OWREG4),
966     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
967	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
968
969INSN(idle, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MCNOP,
970     FIX2(FIX(s, 0), FIX(op, 0xf)),
971     OP0(),
972     ENC0())
973
974INSN(intdp, l, 1_or_2_src, intdp, C67X, 0,
975     FIX2(FIX(op, 0x39), FIX(src1, 0)),
976     OP2(ORXREG1, OWREGD45),
977     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
978	  ENC(dst, reg, 1)))
979
980INSN(intdpu, l, 1_or_2_src, intdp, C67X, 0,
981     FIX2(FIX(op, 0x3b), FIX(src1, 0)),
982     OP2(ORXREG1, OWREGD45),
983     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
984	  ENC(dst, reg, 1)))
985
986INSN(intsp, l, 1_or_2_src, 4cycle, C67X, 0,
987     FIX2(FIX(op, 0x4a), FIX(src1, 0)),
988     OP2(ORXREG1, OWREG4),
989     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
990	  ENC(dst, reg, 1)))
991
992INSN(intspu, l, 1_or_2_src, 4cycle, C67X, 0,
993     FIX2(FIX(op, 0x49), FIX(src1, 0)),
994     OP2(ORXREG1, OWREG4),
995     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
996	  ENC(dst, reg, 1)))
997
998INSN(ldb, d, load_store, load, C62X,
999     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
1000     FIX2(FIX(op, 2), FIX(r, 0)),
1001     OP2(ORMEMSB, OWDREG5),
1002     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1003	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1004	  ENC(srcdst, reg, 1)))
1005INSN(ldb, d, load_store_long, load, C62X,
1006     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
1007     FIX1(FIX(op, 2)),
1008     OP2(ORMEMLB, OWDREG5),
1009     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
1010	  ENC(dst, reg, 1)))
1011
1012INSN(ldbu, d, load_store, load, C62X,
1013     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
1014     FIX2(FIX(op, 1), FIX(r, 0)),
1015     OP2(ORMEMSB, OWDREG5),
1016     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1017	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1018	  ENC(srcdst, reg, 1)))
1019INSN(ldbu, d, load_store_long, load, C62X,
1020     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
1021     FIX1(FIX(op, 1)),
1022     OP2(ORMEMLB, OWDREG5),
1023     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
1024	  ENC(dst, reg, 1)))
1025
1026INSN(lddw, d, load_store, load, C64X_AND_C67X,
1027     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS,
1028     FIX2(FIX(op, 6), FIX(r, 1)),
1029     OP2(ORMEMSD, OWDREGD5),
1030     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1031	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1032	  ENC(srcdst, reg, 1)))
1033
1034INSN(ldh, d, load_store, load, C62X,
1035     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
1036     FIX2(FIX(op, 4), FIX(r, 0)),
1037     OP2(ORMEMSH, OWDREG5),
1038     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1039	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1040	  ENC(srcdst, reg, 1)))
1041INSN(ldh, d, load_store_long, load, C62X,
1042     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
1043     FIX1(FIX(op, 4)),
1044     OP2(ORMEMLH, OWDREG5),
1045     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
1046	  ENC(dst, reg, 1)))
1047
1048INSN(ldhu, d, load_store, load, C62X,
1049     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
1050     FIX2(FIX(op, 0), FIX(r, 0)),
1051     OP2(ORMEMSH, OWDREG5),
1052     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1053	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1054	  ENC(srcdst, reg, 1)))
1055INSN(ldhu, d, load_store_long, load, C62X,
1056     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
1057     FIX1(FIX(op, 0)),
1058     OP2(ORMEMLH, OWDREG5),
1059     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
1060	  ENC(dst, reg, 1)))
1061
1062INSN(ldndw, d, load_nonaligned, load, C64X,
1063     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
1064     FIX0(),
1065     OP2(ORMEMND, OWDREGD5),
1066     ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1067	  ENC(offsetR, mem_offset_noscale, 0), ENC(baseR, reg, 0),
1068	  ENC(sc, scaled, 0), ENC(dst, reg_shift, 1)))
1069
1070INSN(ldnw, d, load_store, load, C64X,
1071     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
1072     FIX2(FIX(op, 3), FIX(r, 1)),
1073     OP2(ORMEMSW, OWDREG5),
1074     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1075	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1076	  ENC(srcdst, reg, 1)))
1077
1078INSN(ldw, d, load_store, load, C62X,
1079     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
1080     FIX2(FIX(op, 6), FIX(r, 0)),
1081     OP2(ORMEMSW, OWDREG5),
1082     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
1083	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
1084	  ENC(srcdst, reg, 1)))
1085INSN(ldw, d, load_store_long, load, C62X,
1086     TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
1087     FIX1(FIX(op, 6)),
1088     OP2(ORMEMLW, OWDREG5),
1089     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 0),
1090	  ENC(dst, reg, 1)))
1091
1092INSN(ll, d, 1_or_2_src, load, C64XP,
1093     TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
1094     FIX3(FIX(s, 1), FIX(op, 0xc), FIX(src1, 0)),
1095     OP2(ORMEMDW, OWDREG5),
1096     ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
1097
1098INSNE(lmbd, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
1099      FIX1(FIX(op, 0x6b)),
1100      OP3(ORREG1, ORXREG1, OWREG1),
1101      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1102	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1103INSNE(lmbd, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
1104      FIX1(FIX(op, 0x6a)),
1105      OP3(OACST, ORXREG1, OWREG1),
1106      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1107	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1108
1109INSN(max2, l, 1_or_2_src, 1cycle, C64X, 0,
1110     FIX1(FIX(op, 0x42)),
1111     OP3(ORREG1, ORXREG1, OWREG1),
1112     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1113	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1114INSN(max2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
1115     FIX1(FIX(op, 0xd)),
1116     OP3(ORREG1, ORXREG1, OWREG1),
1117     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1118	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1119
1120INSN(maxu4, l, 1_or_2_src, 1cycle, C64X, 0,
1121     FIX1(FIX(op, 0x43)),
1122     OP3(ORREG1, ORXREG1, OWREG1),
1123     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1124	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1125
1126INSN(min2, l, 1_or_2_src, 1cycle, C64X, 0,
1127     FIX1(FIX(op, 0x41)),
1128     OP3(ORREG1, ORXREG1, OWREG1),
1129     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1130	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1131INSN(min2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
1132     FIX1(FIX(op, 0xc)),
1133     OP3(ORREG1, ORXREG1, OWREG1),
1134     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1135	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1136
1137INSN(minu4, l, 1_or_2_src, 1cycle, C64X, 0,
1138     FIX1(FIX(op, 0x48)),
1139     OP3(ORREG1, ORXREG1, OWREG1),
1140     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1141	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1142
1143INSNE(mpy, m_sl16_xsl16_si, m, mpy, 1616_m, C62X, 0,
1144      FIX1(FIX(op, 0x19)),
1145      OP3(ORREG1, ORXREG1, OWREG2),
1146      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1147	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1148INSNE(mpy, m_s5_xsl16_si, m, mpy, 1616_m, C62X, 0,
1149      FIX1(FIX(op, 0x18)),
1150      OP3(OACST, ORXREG1, OWREG2),
1151      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1152	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1153
1154INSN(mpydp, m, mpy, mpydp, C67X, TIC6X_FLAG_NO_CROSS,
1155     FIX2(FIX(op, 0x0e), FIX(x, 0)),
1156     OP3(ORREGD1234, ORREGD1324, OWREGD910),
1157     ENC4(ENC(s, fu, 0), ENC(src1, reg, 0), ENC(src2, reg, 1),
1158	  ENC(dst, reg, 2)))
1159
1160INSN(mpyh, m, mpy, 1616_m, C62X, 0,
1161     FIX1(FIX(op, 0x01)),
1162     OP3(ORREG1, ORXREG1, OWREG2),
1163     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1164	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1165
1166INSN(mpyhi, m, compound, 4cycle, C64X, 0,
1167     FIX1(FIX(op, 0x14)),
1168     OP3(ORREG1, ORXREG1, OWREGD4),
1169     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1170	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1171
1172INSN(mpyhir, m, compound, 4cycle, C64X, 0,
1173     FIX1(FIX(op, 0x10)),
1174     OP3(ORREG1, ORXREG1, OWREG4),
1175     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1176	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1177
1178INSN(mpyhl, m, mpy, 1616_m, C62X, 0,
1179     FIX1(FIX(op, 0x09)),
1180     OP3(ORREG1, ORXREG1, OWREG2),
1181     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1182	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1183
1184INSN(mpyhlu, m, mpy, 1616_m, C62X, 0,
1185     FIX1(FIX(op, 0x0f)),
1186     OP3(ORREG1, ORXREG1, OWREG2),
1187     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1188	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1189
1190INSN(mpyhslu, m, mpy, 1616_m, C62X, 0,
1191     FIX1(FIX(op, 0x0b)),
1192     OP3(ORREG1, ORXREG1, OWREG2),
1193     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1194	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1195
1196INSN(mpyhsu, m, mpy, 1616_m, C62X, 0,
1197     FIX1(FIX(op, 0x03)),
1198     OP3(ORREG1, ORXREG1, OWREG2),
1199     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1200	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1201
1202INSN(mpyhu, m, mpy, 1616_m, C62X, 0,
1203     FIX1(FIX(op, 0x07)),
1204     OP3(ORREG1, ORXREG1, OWREG2),
1205     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1206	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1207
1208INSN(mpyhuls, m, mpy, 1616_m, C62X, 0,
1209     FIX1(FIX(op, 0x0d)),
1210     OP3(ORREG1, ORXREG1, OWREG2),
1211     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1212	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1213
1214INSN(mpyhus, m, mpy, 1616_m, C62X, 0,
1215     FIX1(FIX(op, 0x05)),
1216     OP3(ORREG1, ORXREG1, OWREG2),
1217     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1218	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1219
1220INSNE(mpyi, m_si_xsi_si, m, mpy, mpyi, C67X, 0,
1221      FIX1(FIX(op, 0x04)),
1222      OP3(ORREG14, ORXREG14, OWREG9),
1223      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1224	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1225INSNE(mpyi, m_s5_xsi_si, m, mpy, mpyi, C67X, 0,
1226      FIX1(FIX(op, 0x06)),
1227      OP3(OACST, ORXREG14, OWREG9),
1228      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1229	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1230
1231INSNE(mpyid, m_si_xsi_sll, m, mpy, mpyid, C67X, 0,
1232      FIX1(FIX(op, 0x08)),
1233      OP3(ORREG14, ORXREG14, OWREGD910),
1234      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1235	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1236INSNE(mpyid, m_s5_xsi_sll, m, mpy, mpyid, C67X, 0,
1237      FIX1(FIX(op, 0x0c)),
1238      OP3(OACST, ORXREG14, OWREGD910),
1239      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1240	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1241
1242INSN(mpyih, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
1243     FIX1(FIX(op, 0x14)),
1244     OP3(ORXREG1, ORREG1, OWREGD4),
1245     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1246	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1247
1248INSN(mpyihr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
1249     FIX1(FIX(op, 0x10)),
1250     OP3(ORXREG1, ORREG1, OWREG4),
1251     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1252	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1253
1254INSN(mpyil, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
1255     FIX1(FIX(op, 0x15)),
1256     OP3(ORXREG1, ORREG1, OWREGD4),
1257     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1258	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1259
1260INSN(mpyilr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
1261     FIX1(FIX(op, 0x0e)),
1262     OP3(ORXREG1, ORREG1, OWREG4),
1263     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1264	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1265
1266INSN(mpylh, m, mpy, 1616_m, C62X, 0,
1267     FIX1(FIX(op, 0x11)),
1268     OP3(ORREG1, ORXREG1, OWREG2),
1269     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1270	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1271
1272INSN(mpylhu, m, mpy, 1616_m, C62X, 0,
1273     FIX1(FIX(op, 0x17)),
1274     OP3(ORREG1, ORXREG1, OWREG2),
1275     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1276	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1277
1278INSN(mpyli, m, compound, 4cycle, C64X, 0,
1279     FIX1(FIX(op, 0x15)),
1280     OP3(ORREG1, ORXREG1, OWREGD4),
1281     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1282	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1283
1284INSN(mpylir, m, compound, 4cycle, C64X, 0,
1285     FIX1(FIX(op, 0x0e)),
1286     OP3(ORREG1, ORXREG1, OWREG4),
1287     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1288	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1289
1290INSN(mpylshu, m, mpy, 1616_m, C62X, 0,
1291     FIX1(FIX(op, 0x13)),
1292     OP3(ORREG1, ORXREG1, OWREG2),
1293     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1294	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1295
1296INSN(mpyluhs, m, mpy, 1616_m, C62X, 0,
1297     FIX1(FIX(op, 0x15)),
1298     OP3(ORREG1, ORXREG1, OWREG2),
1299     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1300	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1301
1302INSN(mpysp, m, mpy, 4cycle, C67X, 0,
1303     FIX1(FIX(op, 0x1c)),
1304     OP3(ORREG1, ORXREG1, OWREG4),
1305     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1306	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1307
1308/* Contrary to SPRU733A, MPYSPDP and MPYSP2DP are on both C67X and
1309   C67X+.  */
1310INSN(mpyspdp, m, compound, mpyspdp, C67X, 0,
1311     FIX1(FIX(op, 0x16)),
1312     OP3(ORREG12, ORXREGD12, OWREGD67),
1313     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1314	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1315
1316INSN(mpysp2dp, m, compound, mpyspdp, C67X, 0,
1317     FIX1(FIX(op, 0x17)),
1318     OP3(ORREG1, ORXREG1, OWREGD45),
1319     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1320	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1321
1322INSNE(mpysu, m_sl16_xul16_si, m, mpy, 1616_m, C62X, 0,
1323      FIX1(FIX(op, 0x1b)),
1324      OP3(ORREG1, ORXREG1, OWREG2),
1325      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1326	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1327INSNE(mpysu, m_s5_xul16_si, m, mpy, 1616_m, C62X, 0,
1328      FIX1(FIX(op, 0x1e)),
1329      OP3(OACST, ORXREG1, OWREG2),
1330      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1331	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1332
1333INSN(mpysu4, m, compound, 4cycle, C64X, 0,
1334     FIX1(FIX(op, 0x05)),
1335     OP3(ORREG1, ORXREG1, OWREGD4),
1336     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1337	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1338
1339INSN(mpyu, m, mpy, 1616_m, C62X, 0,
1340     FIX1(FIX(op, 0x1f)),
1341     OP3(ORREG1, ORXREG1, OWREG2),
1342     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1343	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1344
1345INSN(mpyu4, m, compound, 4cycle, C64X, 0,
1346     FIX1(FIX(op, 0x04)),
1347     OP3(ORREG1, ORXREG1, OWREGD4),
1348     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1349	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1350
1351INSN(mpyus, m, mpy, 1616_m, C62X, 0,
1352     FIX1(FIX(op, 0x1d)),
1353     OP3(ORREG1, ORXREG1, OWREG2),
1354     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1355	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1356
1357INSN(mpyus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
1358     FIX1(FIX(op, 0x05)),
1359     OP3(ORXREG1, ORREG1, OWREGD4),
1360     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1361	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1362
1363INSN(mpy2, m, compound, 4cycle, C64X, 0,
1364     FIX1(FIX(op, 0x00)),
1365     OP3(ORREG1, ORXREG1, OWREGD4),
1366     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1367	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1368
1369INSN(mpy2ir, m, 1_or_2_src, 4cycle, C64XP, 0,
1370     FIX1(FIX(op, 0x0f)),
1371     OP3(ORREG1, ORXREG1, OWREGD4),
1372     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1373	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1374
1375INSNE(mpy32, 32_32_32, m, mpy, 4cycle, C64XP, 0,
1376      FIX1(FIX(op, 0x10)),
1377      OP3(ORREG1, ORXREG1, OWREG4),
1378      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1379	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1380INSNE(mpy32, 32_32_64, m, mpy, 4cycle, C64XP, 0,
1381      FIX1(FIX(op, 0x14)),
1382      OP3(ORREG1, ORXREG1, OWREGD4),
1383      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1384	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1385
1386INSN(mpy32su, m, mpy, 4cycle, C64XP, 0,
1387     FIX1(FIX(op, 0x16)),
1388     OP3(ORREG1, ORXREG1, OWREGD4),
1389     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1390	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1391
1392INSN(mpy32u, m, compound, 4cycle, C64XP, 0,
1393     FIX1(FIX(op, 0x18)),
1394     OP3(ORREG1, ORXREG1, OWREGD4),
1395     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1396	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1397
1398INSN(mpy32us, m, compound, 4cycle, C64XP, 0,
1399     FIX1(FIX(op, 0x19)),
1400     OP3(ORREG1, ORXREG1, OWREGD4),
1401     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1402	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1403
1404/* "or" forms of "mv" are preferred over "add" forms when available
1405   because "or" uses less power.  However, 40-bit moves are only
1406   available through "add", and before C64X D-unit moves are only
1407   available through "add" (without cross paths being available).  */
1408INSNE(mv, l_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1409      FIX2(FIX(op, 0x7e), FIX(src1, 0)),
1410      OP2(ORXREG1, OWREG1),
1411      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1412	   ENC(dst, reg, 1)))
1413INSNE(mv, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
1414      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
1415      FIX3(FIX(op, 0x20), FIX(x, 0), FIX(src1, 0)),
1416      OP2(ORREGL1, OWREGL1),
1417      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1418INSNE(mv, s_xui_ui, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1419      FIX2(FIX(op, 0x1a), FIX(src1, 0)),
1420      OP2(ORXREG1, OWREG1),
1421      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1422	   ENC(dst, reg, 1)))
1423INSNE(mv, d_si_si, d, 1_or_2_src, 1cycle, C62X,
1424      TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(0),
1425      FIX2(FIX(op, 0x12), FIX(src1, 0)),
1426      OP2(ORREG1, OWREG1),
1427      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1428INSNE(mv, d_xui_ui, d, ext_1_or_2_src, 1cycle, C64X,
1429      TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
1430      FIX2(FIX(op, 0x3), FIX(src1, 0)),
1431      OP2(ORXREG1, OWREG1),
1432      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1433	   ENC(dst, reg, 1)))
1434
1435INSNE(mvc, from_cr, s, 1_or_2_src, 1cycle, C62X,
1436      TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_NO_CROSS,
1437      FIX3(FIX(s, 1), FIX(op, 0x0f), FIX(x, 0)),
1438      OP2(ORCREG1, OWREG1),
1439      ENC3(ENC(src1, crhi, 0), ENC(src2, crlo, 0), ENC(dst, reg, 1)))
1440INSNE(mvc, to_cr, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_SIDE_B_ONLY,
1441      FIX2(FIX(s, 1), FIX(op, 0x0e)),
1442      OP2(ORXREG1, OWCREG1),
1443      ENC4(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, crhi, 1),
1444	   ENC(dst, crlo, 1)))
1445
1446INSN(mvd, m, unary, 4cycle, C64X, 0,
1447     FIX1(FIX(op, 0x1a)),
1448     OP2(ORXREG1, OWREG4),
1449     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1450	  ENC(dst, reg, 1)))
1451
1452INSN(mvk, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1453     FIX1(FIX(h, 0)),
1454     OP2(OLCST, OWREG1),
1455     ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
1456INSN(mvk, l, unary, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
1457     FIX2(FIX(x, 0), FIX(op, 0x05)),
1458     OP2(OACST, OWREG1),
1459     ENC3(ENC(s, fu, 0), ENC(src2, scst, 0), ENC(dst, reg, 1)))
1460INSN(mvk, d, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
1461     FIX2(FIX(op, 0x00), FIX(src2, 0)),
1462     OP2(OACST, OWREG1),
1463     ENC3(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(dst, reg, 1)))
1464
1465INSN(mvkh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1466     FIX1(FIX(h, 1)),
1467     OP2(OLCST, OWREG1),
1468     ENC3(ENC(s, fu, 0), ENC(cst, lcst_high16, 0), ENC(dst, reg, 1)))
1469
1470INSN(mvklh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
1471     FIX1(FIX(h, 1)),
1472     OP2(OLCST, OWREG1),
1473     ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
1474
1475INSN(mvkl, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
1476     FIX1(FIX(h, 0)),
1477     OP2(OLCST, OWREG1),
1478     ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
1479
1480INSNE(neg, s_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1481      FIX2(FIX(op, 0x16), FIX(src1, 0)),
1482      OP2(ORXREG1, OWREG1),
1483      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1484	   ENC(dst, reg, 1)))
1485INSNE(neg, l_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1486      FIX2(FIX(op, 0x06), FIX(src1, 0)),
1487      OP2(ORXREG1, OWREG1),
1488      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1489	   ENC(dst, reg, 1)))
1490INSNE(neg, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
1491      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
1492      FIX2(FIX(op, 0x24), FIX(src1, 0)),
1493      OP2(ORREGL1, OWREGL1),
1494      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1495	   ENC(dst, reg, 1)))
1496
1497INSN(nop, nfu, nop_idle, nop, C62X, 0,
1498     FIX2(FIX(s, 0), RAN(op, 0, 8)),
1499     OP1(OACST),
1500     ENC1(ENC(op, ucst_minus_one, 0)))
1501INSNE(nop, 1, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MACRO,
1502      FIX2(FIX(s, 0), FIX(op, 0)),
1503      OP0(),
1504      ENC0())
1505
1506INSNE(norm, l_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
1507      FIX2(FIX(op, 0x63), FIX(src1, 0)),
1508      OP2(ORXREG1, OWREG1),
1509      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1510	   ENC(dst, reg, 1)))
1511INSNE(norm, l_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1512      FIX3(FIX(op, 0x60), FIX(x, 0), FIX(src1, 0)),
1513      OP2(ORREGL1, OWREG1),
1514      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1515
1516INSN(not, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1517     FIX2(FIX(op, 0x6e), FIX(src1, 0x1f)),
1518     OP2(ORXREG1, OWREG1),
1519     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1520	  ENC(dst, reg, 1)))
1521INSN(not, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
1522     FIX2(FIX(op, 0x0a), FIX(src1, 0x1f)),
1523     OP2(ORXREG1, OWREG1),
1524     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1525	  ENC(dst, reg, 1)))
1526INSN(not, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
1527     FIX2(FIX(op, 0xf), FIX(src1, 0x1f)),
1528     OP2(ORXREG1, OWREG1),
1529     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1530	  ENC(dst, reg, 1)))
1531
1532INSNE(or, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
1533      FIX1(FIX(op, 0x2)),
1534      OP3(ORREG1, ORXREG1, OWREG1),
1535      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1536	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1537INSNE(or, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
1538      FIX1(FIX(op, 0x3)),
1539      OP3(OACST, ORXREG1, OWREG1),
1540      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1541	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1542INSNE(or, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
1543      FIX1(FIX(op, 0x7f)),
1544      OP3(ORREG1, ORXREG1, OWREG1),
1545      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1546	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1547INSNE(or, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
1548      FIX1(FIX(op, 0x7e)),
1549      OP3(OACST, ORXREG1, OWREG1),
1550      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1551	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1552INSNE(or, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
1553      FIX1(FIX(op, 0x1b)),
1554      OP3(ORREG1, ORXREG1, OWREG1),
1555      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1556	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1557INSNE(or, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
1558      FIX1(FIX(op, 0x1a)),
1559      OP3(OACST, ORXREG1, OWREG1),
1560      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1561	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1562
1563INSN(pack2, l, 1_or_2_src, 1cycle, C64X, 0,
1564     FIX1(FIX(op, 0x0)),
1565     OP3(ORREG1, ORXREG1, OWREG1),
1566     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1567	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1568INSN(pack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1569     FIX1(FIX(op, 0xf)),
1570     OP3(ORREG1, ORXREG1, OWREG1),
1571     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1572	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1573
1574INSN(packh2, l, 1_or_2_src, 1cycle, C64X, 0,
1575     FIX1(FIX(op, 0x1e)),
1576     OP3(ORREG1, ORXREG1, OWREG1),
1577     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1578	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1579INSN(packh2, s, 1_or_2_src, 1cycle, C64X, 0,
1580     FIX1(FIX(op, 0x9)),
1581     OP3(ORREG1, ORXREG1, OWREG1),
1582     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1583	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1584
1585INSN(packh4, l, 1_or_2_src, 1cycle, C64X, 0,
1586     FIX1(FIX(op, 0x69)),
1587     OP3(ORREG1, ORXREG1, OWREG1),
1588     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1589	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1590
1591INSN(packhl2, l, 1_or_2_src, 1cycle, C64X, 0,
1592     FIX1(FIX(op, 0x1c)),
1593     OP3(ORREG1, ORXREG1, OWREG1),
1594     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1595	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1596INSN(packhl2, s, 1_or_2_src, 1cycle, C64X, 0,
1597     FIX1(FIX(op, 0x8)),
1598     OP3(ORREG1, ORXREG1, OWREG1),
1599     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1600	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1601
1602INSN(packlh2, l, 1_or_2_src, 1cycle, C64X, 0,
1603     FIX1(FIX(op, 0x1b)),
1604     OP3(ORREG1, ORXREG1, OWREG1),
1605     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1606	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1607INSN(packlh2, s, 1_or_2_src, 1cycle, C64X, 0,
1608     FIX1(FIX(op, 0x10)),
1609     OP3(ORREG1, ORXREG1, OWREG1),
1610     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1611	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1612
1613INSN(packl4, l, 1_or_2_src, 1cycle, C64X, 0,
1614     FIX1(FIX(op, 0x68)),
1615     OP3(ORREG1, ORXREG1, OWREG1),
1616     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1617	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1618
1619INSN(rcpdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
1620     FIX3(FIX(op, 0x2d), FIX(x, 0), FIX(src1, 0)),
1621     OP2(ORREGD1, OWREGD12),
1622     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1623
1624INSN(rcpsp, s, 1_or_2_src, 1cycle, C67X, 0,
1625     FIX2(FIX(op, 0x3d), FIX(src1, 0)),
1626     OP2(ORXREG1, OWREG1),
1627     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1628	  ENC(dst, reg, 1)))
1629
1630INSN(ret, s, ext_branch_cond_imm, branch, C62X,
1631     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
1632     FIX0(),
1633     OP1(OLCST),
1634     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
1635INSN(ret, s, branch, branch, C62X,
1636     TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
1637     FIX1(FIX(s, 1)),
1638     OP1(ORXREG1),
1639     ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
1640INSN(ret, s, b_irp, branch, C62X,
1641     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
1642     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
1643     OP1(ORIRP1),
1644     ENC0())
1645INSN(ret, s, b_nrp, branch, C62X,
1646     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
1647     FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
1648     OP1(ORNRP1),
1649     ENC0())
1650
1651INSN(retp, s, call_imm_nop, branch, C64XP,
1652     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
1653     FIX1(FIX(z, 1)),
1654     OP2(OLCST, OWRETREG1),
1655     ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
1656
1657INSN(rint, nfu, rint, 1cycle, C64XP, 0,
1658     FIX1(FIX(s, 0)),
1659     OP0(),
1660     ENC0())
1661
1662INSNE(rotl, m_ui_xui_ui, m, compound, 1616_m, C64X, 0,
1663      FIX1(FIX(op, 0x1d)),
1664      OP3(ORXREG1, ORREG1, OWREG2),
1665      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1666	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1667INSNE(rotl, m_u5_xui_ui, m, compound, 1616_m, C64X, 0,
1668      FIX1(FIX(op, 0x1e)),
1669      OP3(ORXREG1, OACST, OWREG2),
1670      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1671	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1672
1673INSN(rpack2, s, ext_1_or_2_src_noncond, 1cycle, C64XP, 0,
1674     FIX2(FIX(op, 0xb), FIX(z, 1)),
1675     OP3(ORREG1, ORXREG1, OWREG1),
1676     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1677	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1678
1679INSN(rsqrdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
1680     FIX3(FIX(op, 0x2e), FIX(x, 0), FIX(src1, 0)),
1681     OP2(ORREGD1, OWREGD12),
1682     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1683
1684INSN(rsqrsp, s, 1_or_2_src, 1cycle, C67X, 0,
1685     FIX2(FIX(op, 0x3e), FIX(src1, 0)),
1686     OP2(ORXREG1, OWREG1),
1687     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1688	  ENC(dst, reg, 1)))
1689
1690INSNE(sadd, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
1691      FIX1(FIX(op, 0x13)),
1692      OP3(ORREG1, ORXREG1, OWREG1),
1693      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1694	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1695INSNE(sadd, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
1696      FIX1(FIX(op, 0x31)),
1697      OP3(ORXREG1, ORREGL1, OWREGL1),
1698      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1699	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1700INSNE(sadd, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
1701      FIX1(FIX(op, 0x12)),
1702      OP3(OACST, ORXREG1, OWREG1),
1703      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1704	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1705INSNE(sadd, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1706      FIX1(FIX(op, 0x30)),
1707      OP3(OACST, ORREGL1, OWREGL1),
1708      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
1709	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1710INSNE(sadd, s_si_xsi_si, s, 1_or_2_src, 1cycle, C64X, 0,
1711      FIX1(FIX(op, 0x20)),
1712      OP3(ORREG1, ORXREG1, OWREG1),
1713      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1714	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
1715
1716INSN(sadd2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1717     FIX1(FIX(op, 0x0)),
1718     OP3(ORREG1, ORXREG1, OWREG1),
1719     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1720	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1721
1722INSN(saddsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
1723     FIX1(FIX(op, 0x0e)),
1724     OP3(ORREG1, ORXREG1, OWREGD1),
1725     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1726	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1727
1728INSN(saddsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
1729     FIX1(FIX(op, 0x0f)),
1730     OP3(ORREG1, ORXREG1, OWREGD1),
1731     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1732	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1733
1734INSN(saddsu2, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
1735     FIX1(FIX(op, 0x1)),
1736     OP3(ORXREG1, ORREG1, OWREG1),
1737     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1738	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1739
1740INSN(saddus2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1741     FIX1(FIX(op, 0x1)),
1742     OP3(ORREG1, ORXREG1, OWREG1),
1743     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1744	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1745
1746INSN(saddu4, s, ext_1_or_2_src, 1cycle, C64X, 0,
1747     FIX1(FIX(op, 0x3)),
1748     OP3(ORREG1, ORXREG1, OWREG1),
1749     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1750	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1751
1752INSN(sat, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1753     FIX3(FIX(op, 0x40), FIX(x, 0), FIX(src1, 0)),
1754     OP2(ORREGL1, OWREG1),
1755     ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
1756
1757INSN(set, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1758     FIX1(FIX(op, 0x2)),
1759     OP4(ORREG1, OACST, OACST, OWREG1),
1760     ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
1761	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
1762INSN(set, s, 1_or_2_src, 1cycle, C62X, 0,
1763     FIX1(FIX(op, 0x3b)),
1764     OP3(ORXREG1, ORREG1, OWREG1),
1765     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1766	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
1767
1768INSN(shfl, m, unary, 1616_m, C64X, 0,
1769     FIX1(FIX(op, 0x1c)),
1770     OP2(ORXREG1, OWREG2),
1771     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1772	  ENC(dst, reg, 1)))
1773
1774INSN(shfl3, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
1775     FIX1(FIX(op, 0x36)),
1776     OP3(ORREG1, ORXREG1, OWREGD1),
1777     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1778	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1779
1780INSNE(shl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
1781      FIX1(FIX(op, 0x33)),
1782      OP3(ORXREG1, ORREG1, OWREG1),
1783      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1784	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1785INSNE(shl, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1786      FIX2(FIX(op, 0x31), FIX(x, 0)),
1787      OP3(ORREGL1, ORREG1, OWREGL1),
1788      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
1789	   ENC(dst, reg, 2)))
1790INSNE(shl, s_xui_ui_ul, s, 1_or_2_src, 1cycle, C62X, 0,
1791      FIX1(FIX(op, 0x13)),
1792      OP3(ORXREG1, ORREG1, OWREGL1),
1793      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1794	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1795INSNE(shl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
1796      FIX1(FIX(op, 0x32)),
1797      OP3(ORXREG1, OACST, OWREG1),
1798      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1799	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1800INSNE(shl, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1801      FIX2(FIX(op, 0x30), FIX(x, 0)),
1802      OP3(ORREGL1, OACST, OWREGL1),
1803      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
1804	   ENC(dst, reg, 2)))
1805INSNE(shl, s_xui_u5_ul, s, 1_or_2_src, 1cycle, C62X, 0,
1806      FIX1(FIX(op, 0x12)),
1807      OP3(ORXREG1, OACST, OWREGL1),
1808      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1809	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1810
1811INSN(shlmb, l, 1_or_2_src, 1cycle, C64X, 0,
1812     FIX1(FIX(op, 0x61)),
1813     OP3(ORREG1, ORXREG1, OWREG1),
1814     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1815	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1816INSN(shlmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
1817     FIX1(FIX(op, 0x9)),
1818     OP3(ORREG1, ORXREG1, OWREG1),
1819     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1820	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1821
1822INSNE(shr, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
1823      FIX1(FIX(op, 0x37)),
1824      OP3(ORXREG1, ORREG1, OWREG1),
1825      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1826	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1827INSNE(shr, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1828      FIX2(FIX(op, 0x35), FIX(x, 0)),
1829      OP3(ORREGL1, ORREG1, OWREGL1),
1830      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
1831	   ENC(dst, reg, 2)))
1832INSNE(shr, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
1833      FIX1(FIX(op, 0x36)),
1834      OP3(ORXREG1, OACST, OWREG1),
1835      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1836	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1837INSNE(shr, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1838      FIX2(FIX(op, 0x34), FIX(x, 0)),
1839      OP3(ORREGL1, OACST, OWREGL1),
1840      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
1841	   ENC(dst, reg, 2)))
1842
1843INSNE(shr2, s_xs2_ui_s2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1844      FIX1(FIX(op, 0x7)),
1845      OP3(ORXREG1, ORREG1, OWREG1),
1846      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1847	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1848INSNE(shr2, s_xs2_u5_s2, s, 1_or_2_src, 1cycle, C64X, 0,
1849      FIX1(FIX(op, 0x18)),
1850      OP3(ORXREG1, OACST, OWREG1),
1851      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1852	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1853
1854INSN(shrmb, l, 1_or_2_src, 1cycle, C64X, 0,
1855     FIX1(FIX(op, 0x62)),
1856     OP3(ORREG1, ORXREG1, OWREG1),
1857     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1858	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1859INSN(shrmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
1860     FIX1(FIX(op, 0xa)),
1861     OP3(ORREG1, ORXREG1, OWREG1),
1862     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1863	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1864
1865INSNE(shru, s_xui_ui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
1866      FIX1(FIX(op, 0x27)),
1867      OP3(ORXREG1, ORREG1, OWREG1),
1868      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1869	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1870INSNE(shru, s_ul_ui_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1871      FIX2(FIX(op, 0x25), FIX(x, 0)),
1872      OP3(ORREGL1, ORREG1, OWREGL1),
1873      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
1874	   ENC(dst, reg, 2)))
1875INSNE(shru, s_xui_u5_ui, s, 1_or_2_src, 1cycle, C62X, 0,
1876      FIX1(FIX(op, 0x26)),
1877      OP3(ORXREG1, OACST, OWREG1),
1878      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1879	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1880INSNE(shru, s_ul_u5_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
1881      FIX2(FIX(op, 0x24), FIX(x, 0)),
1882      OP3(ORREGL1, OACST, OWREGL1),
1883      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
1884	   ENC(dst, reg, 2)))
1885
1886INSNE(shru2, s_xu2_ui_u2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1887      FIX1(FIX(op, 0x8)),
1888      OP3(ORXREG1, ORREG1, OWREG1),
1889      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1890	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
1891INSNE(shru2, s_xu2_u5_u2, s, 1_or_2_src, 1cycle, C64X, 0,
1892      FIX1(FIX(op, 0x19)),
1893      OP3(ORXREG1, OACST, OWREG1),
1894      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1895	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
1896
1897INSN(sl, d, 1_or_2_src, store, C64XP,
1898     TIC6X_FLAG_STORE|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
1899     FIX3(FIX(s, 1), FIX(op, 0xd), FIX(src1, 0)),
1900     OP2(ORDREG1, OWMEMDW),
1901     ENC2(ENC(dst, reg, 0), ENC(src2, reg, 1)))
1902
1903INSN(smpy, m, mpy, 1616_m, C62X, 0,
1904     FIX1(FIX(op, 0x1a)),
1905     OP3(ORREG1, ORXREG1, OWREG2),
1906     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1907	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1908
1909INSN(smpyh, m, mpy, 1616_m, C62X, 0,
1910     FIX1(FIX(op, 0x02)),
1911     OP3(ORREG1, ORXREG1, OWREG2),
1912     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1913	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1914
1915INSN(smpyhl, m, mpy, 1616_m, C62X, 0,
1916     FIX1(FIX(op, 0x0a)),
1917     OP3(ORREG1, ORXREG1, OWREG2),
1918     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1919	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1920
1921INSN(smpylh, m, mpy, 1616_m, C62X, 0,
1922     FIX1(FIX(op, 0x12)),
1923     OP3(ORREG1, ORXREG1, OWREG2),
1924     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1925	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1926
1927INSN(smpy2, m, compound, 4cycle, C64X, 0,
1928     FIX1(FIX(op, 0x01)),
1929     OP3(ORREG1, ORXREG1, OWREGD4),
1930     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1931	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1932
1933/* Contrary to SPRUFE8, this is the correct operand order for this
1934   instruction.  */
1935INSN(smpy32, m, 1_or_2_src, 4cycle, C64XP, 0,
1936     FIX1(FIX(op, 0x19)),
1937     OP3(ORREG1, ORXREG1, OWREG4),
1938     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1939	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1940
1941INSN(spack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
1942     FIX1(FIX(op, 0x2)),
1943     OP3(ORREG1, ORXREG1, OWREG1),
1944     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1945	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1946
1947INSN(spacku4, s, ext_1_or_2_src, 1cycle, C64X, 0,
1948     FIX1(FIX(op, 0x4)),
1949     OP3(ORREG1, ORXREG1, OWREG1),
1950     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
1951	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
1952
1953INSN(spdp, s, 1_or_2_src, 2cycle_dp, C67X, 0,
1954     FIX2(FIX(op, 0x02), FIX(src1, 0)),
1955     OP2(ORXREG1, OWREGD12),
1956     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1957	  ENC(dst, reg, 1)))
1958
1959INSN(spint, l, 1_or_2_src, 4cycle, C67X, 0,
1960     FIX2(FIX(op, 0x0a), FIX(src1, 0)),
1961     OP2(ORXREG1, OWREG4),
1962     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
1963	  ENC(dst, reg, 1)))
1964
1965INSNE(spkernel, nfu_2, nfu, spkernel, 1cycle, C64XP,
1966      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
1967      FIX1(FIX(s, 0)),
1968      OP2(OACST, OACST),
1969      ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1)))
1970INSNE(spkernel, nfu_0, nfu, spkernel, 1cycle, C64XP,
1971      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL|TIC6X_FLAG_MACRO,
1972      FIX2(FIX(s, 0), FIX(fstgfcyc, 0)),
1973      OP0(),
1974      ENC0())
1975
1976INSN(spkernelr, nfu, spkernelr, 1cycle, C64XP,
1977     TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
1978     FIX1(FIX(s, 0)),
1979     OP0(),
1980     ENC0())
1981
1982INSN(sploop, nfu, loop_buffer, 1cycle, C64XP,
1983     TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
1984     FIX4(FIX(s, 0), FIX(op, 0xc), FIX(csta, 0), RAN(cstb, 0, 13)),
1985     OP1(OACST),
1986     ENC1(ENC(cstb, ucst_minus_one, 0)))
1987
1988INSN(sploopd, nfu, loop_buffer, 1cycle, C64XP,
1989     TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
1990     FIX4(FIX(s, 0), FIX(op, 0xd), FIX(csta, 0), RAN(cstb, 0, 13)),
1991     OP1(OACST),
1992     ENC1(ENC(cstb, ucst_minus_one, 0)))
1993
1994INSN(sploopw, nfu, loop_buffer, 1cycle, C64XP,
1995     TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
1996     FIX4(FIX(s, 0), FIX(op, 0xf), FIX(csta, 0), RAN(cstb, 0, 13)),
1997     OP1(OACST),
1998     ENC1(ENC(cstb, ucst_minus_one, 0)))
1999
2000/* Contrary to SPRUFE8, this is the correct encoding for this
2001   instruction.  */
2002INSN(spmask, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
2003     FIX2(FIX(s, 0), FIX(op, 0x8)),
2004     OP1(OFULIST),
2005     ENC1(ENC(mask, spmask, 0)))
2006
2007INSN(spmaskr, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
2008     FIX2(FIX(s, 0), FIX(op, 0x9)),
2009     OP1(OFULIST),
2010     ENC1(ENC(mask, spmask, 0)))
2011
2012INSN(sptrunc, l, 1_or_2_src, 4cycle, C67X, 0,
2013     FIX2(FIX(op, 0x0b), FIX(src1, 0)),
2014     OP2(ORXREG1, OWREG4),
2015     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2016	  ENC(dst, reg, 1)))
2017
2018INSNE(sshl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
2019      FIX1(FIX(op, 0x23)),
2020      OP3(ORXREG1, ORREG1, OWREG1),
2021      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2022	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
2023INSNE(sshl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
2024      FIX1(FIX(op, 0x22)),
2025      OP3(ORXREG1, OACST, OWREG1),
2026      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2027	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
2028
2029INSN(sshvl, m, compound, 1616_m, C64X, 0,
2030     FIX1(FIX(op, 0x1c)),
2031     OP3(ORXREG1, ORREG1, OWREG2),
2032     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2033	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
2034
2035/* Contrary to SPRUFE8, this is the correct encoding for this
2036   instruction.  */
2037INSN(sshvr, m, compound, 1616_m, C64X, 0,
2038     FIX1(FIX(op, 0x1a)),
2039     OP3(ORXREG1, ORREG1, OWREG2),
2040     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2041	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
2042
2043INSNE(ssub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
2044      FIX1(FIX(op, 0x0f)),
2045      OP3(ORREG1, ORXREG1, OWREG1),
2046      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2047	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2048INSNE(ssub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
2049      FIX1(FIX(op, 0x1f)),
2050      OP3(ORXREG1, ORREG1, OWREG1),
2051      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2052	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2053INSNE(ssub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
2054      FIX1(FIX(op, 0x0e)),
2055      OP3(OACST, ORXREG1, OWREG1),
2056      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2057	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2058INSNE(ssub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2059      FIX1(FIX(op, 0x2c)),
2060      OP3(OACST, ORREGL1, OWREGL1),
2061      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2062	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2063
2064INSN(ssub2, l, 1_or_2_src, 1cycle, C64XP, 0,
2065     FIX1(FIX(op, 0x64)),
2066     OP3(ORREG1, ORXREG1, OWREG1),
2067     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2068	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2069
2070INSN(stb, d, load_store, store, C62X,
2071     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
2072     FIX2(FIX(op, 3), FIX(r, 0)),
2073     OP2(ORDREG1, OWMEMSB),
2074     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2075	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
2076	  ENC(srcdst, reg, 0)))
2077INSN(stb, d, load_store_long, store, C62X,
2078     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
2079     FIX1(FIX(op, 3)),
2080     OP2(ORDREG1, OWMEMLB),
2081     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_byte, 1),
2082	  ENC(dst, reg, 0)))
2083
2084INSN(stdw, d, load_store, store, C64X, TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS,
2085     FIX2(FIX(op, 4), FIX(r, 1)),
2086     OP2(ORDREGD1, OWMEMSD),
2087     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2088	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
2089	  ENC(srcdst, reg, 0)))
2090
2091INSN(sth, d, load_store, store, C62X,
2092     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
2093     FIX2(FIX(op, 5), FIX(r, 0)),
2094     OP2(ORDREG1, OWMEMSH),
2095     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2096	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
2097	  ENC(srcdst, reg, 0)))
2098INSN(sth, d, load_store_long, store, C62X,
2099     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
2100     FIX1(FIX(op, 5)),
2101     OP2(ORDREG1, OWMEMLH),
2102     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_half, 1),
2103	  ENC(dst, reg, 0)))
2104
2105INSN(stndw, d, store_nonaligned, store, C64X,
2106     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
2107     FIX0(),
2108     OP2(ORDREGD1, OWMEMND),
2109     ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2110	  ENC(offsetR, mem_offset_noscale, 1), ENC(baseR, reg, 1),
2111	  ENC(sc, scaled, 1), ENC(src, reg_shift, 0)))
2112
2113INSN(stnw, d, load_store, store, C64X,
2114     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
2115     FIX2(FIX(op, 5), FIX(r, 1)),
2116     OP2(ORDREG1, OWMEMSW),
2117     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2118	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
2119	  ENC(srcdst, reg, 0)))
2120
2121INSN(stw, d, load_store, store, C62X,
2122     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
2123     FIX2(FIX(op, 7), FIX(r, 0)),
2124     OP2(ORDREG1, OWMEMSW),
2125     ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
2126	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
2127	  ENC(srcdst, reg, 0)))
2128INSN(stw, d, load_store_long, store, C62X,
2129     TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
2130     FIX1(FIX(op, 7)),
2131     OP2(ORDREG1, OWMEMLW),
2132     ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_word, 1),
2133	  ENC(dst, reg, 0)))
2134
2135INSNE(sub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
2136      FIX1(FIX(op, 0x07)),
2137      OP3(ORREG1, ORXREG1, OWREG1),
2138      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2139	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2140INSNE(sub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
2141      FIX1(FIX(op, 0x17)),
2142      OP3(ORXREG1, ORREG1, OWREG1),
2143      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2144	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2145INSNE(sub, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
2146      FIX1(FIX(op, 0x27)),
2147      OP3(ORREG1, ORXREG1, OWREGL1),
2148      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2149	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2150INSNE(sub, l_xsi_si_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
2151      FIX1(FIX(op, 0x37)),
2152      OP3(ORXREG1, ORREG1, OWREGL1),
2153      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2154	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2155INSNE(sub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
2156      FIX1(FIX(op, 0x06)),
2157      OP3(OACST, ORXREG1, OWREG1),
2158      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2159	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2160INSNE(sub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2161      FIX1(FIX(op, 0x24)),
2162      OP3(OACST, ORREGL1, OWREGL1),
2163      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2164	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2165INSNE(sub, l_xsi_s5_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
2166      FIX1(FIX(op, 0x2)),
2167      OP3(ORXREG1, OACST, OWREG1),
2168      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
2169	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
2170INSNE(sub, l_sl_s5_sl, l, 1_or_2_src, 1cycle, C62X,
2171      TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
2172      FIX2(FIX(op, 0x20), FIX(x, 0)),
2173      OP3(ORREGL1, OACST, OWREGL1),
2174      ENC4(ENC(s, fu, 0), ENC(src1, scst_negate, 1), ENC(src2, reg, 0),
2175	   ENC(dst, reg, 2)))
2176INSNE(sub, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
2177      FIX1(FIX(op, 0x17)),
2178      OP3(ORREG1, ORXREG1, OWREG1),
2179      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2180	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2181INSNE(sub, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
2182      FIX1(FIX(op, 0x16)),
2183      OP3(OACST, ORXREG1, OWREG1),
2184      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2185	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2186/* Contrary to SPRUFE8, this is the correct encoding for this
2187   instruction; this instruction can be predicated.  */
2188INSNE(sub, s_xsi_si_si, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
2189      FIX1(FIX(op, 0x5)),
2190      OP3(ORXREG1, ORREG1, OWREG1),
2191      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2192	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
2193INSNE(sub, s_xsi_s5_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
2194      FIX1(FIX(op, 0x6)),
2195      OP3(ORXREG1, OACST, OWREG1),
2196      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
2197	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
2198INSNE(sub, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
2199      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
2200      FIX1(FIX(op, 0x11)),
2201      OP3(ORREG1, ORREG1, OWREG1),
2202      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
2203	   ENC(dst, reg, 2)))
2204INSNE(sub, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2205      FIX1(FIX(op, 0x13)),
2206      OP3(ORREG1, OACST, OWREG1),
2207      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
2208	   ENC(dst, reg, 2)))
2209INSNE(sub, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
2210      FIX1(FIX(op, 0xc)),
2211      OP3(ORREG1, ORXREG1, OWREG1),
2212      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2213	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2214
2215INSNE(subab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2216      FIX1(FIX(op, 0x31)),
2217      OP3(ORREG1, ORREG1, OWREG1),
2218      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
2219	   ENC(dst, reg, 2)))
2220INSNE(subab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2221      FIX1(FIX(op, 0x33)),
2222      OP3(ORREG1, OACST, OWREG1),
2223      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
2224	   ENC(dst, reg, 2)))
2225
2226INSN(subabs4, l, 1_or_2_src, 1cycle, C64X, 0,
2227     FIX1(FIX(op, 0x5a)),
2228     OP3(ORREG1, ORXREG1, OWREG1),
2229     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2230	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2231
2232INSNE(subah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2233      FIX1(FIX(op, 0x35)),
2234      OP3(ORREG1, ORREG1, OWREG1),
2235      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
2236	   ENC(dst, reg, 2)))
2237INSNE(subah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2238      FIX1(FIX(op, 0x37)),
2239      OP3(ORREG1, OACST, OWREG1),
2240      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
2241	   ENC(dst, reg, 2)))
2242
2243INSNE(subaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2244      FIX1(FIX(op, 0x39)),
2245      OP3(ORREG1, ORREG1, OWREG1),
2246      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
2247	   ENC(dst, reg, 2)))
2248INSNE(subaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
2249      FIX1(FIX(op, 0x3b)),
2250      OP3(ORREG1, OACST, OWREG1),
2251      ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
2252	   ENC(dst, reg, 2)))
2253
2254INSN(subc, l, 1_or_2_src, 1cycle, C62X, 0,
2255     FIX1(FIX(op, 0x4b)),
2256     OP3(ORREG1, ORXREG1, OWREG1),
2257     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2258	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2259
2260INSNE(subdp, l_dp_xdp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(1),
2261      FIX1(FIX(op, 0x19)),
2262      OP3(ORREGD12, ORXREGD12, OWREGD67),
2263      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2264	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2265INSNE(subdp, l_xdp_dp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(0),
2266      FIX1(FIX(op, 0x1d)),
2267      OP3(ORXREGD12, ORREGD12, OWREGD67),
2268      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2269	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2270INSNE(subdp, s_dp_xdp_dp, s, l_1_or_2_src, addsubdp, C67XP,
2271      TIC6X_FLAG_PREFER(1),
2272      FIX1(FIX(op, 0x73)),
2273      OP3(ORREGD12, ORXREGD12, OWREGD67),
2274      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2275	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2276INSNE(subdp, s_xdp_dp_dp, s, l_1_or_2_src, addsubdp, C67XP,
2277      TIC6X_FLAG_PREFER(0),
2278      FIX1(FIX(op, 0x77)),
2279      OP3(ORXREGD12, ORREGD12, OWREGD67),
2280      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2281	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
2282
2283INSNE(subsp, l_sp_xsp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(1),
2284      FIX1(FIX(op, 0x11)),
2285      OP3(ORREG1, ORXREG1, OWREG4),
2286      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2287	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2288INSNE(subsp, l_xsp_sp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(0),
2289      FIX1(FIX(op, 0x15)),
2290      OP3(ORXREG1, ORREG1, OWREG4),
2291      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2292	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2293INSNE(subsp, s_sp_xsp_sp, s, l_1_or_2_src, 4cycle, C67XP,
2294      TIC6X_FLAG_PREFER(1),
2295      FIX1(FIX(op, 0x71)),
2296      OP3(ORREG1, ORXREG1, OWREG4),
2297      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2298	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2299INSNE(subsp, s_xsp_sp_sp, s, l_1_or_2_src, 4cycle, C67XP,
2300      TIC6X_FLAG_PREFER(0),
2301      FIX1(FIX(op, 0x75)),
2302      OP3(ORXREG1, ORREG1, OWREG4),
2303      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2304	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
2305
2306INSNE(subu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
2307      FIX1(FIX(op, 0x2f)),
2308      OP3(ORREG1, ORXREG1, OWREGL1),
2309      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2310	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2311INSNE(subu, l_xui_ui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
2312      FIX1(FIX(op, 0x3f)),
2313      OP3(ORXREG1, ORREG1, OWREGL1),
2314      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2315	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2316
2317INSN(sub2, l, 1_or_2_src, 1cycle, C64X, 0,
2318     FIX1(FIX(op, 0x04)),
2319     OP3(ORREG1, ORXREG1, OWREG1),
2320     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2321	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2322INSN(sub2, s, 1_or_2_src, 1cycle, C62X, 0,
2323     FIX1(FIX(op, 0x11)),
2324     OP3(ORREG1, ORXREG1, OWREG1),
2325     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2326	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2327INSN(sub2, d, ext_1_or_2_src, 1cycle, C64X, 0,
2328     FIX1(FIX(op, 0x5)),
2329     OP3(ORREG1, ORXREG1, OWREG1),
2330     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2331	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2332
2333INSN(sub4, l, 1_or_2_src, 1cycle, C64X, 0,
2334     FIX1(FIX(op, 0x66)),
2335     OP3(ORREG1, ORXREG1, OWREG1),
2336     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2337	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2338
2339INSN(swap2, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
2340     FIX2(FIX(op, 0x1b), FIX(x, 0)),
2341     OP2(ORREG1, OWREG1),
2342     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2343	  ENC(src2, reg, 0), ENC(dst, reg, 1)))
2344INSN(swap2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
2345     FIX2(FIX(op, 0x10), FIX(x, 0)),
2346     OP2(ORREG1, OWREG1),
2347     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2348	  ENC(src2, reg, 0), ENC(dst, reg, 1)))
2349
2350/* Contrary to SPRUFE8, this is the correct encoding for this
2351   instruction.  */
2352INSN(swap4, l, unary, 1cycle, C64X, 0,
2353     FIX1(FIX(op, 0x1)),
2354     OP2(ORXREG1, OWREG1),
2355     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2356	  ENC(dst, reg, 1)))
2357
2358INSN(swe, nfu, swe, 1cycle, C64XP, 0,
2359     FIX1(FIX(s, 0)),
2360     OP0(),
2361     ENC0())
2362
2363INSN(swenr, nfu, swenr, 1cycle, C64XP, 0,
2364     FIX1(FIX(s, 0)),
2365     OP0(),
2366     ENC0())
2367
2368INSN(unpkhu4, l, unary, 1cycle, C64X, 0,
2369     FIX1(FIX(op, 0x03)),
2370     OP2(ORXREG1, OWREG1),
2371     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2372	  ENC(dst, reg, 1)))
2373INSN(unpkhu4, s, unary, 1cycle, C64X, 0,
2374     FIX1(FIX(op, 0x03)),
2375     OP2(ORXREG1, OWREG1),
2376     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2377	  ENC(dst, reg, 1)))
2378
2379INSN(unpklu4, l, unary, 1cycle, C64X, 0,
2380     FIX1(FIX(op, 0x02)),
2381     OP2(ORXREG1, OWREG1),
2382     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2383	  ENC(dst, reg, 1)))
2384INSN(unpklu4, s, unary, 1cycle, C64X, 0,
2385     FIX1(FIX(op, 0x02)),
2386     OP2(ORXREG1, OWREG1),
2387     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2388	  ENC(dst, reg, 1)))
2389
2390INSNE(xor, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
2391      FIX1(FIX(op, 0x6f)),
2392      OP3(ORREG1, ORXREG1, OWREG1),
2393      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2394	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2395INSNE(xor, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
2396      FIX1(FIX(op, 0x6e)),
2397      OP3(OACST, ORXREG1, OWREG1),
2398      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2399	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2400INSNE(xor, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
2401      FIX1(FIX(op, 0x0b)),
2402      OP3(ORREG1, ORXREG1, OWREG1),
2403      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2404	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2405INSNE(xor, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
2406      FIX1(FIX(op, 0x0a)),
2407      OP3(OACST, ORXREG1, OWREG1),
2408      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2409	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2410INSNE(xor, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
2411      FIX1(FIX(op, 0xe)),
2412      OP3(ORREG1, ORXREG1, OWREG1),
2413      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2414	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2415INSNE(xor, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
2416      FIX1(FIX(op, 0xf)),
2417      OP3(OACST, ORXREG1, OWREG1),
2418      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
2419	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
2420
2421INSN(xormpy, m, 1_or_2_src, 4cycle, C64XP, 0,
2422     FIX1(FIX(op, 0x1b)),
2423     OP3(ORREG1, ORXREG1, OWREG4),
2424     ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
2425	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
2426
2427INSN(xpnd2, m, unary, 1616_m, C64X, 0,
2428     FIX1(FIX(op, 0x19)),
2429     OP2(ORXREG1, OWREG2),
2430     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2431	  ENC(dst, reg, 1)))
2432
2433INSN(xpnd4, m, unary, 1616_m, C64X, 0,
2434     FIX1(FIX(op, 0x18)),
2435     OP2(ORXREG1, OWREG2),
2436     ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
2437	  ENC(dst, reg, 1)))
2438
2439INSN(zero, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
2440     FIX2(FIX(h, 0), FIX(cst, 0)),
2441     OP1(OWREG1),
2442     ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
2443INSN(zero, l, unary, 1cycle, C64X,
2444     TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
2445     FIX3(FIX(x, 0), FIX(op, 0x05), FIX(src2, 0)),
2446     OP1(OWREG1),
2447     ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
2448INSNE(zero, l_sub, l, 1_or_2_src, 1cycle, C62X,
2449      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
2450      FIX2(FIX(op, 0x07), FIX(x, 0)),
2451      OP1(OWREG1),
2452      ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
2453	   ENC(dst, reg, 0)))
2454INSNE(zero, l_sub_sl, l, 1_or_2_src, 1cycle, C62X,
2455      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
2456      FIX2(FIX(op, 0x27), FIX(x, 0)),
2457      OP1(OWREGL1),
2458      ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
2459	   ENC(dst, reg, 0)))
2460INSNE(zero, d_mvk, d, 1_or_2_src, 1cycle, C64X,
2461      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
2462      FIX3(FIX(op, 0x00), FIX(src1, 0), FIX(src2, 0)),
2463      OP1(OWREG1),
2464      ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
2465INSNE(zero, d_sub, d, 1_or_2_src, 1cycle, C62X,
2466      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
2467      FIX1(FIX(op, 0x11)),
2468      OP1(OWREG1),
2469      ENC4(ENC(s, fu, 0), ENC(src2, reg_unused, 0), ENC(src1, reg_unused, 0),
2470	   ENC(dst, reg, 0)))
2471
2472#undef TIC6X_INSN_C64X_AND_C67X
2473#undef tic6x_insn_format_nfu_s_branch_nop_cst
2474#undef tic6x_insn_format_s_l_1_or_2_src
2475#undef RAN
2476#undef FIX
2477#undef FIX0
2478#undef FIX1
2479#undef FIX2
2480#undef FIX3
2481#undef FIX4
2482#undef OP0
2483#undef OP1
2484#undef OP2
2485#undef OP3
2486#undef OP4
2487#undef OACST
2488#undef OLCST
2489#undef OFULIST
2490#undef ORIRP1
2491#undef ORNRP1
2492#undef OWREG1
2493#undef OWRETREG1
2494#undef ORREG1
2495#undef ORDREG1
2496#undef ORWREG1
2497#undef ORAREG1
2498#undef ORXREG1
2499#undef ORREG12
2500#undef ORREG14
2501#undef ORXREG14
2502#undef OWREG2
2503#undef OWREG4
2504#undef OWREG9
2505#undef OWDREG5
2506#undef OWREGL1
2507#undef ORREGL1
2508#undef OWREGD1
2509#undef OWREGD12
2510#undef OWREGD4
2511#undef ORREGD1
2512#undef OWREGD45
2513#undef OWREGD67
2514#undef ORDREGD1
2515#undef OWDREGD5
2516#undef ORREGD12
2517#undef ORXREGD12
2518#undef ORREGD1234
2519#undef ORREGD1324
2520#undef OWREGD910
2521#undef ORCREG1
2522#undef OWCREG1
2523#undef ORMEMDW
2524#undef OWMEMDW
2525#undef ORMEMSB
2526#undef OWMEMSB
2527#undef ORMEMLB
2528#undef OWMEMLB
2529#undef ORMEMSH
2530#undef OWMEMSH
2531#undef ORMEMLH
2532#undef OWMEMLH
2533#undef ORMEMSW
2534#undef OWMEMSW
2535#undef ORMEMLW
2536#undef OWMEMLW
2537#undef ORMEMSD
2538#undef OWMEMSD
2539#undef ORMEMND
2540#undef OWMEMND
2541#undef ENC
2542#undef ENC0
2543#undef ENC1
2544#undef ENC2
2545#undef ENC3
2546#undef ENC4
2547#undef ENC5
2548#undef ENC6
2549#undef ENC7
2550