xref: /netbsd-src/external/gpl3/binutils.old/dist/include/opcode/tic6x-opcode-table.h (revision e992f068c547fd6e84b3f104dc2340adcc955732)
175fd0b74Schristos /* TI C6X opcode table.
2*e992f068Schristos    Copyright (C) 2010-2022 Free Software Foundation, Inc.
375fd0b74Schristos 
475fd0b74Schristos    This program is free software; you can redistribute it and/or modify
575fd0b74Schristos    it under the terms of the GNU General Public License as published by
675fd0b74Schristos    the Free Software Foundation; either version 3 of the License, or
775fd0b74Schristos    (at your option) any later version.
875fd0b74Schristos 
975fd0b74Schristos    This program is distributed in the hope that it will be useful,
1075fd0b74Schristos    but WITHOUT ANY WARRANTY; without even the implied warranty of
1175fd0b74Schristos    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1275fd0b74Schristos    GNU General Public License for more details.
1375fd0b74Schristos 
1475fd0b74Schristos    You should have received a copy of the GNU General Public License
1575fd0b74Schristos    along with this program; if not, write to the Free Software
1675fd0b74Schristos    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
1775fd0b74Schristos    MA 02110-1301, USA.  */
1875fd0b74Schristos 
1975fd0b74Schristos /* Define the INSN macro before including this file; it takes as
2075fd0b74Schristos    arguments the fields from tic6x_opcode (defined in tic6x.h).  The
2175fd0b74Schristos    name is given as an identifier; the subsequent four operands should
2275fd0b74Schristos    have "tic6x_func_unit_", "tic6x_insn_format_", "tic6x_pipeline_"
2375fd0b74Schristos    and "TIC6X_INSN_", respectively, prepended to them by the macro
2475fd0b74Schristos    definition.  Also define INSNE, which has a second argument that
2575fd0b74Schristos    goes after tic6x_opcode_NAME_ to form the enumeration value for
2675fd0b74Schristos    this instruction, where the value otherwise formed from the name,
2775fd0b74Schristos    functional unit and format is ambiguous, but otherwise has the same
2875fd0b74Schristos    arguments as INSN.  */
2975fd0b74Schristos 
3075fd0b74Schristos #define TIC6X_INSN_C64X_AND_C67X TIC6X_INSN_C64X|TIC6X_INSN_C67X
3175fd0b74Schristos #define tic6x_insn_format_nfu_s_branch_nop_cst	\
3275fd0b74Schristos   tic6x_insn_format_s_branch_nop_cst
3375fd0b74Schristos #define tic6x_insn_format_s_l_1_or_2_src tic6x_insn_format_l_1_or_2_src
3475fd0b74Schristos #define RAN(id, min, max) { CONCAT2(tic6x_field_,id), (min), (max) }
3575fd0b74Schristos #define FIX(id, val) RAN(id, val, val)
3675fd0b74Schristos #define FIX0() 0, { { 0, 0, 0 } }
3775fd0b74Schristos #define FIX1(a) 1, { a }
3875fd0b74Schristos #define FIX2(a, b) 2, { a, b }
3975fd0b74Schristos #define FIX3(a, b, c) 3, { a, b, c }
4075fd0b74Schristos #define FIX4(a, b, c, d) 4, { a, b, c, d }
41*e992f068Schristos #define OP0() 0, { { 0, 0, false, 0, 0, 0, 0 } }
4275fd0b74Schristos #define OP1(a) 1, { a }
4375fd0b74Schristos #define OP2(a, b) 2, { a, b }
4475fd0b74Schristos #define OP3(a, b, c) 3, { a, b, c }
4575fd0b74Schristos #define OP4(a, b, c, d) 4, { a, b, c, d }
4675fd0b74Schristos #define OACST { tic6x_operand_asm_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
4775fd0b74Schristos #define OLCST { tic6x_operand_link_const, 0, tic6x_rw_none, 0, 0, 0, 0 }
4875fd0b74Schristos #define OHWCSTM1 { tic6x_operand_hw_const_minus_1, 0, tic6x_rw_none, 0, 0, 0, 0 }
4975fd0b74Schristos #define OHWCST0 { tic6x_operand_hw_const_0, 0, tic6x_rw_none, 0, 0, 0, 0 }
5075fd0b74Schristos #define OHWCST1 { tic6x_operand_hw_const_1, 0, tic6x_rw_none, 0, 0, 0, 0 }
5175fd0b74Schristos #define OHWCST5 { tic6x_operand_hw_const_5, 0, tic6x_rw_none, 0, 0, 0, 0 }
5275fd0b74Schristos #define OHWCST16 { tic6x_operand_hw_const_16, 0, tic6x_rw_none, 0, 0, 0, 0 }
5375fd0b74Schristos #define OHWCST24 { tic6x_operand_hw_const_24, 0, tic6x_rw_none, 0, 0, 0, 0 }
5475fd0b74Schristos #define OHWCST31 { tic6x_operand_hw_const_31, 0, tic6x_rw_none, 0, 0, 0, 0 }
5575fd0b74Schristos #define OFULIST { tic6x_operand_func_unit, 0, tic6x_rw_none, 0, 0, 0, 0 }
5675fd0b74Schristos #define ORIRP1 { tic6x_operand_irp, 4, tic6x_rw_read, 1, 1, 0, 0 }
5775fd0b74Schristos #define ORNRP1 { tic6x_operand_nrp, 4, tic6x_rw_read, 1, 1, 0, 0 }
5875fd0b74Schristos #define OWREG1 { tic6x_operand_reg, 4, tic6x_rw_write, 1, 1, 0, 0 }
5975fd0b74Schristos #define OWREG1Z { tic6x_operand_zreg, 4, tic6x_rw_write, 1, 1, 0, 0 }
6075fd0b74Schristos #define OWREG1NORS { tic6x_operand_reg_nors, 4, tic6x_rw_write, 1, 1, 0, 0 }
6175fd0b74Schristos #define ORREG1B { tic6x_operand_reg_bside, 4, tic6x_rw_write, 1, 1, 0, 0 }
6275fd0b74Schristos #define ORREG1BNORS { tic6x_operand_reg_bside_nors, 4, tic6x_rw_write, 1, 1, 0, 0 }
6375fd0b74Schristos #define OWRETREG1 { tic6x_operand_retreg, 4, tic6x_rw_write, 1, 1, 0, 0 }
6475fd0b74Schristos #define ORREG1 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 1, 0, 0 }
6575fd0b74Schristos #define ORDREG1 { tic6x_operand_dreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
6675fd0b74Schristos #define ORTREG1 { tic6x_operand_treg, 4, tic6x_rw_read, 1, 1, 0, 0 }
6775fd0b74Schristos #define ORWREG1 { tic6x_operand_reg, 4, tic6x_rw_read_write, 1, 1, 0, 0 }
6875fd0b74Schristos #define ORB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_read, 1, 1, 0, 0 }
6975fd0b74Schristos #define OWB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_write, 1, 1, 0, 0 }
7075fd0b74Schristos #define ORAREG1 { tic6x_operand_areg, 4, tic6x_rw_read, 1, 1, 0, 0 }
7175fd0b74Schristos #define ORXREG1 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 1, 0, 0 }
7275fd0b74Schristos #define ORREG12 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 2, 0, 0 }
7375fd0b74Schristos #define ORREG14 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 4, 0, 0 }
7475fd0b74Schristos #define ORXREG14 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 4, 0, 0 }
7575fd0b74Schristos #define OWREG2 { tic6x_operand_reg, 4, tic6x_rw_write, 2, 2, 0, 0 }
7675fd0b74Schristos #define OWREG4 { tic6x_operand_reg, 4, tic6x_rw_write, 4, 4, 0, 0 }
7775fd0b74Schristos #define OWREG9 { tic6x_operand_reg, 4, tic6x_rw_write, 9, 9, 0, 0 }
7875fd0b74Schristos #define OWDREG5 { tic6x_operand_dreg, 4, tic6x_rw_write, 5, 5, 0, 0 }
7975fd0b74Schristos #define OWTREG5 { tic6x_operand_treg, 4, tic6x_rw_write, 5, 5, 0, 0 }
8075fd0b74Schristos #define OWREGL1 { tic6x_operand_regpair, 5, tic6x_rw_write, 1, 1, 1, 1 }
8175fd0b74Schristos #define ORREGL1 { tic6x_operand_regpair, 5, tic6x_rw_read, 1, 1, 1, 1 }
8275fd0b74Schristos #define OWREGD1 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 1, 1 }
8375fd0b74Schristos #define OWREGD12 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 2, 2 }
8475fd0b74Schristos #define OWREGD4 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 4, 4 }
8575fd0b74Schristos #define ORREGD1 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
8675fd0b74Schristos #define OWREGD45 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 5, 5 }
8775fd0b74Schristos #define OWREGD67 { tic6x_operand_regpair, 8, tic6x_rw_write, 6, 6, 7, 7 }
8875fd0b74Schristos #define ORDREGD1 { tic6x_operand_dregpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
8975fd0b74Schristos #define ORTREGD1 { tic6x_operand_tregpair, 8, tic6x_rw_read, 1, 1, 1, 1 }
9075fd0b74Schristos #define OWDREGD5 { tic6x_operand_dregpair, 8, tic6x_rw_write, 5, 5, 5, 5 }
9175fd0b74Schristos #define OWTREGD5 { tic6x_operand_tregpair, 8, tic6x_rw_write, 5, 5, 5, 5 }
9275fd0b74Schristos #define ORREGD12 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
9375fd0b74Schristos #define ORXREGD12 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 1, 2, 2 }
9475fd0b74Schristos #define ORREGD1234 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 2, 3, 4 }
9575fd0b74Schristos #define ORXREGD1324 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 3, 2, 4 }
9675fd0b74Schristos #define OWREGD910 { tic6x_operand_regpair, 8, tic6x_rw_write, 9, 9, 10, 10 }
9775fd0b74Schristos #define ORCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_read, 1, 1, 0, 0 }
9875fd0b74Schristos #define OWCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_write, 1, 1, 0, 0 }
9975fd0b74Schristos #define OWILC1 { tic6x_operand_ilc, 4, tic6x_rw_write, 1, 1, 0, 0 }
10075fd0b74Schristos #define ORMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_read, 3, 3, 0, 0 }
10175fd0b74Schristos #define OWMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_write, 3, 3, 0, 0 }
10275fd0b74Schristos #define ORMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_read, 3, 3, 0, 0 }
10375fd0b74Schristos #define OWMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_write, 3, 3, 0, 0 }
10475fd0b74Schristos #define ORMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_read, 3, 3, 0, 0 }
10575fd0b74Schristos #define OWMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_write, 3, 3, 0, 0 }
10675fd0b74Schristos #define ORMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_read, 3, 3, 0, 0 }
10775fd0b74Schristos #define OWMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_write, 3, 3, 0, 0 }
10875fd0b74Schristos #define ORMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_read, 3, 3, 0, 0 }
10975fd0b74Schristos #define OWMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_write, 3, 3, 0, 0 }
11075fd0b74Schristos #define ORMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_read, 3, 3, 0, 0 }
11175fd0b74Schristos #define OWMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_write, 3, 3, 0, 0 }
11275fd0b74Schristos #define ORMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_read, 3, 3, 0, 0 }
11375fd0b74Schristos #define OWMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_write, 3, 3, 0, 0 }
11475fd0b74Schristos #define ORMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_read, 3, 3, 0, 0 }
11575fd0b74Schristos #define OWMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_write, 3, 3, 0, 0 }
11675fd0b74Schristos #define ORMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_read, 3, 3, 0, 0 }
11775fd0b74Schristos #define OWMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_write, 3, 3, 0, 0 }
11875fd0b74Schristos #define ENC(id, meth, op) {			\
11975fd0b74Schristos     CONCAT2(tic6x_field_,id),			\
12075fd0b74Schristos     CONCAT2(tic6x_coding_,meth),		\
12175fd0b74Schristos     op						\
12275fd0b74Schristos   }
12375fd0b74Schristos #define ENC0() 0, { { 0, 0, 0 } }
12475fd0b74Schristos #define ENC1(a) 1, { a }
12575fd0b74Schristos #define ENC2(a, b) 2, { a, b }
12675fd0b74Schristos #define ENC3(a, b, c) 3, { a, b, c }
12775fd0b74Schristos #define ENC4(a, b, c, d) 4, { a, b, c, d }
12875fd0b74Schristos #define ENC5(a, b, c, d, e) 5, { a, b, c, d, e }
12975fd0b74Schristos #define ENC6(a, b, c, d, e, f) 6, { a, b, c, d, e, f }
13075fd0b74Schristos #define ENC7(a, b, c, d, e, f, g) 7, { a, b, c, d, e, f, g }
13175fd0b74Schristos 
13275fd0b74Schristos INSN(abs, l, unary, 1cycle, C62X, 0,
13375fd0b74Schristos      FIX1(FIX(op, 0)),
13475fd0b74Schristos      OP2(ORXREG1, OWREG1),
13575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
13675fd0b74Schristos 	  ENC(dst, reg, 1)))
13775fd0b74Schristos INSN(abs, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
13875fd0b74Schristos      FIX3(FIX(op, 0x38), FIX(x, 0), FIX(src1, 0)),
13975fd0b74Schristos      OP2(ORREGL1, OWREGL1),
14075fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
14175fd0b74Schristos 
14275fd0b74Schristos INSN(abs2, l, unary, 1cycle, C64X, 0,
14375fd0b74Schristos      FIX1(FIX(op, 0x4)),
14475fd0b74Schristos      OP2(ORXREG1, OWREG1),
14575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
14675fd0b74Schristos 	  ENC(dst, reg, 1)))
14775fd0b74Schristos 
14875fd0b74Schristos INSN(absdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
14975fd0b74Schristos      FIX2(FIX(op, 0x2c), FIX(x, 0)),
15075fd0b74Schristos      OP2(ORREGD1, OWREGD12),
15175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
15275fd0b74Schristos 	  ENC(dst, reg, 1)))
15375fd0b74Schristos 
15475fd0b74Schristos INSN(abssp, s, unary, 1cycle, C67X, 0,
15575fd0b74Schristos      FIX1(FIX(op, 0)),
15675fd0b74Schristos      OP2(ORXREG1, OWREG1),
15775fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
15875fd0b74Schristos 	  ENC(dst, reg, 1)))
15975fd0b74Schristos 
16075fd0b74Schristos INSNE(add, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
16175fd0b74Schristos       FIX1(FIX(op, 0x3)),
16275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
16375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
16475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
16575fd0b74Schristos INSNE(add, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, 0,
16675fd0b74Schristos       FIX1(FIX(op, 0x23)),
16775fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGL1),
16875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
16975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
17075fd0b74Schristos INSNE(add, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
17175fd0b74Schristos       FIX1(FIX(op, 0x21)),
17275fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREGL1),
17375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
17475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
17575fd0b74Schristos INSNE(add, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
17675fd0b74Schristos       FIX1(FIX(op, 0x2)),
17775fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
17875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
17975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
18075fd0b74Schristos INSNE(add, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
18175fd0b74Schristos       FIX2(FIX(op, 0x20), FIX(x, 0)),
18275fd0b74Schristos       OP3(OACST, ORREGL1, OWREGL1),
18375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
18475fd0b74Schristos 	   ENC(dst, reg, 2)))
18575fd0b74Schristos INSNE(add, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
18675fd0b74Schristos       FIX1(FIX(op, 0x7)),
18775fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
18875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
18975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
19075fd0b74Schristos INSNE(add, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
19175fd0b74Schristos       FIX1(FIX(op, 0x6)),
19275fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
19375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
19475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
19575fd0b74Schristos INSNE(add, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
19675fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
19775fd0b74Schristos       FIX1(FIX(op, 0x10)),
19875fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
19975fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
20075fd0b74Schristos 	   ENC(dst, reg, 2)))
20175fd0b74Schristos INSNE(add, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
20275fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
20375fd0b74Schristos       FIX1(FIX(op, 0x12)),
20475fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
20575fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
20675fd0b74Schristos 	   ENC(dst, reg, 2)))
20775fd0b74Schristos INSNE(add, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
20875fd0b74Schristos       FIX1(FIX(op, 0xa)),
20975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
21075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
21175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
21275fd0b74Schristos INSNE(add, d_xsi_s5_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
21375fd0b74Schristos       FIX1(FIX(op, 0xb)),
21475fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
21575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
21675fd0b74Schristos 	   ENC(src1, scst, 1), ENC(dst, reg, 2)))
21775fd0b74Schristos 
21875fd0b74Schristos /* 16 bits insn */
21975fd0b74Schristos INSN(add, l, l3_sat_0, 1cycle, C64XP, 0,
22075fd0b74Schristos      FIX1(FIX(op, 0x0)),
22175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
22275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
22375fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
22475fd0b74Schristos INSN(add, l, l3i, 1cycle, C64XP, 0,
22575fd0b74Schristos      FIX0(),
22675fd0b74Schristos      OP3(OACST, ORXREG1, OWREG1),
22775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(cst, scst_l3i, 0),
22875fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
22975fd0b74Schristos INSN(add, l, lx1, 1cycle, C64XP,
23075fd0b74Schristos      TIC6X_FLAG_NO_CROSS,
23175fd0b74Schristos      FIX1(FIX(op, 0x3)),
23275fd0b74Schristos      OP3(OHWCSTM1, ORREG1, OWREG1),
23375fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
23475fd0b74Schristos INSN(add, s, s3_sat_0, 1cycle, C64XP, 0,
23575fd0b74Schristos      FIX1(FIX(op, 0x0)),
23675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
23775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
23875fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
23975fd0b74Schristos INSN(add, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
24075fd0b74Schristos       FIX1(FIX(op, 0x3)),
24175fd0b74Schristos       OP3(OHWCSTM1, ORREG1, OWREG1),
24275fd0b74Schristos       ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
24375fd0b74Schristos INSN(add, s, sx2op, 1cycle, C64XP, 0,
24475fd0b74Schristos       FIX1(FIX(op, 0x0)),
24575fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
24675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2),
24775fd0b74Schristos            ENC(src2, reg, 1), ENC(x, xpath, 1)))
24875fd0b74Schristos INSN(add, d, dx2op, 1cycle, C64XP, 0,
24975fd0b74Schristos      FIX1(FIX(op, 0x0)),
25075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
25175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 1), ENC(srcdst, reg, 0),
25275fd0b74Schristos           ENC(src2, reg, 1), ENC(srcdst, reg, 2)))
25375fd0b74Schristos INSNU(add, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
25475fd0b74Schristos      FIX2(FIX(op, 0x5), FIX(unit, 0x0)),
25575fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
25675fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
25775fd0b74Schristos INSNU(add, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
25875fd0b74Schristos      FIX2(FIX(op, 0x5), FIX(unit, 0x1)),
25975fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
26075fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
26175fd0b74Schristos INSNU(add, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
26275fd0b74Schristos      FIX2(FIX(op, 0x5), FIX(unit, 0x2)),
26375fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
26475fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
26575fd0b74Schristos /**/
26675fd0b74Schristos 
26775fd0b74Schristos INSNE(addab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
26875fd0b74Schristos       FIX1(FIX(op, 0x30)),
26975fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
27075fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
27175fd0b74Schristos 	   ENC(dst, reg, 2)))
27275fd0b74Schristos INSNE(addab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
27375fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
27475fd0b74Schristos       FIX1(FIX(op, 0x32)),
27575fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
27675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
27775fd0b74Schristos 	   ENC(dst, reg, 2)))
27875fd0b74Schristos INSN(addab, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
27975fd0b74Schristos      FIX1(FIX(op, 3)),
28075fd0b74Schristos      OP3(ORAREG1, OLCST, OWREG1),
28175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 1),
28275fd0b74Schristos 	  ENC(dst, reg, 2)))
28375fd0b74Schristos 
28475fd0b74Schristos INSNE(addad, d_si_si_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
28575fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
28675fd0b74Schristos       FIX1(FIX(op, 0x3c)),
28775fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
28875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
28975fd0b74Schristos 	   ENC(dst, reg, 2)))
29075fd0b74Schristos INSNE(addad, d_si_u5_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X,
29175fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
29275fd0b74Schristos       FIX1(FIX(op, 0x3d)),
29375fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
29475fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
29575fd0b74Schristos 	   ENC(dst, reg, 2)))
29675fd0b74Schristos 
29775fd0b74Schristos INSNE(addah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
29875fd0b74Schristos       FIX1(FIX(op, 0x34)),
29975fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
30075fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
30175fd0b74Schristos 	   ENC(dst, reg, 2)))
30275fd0b74Schristos INSNE(addah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
30375fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
30475fd0b74Schristos       FIX1(FIX(op, 0x36)),
30575fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
30675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
30775fd0b74Schristos 	   ENC(dst, reg, 2)))
30875fd0b74Schristos INSN(addah, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
30975fd0b74Schristos      FIX1(FIX(op, 5)),
31075fd0b74Schristos      OP3(ORAREG1, OLCST, OWREG1),
31175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 1),
31275fd0b74Schristos 	  ENC(dst, reg, 2)))
31375fd0b74Schristos 
31475fd0b74Schristos INSNE(addaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
31575fd0b74Schristos       FIX1(FIX(op, 0x38)),
31675fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
31775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
31875fd0b74Schristos 	   ENC(dst, reg, 2)))
31975fd0b74Schristos INSNE(addaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X,
32075fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
32175fd0b74Schristos       FIX1(FIX(op, 0x3a)),
32275fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
32375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
32475fd0b74Schristos 	   ENC(dst, reg, 2)))
32575fd0b74Schristos INSN(addaw, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0),
32675fd0b74Schristos      FIX1(FIX(op, 7)),
32775fd0b74Schristos      OP3(ORAREG1, OLCST, OWREG1),
32875fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 1),
32975fd0b74Schristos 	  ENC(dst, reg, 2)))
33075fd0b74Schristos 
33175fd0b74Schristos /* 16 bits insn */
33275fd0b74Schristos INSN(addaw, d, dx5, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE,
33375fd0b74Schristos      FIX0(),
33475fd0b74Schristos      OP3(ORB15REG1, OACST, OWREG1),
33575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 1), ENC(dst, reg, 2)))
33675fd0b74Schristos INSN(addaw, d, dx5p, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE,
33775fd0b74Schristos      FIX1(FIX(op, 0)),
33875fd0b74Schristos      OP3(ORB15REG1, OACST, OWB15REG1),
33975fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1)))
34075fd0b74Schristos /**/
34175fd0b74Schristos 
34275fd0b74Schristos INSN(adddp, l, 1_or_2_src, addsubdp, C67X, 0,
34375fd0b74Schristos      FIX1(FIX(op, 0x18)),
34475fd0b74Schristos      OP3(ORREGD12, ORXREGD12, OWREGD67),
34575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
34675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
34775fd0b74Schristos INSN(adddp, s, l_1_or_2_src, addsubdp, C67XP, 0,
34875fd0b74Schristos      FIX1(FIX(op, 0x72)),
34975fd0b74Schristos      OP3(ORREGD12, ORXREGD12, OWREGD67),
35075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
35175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
35275fd0b74Schristos 
35375fd0b74Schristos INSN(addk, s, addk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
35475fd0b74Schristos      FIX0(),
35575fd0b74Schristos      OP2(OLCST, OWREG1),
35675fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
35775fd0b74Schristos 
35875fd0b74Schristos /* 16 bits insn */
35975fd0b74Schristos INSN(addk, s, sx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
36075fd0b74Schristos      FIX0(),
36175fd0b74Schristos      OP2(OACST, OWREG1),
36275fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
36375fd0b74Schristos /**/
36475fd0b74Schristos 
36575fd0b74Schristos INSN(addkpc, s, addkpc, 1cycle, C64X,
36675fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_SIDE_B_ONLY,
36775fd0b74Schristos      FIX1(FIX(s, 1)),
36875fd0b74Schristos      OP3(OLCST, OWREG1, OACST),
36975fd0b74Schristos      ENC3(ENC(src1, pcrel, 0), ENC(dst, reg, 1), ENC(src2, ucst, 2)))
37075fd0b74Schristos 
37175fd0b74Schristos INSN(addsp, l, 1_or_2_src, 4cycle, C67X, 0,
37275fd0b74Schristos      FIX1(FIX(op, 0x10)),
37375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
37475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
37575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
37675fd0b74Schristos INSN(addsp, s, l_1_or_2_src, 4cycle, C67XP, 0,
37775fd0b74Schristos      FIX1(FIX(op, 0x70)),
37875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
37975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
38075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
38175fd0b74Schristos 
38275fd0b74Schristos INSN(addsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
38375fd0b74Schristos      FIX1(FIX(op, 0xc)),
38475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
38575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
38675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
38775fd0b74Schristos 
38875fd0b74Schristos INSN(addsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
38975fd0b74Schristos      FIX1(FIX(op, 0xd)),
39075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
39175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
39275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
39375fd0b74Schristos 
39475fd0b74Schristos INSNE(addu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, 0,
39575fd0b74Schristos       FIX1(FIX(op, 0x2b)),
39675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGL1),
39775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
39875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
39975fd0b74Schristos INSNE(addu, l_xui_ul_ul, l, 1_or_2_src, 1cycle, C62X, 0,
40075fd0b74Schristos       FIX1(FIX(op, 0x29)),
40175fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREGL1),
40275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
40375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
40475fd0b74Schristos 
40575fd0b74Schristos INSN(add2, s, 1_or_2_src, 1cycle, C62X, 0,
40675fd0b74Schristos      FIX1(FIX(op, 0x1)),
40775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
40875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
40975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
41075fd0b74Schristos INSN(add2, l, 1_or_2_src, 1cycle, C64X, 0,
41175fd0b74Schristos      FIX1(FIX(op, 0x5)),
41275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
41375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
41475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
41575fd0b74Schristos INSN(add2, d, ext_1_or_2_src, 1cycle, C64X, 0,
41675fd0b74Schristos      FIX1(FIX(op, 0x4)),
41775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
41875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
41975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
42075fd0b74Schristos 
42175fd0b74Schristos INSN(add4, l, 1_or_2_src, 1cycle, C64X, 0,
42275fd0b74Schristos      FIX1(FIX(op, 0x65)),
42375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
42475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
42575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
42675fd0b74Schristos 
42775fd0b74Schristos INSNE(and, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
42875fd0b74Schristos       FIX1(FIX(op, 0x7b)),
42975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
43075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
43175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
43275fd0b74Schristos INSNE(and, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
43375fd0b74Schristos       FIX1(FIX(op, 0x7a)),
43475fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
43575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
43675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
43775fd0b74Schristos INSNE(and, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
43875fd0b74Schristos       FIX1(FIX(op, 0x1f)),
43975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
44075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
44175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
44275fd0b74Schristos INSNE(and, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
44375fd0b74Schristos       FIX1(FIX(op, 0x1e)),
44475fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
44575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
44675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
44775fd0b74Schristos INSNE(and, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
44875fd0b74Schristos       FIX1(FIX(op, 0x6)),
44975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
45075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
45175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
45275fd0b74Schristos INSNE(and, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
45375fd0b74Schristos       FIX1(FIX(op, 0x7)),
45475fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
45575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
45675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
45775fd0b74Schristos 
45875fd0b74Schristos /* 16 bits insn */
45975fd0b74Schristos INSN(and, l, l2c, 1cycle, C64XP, 0,
46075fd0b74Schristos       FIX1(FIX(op, 0)),
46175fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
46275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
46375fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
46475fd0b74Schristos /**/
46575fd0b74Schristos 
46675fd0b74Schristos INSN(andn, l, 1_or_2_src, 1cycle, C64X, 0,
46775fd0b74Schristos      FIX1(FIX(op, 0x7c)),
46875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
46975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
47075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
47175fd0b74Schristos INSN(andn, s, ext_1_or_2_src, 1cycle, C64X, 0,
47275fd0b74Schristos      FIX1(FIX(op, 0x6)),
47375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
47475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
47575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
47675fd0b74Schristos INSN(andn, d, ext_1_or_2_src, 1cycle, C64X, 0,
47775fd0b74Schristos      FIX1(FIX(op, 0x0)),
47875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
47975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
48075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
48175fd0b74Schristos 
48275fd0b74Schristos INSN(avg2, m, compound, 1616_m, C64X, 0,
48375fd0b74Schristos      FIX1(FIX(op, 0x13)),
48475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
48575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
48675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
48775fd0b74Schristos 
48875fd0b74Schristos INSN(avgu4, m, compound, 1616_m, C64X, 0,
48975fd0b74Schristos      FIX1(FIX(op, 0x12)),
49075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
49175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
49275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
49375fd0b74Schristos 
49475fd0b74Schristos INSN(b, s, ext_branch_cond_imm, branch, C62X, TIC6X_FLAG_NO_CROSS,
49575fd0b74Schristos      FIX0(),
49675fd0b74Schristos      OP1(OLCST),
49775fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
49875fd0b74Schristos INSN(b, s, branch, branch, C62X, TIC6X_FLAG_SIDE_B_ONLY,
49975fd0b74Schristos      FIX1(FIX(s, 1)),
50075fd0b74Schristos      OP1(ORXREG1),
50175fd0b74Schristos      ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
50275fd0b74Schristos INSN(b, s, b_irp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
50375fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
50475fd0b74Schristos      OP1(ORIRP1),
50575fd0b74Schristos      ENC0())
50675fd0b74Schristos INSN(b, s, b_nrp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY,
50775fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
50875fd0b74Schristos      OP1(ORNRP1),
50975fd0b74Schristos      ENC0())
51075fd0b74Schristos 
51175fd0b74Schristos INSN(bdec, s, bdec, branch, C64X, TIC6X_FLAG_NO_CROSS,
51275fd0b74Schristos      FIX0(),
51375fd0b74Schristos      OP2(OLCST, ORWREG1),
51475fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
51575fd0b74Schristos 
51675fd0b74Schristos INSN(bitc4, m, unary, 1616_m, C64X, 0,
51775fd0b74Schristos      FIX1(FIX(op, 0x1e)),
51875fd0b74Schristos      OP2(ORXREG1, OWREG2),
51975fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
52075fd0b74Schristos 	  ENC(dst, reg, 1)))
52175fd0b74Schristos 
52275fd0b74Schristos INSN(bitr, m, unary, 1616_m, C64X, 0,
52375fd0b74Schristos      FIX1(FIX(op, 0x1f)),
52475fd0b74Schristos      OP2(ORXREG1, OWREG2),
52575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
52675fd0b74Schristos 	  ENC(dst, reg, 1)))
52775fd0b74Schristos 
52875fd0b74Schristos INSN(bnop, s, branch_nop_cst, branch, C64X,
52975fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
53075fd0b74Schristos      FIX0(),
53175fd0b74Schristos      OP2(OLCST, OACST),
53275fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, pcrel_half, 0), ENC(src1, ucst, 1)))
53375fd0b74Schristos INSN(bnop, nfu, s_branch_nop_cst, branch, C64XP,
53475fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP,
53575fd0b74Schristos      FIX1(FIX(s, 0)),
53675fd0b74Schristos      OP2(OLCST, OACST),
53775fd0b74Schristos      ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
53875fd0b74Schristos INSN(bnop, s, branch_nop_reg, branch, C64X,
53975fd0b74Schristos      TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP,
54075fd0b74Schristos      FIX1(FIX(s, 1)),
54175fd0b74Schristos      OP2(ORXREG1, OACST),
54275fd0b74Schristos      ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
54375fd0b74Schristos 
54475fd0b74Schristos /* 16 bits insn format */
54575fd0b74Schristos INSN(bnop, s, sbu8, branch, C64XP,
54675fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
54775fd0b74Schristos      FIX0(),
54875fd0b74Schristos      OP2(OLCST, OHWCST5),
54975fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0)))
55075fd0b74Schristos INSN(bnop, s, sbs7, branch, C64XP,
55175fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
55275fd0b74Schristos      FIX0(),
55375fd0b74Schristos      OP2(OLCST, OACST),
55475fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1)))
55575fd0b74Schristos INSN(bnop, s, sbu8c, branch, C64XP,
55675fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED,
55775fd0b74Schristos      FIX0(),
55875fd0b74Schristos      OP2(OLCST, OHWCST5),
55975fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0)))
56075fd0b74Schristos INSN(bnop, s, sbs7c, branch, C64XP,
56175fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED,
56275fd0b74Schristos      FIX0(),
56375fd0b74Schristos      OP2(OLCST, OACST),
56475fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1)))
56575fd0b74Schristos INSN(bnop, s, sx1b, branch, C64XP,
56675fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
56775fd0b74Schristos      FIX0(),
56875fd0b74Schristos      OP2(ORREG1BNORS, OACST),
56975fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(n, ucst, 1)))
57075fd0b74Schristos /**/
57175fd0b74Schristos 
57275fd0b74Schristos INSN(bpos, s, bpos, branch, C64X, TIC6X_FLAG_NO_CROSS,
57375fd0b74Schristos      FIX0(),
57475fd0b74Schristos      OP2(OLCST, ORREG1),
57575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1)))
57675fd0b74Schristos 
57775fd0b74Schristos INSN(call, s, ext_branch_cond_imm, branch, C62X,
57875fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
57975fd0b74Schristos      FIX0(),
58075fd0b74Schristos      OP1(OLCST),
58175fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
58275fd0b74Schristos INSN(call, s, branch, branch, C62X,
58375fd0b74Schristos      TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
58475fd0b74Schristos      FIX1(FIX(s, 1)),
58575fd0b74Schristos      OP1(ORXREG1),
58675fd0b74Schristos      ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
58775fd0b74Schristos INSN(call, s, b_irp, branch, C62X,
58875fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
58975fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
59075fd0b74Schristos      OP1(ORIRP1),
59175fd0b74Schristos      ENC0())
59275fd0b74Schristos INSN(call, s, b_nrp, branch, C62X,
59375fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL,
59475fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
59575fd0b74Schristos      OP1(ORNRP1),
59675fd0b74Schristos      ENC0())
59775fd0b74Schristos 
59875fd0b74Schristos INSN(callnop, s, branch_nop_cst, branch, C64X,
59975fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
60075fd0b74Schristos      FIX0(),
60175fd0b74Schristos      OP2(OLCST, OACST),
60275fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
60375fd0b74Schristos INSN(callnop, nfu, s_branch_nop_cst, branch, C64XP,
60475fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
60575fd0b74Schristos      FIX1(FIX(s, 0)),
60675fd0b74Schristos      OP2(OLCST, OACST),
60775fd0b74Schristos      ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1)))
60875fd0b74Schristos INSN(callnop, s, branch_nop_reg, branch, C64X,
60975fd0b74Schristos      TIC6X_FLAG_MACRO|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL,
61075fd0b74Schristos      FIX1(FIX(s, 1)),
61175fd0b74Schristos      OP2(ORXREG1, OACST),
61275fd0b74Schristos      ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1)))
61375fd0b74Schristos 
61475fd0b74Schristos 
61575fd0b74Schristos INSN(callp, s, call_imm_nop, branch, C64XP,
61675fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
61775fd0b74Schristos      FIX1(FIX(z, 1)),
61875fd0b74Schristos      OP2(OLCST, OWRETREG1),
61975fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
62075fd0b74Schristos 
62175fd0b74Schristos /* 16 bits insn format */
62275fd0b74Schristos INSN(callp, s, scs10, branch, C64XP,
62375fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP,
62475fd0b74Schristos      FIX0(),
62575fd0b74Schristos      OP2(OLCST, OWRETREG1),
62675fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
62775fd0b74Schristos /**/
62875fd0b74Schristos 
62975fd0b74Schristos INSN(callret, s, ext_branch_cond_imm, branch, C62X,
63075fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
63175fd0b74Schristos      FIX0(),
63275fd0b74Schristos      OP1(OLCST),
63375fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
63475fd0b74Schristos INSN(callret, s, branch, branch, C62X,
63575fd0b74Schristos      TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
63675fd0b74Schristos      FIX1(FIX(s, 1)),
63775fd0b74Schristos      OP1(ORXREG1),
63875fd0b74Schristos      ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
63975fd0b74Schristos INSN(callret, s, b_irp, branch, C62X,
64075fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
64175fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
64275fd0b74Schristos      OP1(ORIRP1),
64375fd0b74Schristos      ENC0())
64475fd0b74Schristos INSN(callret, s, b_nrp, branch, C62X,
64575fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN,
64675fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
64775fd0b74Schristos      OP1(ORNRP1),
64875fd0b74Schristos      ENC0())
64975fd0b74Schristos 
65075fd0b74Schristos INSN(clr, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
65175fd0b74Schristos      FIX1(FIX(op, 0x3)),
65275fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
65375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
65475fd0b74Schristos 	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
65575fd0b74Schristos INSN(clr, s, 1_or_2_src, 1cycle, C62X, 0,
65675fd0b74Schristos      FIX1(FIX(op, 0x3f)),
65775fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
65875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
65975fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
66075fd0b74Schristos 
66175fd0b74Schristos /* 16 bits insn */
66275fd0b74Schristos INSN(clr, s, sc5, 1cycle, C64XP, 0,
66375fd0b74Schristos      FIX1(FIX(op, 2)),
66475fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
66575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1),
66675fd0b74Schristos           ENC(cst, ucst, 2), ENC(srcdst, reg, 3)))
66775fd0b74Schristos /**/
66875fd0b74Schristos 
66975fd0b74Schristos INSNE(cmpeq, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
67075fd0b74Schristos       FIX1(FIX(op, 0x53)),
67175fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
67275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
67375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
67475fd0b74Schristos INSNE(cmpeq, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
67575fd0b74Schristos       FIX1(FIX(op, 0x52)),
67675fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
67775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
67875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
67975fd0b74Schristos INSNE(cmpeq, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
68075fd0b74Schristos       FIX1(FIX(op, 0x51)),
68175fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREG1),
68275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
68375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
68475fd0b74Schristos INSNE(cmpeq, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
68575fd0b74Schristos       FIX2(FIX(op, 0x50), FIX(x, 0)),
68675fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
68775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
68875fd0b74Schristos 	   ENC(dst, reg, 2)))
68975fd0b74Schristos 
69075fd0b74Schristos /* 16 bits insn */
69175fd0b74Schristos INSN(cmpeq, l, lx3c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
69275fd0b74Schristos       FIX0(),
69375fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
69475fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
69575fd0b74Schristos            ENC(dst, reg, 2)))
69675fd0b74Schristos 
69775fd0b74Schristos INSN(cmpeq, l, l2c, 1cycle, C64XP, 0,
69875fd0b74Schristos       FIX1(FIX(op, 3)),
69975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
70075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
70175fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
70275fd0b74Schristos /**/
70375fd0b74Schristos 
70475fd0b74Schristos INSN(cmpeq2, s, 1_or_2_src, 1cycle, C64X, 0,
70575fd0b74Schristos      FIX1(FIX(op, 0x1d)),
70675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
70775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
70875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
70975fd0b74Schristos 
71075fd0b74Schristos INSN(cmpeq4, s, 1_or_2_src, 1cycle, C64X, 0,
71175fd0b74Schristos      FIX1(FIX(op, 0x1c)),
71275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
71375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
71475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
71575fd0b74Schristos 
71675fd0b74Schristos INSN(cmpeqdp, s, 1_or_2_src, dpcmp, C67X, 0,
71775fd0b74Schristos      FIX1(FIX(op, 0x28)),
71875fd0b74Schristos      OP3(ORREGD12, ORXREGD12, OWREG2),
71975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
72075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
72175fd0b74Schristos 
72275fd0b74Schristos INSN(cmpeqsp, s, 1_or_2_src, 1cycle, C67X, 0,
72375fd0b74Schristos      FIX1(FIX(op, 0x38)),
72475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
72575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
72675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
72775fd0b74Schristos 
72875fd0b74Schristos INSNE(cmpgt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
72975fd0b74Schristos       FIX1(FIX(op, 0x47)),
73075fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
73175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
73275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
73375fd0b74Schristos INSNE(cmpgt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
73475fd0b74Schristos       FIX1(FIX(op, 0x46)),
73575fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
73675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
73775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
73875fd0b74Schristos INSNE(cmpgt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
73975fd0b74Schristos       FIX1(FIX(op, 0x45)),
74075fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREG1),
74175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
74275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
74375fd0b74Schristos INSNE(cmpgt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
74475fd0b74Schristos       FIX2(FIX(op, 0x44), FIX(x, 0)),
74575fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
74675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
74775fd0b74Schristos 	   ENC(dst, reg, 2)))
74875fd0b74Schristos INSNE(cmpgt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
74975fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
75075fd0b74Schristos       FIX1(FIX(op, 0x57)),
75175fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
75275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
75375fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
75475fd0b74Schristos INSNE(cmpgt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
75575fd0b74Schristos       FIX1(FIX(op, 0x56)),
75675fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
75775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
75875fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
75975fd0b74Schristos INSNE(cmpgt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
76075fd0b74Schristos       FIX1(FIX(op, 0x55)),
76175fd0b74Schristos       OP3(ORREGL1, ORXREG1, OWREG1),
76275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
76375fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
76475fd0b74Schristos INSNE(cmpgt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
76575fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
76675fd0b74Schristos       FIX2(FIX(op, 0x54), FIX(x, 0)),
76775fd0b74Schristos       OP3(ORREGL1, OACST, OWREG1),
76875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
76975fd0b74Schristos 	   ENC(dst, reg, 2)))
77075fd0b74Schristos 
77175fd0b74Schristos /* 16 bits insn */
77275fd0b74Schristos INSN(cmpgt, l, lx1c, 1cycle, C64XP, 0,
77375fd0b74Schristos      FIX1(FIX(op, 1)),
77475fd0b74Schristos      OP3(OACST, ORREG1, OWREG1),
77575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
77675fd0b74Schristos           ENC(dst, reg, 2)))
77775fd0b74Schristos INSN(cmpgt, l, l2c, 1cycle, C64XP, 0,
77875fd0b74Schristos       FIX1(FIX(op, 5)),
77975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
78075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
78175fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
78275fd0b74Schristos /**/
78375fd0b74Schristos 
78475fd0b74Schristos INSN(cmpgt2, s, 1_or_2_src, 1cycle, C64X, 0,
78575fd0b74Schristos      FIX1(FIX(op, 0x14)),
78675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
78775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
78875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
78975fd0b74Schristos 
79075fd0b74Schristos INSN(cmpgtdp, s, 1_or_2_src, dpcmp, C67X, 0,
79175fd0b74Schristos      FIX1(FIX(op, 0x29)),
79275fd0b74Schristos      OP3(ORREGD12, ORXREGD12, OWREG2),
79375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
79475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
79575fd0b74Schristos 
79675fd0b74Schristos INSN(cmpgtsp, s, 1_or_2_src, 1cycle, C67X, 0,
79775fd0b74Schristos      FIX1(FIX(op, 0x39)),
79875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
79975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
80075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
80175fd0b74Schristos 
80275fd0b74Schristos INSNE(cmpgtu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
80375fd0b74Schristos       FIX1(FIX(op, 0x4f)),
80475fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
80575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
80675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
80775fd0b74Schristos INSNE(cmpgtu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
80875fd0b74Schristos       FIX2(FIX(op, 0x4e), RAN(src1, 0, 15)),
80975fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
81075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
81175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
81275fd0b74Schristos /* Although not mentioned in SPRUFE8, CMPGTU and CMPLTU support a
81375fd0b74Schristos    5-bit unsigned constant operand on C64X and above.  */
81475fd0b74Schristos INSNE(cmpgtu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
81575fd0b74Schristos       FIX2(FIX(op, 0x4e), RAN(src1, 16, 31)),
81675fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
81775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
81875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
81975fd0b74Schristos INSNE(cmpgtu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
82075fd0b74Schristos       FIX1(FIX(op, 0x4d)),
82175fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREG1),
82275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
82375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
82475fd0b74Schristos INSNE(cmpgtu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
82575fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
82675fd0b74Schristos       FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 0, 15)),
82775fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
82875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
82975fd0b74Schristos 	   ENC(dst, reg, 2)))
83075fd0b74Schristos INSNE(cmpgtu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
83175fd0b74Schristos       FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 16, 31)),
83275fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
83375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
83475fd0b74Schristos 	   ENC(dst, reg, 2)))
83575fd0b74Schristos 
83675fd0b74Schristos /* 16 bits insn */
83775fd0b74Schristos INSN(cmpgtu, l, lx1c, 1cycle, C64XP, 0,
83875fd0b74Schristos      FIX1(FIX(op, 3)),
83975fd0b74Schristos      OP3(OACST, ORREG1, OWREG1),
84075fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
84175fd0b74Schristos           ENC(dst, reg, 2)))
84275fd0b74Schristos INSN(cmpgtu, l, l2c, 1cycle, C64XP, 0,
84375fd0b74Schristos       FIX1(FIX(op, 7)),
84475fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
84575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
84675fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
84775fd0b74Schristos /**/
84875fd0b74Schristos 
84975fd0b74Schristos INSN(cmpgtu4, s, 1_or_2_src, 1cycle, C64X, 0,
85075fd0b74Schristos      FIX1(FIX(op, 0x15)),
85175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
85275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
85375fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
85475fd0b74Schristos 
85575fd0b74Schristos INSNE(cmplt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
85675fd0b74Schristos       FIX1(FIX(op, 0x57)),
85775fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
85875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
85975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
86075fd0b74Schristos INSNE(cmplt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
86175fd0b74Schristos       FIX1(FIX(op, 0x56)),
86275fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
86375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
86475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
86575fd0b74Schristos INSNE(cmplt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0,
86675fd0b74Schristos       FIX1(FIX(op, 0x55)),
86775fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREG1),
86875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
86975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
87075fd0b74Schristos INSNE(cmplt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
87175fd0b74Schristos       FIX2(FIX(op, 0x54), FIX(x, 0)),
87275fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
87375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1),
87475fd0b74Schristos 	   ENC(dst, reg, 2)))
87575fd0b74Schristos INSNE(cmplt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X,
87675fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
87775fd0b74Schristos       FIX1(FIX(op, 0x47)),
87875fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
87975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
88075fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
88175fd0b74Schristos INSNE(cmplt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
88275fd0b74Schristos       FIX1(FIX(op, 0x46)),
88375fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
88475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1),
88575fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
88675fd0b74Schristos INSNE(cmplt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
88775fd0b74Schristos       FIX1(FIX(op, 0x45)),
88875fd0b74Schristos       OP3(ORREGL1, ORXREG1, OWREG1),
88975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1),
89075fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
89175fd0b74Schristos INSNE(cmplt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X,
89275fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
89375fd0b74Schristos       FIX2(FIX(op, 0x44), FIX(x, 0)),
89475fd0b74Schristos       OP3(ORREGL1, OACST, OWREG1),
89575fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0),
89675fd0b74Schristos 	   ENC(dst, reg, 2)))
89775fd0b74Schristos 
89875fd0b74Schristos /* 16 bits insn */
89975fd0b74Schristos INSN(cmplt, l, lx1c, 1cycle, C64XP, 0,
90075fd0b74Schristos      FIX1(FIX(op, 0)),
90175fd0b74Schristos      OP3(OACST, ORREG1, OWREG1),
90275fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
90375fd0b74Schristos           ENC(dst, reg, 2)))
90475fd0b74Schristos INSN(cmplt, l, l2c, 1cycle, C64XP, 0,
90575fd0b74Schristos       FIX1(FIX(op, 4)),
90675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
90775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
90875fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
90975fd0b74Schristos /**/
91075fd0b74Schristos 
91175fd0b74Schristos INSN(cmplt2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
91275fd0b74Schristos      FIX1(FIX(op, 0x14)),
91375fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
91475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
91575fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
91675fd0b74Schristos 
91775fd0b74Schristos INSN(cmpltdp, s, 1_or_2_src, dpcmp, C67X, 0,
91875fd0b74Schristos      FIX1(FIX(op, 0x2a)),
91975fd0b74Schristos      OP3(ORREGD12, ORXREGD12, OWREG2),
92075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
92175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
92275fd0b74Schristos 
92375fd0b74Schristos INSN(cmpltsp, s, 1_or_2_src, 1cycle, C67X, 0,
92475fd0b74Schristos      FIX1(FIX(op, 0x3a)),
92575fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
92675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
92775fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
92875fd0b74Schristos 
92975fd0b74Schristos INSNE(cmpltu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
93075fd0b74Schristos       FIX1(FIX(op, 0x5f)),
93175fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
93275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
93375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
93475fd0b74Schristos INSNE(cmpltu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
93575fd0b74Schristos       FIX2(FIX(op, 0x5e), RAN(src1, 0, 15)),
93675fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
93775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
93875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
93975fd0b74Schristos INSNE(cmpltu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0,
94075fd0b74Schristos       FIX2(FIX(op, 0x5e), RAN(src1, 16, 31)),
94175fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
94275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0),
94375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
94475fd0b74Schristos INSNE(cmpltu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0,
94575fd0b74Schristos       FIX1(FIX(op, 0x5d)),
94675fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREG1),
94775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
94875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
94975fd0b74Schristos INSNE(cmpltu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X,
95075fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
95175fd0b74Schristos       FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 0, 15)),
95275fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
95375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
95475fd0b74Schristos 	   ENC(dst, reg, 2)))
95575fd0b74Schristos INSNE(cmpltu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
95675fd0b74Schristos       FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 16, 31)),
95775fd0b74Schristos       OP3(OACST, ORREGL1, OWREG1),
95875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1),
95975fd0b74Schristos 	   ENC(dst, reg, 2)))
96075fd0b74Schristos 
96175fd0b74Schristos /* 16 bits insn */
96275fd0b74Schristos INSN(cmpltu, l, lx1c, 1cycle, C64XP, 0,
96375fd0b74Schristos      FIX1(FIX(op, 2)),
96475fd0b74Schristos      OP3(OACST, ORREG1, OWREG1),
96575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1),
96675fd0b74Schristos           ENC(dst, reg, 2)))
96775fd0b74Schristos INSN(cmpltu, l, l2c, 1cycle, C64XP, 0,
96875fd0b74Schristos       FIX1(FIX(op, 6)),
96975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
97075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
97175fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
97275fd0b74Schristos /**/
97375fd0b74Schristos 
97475fd0b74Schristos INSN(cmpltu4, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
97575fd0b74Schristos      FIX1(FIX(op, 0x15)),
97675fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
97775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
97875fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
97975fd0b74Schristos 
98075fd0b74Schristos INSN(cmpy, m, 1_or_2_src, 4cycle, C64XP, 0,
98175fd0b74Schristos      FIX1(FIX(op, 0xa)),
98275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
98375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
98475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
98575fd0b74Schristos 
98675fd0b74Schristos INSN(cmpyr, m, 1_or_2_src, 4cycle, C64XP, 0,
98775fd0b74Schristos      FIX1(FIX(op, 0xb)),
98875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
98975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
99075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
99175fd0b74Schristos 
99275fd0b74Schristos INSN(cmpyr1, m, 1_or_2_src, 4cycle, C64XP, 0,
99375fd0b74Schristos      FIX1(FIX(op, 0xc)),
99475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
99575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
99675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
99775fd0b74Schristos 
99875fd0b74Schristos INSN(cmtl, d, 1_or_2_src, load, C64XP,
99975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
100075fd0b74Schristos      FIX3(FIX(s, 1), FIX(op, 0xe), FIX(src1, 0)),
100175fd0b74Schristos      OP2(ORMEMDW, OWDREG5),
100275fd0b74Schristos      ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
100375fd0b74Schristos 
100475fd0b74Schristos INSN(ddotp4, m, 1_or_2_src, 4cycle, C64XP, 0,
100575fd0b74Schristos      FIX1(FIX(op, 0x18)),
100675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
100775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
100875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
100975fd0b74Schristos 
101075fd0b74Schristos INSN(ddotph2, m, 1_or_2_src, 4cycle, C64XP, 0,
101175fd0b74Schristos      FIX1(FIX(op, 0x17)),
101275fd0b74Schristos      OP3(ORREGD1, ORXREG1, OWREGD4),
101375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
101475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
101575fd0b74Schristos 
101675fd0b74Schristos INSN(ddotph2r, m, 1_or_2_src, 4cycle, C64XP, 0,
101775fd0b74Schristos      FIX1(FIX(op, 0x15)),
101875fd0b74Schristos      OP3(ORREGD1, ORXREG1, OWREG4),
101975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
102075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
102175fd0b74Schristos 
102275fd0b74Schristos INSN(ddotpl2, m, 1_or_2_src, 4cycle, C64XP, 0,
102375fd0b74Schristos      FIX1(FIX(op, 0x16)),
102475fd0b74Schristos      OP3(ORREGD1, ORXREG1, OWREGD4),
102575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
102675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
102775fd0b74Schristos 
102875fd0b74Schristos INSN(ddotpl2r, m, 1_or_2_src, 4cycle, C64XP, 0,
102975fd0b74Schristos      FIX1(FIX(op, 0x14)),
103075fd0b74Schristos      OP3(ORREGD1, ORXREG1, OWREG4),
103175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
103275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
103375fd0b74Schristos 
103475fd0b74Schristos INSN(deal, m, unary, 1616_m, C64X, 0,
103575fd0b74Schristos      FIX1(FIX(op, 0x1d)),
103675fd0b74Schristos      OP2(ORXREG1, OWREG2),
103775fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
103875fd0b74Schristos 	  ENC(dst, reg, 1)))
103975fd0b74Schristos 
104075fd0b74Schristos INSN(dint, nfu, dint, 1cycle, C64XP, 0,
104175fd0b74Schristos      FIX1(FIX(s, 0)),
104275fd0b74Schristos      OP0(),
104375fd0b74Schristos      ENC0())
104475fd0b74Schristos 
104575fd0b74Schristos INSN(dmv, s, ext_1_or_2_src, 1cycle, C64XP, 0,
104675fd0b74Schristos      FIX1(FIX(op, 0xb)),
104775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
104875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
104975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
105075fd0b74Schristos 
105175fd0b74Schristos INSNE(dotp2, m_s2_xs2_si, m, compound, 4cycle, C64X, 0,
105275fd0b74Schristos       FIX1(FIX(op, 0xc)),
105375fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG4),
105475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
105575fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
105675fd0b74Schristos INSNE(dotp2, m_s2_xs2_sll, m, compound, 4cycle, C64X, 0,
105775fd0b74Schristos       FIX1(FIX(op, 0xb)),
105875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGD4),
105975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
106075fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
106175fd0b74Schristos 
106275fd0b74Schristos INSN(dotpn2, m, compound, 4cycle, C64X, 0,
106375fd0b74Schristos      FIX1(FIX(op, 0x9)),
106475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
106575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
106675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
106775fd0b74Schristos 
106875fd0b74Schristos INSN(dotpnrsu2, m, compound, 4cycle, C64X, 0,
106975fd0b74Schristos      FIX1(FIX(op, 0x7)),
107075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
107175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
107275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
107375fd0b74Schristos 
107475fd0b74Schristos INSN(dotpnrus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
107575fd0b74Schristos      FIX1(FIX(op, 0x7)),
107675fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG4),
107775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
107875fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
107975fd0b74Schristos 
108075fd0b74Schristos INSN(dotprsu2, m, compound, 4cycle, C64X, 0,
108175fd0b74Schristos      FIX1(FIX(op, 0xd)),
108275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
108375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
108475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
108575fd0b74Schristos 
108675fd0b74Schristos INSN(dotprus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
108775fd0b74Schristos      FIX1(FIX(op, 0xd)),
108875fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG4),
108975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
109075fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
109175fd0b74Schristos 
109275fd0b74Schristos INSN(dotpsu4, m, compound, 4cycle, C64X, 0,
109375fd0b74Schristos      FIX1(FIX(op, 0x2)),
109475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
109575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
109675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
109775fd0b74Schristos 
109875fd0b74Schristos INSN(dotpus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
109975fd0b74Schristos      FIX1(FIX(op, 0x2)),
110075fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG4),
110175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
110275fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
110375fd0b74Schristos 
110475fd0b74Schristos INSN(dotpu4, m, compound, 4cycle, C64X, 0,
110575fd0b74Schristos      FIX1(FIX(op, 0x6)),
110675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
110775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
110875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
110975fd0b74Schristos 
111075fd0b74Schristos INSN(dpack2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
111175fd0b74Schristos      FIX1(FIX(op, 0x34)),
111275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
111375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
111475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
111575fd0b74Schristos 
111675fd0b74Schristos INSN(dpackx2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
111775fd0b74Schristos      FIX1(FIX(op, 0x33)),
111875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
111975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
112075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
112175fd0b74Schristos 
112275fd0b74Schristos INSN(dpint, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
112375fd0b74Schristos      FIX2(FIX(op, 0x8), FIX(x, 0)),
112475fd0b74Schristos      OP2(ORREGD1, OWREG4),
112575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
112675fd0b74Schristos 	  ENC(dst, reg, 1)))
112775fd0b74Schristos 
112875fd0b74Schristos INSN(dpsp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
112975fd0b74Schristos      FIX2(FIX(op, 0x9), FIX(x, 0)),
113075fd0b74Schristos      OP2(ORREGD1, OWREG4),
113175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
113275fd0b74Schristos 	  ENC(dst, reg, 1)))
113375fd0b74Schristos 
113475fd0b74Schristos INSN(dptrunc, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS,
113575fd0b74Schristos      FIX2(FIX(op, 0x1), FIX(x, 0)),
113675fd0b74Schristos      OP2(ORREGD1, OWREG4),
113775fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
113875fd0b74Schristos 	  ENC(dst, reg, 1)))
113975fd0b74Schristos 
114075fd0b74Schristos INSN(ext, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
114175fd0b74Schristos      FIX1(FIX(op, 0x1)),
114275fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
114375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
114475fd0b74Schristos 	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
114575fd0b74Schristos INSN(ext, s, 1_or_2_src, 1cycle, C62X, 0,
114675fd0b74Schristos      FIX1(FIX(op, 0x2f)),
114775fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
114875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
114975fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
115075fd0b74Schristos 
115175fd0b74Schristos /* 16 bits insn */
115275fd0b74Schristos INSNE(ext, hwcst16, s, s2ext, 1cycle, C64XP, 0,
115375fd0b74Schristos      FIX1(FIX(op, 0x0)),
115475fd0b74Schristos      OP4(ORREG1, OHWCST16, OHWCST16, OWREG1),
115575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
115675fd0b74Schristos INSNE(ext, hwcst24, s, s2ext, 1cycle, C64XP, 0,
115775fd0b74Schristos      FIX1(FIX(op, 0x1)),
115875fd0b74Schristos      OP4(ORREG1, OHWCST24, OHWCST24, OWREG1),
115975fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
116075fd0b74Schristos /**/
116175fd0b74Schristos 
116275fd0b74Schristos INSN(extu, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
116375fd0b74Schristos      FIX1(FIX(op, 0x0)),
116475fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
116575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
116675fd0b74Schristos 	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
116775fd0b74Schristos INSN(extu, s, 1_or_2_src, 1cycle, C62X, 0,
116875fd0b74Schristos      FIX1(FIX(op, 0x2b)),
116975fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
117075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
117175fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
117275fd0b74Schristos 
117375fd0b74Schristos /* 16 bits insn */
117475fd0b74Schristos INSNE(extu, hwcst16, s, s2ext, 1cycle, C64XP, 0,
117575fd0b74Schristos      FIX1(FIX(op, 0x2)),
117675fd0b74Schristos      OP4(ORREG1, OHWCST16, OHWCST16, OWREG1),
117775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
117875fd0b74Schristos INSNE(extu, hwcst24, s, s2ext, 1cycle, C64XP, 0,
117975fd0b74Schristos      FIX1(FIX(op, 0x3)),
118075fd0b74Schristos      OP4(ORREG1, OHWCST24, OHWCST24, OWREG1),
118175fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3)))
118275fd0b74Schristos INSN(extu, s, sc5, 1cycle, C64XP, 0,
118375fd0b74Schristos      FIX1(FIX(op, 0)),
118475fd0b74Schristos      OP4(ORREG1, OACST, OHWCST31, OWREG1Z),
118575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1)))
118675fd0b74Schristos /**/
118775fd0b74Schristos 
118875fd0b74Schristos INSN(gmpy, m, 1_or_2_src, 4cycle, C64XP, TIC6X_FLAG_NO_CROSS,
118975fd0b74Schristos      FIX2(FIX(op, 0x1f), FIX(x, 0)),
119075fd0b74Schristos      OP3(ORREG1, ORREG1, OWREG4),
119175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src1, reg, 0), ENC(src2, reg, 1),
119275fd0b74Schristos 	  ENC(dst, reg, 2)))
119375fd0b74Schristos 
119475fd0b74Schristos /* This instruction can be predicated as usual; SPRUFE8 is incorrect
119575fd0b74Schristos    where it shows the "z" field as fixed to 1.  */
119675fd0b74Schristos INSN(gmpy4, m, compound, 4cycle, C64X, 0,
119775fd0b74Schristos      FIX1(FIX(op, 0x11)),
119875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
119975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
120075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
120175fd0b74Schristos 
120275fd0b74Schristos INSN(idle, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MCNOP,
120375fd0b74Schristos      FIX2(FIX(s, 0), FIX(op, 0xf)),
120475fd0b74Schristos      OP0(),
120575fd0b74Schristos      ENC0())
120675fd0b74Schristos 
120775fd0b74Schristos INSN(intdp, l, 1_or_2_src, intdp, C67X, 0,
120875fd0b74Schristos      FIX2(FIX(op, 0x39), FIX(src1, 0)),
120975fd0b74Schristos      OP2(ORXREG1, OWREGD45),
121075fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
121175fd0b74Schristos 	  ENC(dst, reg, 1)))
121275fd0b74Schristos 
121375fd0b74Schristos INSN(intdpu, l, 1_or_2_src, intdp, C67X, 0,
121475fd0b74Schristos      FIX2(FIX(op, 0x3b), FIX(src1, 0)),
121575fd0b74Schristos      OP2(ORXREG1, OWREGD45),
121675fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
121775fd0b74Schristos 	  ENC(dst, reg, 1)))
121875fd0b74Schristos 
121975fd0b74Schristos INSN(intsp, l, 1_or_2_src, 4cycle, C67X, 0,
122075fd0b74Schristos      FIX2(FIX(op, 0x4a), FIX(src1, 0)),
122175fd0b74Schristos      OP2(ORXREG1, OWREG4),
122275fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
122375fd0b74Schristos 	  ENC(dst, reg, 1)))
122475fd0b74Schristos 
122575fd0b74Schristos INSN(intspu, l, 1_or_2_src, 4cycle, C67X, 0,
122675fd0b74Schristos      FIX2(FIX(op, 0x49), FIX(src1, 0)),
122775fd0b74Schristos      OP2(ORXREG1, OWREG4),
122875fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
122975fd0b74Schristos 	  ENC(dst, reg, 1)))
123075fd0b74Schristos 
123175fd0b74Schristos INSN(ldb, d, load_store, load, C62X,
123275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
123375fd0b74Schristos      FIX2(FIX(op, 2), FIX(r, 0)),
123475fd0b74Schristos      OP2(ORMEMSB, OWDREG5),
123575fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
123675fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
123775fd0b74Schristos 	  ENC(srcdst, reg, 1)))
123875fd0b74Schristos INSN(ldb, d, load_store_long, load, C62X,
123975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
124075fd0b74Schristos      FIX1(FIX(op, 2)),
124175fd0b74Schristos      OP2(ORMEMLB, OWDREG5),
124275fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
124375fd0b74Schristos 	  ENC(dst, reg, 1)))
124475fd0b74Schristos 
124575fd0b74Schristos /* 16 bits insn */
124675fd0b74Schristos INSN(ldb, d, doff4_dsz_x01, load, C64XP,
124775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
124875fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
124975fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
125075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
125175fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
125275fd0b74Schristos INSN(ldb, d, dind_dsz_x01, load, C64XP,
125375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
125475fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
125575fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
125675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
125775fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
125875fd0b74Schristos INSN(ldb, d, dinc_dsz_x01, load, C64XP,
125975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
126075fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
126175fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
126275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
126375fd0b74Schristos           ENC(ptr, reg_ptr, 0),  ENC(cst, mem_offset_minus_one, 0)))
126475fd0b74Schristos INSN(ldb, d, ddec_dsz_x01, load, C64XP,
126575fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
126675fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
126775fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
126875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
126975fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
127075fd0b74Schristos /**/
127175fd0b74Schristos 
127275fd0b74Schristos INSN(ldbu, d, load_store, load, C62X,
127375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
127475fd0b74Schristos      FIX2(FIX(op, 1), FIX(r, 0)),
127575fd0b74Schristos      OP2(ORMEMSB, OWDREG5),
127675fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
127775fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
127875fd0b74Schristos 	  ENC(srcdst, reg, 1)))
127975fd0b74Schristos INSN(ldbu, d, load_store_long, load, C62X,
128075fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
128175fd0b74Schristos      FIX1(FIX(op, 1)),
128275fd0b74Schristos      OP2(ORMEMLB, OWDREG5),
128375fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0),
128475fd0b74Schristos 	  ENC(dst, reg, 1)))
128575fd0b74Schristos 
128675fd0b74Schristos /* 16 bits insn */
128775fd0b74Schristos INSN(ldbu, d, dinc_dsz_000, load, C64XP,
128875fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
128975fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
129075fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
129175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0),
129275fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
129375fd0b74Schristos INSN(ldbu, d, dind_dsz_000, load, C64XP,
129475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
129575fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
129675fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
129775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0),
129875fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
129975fd0b74Schristos INSN(ldbu, d, doff4_dsz_000, load, C64XP,
130075fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
130175fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
130275fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
130375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
130475fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
130575fd0b74Schristos INSN(ldbu, d, ddec_dsz_000, load, C64XP,
130675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
130775fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
130875fd0b74Schristos      OP2(ORMEMSB, OWTREG5),
130975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0),
131075fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
131175fd0b74Schristos /**/
131275fd0b74Schristos 
131375fd0b74Schristos INSN(lddw, d, load_store, load, C64X_AND_C67X,
131475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS,
131575fd0b74Schristos      FIX2(FIX(op, 6), FIX(r, 1)),
131675fd0b74Schristos      OP2(ORMEMSD, OWDREGD5),
131775fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
131875fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
131975fd0b74Schristos 	  ENC(srcdst, reg, 1)))
132075fd0b74Schristos 
132175fd0b74Schristos /* 16 bits insn */
132275fd0b74Schristos INSN(lddw, d, dpp, load, C64XP,
132375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
132475fd0b74Schristos      FIX2(FIX(op, 1), FIX(dw, 1)),
132575fd0b74Schristos      OP2(ORMEMSD, OWDREGD5),
132675fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
132775fd0b74Schristos 	  ENC(cst, mem_offset_minus_one, 0)))
132875fd0b74Schristos INSN(lddw, d, ddecdw, load, C64XP,
132975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
133075fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
133175fd0b74Schristos      OP2(ORMEMSD, OWTREGD5),
133275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
133375fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
133475fd0b74Schristos INSN(lddw, d, dincdw, load, C64XP,
133575fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
133675fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
133775fd0b74Schristos      OP2(ORMEMSD, OWTREGD5),
133875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
133975fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
134075fd0b74Schristos INSN(lddw, d, dinddw, load, C64XP,
134175fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
134275fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
134375fd0b74Schristos      OP2(ORMEMSD, OWTREGD5),
134475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0),
134575fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
134675fd0b74Schristos INSN(lddw, d, doff4dw, load, C64XP,
134775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
134875fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)),
134975fd0b74Schristos      OP2(ORMEMSD, OWTREGD5),
135075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
135175fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
135275fd0b74Schristos /**/
135375fd0b74Schristos 
135475fd0b74Schristos INSN(ldh, d, load_store, load, C62X,
135575fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
135675fd0b74Schristos      FIX2(FIX(op, 4), FIX(r, 0)),
135775fd0b74Schristos      OP2(ORMEMSH, OWDREG5),
135875fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
135975fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
136075fd0b74Schristos 	  ENC(srcdst, reg, 1)))
136175fd0b74Schristos INSN(ldh, d, load_store_long, load, C62X,
136275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
136375fd0b74Schristos      FIX1(FIX(op, 4)),
136475fd0b74Schristos      OP2(ORMEMLH, OWDREG5),
136575fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
136675fd0b74Schristos 	  ENC(dst, reg, 1)))
136775fd0b74Schristos 
136875fd0b74Schristos /* 16 bits insn */
136975fd0b74Schristos INSN(ldh, d, doff4_dsz_x11, load, C64XP,
137075fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
137175fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
137275fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
137375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
137475fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
137575fd0b74Schristos INSN(ldh, d, dind_dsz_x11, load, C64XP,
137675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
137775fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
137875fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
137975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
138075fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
138175fd0b74Schristos INSN(ldh, d, dinc_dsz_x11, load, C64XP,
138275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
138375fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
138475fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
138575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
138675fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
138775fd0b74Schristos INSN(ldh, d, ddec_dsz_x11, load, C64XP,
138875fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
138975fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
139075fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
139175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
139275fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
139375fd0b74Schristos /**/
139475fd0b74Schristos 
139575fd0b74Schristos INSN(ldhu, d, load_store, load, C62X,
139675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
139775fd0b74Schristos      FIX2(FIX(op, 0), FIX(r, 0)),
139875fd0b74Schristos      OP2(ORMEMSH, OWDREG5),
139975fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
140075fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
140175fd0b74Schristos 	  ENC(srcdst, reg, 1)))
140275fd0b74Schristos INSN(ldhu, d, load_store_long, load, C62X,
140375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
140475fd0b74Schristos      FIX1(FIX(op, 0)),
140575fd0b74Schristos      OP2(ORMEMLH, OWDREG5),
140675fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0),
140775fd0b74Schristos 	  ENC(dst, reg, 1)))
140875fd0b74Schristos 
140975fd0b74Schristos /* 16 bits insn */
141075fd0b74Schristos INSN(ldhu, d, doff4_dsz_010, load, C64XP,
141175fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
141275fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
141375fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
141475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0),
141575fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1)))
141675fd0b74Schristos INSN(ldhu, d, dind_dsz_010, load, C64XP,
141775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
141875fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
141975fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
142075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
142175fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
142275fd0b74Schristos INSN(ldhu, d, dinc_dsz_010, load, C64XP,
142375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
142475fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
142575fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
142675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
142775fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
142875fd0b74Schristos INSN(ldhu, d, ddec_dsz_010, load, C64XP,
142975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
143075fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
143175fd0b74Schristos      OP2(ORMEMSH, OWTREG5),
143275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
143375fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
143475fd0b74Schristos /**/
143575fd0b74Schristos 
143675fd0b74Schristos INSN(ldndw, d, load_nonaligned, load, C64X,
143775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
143875fd0b74Schristos      FIX0(),
143975fd0b74Schristos      OP2(ORMEMND, OWDREGD5),
144075fd0b74Schristos      ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
144175fd0b74Schristos 	  ENC(offsetR, mem_offset_noscale, 0), ENC(baseR, reg, 0),
144275fd0b74Schristos 	  ENC(sc, scaled, 0), ENC(dst, reg_shift, 1)))
144375fd0b74Schristos 
144475fd0b74Schristos /* 16 bits insn */
144575fd0b74Schristos INSN(ldndw, d, ddecdw, load, C64XP,
144675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
144775fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
144875fd0b74Schristos      OP2(ORMEMND, OWTREGD5),
144975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
145075fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0)))
145175fd0b74Schristos INSN(ldndw, d, dincdw, load, C64XP,
145275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
145375fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
145475fd0b74Schristos      OP2(ORMEMND, OWTREGD5),
145575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1),
145675fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0)))
145775fd0b74Schristos INSN(ldndw, d, dinddw, load, C64XP,
145875fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
145975fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
146075fd0b74Schristos      OP2(ORMEMND, OWTREGD5),
146175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 0),
146275fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
146375fd0b74Schristos INSN(ldndw, d, doff4dw, load, C64XP,
146475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
146575fd0b74Schristos      FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)),
146675fd0b74Schristos      OP2(ORMEMND, OWTREGD5),
146775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 0),
146875fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1)))
146975fd0b74Schristos /**/
147075fd0b74Schristos 
147175fd0b74Schristos INSN(ldnw, d, load_store, load, C64X,
147275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
147375fd0b74Schristos      FIX2(FIX(op, 3), FIX(r, 1)),
147475fd0b74Schristos      OP2(ORMEMSW, OWDREG5),
147575fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
147675fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
147775fd0b74Schristos 	  ENC(srcdst, reg, 1)))
147875fd0b74Schristos 
147975fd0b74Schristos /* 16 bits insn */
148075fd0b74Schristos INSN(ldnw, d, doff4_dsz_110, load, C64XP,
148175fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
148275fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
148375fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
148475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
148575fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
148675fd0b74Schristos INSN(ldnw, d, dind_dsz_110, load, C64XP,
148775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
148875fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
148975fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
149075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
149175fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
149275fd0b74Schristos INSN(ldnw, d, dinc_dsz_110, load, C64XP,
149375fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
149475fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
149575fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
149675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
149775fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
149875fd0b74Schristos INSN(ldnw, d, ddec_dsz_110, load, C64XP,
149975fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
150075fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
150175fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
150275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
150375fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
150475fd0b74Schristos /**/
150575fd0b74Schristos 
150675fd0b74Schristos INSN(ldw, d, load_store, load, C62X,
150775fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
150875fd0b74Schristos      FIX2(FIX(op, 6), FIX(r, 0)),
150975fd0b74Schristos      OP2(ORMEMSW, OWDREG5),
151075fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0),
151175fd0b74Schristos 	  ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0),
151275fd0b74Schristos 	  ENC(srcdst, reg, 1)))
151375fd0b74Schristos INSN(ldw, d, load_store_long, load, C62X,
151475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
151575fd0b74Schristos      FIX1(FIX(op, 6)),
151675fd0b74Schristos      OP2(ORMEMLW, OWDREG5),
151775fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 0),
151875fd0b74Schristos 	  ENC(dst, reg, 1)))
151975fd0b74Schristos 
152075fd0b74Schristos /* 16 bits insn */
152175fd0b74Schristos INSN(ldw, d, doff4_dsz_0xx, load, C64XP,
152275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
152375fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 0)),
152475fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
152575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
152675fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
152775fd0b74Schristos INSN(ldw, d, doff4_dsz_100, load, C64XP,
152875fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
152975fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
153075fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
153175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
153275fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0)))
153375fd0b74Schristos INSN(ldw, d, dind_dsz_0xx, load, C64XP,
153475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
153575fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 0)),
153675fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
153775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
153875fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
153975fd0b74Schristos INSN(ldw, d, dind_dsz_100, load, C64XP,
154075fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
154175fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
154275fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
154375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
154475fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0)))
154575fd0b74Schristos INSN(ldw, d, dinc_dsz_0xx, load, C64XP,
154675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
154775fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 0)),
154875fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
154975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
155075fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
155175fd0b74Schristos INSN(ldw, d, dinc_dsz_100, load, C64XP,
155275fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
155375fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
155475fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
155575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
155675fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
155775fd0b74Schristos INSN(ldw, d, ddec_dsz_0xx, load, C64XP,
155875fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
155975fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 0)),
156075fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
156175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
156275fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
156375fd0b74Schristos INSN(ldw, d, ddec_dsz_100, load, C64XP,
156475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
156575fd0b74Schristos      FIX2(FIX(op, 1), FIX(sz, 1)),
156675fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
156775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
156875fd0b74Schristos           ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0)))
156975fd0b74Schristos INSN(ldw, d, dpp, load, C64XP,
157075fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
157175fd0b74Schristos      FIX2(FIX(op, 1), FIX(dw, 0)),
157275fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
157375fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0),  ENC(srcdst, reg, 1),
157475fd0b74Schristos 	  ENC(cst, mem_offset_minus_one, 0)))
157575fd0b74Schristos INSN(ldw, d, dstk, load, C64XP,
157675fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR,
157775fd0b74Schristos      FIX2(FIX(op, 0x1), FIX(s, 1)),
157875fd0b74Schristos      OP2(ORMEMSW, OWTREG5),
157975fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1),
158075fd0b74Schristos 	  ENC(cst, mem_offset, 0)))
158175fd0b74Schristos /**/
158275fd0b74Schristos 
158375fd0b74Schristos INSN(ll, d, 1_or_2_src, load, C64XP,
158475fd0b74Schristos      TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
158575fd0b74Schristos      FIX3(FIX(s, 1), FIX(op, 0xc), FIX(src1, 0)),
158675fd0b74Schristos      OP2(ORMEMDW, OWDREG5),
158775fd0b74Schristos      ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1)))
158875fd0b74Schristos 
158975fd0b74Schristos INSNE(lmbd, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
159075fd0b74Schristos       FIX1(FIX(op, 0x6b)),
159175fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
159275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
159375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
159475fd0b74Schristos INSNE(lmbd, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
159575fd0b74Schristos       FIX1(FIX(op, 0x6a)),
159675fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
159775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
159875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
159975fd0b74Schristos 
160075fd0b74Schristos INSN(max2, l, 1_or_2_src, 1cycle, C64X, 0,
160175fd0b74Schristos      FIX1(FIX(op, 0x42)),
160275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
160375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
160475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
160575fd0b74Schristos INSN(max2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
160675fd0b74Schristos      FIX1(FIX(op, 0xd)),
160775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
160875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
160975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
161075fd0b74Schristos 
161175fd0b74Schristos INSN(maxu4, l, 1_or_2_src, 1cycle, C64X, 0,
161275fd0b74Schristos      FIX1(FIX(op, 0x43)),
161375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
161475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
161575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
161675fd0b74Schristos 
161775fd0b74Schristos INSN(min2, l, 1_or_2_src, 1cycle, C64X, 0,
161875fd0b74Schristos      FIX1(FIX(op, 0x41)),
161975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
162075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
162175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
162275fd0b74Schristos INSN(min2, s, ext_1_or_2_src, 1cycle, C64XP, 0,
162375fd0b74Schristos      FIX1(FIX(op, 0xc)),
162475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
162575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
162675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
162775fd0b74Schristos 
162875fd0b74Schristos INSN(minu4, l, 1_or_2_src, 1cycle, C64X, 0,
162975fd0b74Schristos      FIX1(FIX(op, 0x48)),
163075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
163175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
163275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
163375fd0b74Schristos 
163475fd0b74Schristos INSNE(mpy, m_sl16_xsl16_si, m, mpy, 1616_m, C62X, 0,
163575fd0b74Schristos       FIX1(FIX(op, 0x19)),
163675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
163775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
163875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
163975fd0b74Schristos INSNE(mpy, m_s5_xsl16_si, m, mpy, 1616_m, C62X, 0,
164075fd0b74Schristos       FIX1(FIX(op, 0x18)),
164175fd0b74Schristos       OP3(OACST, ORXREG1, OWREG2),
164275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
164375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
164475fd0b74Schristos 
164575fd0b74Schristos /* 16-bit insn.  */
164675fd0b74Schristos INSN(mpy, m, m3_sat_0, 1616_m, C67X, 0,
164775fd0b74Schristos       FIX1(FIX(op, 0x0)),
164875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
164975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
165075fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
165175fd0b74Schristos 
165275fd0b74Schristos INSN(mpydp, m, mpy, mpydp, C67X, 0,
165375fd0b74Schristos      FIX1(FIX(op, 0x0e)),
165475fd0b74Schristos      OP3(ORREGD1234, ORXREGD1324, OWREGD910),
165575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
165675fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
165775fd0b74Schristos 
165875fd0b74Schristos INSN(mpyh, m, mpy, 1616_m, C62X, 0,
165975fd0b74Schristos      FIX1(FIX(op, 0x01)),
166075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
166175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
166275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
166375fd0b74Schristos 
166475fd0b74Schristos /* 16 bits insn */
166575fd0b74Schristos INSN(mpyh, m, m3_sat_0, 1616_m, C67X, 0,
166675fd0b74Schristos       FIX1(FIX(op, 0x1)),
166775fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
166875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
166975fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
167075fd0b74Schristos /**/
167175fd0b74Schristos 
167275fd0b74Schristos INSN(mpyhi, m, compound, 4cycle, C64X, 0,
167375fd0b74Schristos      FIX1(FIX(op, 0x14)),
167475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
167575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
167675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
167775fd0b74Schristos 
167875fd0b74Schristos INSN(mpyhir, m, compound, 4cycle, C64X, 0,
167975fd0b74Schristos      FIX1(FIX(op, 0x10)),
168075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
168175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
168275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
168375fd0b74Schristos 
168475fd0b74Schristos INSN(mpyhl, m, mpy, 1616_m, C62X, 0,
168575fd0b74Schristos      FIX1(FIX(op, 0x09)),
168675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
168775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
168875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
168975fd0b74Schristos 
169075fd0b74Schristos /* 16 bits insn */
169175fd0b74Schristos INSN(mpyhl, m, m3_sat_0, 1616_m, C67X, 0,
169275fd0b74Schristos       FIX1(FIX(op, 0x3)),
169375fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
169475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
169575fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
169675fd0b74Schristos /**/
169775fd0b74Schristos 
169875fd0b74Schristos INSN(mpyhlu, m, mpy, 1616_m, C62X, 0,
169975fd0b74Schristos      FIX1(FIX(op, 0x0f)),
170075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
170175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
170275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
170375fd0b74Schristos 
170475fd0b74Schristos INSN(mpyhslu, m, mpy, 1616_m, C62X, 0,
170575fd0b74Schristos      FIX1(FIX(op, 0x0b)),
170675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
170775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
170875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
170975fd0b74Schristos 
171075fd0b74Schristos INSN(mpyhsu, m, mpy, 1616_m, C62X, 0,
171175fd0b74Schristos      FIX1(FIX(op, 0x03)),
171275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
171375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
171475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
171575fd0b74Schristos 
171675fd0b74Schristos INSN(mpyhu, m, mpy, 1616_m, C62X, 0,
171775fd0b74Schristos      FIX1(FIX(op, 0x07)),
171875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
171975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
172075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
172175fd0b74Schristos 
172275fd0b74Schristos INSN(mpyhuls, m, mpy, 1616_m, C62X, 0,
172375fd0b74Schristos      FIX1(FIX(op, 0x0d)),
172475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
172575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
172675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
172775fd0b74Schristos 
172875fd0b74Schristos INSN(mpyhus, m, mpy, 1616_m, C62X, 0,
172975fd0b74Schristos      FIX1(FIX(op, 0x05)),
173075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
173175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
173275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
173375fd0b74Schristos 
173475fd0b74Schristos INSNE(mpyi, m_si_xsi_si, m, mpy, mpyi, C67X, 0,
173575fd0b74Schristos       FIX1(FIX(op, 0x04)),
173675fd0b74Schristos       OP3(ORREG14, ORXREG14, OWREG9),
173775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
173875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
173975fd0b74Schristos INSNE(mpyi, m_s5_xsi_si, m, mpy, mpyi, C67X, 0,
174075fd0b74Schristos       FIX1(FIX(op, 0x06)),
174175fd0b74Schristos       OP3(OACST, ORXREG14, OWREG9),
174275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
174375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
174475fd0b74Schristos 
174575fd0b74Schristos INSNE(mpyid, m_si_xsi_sll, m, mpy, mpyid, C67X, 0,
174675fd0b74Schristos       FIX1(FIX(op, 0x08)),
174775fd0b74Schristos       OP3(ORREG14, ORXREG14, OWREGD910),
174875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
174975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
175075fd0b74Schristos INSNE(mpyid, m_s5_xsi_sll, m, mpy, mpyid, C67X, 0,
175175fd0b74Schristos       FIX1(FIX(op, 0x0c)),
175275fd0b74Schristos       OP3(OACST, ORXREG14, OWREGD910),
175375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
175475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
175575fd0b74Schristos 
175675fd0b74Schristos INSN(mpyih, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
175775fd0b74Schristos      FIX1(FIX(op, 0x14)),
175875fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREGD4),
175975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
176075fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
176175fd0b74Schristos 
176275fd0b74Schristos INSN(mpyihr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
176375fd0b74Schristos      FIX1(FIX(op, 0x10)),
176475fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG4),
176575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
176675fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
176775fd0b74Schristos 
176875fd0b74Schristos INSN(mpyil, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
176975fd0b74Schristos      FIX1(FIX(op, 0x15)),
177075fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREGD4),
177175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
177275fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
177375fd0b74Schristos 
177475fd0b74Schristos INSN(mpyilr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
177575fd0b74Schristos      FIX1(FIX(op, 0x0e)),
177675fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG4),
177775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
177875fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
177975fd0b74Schristos 
178075fd0b74Schristos INSN(mpylh, m, mpy, 1616_m, C62X, 0,
178175fd0b74Schristos      FIX1(FIX(op, 0x11)),
178275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
178375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
178475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
178575fd0b74Schristos 
178675fd0b74Schristos /* 16 bits insn */
178775fd0b74Schristos INSN(mpylh, m, m3_sat_0, 1616_m, C67X, 0,
178875fd0b74Schristos       FIX1(FIX(op, 0x2)),
178975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
179075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
179175fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
179275fd0b74Schristos /**/
179375fd0b74Schristos 
179475fd0b74Schristos INSN(mpylhu, m, mpy, 1616_m, C62X, 0,
179575fd0b74Schristos      FIX1(FIX(op, 0x17)),
179675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
179775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
179875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
179975fd0b74Schristos 
180075fd0b74Schristos INSN(mpyli, m, compound, 4cycle, C64X, 0,
180175fd0b74Schristos      FIX1(FIX(op, 0x15)),
180275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
180375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
180475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
180575fd0b74Schristos 
180675fd0b74Schristos INSN(mpylir, m, compound, 4cycle, C64X, 0,
180775fd0b74Schristos      FIX1(FIX(op, 0x0e)),
180875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
180975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
181075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
181175fd0b74Schristos 
181275fd0b74Schristos INSN(mpylshu, m, mpy, 1616_m, C62X, 0,
181375fd0b74Schristos      FIX1(FIX(op, 0x13)),
181475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
181575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
181675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
181775fd0b74Schristos 
181875fd0b74Schristos INSN(mpyluhs, m, mpy, 1616_m, C62X, 0,
181975fd0b74Schristos      FIX1(FIX(op, 0x15)),
182075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
182175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
182275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
182375fd0b74Schristos 
182475fd0b74Schristos INSN(mpysp, m, mpy, 4cycle, C67X, 0,
182575fd0b74Schristos      FIX1(FIX(op, 0x1c)),
182675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
182775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
182875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
182975fd0b74Schristos 
183075fd0b74Schristos /* Contrary to SPRU733A, MPYSPDP and MPYSP2DP are on both C67X and
183175fd0b74Schristos    C67X+.  */
183275fd0b74Schristos INSN(mpyspdp, m, compound, mpyspdp, C67X, 0,
183375fd0b74Schristos      FIX1(FIX(op, 0x16)),
183475fd0b74Schristos      OP3(ORREG12, ORXREGD12, OWREGD67),
183575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
183675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
183775fd0b74Schristos 
183875fd0b74Schristos INSN(mpysp2dp, m, compound, mpyspdp, C67X, 0,
183975fd0b74Schristos      FIX1(FIX(op, 0x17)),
184075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD45),
184175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
184275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
184375fd0b74Schristos 
184475fd0b74Schristos INSNE(mpysu, m_sl16_xul16_si, m, mpy, 1616_m, C62X, 0,
184575fd0b74Schristos       FIX1(FIX(op, 0x1b)),
184675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
184775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
184875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
184975fd0b74Schristos INSNE(mpysu, m_s5_xul16_si, m, mpy, 1616_m, C62X, 0,
185075fd0b74Schristos       FIX1(FIX(op, 0x1e)),
185175fd0b74Schristos       OP3(OACST, ORXREG1, OWREG2),
185275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
185375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
185475fd0b74Schristos 
185575fd0b74Schristos INSN(mpysu4, m, compound, 4cycle, C64X, 0,
185675fd0b74Schristos      FIX1(FIX(op, 0x05)),
185775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
185875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
185975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
186075fd0b74Schristos 
186175fd0b74Schristos INSN(mpyu, m, mpy, 1616_m, C62X, 0,
186275fd0b74Schristos      FIX1(FIX(op, 0x1f)),
186375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
186475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
186575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
186675fd0b74Schristos 
186775fd0b74Schristos INSN(mpyu4, m, compound, 4cycle, C64X, 0,
186875fd0b74Schristos      FIX1(FIX(op, 0x04)),
186975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
187075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
187175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
187275fd0b74Schristos 
187375fd0b74Schristos INSN(mpyus, m, mpy, 1616_m, C62X, 0,
187475fd0b74Schristos      FIX1(FIX(op, 0x1d)),
187575fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
187675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
187775fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
187875fd0b74Schristos 
187975fd0b74Schristos INSN(mpyus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO,
188075fd0b74Schristos      FIX1(FIX(op, 0x05)),
188175fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREGD4),
188275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
188375fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
188475fd0b74Schristos 
188575fd0b74Schristos INSN(mpy2, m, compound, 4cycle, C64X, 0,
188675fd0b74Schristos      FIX1(FIX(op, 0x00)),
188775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
188875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
188975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
189075fd0b74Schristos 
189175fd0b74Schristos INSN(mpy2ir, m, 1_or_2_src, 4cycle, C64XP, 0,
189275fd0b74Schristos      FIX1(FIX(op, 0x0f)),
189375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
189475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
189575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
189675fd0b74Schristos 
189775fd0b74Schristos INSNE(mpy32, 32_32_32, m, mpy, 4cycle, C64XP, 0,
189875fd0b74Schristos       FIX1(FIX(op, 0x10)),
189975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG4),
190075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
190175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
190275fd0b74Schristos INSNE(mpy32, 32_32_64, m, mpy, 4cycle, C64XP, 0,
190375fd0b74Schristos       FIX1(FIX(op, 0x14)),
190475fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGD4),
190575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
190675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
190775fd0b74Schristos 
190875fd0b74Schristos INSN(mpy32su, m, mpy, 4cycle, C64XP, 0,
190975fd0b74Schristos      FIX1(FIX(op, 0x16)),
191075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
191175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
191275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
191375fd0b74Schristos 
191475fd0b74Schristos INSN(mpy32u, m, compound, 4cycle, C64XP, 0,
191575fd0b74Schristos      FIX1(FIX(op, 0x18)),
191675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
191775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
191875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
191975fd0b74Schristos 
192075fd0b74Schristos INSN(mpy32us, m, compound, 4cycle, C64XP, 0,
192175fd0b74Schristos      FIX1(FIX(op, 0x19)),
192275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
192375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
192475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
192575fd0b74Schristos 
192675fd0b74Schristos /* "or" forms of "mv" are preferred over "add" forms when available
192775fd0b74Schristos    because "or" uses less power.  However, 40-bit moves are only
192875fd0b74Schristos    available through "add", and before C64X D-unit moves are only
192975fd0b74Schristos    available through "add" (without cross paths being available).  */
193075fd0b74Schristos INSNE(mv, l_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
193175fd0b74Schristos       FIX2(FIX(op, 0x7e), FIX(src1, 0)),
193275fd0b74Schristos       OP2(ORXREG1, OWREG1),
193375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
193475fd0b74Schristos 	   ENC(dst, reg, 1)))
193575fd0b74Schristos INSNE(mv, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
193675fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
193775fd0b74Schristos       FIX3(FIX(op, 0x20), FIX(x, 0), FIX(src1, 0)),
193875fd0b74Schristos       OP2(ORREGL1, OWREGL1),
193975fd0b74Schristos       ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
194075fd0b74Schristos INSNE(mv, s_xui_ui, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
194175fd0b74Schristos       FIX2(FIX(op, 0x1a), FIX(src1, 0)),
194275fd0b74Schristos       OP2(ORXREG1, OWREG1),
194375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
194475fd0b74Schristos 	   ENC(dst, reg, 1)))
194575fd0b74Schristos INSNE(mv, d_si_si, d, 1_or_2_src, 1cycle, C62X,
194675fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(0),
194775fd0b74Schristos       FIX2(FIX(op, 0x12), FIX(src1, 0)),
194875fd0b74Schristos       OP2(ORREG1, OWREG1),
194975fd0b74Schristos       ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
195075fd0b74Schristos INSNE(mv, d_xui_ui, d, ext_1_or_2_src, 1cycle, C64X,
195175fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
195275fd0b74Schristos       FIX2(FIX(op, 0x3), FIX(src1, 0)),
195375fd0b74Schristos       OP2(ORXREG1, OWREG1),
195475fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
195575fd0b74Schristos 	   ENC(dst, reg, 1)))
195675fd0b74Schristos 
195775fd0b74Schristos /* 16 bits insn */
195875fd0b74Schristos INSNU(mv, l, lsdmvto, 1cycle, C64X, 0,
195975fd0b74Schristos       FIX1(FIX(unit, 0x0)),
196075fd0b74Schristos       OP2(ORXREG1, OWREG1),
196175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
196275fd0b74Schristos 
196375fd0b74Schristos INSNU(mv, s, lsdmvto, 1cycle, C64X, 0,
196475fd0b74Schristos       FIX1(FIX(unit, 0x1)),
196575fd0b74Schristos       OP2(ORXREG1, OWREG1),
196675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
196775fd0b74Schristos 
196875fd0b74Schristos INSNU(mv, d, lsdmvto, 1cycle, C64X, 0,
196975fd0b74Schristos       FIX1(FIX(unit, 0x2)),
197075fd0b74Schristos       OP2(ORXREG1, OWREG1),
197175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
197275fd0b74Schristos 
197375fd0b74Schristos INSNU(mv, l, lsdmvfr, 1cycle, C64X, 0,
197475fd0b74Schristos       FIX1(FIX(unit, 0x0)),
197575fd0b74Schristos       OP2(ORXREG1, OWREG1),
197675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
197775fd0b74Schristos 
197875fd0b74Schristos INSNU(mv, s, lsdmvfr, 1cycle, C64X, 0,
197975fd0b74Schristos       FIX1(FIX(unit, 0x1)),
198075fd0b74Schristos       OP2(ORXREG1, OWREG1),
198175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
198275fd0b74Schristos 
198375fd0b74Schristos INSNU(mv, d, lsdmvfr, 1cycle, C64X, 0,
198475fd0b74Schristos       FIX1(FIX(unit, 0x2)),
198575fd0b74Schristos       OP2(ORXREG1, OWREG1),
198675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1)))
198775fd0b74Schristos /**/
198875fd0b74Schristos 
198975fd0b74Schristos INSNE(mvc, from_cr, s, 1_or_2_src, 1cycle, C62X,
199075fd0b74Schristos       TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_NO_CROSS,
199175fd0b74Schristos       FIX3(FIX(s, 1), FIX(op, 0x0f), FIX(x, 0)),
199275fd0b74Schristos       OP2(ORCREG1, OWREG1),
199375fd0b74Schristos       ENC3(ENC(src1, crhi, 0), ENC(src2, crlo, 0), ENC(dst, reg, 1)))
199475fd0b74Schristos INSNE(mvc, to_cr, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_SIDE_B_ONLY,
199575fd0b74Schristos       FIX2(FIX(s, 1), FIX(op, 0x0e)),
199675fd0b74Schristos       OP2(ORXREG1, OWCREG1),
199775fd0b74Schristos       ENC4(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, crhi, 1),
199875fd0b74Schristos 	   ENC(dst, crlo, 1)))
199975fd0b74Schristos 
200075fd0b74Schristos /* 16 bits insn */
200175fd0b74Schristos INSN(mvc, s, sx1, 1cycle, C64XP,
200275fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
200375fd0b74Schristos       FIX1(FIX(op, 0x6)),
200475fd0b74Schristos       OP2(ORREG1B, OWILC1),
200575fd0b74Schristos       ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 0)))
200675fd0b74Schristos /**/
200775fd0b74Schristos 
200875fd0b74Schristos INSN(mvd, m, unary, 4cycle, C64X, 0,
200975fd0b74Schristos      FIX1(FIX(op, 0x1a)),
201075fd0b74Schristos      OP2(ORXREG1, OWREG4),
201175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
201275fd0b74Schristos 	  ENC(dst, reg, 1)))
201375fd0b74Schristos 
201475fd0b74Schristos INSN(mvk, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
201575fd0b74Schristos      FIX1(FIX(h, 0)),
201675fd0b74Schristos      OP2(OLCST, OWREG1),
201775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
201875fd0b74Schristos INSN(mvk, l, unary, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
201975fd0b74Schristos      FIX2(FIX(x, 0), FIX(op, 0x05)),
202075fd0b74Schristos      OP2(OACST, OWREG1),
202175fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, scst, 0), ENC(dst, reg, 1)))
202275fd0b74Schristos INSN(mvk, d, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS,
202375fd0b74Schristos      FIX2(FIX(op, 0x00), FIX(src2, 0)),
202475fd0b74Schristos      OP2(OACST, OWREG1),
202575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(dst, reg, 1)))
202675fd0b74Schristos 
202775fd0b74Schristos /* 16 bits insn */
202875fd0b74Schristos INSN(mvk, l, lx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
202975fd0b74Schristos      FIX0(),
203075fd0b74Schristos      OP2(OLCST, OWREG1),
203175fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1)))
203275fd0b74Schristos INSN(mvk, s, smvk8, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
203375fd0b74Schristos      FIX0(),
203475fd0b74Schristos      OP2(OLCST, OWREG1),
203575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
203675fd0b74Schristos INSNU(mvk, l, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
203775fd0b74Schristos      FIX1(FIX(unit, 0x0)),
203875fd0b74Schristos      OP2(OACST, OWREG1),
203975fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
204075fd0b74Schristos INSNU(mvk, s, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
204175fd0b74Schristos      FIX1(FIX(unit, 0x1)),
204275fd0b74Schristos      OP2(OACST, OWREG1),
204375fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
204475fd0b74Schristos INSNU(mvk, d, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED,
204575fd0b74Schristos      FIX1(FIX(unit, 0x2)),
204675fd0b74Schristos      OP2(OACST, OWREG1),
204775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1)))
204875fd0b74Schristos INSNUE(mvk, zero, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
204975fd0b74Schristos      FIX2(FIX(op, 0), FIX(unit, 0x0)),
205075fd0b74Schristos      OP2(OHWCST0, OWREG1),
205175fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
205275fd0b74Schristos INSNUE(mvk, zero, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
205375fd0b74Schristos      FIX2(FIX(op, 0), FIX(unit, 0x1)),
205475fd0b74Schristos      OP2(OHWCST0, OWREG1),
205575fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
205675fd0b74Schristos INSNUE(mvk, zero, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
205775fd0b74Schristos      FIX2(FIX(op, 0), FIX(unit, 0x2)),
205875fd0b74Schristos      OP2(OHWCST0, OWREG1),
205975fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
206075fd0b74Schristos INSNUE(mvk, one, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
206175fd0b74Schristos      FIX2(FIX(op, 1), FIX(unit, 0x0)),
206275fd0b74Schristos      OP2(OHWCST1, OWREG1),
206375fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
206475fd0b74Schristos INSNUE(mvk, one, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
206575fd0b74Schristos      FIX2(FIX(op, 1), FIX(unit, 0x1)),
206675fd0b74Schristos      OP2(OHWCST1, OWREG1),
206775fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
206875fd0b74Schristos INSNUE(mvk, one, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
206975fd0b74Schristos      FIX2(FIX(op, 1), FIX(unit, 0x2)),
207075fd0b74Schristos      OP2(OHWCST1, OWREG1),
207175fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1)))
207275fd0b74Schristos /**/
207375fd0b74Schristos 
207475fd0b74Schristos INSN(mvkh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
207575fd0b74Schristos      FIX1(FIX(h, 1)),
207675fd0b74Schristos      OP2(OLCST, OWREG1),
207775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, lcst_high16, 0), ENC(dst, reg, 1)))
207875fd0b74Schristos 
207975fd0b74Schristos INSN(mvklh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
208075fd0b74Schristos      FIX1(FIX(h, 1)),
208175fd0b74Schristos      OP2(OLCST, OWREG1),
208275fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
208375fd0b74Schristos 
208475fd0b74Schristos INSN(mvkl, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
208575fd0b74Schristos      FIX1(FIX(h, 0)),
208675fd0b74Schristos      OP2(OLCST, OWREG1),
208775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1)))
208875fd0b74Schristos 
208975fd0b74Schristos INSNE(neg, s_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
209075fd0b74Schristos       FIX2(FIX(op, 0x16), FIX(src1, 0)),
209175fd0b74Schristos       OP2(ORXREG1, OWREG1),
209275fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
209375fd0b74Schristos 	   ENC(dst, reg, 1)))
209475fd0b74Schristos INSNE(neg, l_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
209575fd0b74Schristos       FIX2(FIX(op, 0x06), FIX(src1, 0)),
209675fd0b74Schristos       OP2(ORXREG1, OWREG1),
209775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
209875fd0b74Schristos 	   ENC(dst, reg, 1)))
209975fd0b74Schristos INSNE(neg, l_sl_sl, l, 1_or_2_src, 1cycle, C62X,
210075fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
210175fd0b74Schristos       FIX2(FIX(op, 0x24), FIX(src1, 0)),
210275fd0b74Schristos       OP2(ORREGL1, OWREGL1),
210375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
210475fd0b74Schristos 	   ENC(dst, reg, 1)))
210575fd0b74Schristos 
210675fd0b74Schristos INSN(nop, nfu, nop_idle, nop, C62X, 0,
210775fd0b74Schristos      FIX2(FIX(s, 0), RAN(op, 0, 8)),
210875fd0b74Schristos      OP1(OACST),
210975fd0b74Schristos      ENC1(ENC(op, ucst_minus_one, 0)))
211075fd0b74Schristos INSNE(nop, 1, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MACRO,
211175fd0b74Schristos       FIX2(FIX(s, 0), FIX(op, 0)),
211275fd0b74Schristos       OP0(),
211375fd0b74Schristos       ENC0())
211475fd0b74Schristos 
211575fd0b74Schristos /* 16 bits insn */
211675fd0b74Schristos /* contrary to sprufe8b.pdf p767, and accordingly to
211775fd0b74Schristos  * dis6x.exe output, unop3 opcode is decoded as NOP N3 + 1 */
211875fd0b74Schristos INSN(nop, nfu, unop, nop, C64XP, 0,
211975fd0b74Schristos      FIX0(),
212075fd0b74Schristos      OP1(OACST),
212175fd0b74Schristos      ENC1(ENC(n, ucst_minus_one, 0)))
212275fd0b74Schristos /**/
212375fd0b74Schristos 
212475fd0b74Schristos INSNE(norm, l_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0,
212575fd0b74Schristos       FIX2(FIX(op, 0x63), FIX(src1, 0)),
212675fd0b74Schristos       OP2(ORXREG1, OWREG1),
212775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
212875fd0b74Schristos 	   ENC(dst, reg, 1)))
212975fd0b74Schristos INSNE(norm, l_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
213075fd0b74Schristos       FIX3(FIX(op, 0x60), FIX(x, 0), FIX(src1, 0)),
213175fd0b74Schristos       OP2(ORREGL1, OWREG1),
213275fd0b74Schristos       ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
213375fd0b74Schristos 
213475fd0b74Schristos INSN(not, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
213575fd0b74Schristos      FIX2(FIX(op, 0x6e), FIX(src1, 0x1f)),
213675fd0b74Schristos      OP2(ORXREG1, OWREG1),
213775fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
213875fd0b74Schristos 	  ENC(dst, reg, 1)))
213975fd0b74Schristos INSN(not, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
214075fd0b74Schristos      FIX2(FIX(op, 0x0a), FIX(src1, 0x1f)),
214175fd0b74Schristos      OP2(ORXREG1, OWREG1),
214275fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
214375fd0b74Schristos 	  ENC(dst, reg, 1)))
214475fd0b74Schristos INSN(not, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
214575fd0b74Schristos      FIX2(FIX(op, 0xf), FIX(src1, 0x1f)),
214675fd0b74Schristos      OP2(ORXREG1, OWREG1),
214775fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
214875fd0b74Schristos 	  ENC(dst, reg, 1)))
214975fd0b74Schristos 
215075fd0b74Schristos INSNE(or, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
215175fd0b74Schristos       FIX1(FIX(op, 0x2)),
215275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
215375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
215475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
215575fd0b74Schristos INSNE(or, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
215675fd0b74Schristos       FIX1(FIX(op, 0x3)),
215775fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
215875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
215975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
216075fd0b74Schristos INSNE(or, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
216175fd0b74Schristos       FIX1(FIX(op, 0x7f)),
216275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
216375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
216475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
216575fd0b74Schristos INSNE(or, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
216675fd0b74Schristos       FIX1(FIX(op, 0x7e)),
216775fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
216875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
216975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
217075fd0b74Schristos INSNE(or, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
217175fd0b74Schristos       FIX1(FIX(op, 0x1b)),
217275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
217375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
217475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
217575fd0b74Schristos INSNE(or, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
217675fd0b74Schristos       FIX1(FIX(op, 0x1a)),
217775fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
217875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
217975fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
218075fd0b74Schristos 
218175fd0b74Schristos /* 16 bits insn */
218275fd0b74Schristos INSN(or, l, l2c, 1cycle, C64XP, 0,
218375fd0b74Schristos       FIX1(FIX(op, 1)),
218475fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
218575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
218675fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
218775fd0b74Schristos /**/
218875fd0b74Schristos 
218975fd0b74Schristos INSN(pack2, l, 1_or_2_src, 1cycle, C64X, 0,
219075fd0b74Schristos      FIX1(FIX(op, 0x0)),
219175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
219275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
219375fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
219475fd0b74Schristos INSN(pack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
219575fd0b74Schristos      FIX1(FIX(op, 0xf)),
219675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
219775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
219875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
219975fd0b74Schristos 
220075fd0b74Schristos INSN(packh2, l, 1_or_2_src, 1cycle, C64X, 0,
220175fd0b74Schristos      FIX1(FIX(op, 0x1e)),
220275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
220375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
220475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
220575fd0b74Schristos INSN(packh2, s, 1_or_2_src, 1cycle, C64X, 0,
220675fd0b74Schristos      FIX1(FIX(op, 0x9)),
220775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
220875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
220975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
221075fd0b74Schristos 
221175fd0b74Schristos INSN(packh4, l, 1_or_2_src, 1cycle, C64X, 0,
221275fd0b74Schristos      FIX1(FIX(op, 0x69)),
221375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
221475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
221575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
221675fd0b74Schristos 
221775fd0b74Schristos INSN(packhl2, l, 1_or_2_src, 1cycle, C64X, 0,
221875fd0b74Schristos      FIX1(FIX(op, 0x1c)),
221975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
222075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
222175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
222275fd0b74Schristos INSN(packhl2, s, 1_or_2_src, 1cycle, C64X, 0,
222375fd0b74Schristos      FIX1(FIX(op, 0x8)),
222475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
222575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
222675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
222775fd0b74Schristos 
222875fd0b74Schristos INSN(packlh2, l, 1_or_2_src, 1cycle, C64X, 0,
222975fd0b74Schristos      FIX1(FIX(op, 0x1b)),
223075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
223175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
223275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
223375fd0b74Schristos INSN(packlh2, s, 1_or_2_src, 1cycle, C64X, 0,
223475fd0b74Schristos      FIX1(FIX(op, 0x10)),
223575fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
223675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
223775fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
223875fd0b74Schristos 
223975fd0b74Schristos INSN(packl4, l, 1_or_2_src, 1cycle, C64X, 0,
224075fd0b74Schristos      FIX1(FIX(op, 0x68)),
224175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
224275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
224375fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
224475fd0b74Schristos 
224575fd0b74Schristos INSN(rcpdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
224675fd0b74Schristos      FIX2(FIX(op, 0x2d), FIX(x, 0)),
224775fd0b74Schristos      OP2(ORREGD1, OWREGD12),
224875fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
224975fd0b74Schristos 	  ENC(dst, reg, 1)))
225075fd0b74Schristos 
225175fd0b74Schristos INSN(rcpsp, s, 1_or_2_src, 1cycle, C67X, 0,
225275fd0b74Schristos      FIX2(FIX(op, 0x3d), FIX(src1, 0)),
225375fd0b74Schristos      OP2(ORXREG1, OWREG1),
225475fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
225575fd0b74Schristos 	  ENC(dst, reg, 1)))
225675fd0b74Schristos 
225775fd0b74Schristos INSN(ret, s, ext_branch_cond_imm, branch, C62X,
225875fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
225975fd0b74Schristos      FIX0(),
226075fd0b74Schristos      OP1(OLCST),
226175fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
226275fd0b74Schristos INSN(ret, s, branch, branch, C62X,
226375fd0b74Schristos      TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
226475fd0b74Schristos      FIX1(FIX(s, 1)),
226575fd0b74Schristos      OP1(ORXREG1),
226675fd0b74Schristos      ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0)))
226775fd0b74Schristos INSN(ret, s, b_irp, branch, C62X,
226875fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
226975fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
227075fd0b74Schristos      OP1(ORIRP1),
227175fd0b74Schristos      ENC0())
227275fd0b74Schristos INSN(ret, s, b_nrp, branch, C62X,
227375fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
227475fd0b74Schristos      FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)),
227575fd0b74Schristos      OP1(ORNRP1),
227675fd0b74Schristos      ENC0())
227775fd0b74Schristos 
227875fd0b74Schristos INSN(retp, s, call_imm_nop, branch, C64XP,
227975fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN,
228075fd0b74Schristos      FIX1(FIX(z, 1)),
228175fd0b74Schristos      OP2(OLCST, OWRETREG1),
228275fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0)))
228375fd0b74Schristos 
228475fd0b74Schristos INSN(rint, nfu, rint, 1cycle, C64XP, 0,
228575fd0b74Schristos      FIX1(FIX(s, 0)),
228675fd0b74Schristos      OP0(),
228775fd0b74Schristos      ENC0())
228875fd0b74Schristos 
228975fd0b74Schristos INSNE(rotl, m_ui_xui_ui, m, compound, 1616_m, C64X, 0,
229075fd0b74Schristos       FIX1(FIX(op, 0x1d)),
229175fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG2),
229275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
229375fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
229475fd0b74Schristos INSNE(rotl, m_u5_xui_ui, m, compound, 1616_m, C64X, 0,
229575fd0b74Schristos       FIX1(FIX(op, 0x1e)),
229675fd0b74Schristos       OP3(ORXREG1, OACST, OWREG2),
229775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
229875fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
229975fd0b74Schristos 
230075fd0b74Schristos INSN(rpack2, s, ext_1_or_2_src_noncond, 1cycle, C64XP, 0,
230175fd0b74Schristos      FIX2(FIX(op, 0xb), FIX(z, 1)),
230275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
230375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
230475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
230575fd0b74Schristos 
230675fd0b74Schristos INSN(rsqrdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS,
230775fd0b74Schristos      FIX2(FIX(op, 0x2e), FIX(x, 0)),
230875fd0b74Schristos      OP2(ORREGD1, OWREGD12),
230975fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0),
231075fd0b74Schristos 	  ENC(dst, reg, 1)))
231175fd0b74Schristos 
231275fd0b74Schristos INSN(rsqrsp, s, 1_or_2_src, 1cycle, C67X, 0,
231375fd0b74Schristos      FIX2(FIX(op, 0x3e), FIX(src1, 0)),
231475fd0b74Schristos      OP2(ORXREG1, OWREG1),
231575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
231675fd0b74Schristos 	  ENC(dst, reg, 1)))
231775fd0b74Schristos 
231875fd0b74Schristos INSNE(sadd, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
231975fd0b74Schristos       FIX1(FIX(op, 0x13)),
232075fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
232175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
232275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
232375fd0b74Schristos INSNE(sadd, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0,
232475fd0b74Schristos       FIX1(FIX(op, 0x31)),
232575fd0b74Schristos       OP3(ORXREG1, ORREGL1, OWREGL1),
232675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
232775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
232875fd0b74Schristos INSNE(sadd, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
232975fd0b74Schristos       FIX1(FIX(op, 0x12)),
233075fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
233175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
233275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
233375fd0b74Schristos INSNE(sadd, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
233475fd0b74Schristos       FIX1(FIX(op, 0x30)),
233575fd0b74Schristos       OP3(OACST, ORREGL1, OWREGL1),
233675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
233775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
233875fd0b74Schristos INSNE(sadd, s_si_xsi_si, s, 1_or_2_src, 1cycle, C64X, 0,
233975fd0b74Schristos       FIX1(FIX(op, 0x20)),
234075fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
234175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
234275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
234375fd0b74Schristos 
234475fd0b74Schristos /* 16 bits insn */
234575fd0b74Schristos INSN(sadd, l, l3_sat_1, 1cycle, C64XP, 0,
234675fd0b74Schristos      FIX1(FIX(op, 0)),
234775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
234875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
234975fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
235075fd0b74Schristos 
235175fd0b74Schristos INSN(sadd, s, s3_sat_1, 1cycle, C64XP,0,
235275fd0b74Schristos      FIX1(FIX(op, 0x0)),
235375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
235475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
235575fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
235675fd0b74Schristos /**/
235775fd0b74Schristos 
235875fd0b74Schristos INSN(sadd2, s, ext_1_or_2_src, 1cycle, C64X, 0,
235975fd0b74Schristos      FIX1(FIX(op, 0x0)),
236075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
236175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
236275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
236375fd0b74Schristos 
236475fd0b74Schristos INSN(saddsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
236575fd0b74Schristos      FIX1(FIX(op, 0x0e)),
236675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
236775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
236875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
236975fd0b74Schristos 
237075fd0b74Schristos INSN(saddsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
237175fd0b74Schristos      FIX1(FIX(op, 0x0f)),
237275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
237375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
237475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
237575fd0b74Schristos 
237675fd0b74Schristos INSN(saddsu2, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO,
237775fd0b74Schristos      FIX1(FIX(op, 0x1)),
237875fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
237975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
238075fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
238175fd0b74Schristos 
238275fd0b74Schristos INSN(saddus2, s, ext_1_or_2_src, 1cycle, C64X, 0,
238375fd0b74Schristos      FIX1(FIX(op, 0x1)),
238475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
238575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
238675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
238775fd0b74Schristos 
238875fd0b74Schristos INSN(saddu4, s, ext_1_or_2_src, 1cycle, C64X, 0,
238975fd0b74Schristos      FIX1(FIX(op, 0x3)),
239075fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
239175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
239275fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
239375fd0b74Schristos 
239475fd0b74Schristos INSN(sat, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
239575fd0b74Schristos      FIX3(FIX(op, 0x40), FIX(x, 0), FIX(src1, 0)),
239675fd0b74Schristos      OP2(ORREGL1, OWREG1),
239775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1)))
239875fd0b74Schristos 
239975fd0b74Schristos INSN(set, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
240075fd0b74Schristos      FIX1(FIX(op, 0x2)),
240175fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
240275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1),
240375fd0b74Schristos 	  ENC(cstb, ucst, 2), ENC(dst, reg, 3)))
240475fd0b74Schristos INSN(set, s, 1_or_2_src, 1cycle, C62X, 0,
240575fd0b74Schristos      FIX1(FIX(op, 0x3b)),
240675fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG1),
240775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
240875fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
240975fd0b74Schristos 
241075fd0b74Schristos /* 16 bits insn */
241175fd0b74Schristos INSN(set, s, sc5, 1cycle, C64XP, 0,
241275fd0b74Schristos      FIX1(FIX(op, 1)),
241375fd0b74Schristos      OP4(ORREG1, OACST, OACST, OWREG1),
241475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1),
241575fd0b74Schristos           ENC(cst, ucst, 2), ENC(srcdst, reg, 3)))
241675fd0b74Schristos /**/
241775fd0b74Schristos 
241875fd0b74Schristos INSN(shfl, m, unary, 1616_m, C64X, 0,
241975fd0b74Schristos      FIX1(FIX(op, 0x1c)),
242075fd0b74Schristos      OP2(ORXREG1, OWREG2),
242175fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
242275fd0b74Schristos 	  ENC(dst, reg, 1)))
242375fd0b74Schristos 
242475fd0b74Schristos INSN(shfl3, l, 1_or_2_src_noncond, 1cycle, C64XP, 0,
242575fd0b74Schristos      FIX1(FIX(op, 0x36)),
242675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD1),
242775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
242875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
242975fd0b74Schristos 
243075fd0b74Schristos INSNE(shl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
243175fd0b74Schristos       FIX1(FIX(op, 0x33)),
243275fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
243375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
243475fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
243575fd0b74Schristos INSNE(shl, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
243675fd0b74Schristos       FIX2(FIX(op, 0x31), FIX(x, 0)),
243775fd0b74Schristos       OP3(ORREGL1, ORREG1, OWREGL1),
243875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
243975fd0b74Schristos 	   ENC(dst, reg, 2)))
244075fd0b74Schristos INSNE(shl, s_xui_ui_ul, s, 1_or_2_src, 1cycle, C62X, 0,
244175fd0b74Schristos       FIX1(FIX(op, 0x13)),
244275fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREGL1),
244375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
244475fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
244575fd0b74Schristos INSNE(shl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
244675fd0b74Schristos       FIX1(FIX(op, 0x32)),
244775fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
244875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
244975fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
245075fd0b74Schristos INSNE(shl, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
245175fd0b74Schristos       FIX2(FIX(op, 0x30), FIX(x, 0)),
245275fd0b74Schristos       OP3(ORREGL1, OACST, OWREGL1),
245375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
245475fd0b74Schristos 	   ENC(dst, reg, 2)))
245575fd0b74Schristos INSNE(shl, s_xui_u5_ul, s, 1_or_2_src, 1cycle, C62X, 0,
245675fd0b74Schristos       FIX1(FIX(op, 0x12)),
245775fd0b74Schristos       OP3(ORXREG1, OACST, OWREGL1),
245875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
245975fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
246075fd0b74Schristos 
246175fd0b74Schristos /* 16bit insn */
246275fd0b74Schristos INSN(shl, s, s3i, 1cycle, C64XP, 0,
246375fd0b74Schristos       FIX1(FIX(op, 0x0)),
246475fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
246575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
246675fd0b74Schristos            ENC(cst, cst_s3i, 1), ENC(dst, reg, 2)))
246775fd0b74Schristos INSN(shl, s, ssh5_sat_x, 1cycle, C64XP,
246875fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
246975fd0b74Schristos       FIX1(FIX(op, 0x0)),
247075fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
247175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
247275fd0b74Schristos            ENC(cst, ucst, 1),  ENC(srcdst, reg, 2)))
247375fd0b74Schristos INSN(shl, s, s2sh, 1cycle, C64XP, 0,
247475fd0b74Schristos       FIX1(FIX(op, 0x0)),
247575fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
247675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
247775fd0b74Schristos            ENC(srcdst, reg, 2)))
247875fd0b74Schristos /**/
247975fd0b74Schristos 
248075fd0b74Schristos INSN(shlmb, l, 1_or_2_src, 1cycle, C64X, 0,
248175fd0b74Schristos      FIX1(FIX(op, 0x61)),
248275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
248375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
248475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
248575fd0b74Schristos INSN(shlmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
248675fd0b74Schristos      FIX1(FIX(op, 0x9)),
248775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
248875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
248975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
249075fd0b74Schristos 
249175fd0b74Schristos INSNE(shr, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
249275fd0b74Schristos       FIX1(FIX(op, 0x37)),
249375fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
249475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
249575fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
249675fd0b74Schristos INSNE(shr, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
249775fd0b74Schristos       FIX2(FIX(op, 0x35), FIX(x, 0)),
249875fd0b74Schristos       OP3(ORREGL1, ORREG1, OWREGL1),
249975fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
250075fd0b74Schristos 	   ENC(dst, reg, 2)))
250175fd0b74Schristos INSNE(shr, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
250275fd0b74Schristos       FIX1(FIX(op, 0x36)),
250375fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
250475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
250575fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
250675fd0b74Schristos INSNE(shr, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
250775fd0b74Schristos       FIX2(FIX(op, 0x34), FIX(x, 0)),
250875fd0b74Schristos       OP3(ORREGL1, OACST, OWREGL1),
250975fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
251075fd0b74Schristos 	   ENC(dst, reg, 2)))
251175fd0b74Schristos 
251275fd0b74Schristos /* 16bit insn */
251375fd0b74Schristos INSN(shr, s, s3i, 1cycle, C64XP, 0,
251475fd0b74Schristos       FIX1(FIX(op, 0x1)),
251575fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
251675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
251775fd0b74Schristos            ENC(cst, cst_s3i, 1), ENC(dst, reg, 2)))
251875fd0b74Schristos INSN(shr, s, ssh5_sat_x, 1cycle, C64XP,
251975fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
252075fd0b74Schristos       FIX1(FIX(op, 0x1)),
252175fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
252275fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
252375fd0b74Schristos            ENC(cst, ucst, 1),  ENC(srcdst, reg, 2)))
252475fd0b74Schristos INSN(shr, s, s2sh, 1cycle, C64XP, 0,
252575fd0b74Schristos       FIX1(FIX(op, 0x1)),
252675fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
252775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
252875fd0b74Schristos            ENC(srcdst, reg, 2)))
252975fd0b74Schristos /**/
253075fd0b74Schristos 
253175fd0b74Schristos INSNE(shr2, s_xs2_ui_s2, s, ext_1_or_2_src, 1cycle, C64X, 0,
253275fd0b74Schristos       FIX1(FIX(op, 0x7)),
253375fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
253475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
253575fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
253675fd0b74Schristos INSNE(shr2, s_xs2_u5_s2, s, 1_or_2_src, 1cycle, C64X, 0,
253775fd0b74Schristos       FIX1(FIX(op, 0x18)),
253875fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
253975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
254075fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
254175fd0b74Schristos 
254275fd0b74Schristos INSN(shrmb, l, 1_or_2_src, 1cycle, C64X, 0,
254375fd0b74Schristos      FIX1(FIX(op, 0x62)),
254475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
254575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
254675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
254775fd0b74Schristos INSN(shrmb, s, ext_1_or_2_src, 1cycle, C64X, 0,
254875fd0b74Schristos      FIX1(FIX(op, 0xa)),
254975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
255075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
255175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
255275fd0b74Schristos 
255375fd0b74Schristos INSNE(shru, s_xui_ui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
255475fd0b74Schristos       FIX1(FIX(op, 0x27)),
255575fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
255675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
255775fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
255875fd0b74Schristos INSNE(shru, s_ul_ui_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
255975fd0b74Schristos       FIX2(FIX(op, 0x25), FIX(x, 0)),
256075fd0b74Schristos       OP3(ORREGL1, ORREG1, OWREGL1),
256175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
256275fd0b74Schristos 	   ENC(dst, reg, 2)))
256375fd0b74Schristos INSNE(shru, s_xui_u5_ui, s, 1_or_2_src, 1cycle, C62X, 0,
256475fd0b74Schristos       FIX1(FIX(op, 0x26)),
256575fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
256675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
256775fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
256875fd0b74Schristos INSNE(shru, s_ul_u5_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
256975fd0b74Schristos       FIX2(FIX(op, 0x24), FIX(x, 0)),
257075fd0b74Schristos       OP3(ORREGL1, OACST, OWREGL1),
257175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
257275fd0b74Schristos 	   ENC(dst, reg, 2)))
257375fd0b74Schristos 
257475fd0b74Schristos /* 16 bits insn */
257575fd0b74Schristos INSN(shru, s, ssh5_sat_0, 1cycle, C64XP,
257675fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
257775fd0b74Schristos       FIX1(FIX(op, 0x2)),
257875fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
257975fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
258075fd0b74Schristos            ENC(cst, ucst, 1),  ENC(srcdst, reg, 2)))
258175fd0b74Schristos INSN(shru, s, s2sh, 1cycle, C64XP, 0,
258275fd0b74Schristos       FIX1(FIX(op, 0x2)),
258375fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
258475fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
258575fd0b74Schristos            ENC(srcdst, reg, 2)))
258675fd0b74Schristos /**/
258775fd0b74Schristos 
258875fd0b74Schristos INSNE(shru2, s_xu2_ui_u2, s, ext_1_or_2_src, 1cycle, C64X, 0,
258975fd0b74Schristos       FIX1(FIX(op, 0x8)),
259075fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
259175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
259275fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
259375fd0b74Schristos INSNE(shru2, s_xu2_u5_u2, s, 1_or_2_src, 1cycle, C64X, 0,
259475fd0b74Schristos       FIX1(FIX(op, 0x19)),
259575fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
259675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
259775fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
259875fd0b74Schristos 
259975fd0b74Schristos INSN(sl, d, 1_or_2_src, store, C64XP,
260075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS,
260175fd0b74Schristos      FIX3(FIX(s, 1), FIX(op, 0xd), FIX(src1, 0)),
260275fd0b74Schristos      OP2(ORDREG1, OWMEMDW),
260375fd0b74Schristos      ENC2(ENC(dst, reg, 0), ENC(src2, reg, 1)))
260475fd0b74Schristos 
260575fd0b74Schristos INSN(smpy, m, mpy, 1616_m, C62X, 0,
260675fd0b74Schristos      FIX1(FIX(op, 0x1a)),
260775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
260875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
260975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
261075fd0b74Schristos 
261175fd0b74Schristos /* 16 bits insn */
261275fd0b74Schristos INSN(smpy, m, m3_sat_1, 1616_m, C67X, 0,
261375fd0b74Schristos       FIX1(FIX(op, 0x0)),
261475fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
261575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
261675fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
261775fd0b74Schristos /**/
261875fd0b74Schristos 
261975fd0b74Schristos INSN(smpyh, m, mpy, 1616_m, C62X, 0,
262075fd0b74Schristos      FIX1(FIX(op, 0x02)),
262175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
262275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
262375fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
262475fd0b74Schristos 
262575fd0b74Schristos /* 16 bits insn */
262675fd0b74Schristos INSN(smpyh, m, m3_sat_1, 1616_m, C67X, 0,
262775fd0b74Schristos       FIX1(FIX(op, 0x1)),
262875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
262975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
263075fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
263175fd0b74Schristos /**/
263275fd0b74Schristos 
263375fd0b74Schristos INSN(smpyhl, m, mpy, 1616_m, C62X, 0,
263475fd0b74Schristos      FIX1(FIX(op, 0x0a)),
263575fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
263675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
263775fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
263875fd0b74Schristos 
263975fd0b74Schristos /* 16 bits insn */
264075fd0b74Schristos INSN(smpyhl, m, m3_sat_1, 1616_m, C67X, 0,
264175fd0b74Schristos       FIX1(FIX(op, 0x3)),
264275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
264375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
264475fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
264575fd0b74Schristos /**/
264675fd0b74Schristos 
264775fd0b74Schristos INSN(smpylh, m, mpy, 1616_m, C62X, 0,
264875fd0b74Schristos      FIX1(FIX(op, 0x12)),
264975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG2),
265075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
265175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
265275fd0b74Schristos 
265375fd0b74Schristos /* 16 bits insn */
265475fd0b74Schristos INSN(smpylh, m, m3_sat_1, 1616_m, C67X, 0,
265575fd0b74Schristos       FIX1(FIX(op, 0x2)),
265675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG2),
265775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
265875fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg_shift, 2)))
265975fd0b74Schristos /**/
266075fd0b74Schristos 
266175fd0b74Schristos INSN(smpy2, m, compound, 4cycle, C64X, 0,
266275fd0b74Schristos      FIX1(FIX(op, 0x01)),
266375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREGD4),
266475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
266575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
266675fd0b74Schristos 
266775fd0b74Schristos /* Contrary to SPRUFE8, this is the correct operand order for this
266875fd0b74Schristos    instruction.  */
266975fd0b74Schristos INSN(smpy32, m, 1_or_2_src, 4cycle, C64XP, 0,
267075fd0b74Schristos      FIX1(FIX(op, 0x19)),
267175fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
267275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
267375fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
267475fd0b74Schristos 
267575fd0b74Schristos INSN(spack2, s, ext_1_or_2_src, 1cycle, C64X, 0,
267675fd0b74Schristos      FIX1(FIX(op, 0x2)),
267775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
267875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
267975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
268075fd0b74Schristos 
268175fd0b74Schristos INSN(spacku4, s, ext_1_or_2_src, 1cycle, C64X, 0,
268275fd0b74Schristos      FIX1(FIX(op, 0x4)),
268375fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
268475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
268575fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
268675fd0b74Schristos 
268775fd0b74Schristos INSN(spdp, s, 1_or_2_src, 2cycle_dp, C67X, 0,
268875fd0b74Schristos      FIX2(FIX(op, 0x02), FIX(src1, 0)),
268975fd0b74Schristos      OP2(ORXREG1, OWREGD12),
269075fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
269175fd0b74Schristos 	  ENC(dst, reg, 1)))
269275fd0b74Schristos 
269375fd0b74Schristos INSN(spint, l, 1_or_2_src, 4cycle, C67X, 0,
269475fd0b74Schristos      FIX2(FIX(op, 0x0a), FIX(src1, 0)),
269575fd0b74Schristos      OP2(ORXREG1, OWREG4),
269675fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
269775fd0b74Schristos 	  ENC(dst, reg, 1)))
269875fd0b74Schristos 
269975fd0b74Schristos INSNE(spkernel, nfu_2, nfu, spkernel, 1cycle, C64XP,
270075fd0b74Schristos       TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
270175fd0b74Schristos       FIX1(FIX(s, 0)),
270275fd0b74Schristos       OP2(OACST, OACST),
270375fd0b74Schristos       ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1)))
270475fd0b74Schristos INSNE(spkernel, nfu_0, nfu, spkernel, 1cycle, C64XP,
270575fd0b74Schristos       TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL|TIC6X_FLAG_MACRO,
270675fd0b74Schristos       FIX2(FIX(s, 0), FIX(fstgfcyc, 0)),
270775fd0b74Schristos       OP0(),
270875fd0b74Schristos       ENC0())
270975fd0b74Schristos 
271075fd0b74Schristos /* 16 bits insn */
271175fd0b74Schristos INSN(spkernel, nfu, uspk, 1cycle, C64XP,
271275fd0b74Schristos       TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
271375fd0b74Schristos       FIX0(),
271475fd0b74Schristos       OP2(OACST, OACST),
271575fd0b74Schristos       ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1)))
271675fd0b74Schristos /**/
271775fd0b74Schristos 
271875fd0b74Schristos INSN(spkernelr, nfu, spkernelr, 1cycle, C64XP,
271975fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL,
272075fd0b74Schristos      FIX1(FIX(s, 0)),
272175fd0b74Schristos      OP0(),
272275fd0b74Schristos      ENC0())
272375fd0b74Schristos 
272475fd0b74Schristos INSN(sploop, nfu, loop_buffer, 1cycle, C64XP,
272575fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
272675fd0b74Schristos      FIX4(FIX(s, 0), FIX(op, 0xc), FIX(csta, 0), RAN(cstb, 0, 13)),
272775fd0b74Schristos      OP1(OACST),
272875fd0b74Schristos      ENC1(ENC(cstb, ucst_minus_one, 0)))
272975fd0b74Schristos 
273075fd0b74Schristos INSN(sploopd, nfu, loop_buffer, 1cycle, C64XP,
273175fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
273275fd0b74Schristos      FIX4(FIX(s, 0), FIX(op, 0xd), FIX(csta, 0), RAN(cstb, 0, 13)),
273375fd0b74Schristos      OP1(OACST),
273475fd0b74Schristos      ENC1(ENC(cstb, ucst_minus_one, 0)))
273575fd0b74Schristos 
273675fd0b74Schristos INSN(sploopw, nfu, loop_buffer, 1cycle, C64XP,
273775fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
273875fd0b74Schristos      FIX4(FIX(s, 0), FIX(op, 0xf), FIX(csta, 0), RAN(cstb, 0, 13)),
273975fd0b74Schristos      OP1(OACST),
274075fd0b74Schristos      ENC1(ENC(cstb, ucst_minus_one, 0)))
274175fd0b74Schristos 
274275fd0b74Schristos /* 16 bits insn */
274375fd0b74Schristos INSN(sploop, nfu, uspl, 1cycle, C64XP,
274475fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
274575fd0b74Schristos      FIX1(FIX(op, 0)),
274675fd0b74Schristos      OP1(OACST),
274775fd0b74Schristos      ENC1(ENC(ii, ucst_minus_one, 0)))
274875fd0b74Schristos 
274975fd0b74Schristos INSN(sploopd, nfu, uspl, 1cycle, C64XP,
275075fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP,
275175fd0b74Schristos      FIX1(FIX(op, 1)),
275275fd0b74Schristos      OP1(OACST),
275375fd0b74Schristos      ENC1(ENC(ii, ucst_minus_one, 0)))
275475fd0b74Schristos 
275575fd0b74Schristos INSN(sploopd, nfu, uspldr, 1cycle, C64XP,
275675fd0b74Schristos      TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP|TIC6X_FLAG_INSN16_SPRED,
275775fd0b74Schristos      FIX0(),
275875fd0b74Schristos      OP1(OACST),
275975fd0b74Schristos      ENC1(ENC(ii, ucst_minus_one, 0)))
276075fd0b74Schristos /**/
276175fd0b74Schristos 
276275fd0b74Schristos 
276375fd0b74Schristos /* Contrary to SPRUFE8, this is the correct encoding for this
276475fd0b74Schristos    instruction.  */
276575fd0b74Schristos INSN(spmask, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
276675fd0b74Schristos      FIX2(FIX(s, 0), FIX(op, 0x8)),
276775fd0b74Schristos      OP1(OFULIST),
276875fd0b74Schristos      ENC1(ENC(mask, spmask, 0)))
276975fd0b74Schristos 
277075fd0b74Schristos /* 16 bits insn */
277175fd0b74Schristos INSN(spmask, nfu, uspma, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
277275fd0b74Schristos      FIX0(),
277375fd0b74Schristos      OP1(OFULIST),
277475fd0b74Schristos      ENC1(ENC(mask, spmask, 0)))
277575fd0b74Schristos /**/
277675fd0b74Schristos 
277775fd0b74Schristos INSN(spmaskr, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
277875fd0b74Schristos      FIX2(FIX(s, 0), FIX(op, 0x9)),
277975fd0b74Schristos      OP1(OFULIST),
278075fd0b74Schristos      ENC1(ENC(mask, spmask, 0)))
278175fd0b74Schristos 
278275fd0b74Schristos /* 16 bits insn */
278375fd0b74Schristos INSN(spmaskr, nfu, uspmb, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK,
278475fd0b74Schristos      FIX0(),
278575fd0b74Schristos      OP1(OFULIST),
278675fd0b74Schristos      ENC1(ENC(mask, spmask, 0)))
278775fd0b74Schristos /**/
278875fd0b74Schristos 
278975fd0b74Schristos INSN(sptrunc, l, 1_or_2_src, 4cycle, C67X, 0,
279075fd0b74Schristos      FIX2(FIX(op, 0x0b), FIX(src1, 0)),
279175fd0b74Schristos      OP2(ORXREG1, OWREG4),
279275fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
279375fd0b74Schristos 	  ENC(dst, reg, 1)))
279475fd0b74Schristos 
279575fd0b74Schristos INSNE(sshl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0,
279675fd0b74Schristos       FIX1(FIX(op, 0x23)),
279775fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
279875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
279975fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
280075fd0b74Schristos INSNE(sshl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0,
280175fd0b74Schristos       FIX1(FIX(op, 0x22)),
280275fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
280375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
280475fd0b74Schristos 	   ENC(src1, ucst, 1), ENC(dst, reg, 2)))
280575fd0b74Schristos 
280675fd0b74Schristos /* 16 bits insn */
280775fd0b74Schristos INSN(sshl, s, ssh5_sat_1, 1cycle, C64XP,
280875fd0b74Schristos       TIC6X_FLAG_NO_CROSS,
280975fd0b74Schristos       FIX1(FIX(op, 0x2)),
281075fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
281175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0),
281275fd0b74Schristos            ENC(cst, ucst, 1),  ENC(srcdst, reg, 2)))
281375fd0b74Schristos INSN(sshl, s, s2sh, 1cycle, C64XP, 0,
281475fd0b74Schristos       FIX1(FIX(op, 0x3)),
281575fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
281675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1),
281775fd0b74Schristos            ENC(srcdst, reg, 2)))
281875fd0b74Schristos /**/
281975fd0b74Schristos 
282075fd0b74Schristos INSN(sshvl, m, compound, 1616_m, C64X, 0,
282175fd0b74Schristos      FIX1(FIX(op, 0x1c)),
282275fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG2),
282375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
282475fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
282575fd0b74Schristos 
282675fd0b74Schristos /* Contrary to SPRUFE8, this is the correct encoding for this
282775fd0b74Schristos    instruction.  */
282875fd0b74Schristos INSN(sshvr, m, compound, 1616_m, C64X, 0,
282975fd0b74Schristos      FIX1(FIX(op, 0x1a)),
283075fd0b74Schristos      OP3(ORXREG1, ORREG1, OWREG2),
283175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
283275fd0b74Schristos 	  ENC(src1, reg, 1), ENC(dst, reg, 2)))
283375fd0b74Schristos 
283475fd0b74Schristos INSNE(ssub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
283575fd0b74Schristos       FIX1(FIX(op, 0x0f)),
283675fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
283775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
283875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
283975fd0b74Schristos INSNE(ssub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
284075fd0b74Schristos       FIX1(FIX(op, 0x1f)),
284175fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
284275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
284375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
284475fd0b74Schristos INSNE(ssub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
284575fd0b74Schristos       FIX1(FIX(op, 0x0e)),
284675fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
284775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
284875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
284975fd0b74Schristos INSNE(ssub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
285075fd0b74Schristos       FIX1(FIX(op, 0x2c)),
285175fd0b74Schristos       OP3(OACST, ORREGL1, OWREGL1),
285275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
285375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
285475fd0b74Schristos 
285575fd0b74Schristos /* 16 bits insn */
285675fd0b74Schristos INSN(ssub, l, l3_sat_1, 1cycle, C64XP, 0,
285775fd0b74Schristos      FIX1(FIX(op, 1)),
285875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
285975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
286075fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
286175fd0b74Schristos /**/
286275fd0b74Schristos 
286375fd0b74Schristos INSN(ssub2, l, 1_or_2_src, 1cycle, C64XP, 0,
286475fd0b74Schristos      FIX1(FIX(op, 0x64)),
286575fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
286675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
286775fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
286875fd0b74Schristos 
286975fd0b74Schristos INSN(stb, d, load_store, store, C62X,
287075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
287175fd0b74Schristos      FIX2(FIX(op, 3), FIX(r, 0)),
287275fd0b74Schristos      OP2(ORDREG1, OWMEMSB),
287375fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
287475fd0b74Schristos 	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
287575fd0b74Schristos 	  ENC(srcdst, reg, 0)))
287675fd0b74Schristos INSN(stb, d, load_store_long, store, C62X,
287775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
287875fd0b74Schristos      FIX1(FIX(op, 3)),
287975fd0b74Schristos      OP2(ORDREG1, OWMEMLB),
288075fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_byte, 1),
288175fd0b74Schristos 	  ENC(dst, reg, 0)))
288275fd0b74Schristos 
288375fd0b74Schristos /* 16 bits insn */
288475fd0b74Schristos INSN(stb, d, doff4_dsz_000, store, C64XP,
288575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
288675fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
288775fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
288875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
288975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
289075fd0b74Schristos INSN(stb, d, doff4_dsz_x01, store, C64XP,
289175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
289275fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
289375fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
289475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
289575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
289675fd0b74Schristos INSN(stb, d, dind_dsz_000, store, C64XP,
289775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
289875fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
289975fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
290075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
290175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0)))
290275fd0b74Schristos INSN(stb, d, dind_dsz_x01, store, C64XP,
290375fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
290475fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
290575fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
290675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
290775fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0)))
290875fd0b74Schristos INSN(stb, d, dinc_dsz_000, store, C64XP,
290975fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
291075fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
291175fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
291275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
291375fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
291475fd0b74Schristos INSN(stb, d, dinc_dsz_x01, store, C64XP,
291575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
291675fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
291775fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
291875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
291975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
292075fd0b74Schristos INSN(stb, d, ddec_dsz_000, store, C64XP,
292175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
292275fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
292375fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
292475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
292575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
292675fd0b74Schristos INSN(stb, d, ddec_dsz_x01, store, C64XP,
292775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
292875fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
292975fd0b74Schristos      OP2(ORTREG1, OWMEMSB),
293075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
293175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
293275fd0b74Schristos /**/
293375fd0b74Schristos 
293475fd0b74Schristos INSN(stdw, d, load_store, store, C64X, TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS,
293575fd0b74Schristos      FIX2(FIX(op, 4), FIX(r, 1)),
293675fd0b74Schristos      OP2(ORDREGD1, OWMEMSD),
293775fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
293875fd0b74Schristos 	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
293975fd0b74Schristos 	  ENC(srcdst, reg, 0)))
294075fd0b74Schristos 
294175fd0b74Schristos /* 16 bits insn */
294275fd0b74Schristos INSN(stdw, d, dpp, store, C64XP,
294375fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
294475fd0b74Schristos      FIX3(FIX(op, 0), FIX(dw, 1), FIX(s, 1)),
294575fd0b74Schristos      OP2(ORTREGD1, OWMEMSD),
294675fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
294775fd0b74Schristos 	  ENC(cst, mem_offset_minus_one, 1)))
294875fd0b74Schristos INSN(stdw, d, ddecdw, store, C64XP,
294975fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
295075fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
295175fd0b74Schristos      OP2(ORTREGD1, OWMEMSD),
295275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
295375fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
295475fd0b74Schristos INSN(stdw, d, dincdw, store, C64XP,
295575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
295675fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
295775fd0b74Schristos      OP2(ORTREGD1, OWMEMSD),
295875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
295975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
296075fd0b74Schristos INSN(stdw, d, dinddw, store, C64XP,
296175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
296275fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
296375fd0b74Schristos      OP2(ORTREGD1, OWMEMSD),
296475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1),
296575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
296675fd0b74Schristos INSN(stdw, d, doff4dw, store, C64XP,
296775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
296875fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)),
296975fd0b74Schristos      OP2(ORTREGD1, OWMEMSD),
297075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 1),
297175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
297275fd0b74Schristos /**/
297375fd0b74Schristos 
297475fd0b74Schristos INSN(sth, d, load_store, store, C62X,
297575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
297675fd0b74Schristos      FIX2(FIX(op, 5), FIX(r, 0)),
297775fd0b74Schristos      OP2(ORDREG1, OWMEMSH),
297875fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
297975fd0b74Schristos 	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
298075fd0b74Schristos 	  ENC(srcdst, reg, 0)))
298175fd0b74Schristos INSN(sth, d, load_store_long, store, C62X,
298275fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
298375fd0b74Schristos      FIX1(FIX(op, 5)),
298475fd0b74Schristos      OP2(ORDREG1, OWMEMLH),
298575fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_half, 1),
298675fd0b74Schristos 	  ENC(dst, reg, 0)))
298775fd0b74Schristos 
298875fd0b74Schristos /* 16 bits insn */
298975fd0b74Schristos INSN(sth, d, doff4_dsz_01x, store, C64XP,
299075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
299175fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
299275fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
299375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
299475fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
299575fd0b74Schristos INSN(sth, d, doff4_dsz_111, store, C64XP,
299675fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
299775fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
299875fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
299975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
300075fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
300175fd0b74Schristos INSN(sth, d, dind_dsz_01x, store, C64XP,
300275fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
300375fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
300475fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
300575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
300675fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
300775fd0b74Schristos INSN(sth, d, dind_dsz_111, store, C64XP,
300875fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
300975fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
301075fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
301175fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
301275fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
301375fd0b74Schristos INSN(sth, d, dinc_dsz_01x, store, C64XP,
301475fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
301575fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
301675fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
301775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
301875fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
301975fd0b74Schristos INSN(sth, d, dinc_dsz_111, store, C64XP,
302075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
302175fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
302275fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
302375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
302475fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
302575fd0b74Schristos INSN(sth, d, ddec_dsz_01x, store, C64XP,
302675fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
302775fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
302875fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
302975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
303075fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
303175fd0b74Schristos INSN(sth, d, ddec_dsz_111, store, C64XP,
303275fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
303375fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
303475fd0b74Schristos      OP2(ORTREG1, OWMEMSH),
303575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
303675fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
303775fd0b74Schristos /**/
303875fd0b74Schristos 
303975fd0b74Schristos INSN(stndw, d, store_nonaligned, store, C64X,
304075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
304175fd0b74Schristos      FIX0(),
304275fd0b74Schristos      OP2(ORDREGD1, OWMEMND),
304375fd0b74Schristos      ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
304475fd0b74Schristos 	  ENC(offsetR, mem_offset_noscale, 1), ENC(baseR, reg, 1),
304575fd0b74Schristos 	  ENC(sc, scaled, 1), ENC(src, reg_shift, 0)))
304675fd0b74Schristos 
304775fd0b74Schristos /* 16 bits insn */
304875fd0b74Schristos INSN(stndw, d, ddecdw, store, C64XP,
304975fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
305075fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
305175fd0b74Schristos      OP2(ORTREGD1, OWMEMND),
305275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
305375fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1)))
305475fd0b74Schristos INSN(stndw, d, dincdw, store, C64XP,
305575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
305675fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
305775fd0b74Schristos      OP2(ORTREGD1, OWMEMND),
305875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0),
305975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1)))
306075fd0b74Schristos INSN(stndw, d, dinddw, store, C64XP,
306175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
306275fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
306375fd0b74Schristos      OP2(ORTREGD1, OWMEMND),
306475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 1),
306575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
306675fd0b74Schristos INSN(stndw, d, doff4dw, store, C64XP,
306775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
306875fd0b74Schristos      FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)),
306975fd0b74Schristos      OP2(ORTREGD1, OWMEMND),
307075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 1),
307175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0)))
307275fd0b74Schristos /**/
307375fd0b74Schristos 
307475fd0b74Schristos INSN(stnw, d, load_store, store, C64X,
307575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED,
307675fd0b74Schristos      FIX2(FIX(op, 5), FIX(r, 1)),
307775fd0b74Schristos      OP2(ORDREG1, OWMEMSW),
307875fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
307975fd0b74Schristos 	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
308075fd0b74Schristos 	  ENC(srcdst, reg, 0)))
308175fd0b74Schristos 
308275fd0b74Schristos /* 16 bits insn */
308375fd0b74Schristos INSN(stnw, d, doff4_dsz_110, store, C64XP,
308475fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
308575fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
308675fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
308775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
308875fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
308975fd0b74Schristos INSN(stnw, d, dind_dsz_110, store, C64XP,
309075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
309175fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
309275fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
309375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
309475fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
309575fd0b74Schristos INSN(stnw, d, dinc_dsz_110, store, C64XP,
309675fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
309775fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
309875fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
309975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
310075fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
310175fd0b74Schristos INSN(stnw, d, ddec_dsz_110, store, C64XP,
310275fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
310375fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
310475fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
310575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
310675fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
310775fd0b74Schristos /**/
310875fd0b74Schristos 
310975fd0b74Schristos INSN(stw, d, load_store, store, C62X,
311075fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
311175fd0b74Schristos      FIX2(FIX(op, 7), FIX(r, 0)),
311275fd0b74Schristos      OP2(ORDREG1, OWMEMSW),
311375fd0b74Schristos      ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1),
311475fd0b74Schristos 	  ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1),
311575fd0b74Schristos 	  ENC(srcdst, reg, 0)))
311675fd0b74Schristos INSN(stw, d, load_store_long, store, C62X,
311775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0),
311875fd0b74Schristos      FIX1(FIX(op, 7)),
311975fd0b74Schristos      OP2(ORDREG1, OWMEMLW),
312075fd0b74Schristos      ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_word, 1),
312175fd0b74Schristos 	  ENC(dst, reg, 0)))
312275fd0b74Schristos 
312375fd0b74Schristos /* 16 bits insn */
312475fd0b74Schristos INSN(stw, d, doff4_dsz_0xx, store, C64XP,
312575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
312675fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 0)),
312775fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
312875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
312975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
313075fd0b74Schristos INSN(stw, d, doff4_dsz_100, store, C64XP,
313175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE),
313275fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
313375fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
313475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
313575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1)))
313675fd0b74Schristos INSN(stw, d, dind_dsz_0xx, store, C64XP,
313775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
313875fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 0)),
313975fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
314075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
314175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
314275fd0b74Schristos INSN(stw, d, dind_dsz_100, store, C64XP,
314375fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE),
314475fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
314575fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
314675fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
314775fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1)))
314875fd0b74Schristos INSN(stw, d, dinc_dsz_0xx, store, C64XP,
314975fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
315075fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 0)),
315175fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
315275fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
315375fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
315475fd0b74Schristos INSN(stw, d, dinc_dsz_100, store, C64XP,
315575fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR),
315675fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
315775fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
315875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
315975fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
316075fd0b74Schristos INSN(stw, d, ddec_dsz_0xx, store, C64XP,
316175fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
316275fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 0)),
316375fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
316475fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
316575fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
316675fd0b74Schristos INSN(stw, d, ddec_dsz_100, store, C64XP,
316775fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR),
316875fd0b74Schristos      FIX2(FIX(op, 0), FIX(sz, 1)),
316975fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
317075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
317175fd0b74Schristos           ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1)))
317275fd0b74Schristos INSN(stw, d, dpp, store, C64XP,
317375fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS,
317475fd0b74Schristos      FIX2(FIX(op, 0), FIX(dw, 0)),
317575fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
317675fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
317775fd0b74Schristos 	  ENC(cst, mem_offset_minus_one, 1)))
317875fd0b74Schristos INSN(stw, d, dstk, store, C64XP,
317975fd0b74Schristos      TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR,
318075fd0b74Schristos      FIX2(FIX(op, 0x0), FIX(s, 1)),
318175fd0b74Schristos      OP2(ORTREG1, OWMEMSW),
318275fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0),
318375fd0b74Schristos 	  ENC(cst, mem_offset, 1)))
318475fd0b74Schristos /**/
318575fd0b74Schristos 
318675fd0b74Schristos INSNE(sub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
318775fd0b74Schristos       FIX1(FIX(op, 0x07)),
318875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
318975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
319075fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
319175fd0b74Schristos INSNE(sub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
319275fd0b74Schristos       FIX1(FIX(op, 0x17)),
319375fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
319475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
319575fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
319675fd0b74Schristos INSNE(sub, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
319775fd0b74Schristos       FIX1(FIX(op, 0x27)),
319875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGL1),
319975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
320075fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
320175fd0b74Schristos INSNE(sub, l_xsi_si_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
320275fd0b74Schristos       FIX1(FIX(op, 0x37)),
320375fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREGL1),
320475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
320575fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
320675fd0b74Schristos INSNE(sub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0,
320775fd0b74Schristos       FIX1(FIX(op, 0x06)),
320875fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
320975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
321075fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
321175fd0b74Schristos INSNE(sub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
321275fd0b74Schristos       FIX1(FIX(op, 0x24)),
321375fd0b74Schristos       OP3(OACST, ORREGL1, OWREGL1),
321475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
321575fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
321675fd0b74Schristos INSNE(sub, l_xsi_s5_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
321775fd0b74Schristos       FIX1(FIX(op, 0x2)),
321875fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
321975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
322075fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
322175fd0b74Schristos INSNE(sub, l_sl_s5_sl, l, 1_or_2_src, 1cycle, C62X,
322275fd0b74Schristos       TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
322375fd0b74Schristos       FIX2(FIX(op, 0x20), FIX(x, 0)),
322475fd0b74Schristos       OP3(ORREGL1, OACST, OWREGL1),
322575fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, scst_negate, 1), ENC(src2, reg, 0),
322675fd0b74Schristos 	   ENC(dst, reg, 2)))
322775fd0b74Schristos INSNE(sub, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
322875fd0b74Schristos       FIX1(FIX(op, 0x17)),
322975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
323075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
323175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
323275fd0b74Schristos INSNE(sub, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0,
323375fd0b74Schristos       FIX1(FIX(op, 0x16)),
323475fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
323575fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
323675fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
323775fd0b74Schristos /* Contrary to SPRUFE8, this is the correct encoding for this
323875fd0b74Schristos    instruction; this instruction can be predicated.  */
323975fd0b74Schristos INSNE(sub, s_xsi_si_si, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
324075fd0b74Schristos       FIX1(FIX(op, 0x5)),
324175fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG1),
324275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
324375fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
324475fd0b74Schristos INSNE(sub, s_xsi_s5_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO,
324575fd0b74Schristos       FIX1(FIX(op, 0x6)),
324675fd0b74Schristos       OP3(ORXREG1, OACST, OWREG1),
324775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1),
324875fd0b74Schristos 	   ENC(src2, reg, 0), ENC(dst, reg, 2)))
324975fd0b74Schristos INSNE(sub, d_si_si_si, d, 1_or_2_src, 1cycle, C62X,
325075fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1),
325175fd0b74Schristos       FIX1(FIX(op, 0x11)),
325275fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
325375fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
325475fd0b74Schristos 	   ENC(dst, reg, 2)))
325575fd0b74Schristos INSNE(sub, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
325675fd0b74Schristos       FIX1(FIX(op, 0x13)),
325775fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
325875fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
325975fd0b74Schristos 	   ENC(dst, reg, 2)))
326075fd0b74Schristos INSNE(sub, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0),
326175fd0b74Schristos       FIX1(FIX(op, 0xc)),
326275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
326375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
326475fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
326575fd0b74Schristos 
326675fd0b74Schristos /* 16 bits insn */
326775fd0b74Schristos INSN(sub, l, l3_sat_0, 1cycle, C64XP, 0,
326875fd0b74Schristos      FIX1(FIX(op, 0x1)),
326975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
327075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
327175fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
327275fd0b74Schristos INSN(sub, l, lx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
327375fd0b74Schristos      FIX1(FIX(op, 0x2)),
327475fd0b74Schristos      OP3(OHWCST0, ORREG1, OWREG1),
327575fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
327675fd0b74Schristos INSN(sub, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
327775fd0b74Schristos       FIX1(FIX(op, 0x2)),
327875fd0b74Schristos       OP3(OHWCST0, ORREG1, OWREG1),
327975fd0b74Schristos       ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2)))
328075fd0b74Schristos INSN(sub, s, sx2op, 1cycle, C64XP, 0,
328175fd0b74Schristos       FIX1(FIX(op, 0x1)),
328275fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
328375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2),
328475fd0b74Schristos            ENC(src2, reg, 1), ENC(x, xpath, 1)))
328575fd0b74Schristos INSN(sub, s, s3_sat_x, 1cycle, C64XP, 0,
328675fd0b74Schristos      FIX1(FIX(op, 0x1)),
328775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
328875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
328975fd0b74Schristos           ENC(src2, reg, 1), ENC(dst, reg, 2)))
329075fd0b74Schristos INSN(sub, d, dx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
329175fd0b74Schristos      FIX1(FIX(op, 0x3)),
329275fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
329375fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
329475fd0b74Schristos INSN(sub, d, dx2op, 1cycle, C64XP, 0,
329575fd0b74Schristos      FIX1(FIX(op, 0x1)),
329675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
329775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(srcdst, reg, 0),
329875fd0b74Schristos           ENC(src2, reg, 1), ENC(srcdst, reg, 2)))
329975fd0b74Schristos /**/
330075fd0b74Schristos 
330175fd0b74Schristos INSNE(subab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
330275fd0b74Schristos       FIX1(FIX(op, 0x31)),
330375fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
330475fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
330575fd0b74Schristos 	   ENC(dst, reg, 2)))
330675fd0b74Schristos INSNE(subab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
330775fd0b74Schristos       FIX1(FIX(op, 0x33)),
330875fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
330975fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
331075fd0b74Schristos 	   ENC(dst, reg, 2)))
331175fd0b74Schristos 
331275fd0b74Schristos INSN(subabs4, l, 1_or_2_src, 1cycle, C64X, 0,
331375fd0b74Schristos      FIX1(FIX(op, 0x5a)),
331475fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
331575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
331675fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
331775fd0b74Schristos 
331875fd0b74Schristos INSNE(subah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
331975fd0b74Schristos       FIX1(FIX(op, 0x35)),
332075fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
332175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
332275fd0b74Schristos 	   ENC(dst, reg, 2)))
332375fd0b74Schristos INSNE(subah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
332475fd0b74Schristos       FIX1(FIX(op, 0x37)),
332575fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
332675fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
332775fd0b74Schristos 	   ENC(dst, reg, 2)))
332875fd0b74Schristos 
332975fd0b74Schristos INSNE(subaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
333075fd0b74Schristos       FIX1(FIX(op, 0x39)),
333175fd0b74Schristos       OP3(ORREG1, ORREG1, OWREG1),
333275fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1),
333375fd0b74Schristos 	   ENC(dst, reg, 2)))
333475fd0b74Schristos INSNE(subaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS,
333575fd0b74Schristos       FIX1(FIX(op, 0x3b)),
333675fd0b74Schristos       OP3(ORREG1, OACST, OWREG1),
333775fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1),
333875fd0b74Schristos 	   ENC(dst, reg, 2)))
333975fd0b74Schristos 
334075fd0b74Schristos /* 16 bits insn */
334175fd0b74Schristos INSN(subaw, d, dx5p, 1cycle, C64XP, 0,
334275fd0b74Schristos      FIX1(FIX(op, 1)),
334375fd0b74Schristos      OP3(ORB15REG1, OACST, OWB15REG1),
334475fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1)))
334575fd0b74Schristos /**/
334675fd0b74Schristos 
334775fd0b74Schristos INSN(subc, l, 1_or_2_src, 1cycle, C62X, 0,
334875fd0b74Schristos      FIX1(FIX(op, 0x4b)),
334975fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
335075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
335175fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
335275fd0b74Schristos 
335375fd0b74Schristos INSNE(subdp, l_dp_xdp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(1),
335475fd0b74Schristos       FIX1(FIX(op, 0x19)),
335575fd0b74Schristos       OP3(ORREGD12, ORXREGD12, OWREGD67),
335675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
335775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
335875fd0b74Schristos INSNE(subdp, l_xdp_dp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(0),
335975fd0b74Schristos       FIX1(FIX(op, 0x1d)),
336075fd0b74Schristos       OP3(ORXREGD12, ORREGD12, OWREGD67),
336175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
336275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
336375fd0b74Schristos INSNE(subdp, s_dp_xdp_dp, s, l_1_or_2_src, addsubdp, C67XP,
336475fd0b74Schristos       TIC6X_FLAG_PREFER(1),
336575fd0b74Schristos       FIX1(FIX(op, 0x73)),
336675fd0b74Schristos       OP3(ORREGD12, ORXREGD12, OWREGD67),
336775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
336875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
336975fd0b74Schristos INSNE(subdp, s_xdp_dp_dp, s, l_1_or_2_src, addsubdp, C67XP,
337075fd0b74Schristos       TIC6X_FLAG_PREFER(0),
337175fd0b74Schristos       FIX1(FIX(op, 0x77)),
337275fd0b74Schristos       OP3(ORXREGD12, ORREGD12, OWREGD67),
337375fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
337475fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
337575fd0b74Schristos 
337675fd0b74Schristos INSNE(subsp, l_sp_xsp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(1),
337775fd0b74Schristos       FIX1(FIX(op, 0x11)),
337875fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG4),
337975fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
338075fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
338175fd0b74Schristos INSNE(subsp, l_xsp_sp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(0),
338275fd0b74Schristos       FIX1(FIX(op, 0x15)),
338375fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG4),
338475fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
338575fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
338675fd0b74Schristos INSNE(subsp, s_sp_xsp_sp, s, l_1_or_2_src, 4cycle, C67XP,
338775fd0b74Schristos       TIC6X_FLAG_PREFER(1),
338875fd0b74Schristos       FIX1(FIX(op, 0x71)),
338975fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG4),
339075fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
339175fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
339275fd0b74Schristos INSNE(subsp, s_xsp_sp_sp, s, l_1_or_2_src, 4cycle, C67XP,
339375fd0b74Schristos       TIC6X_FLAG_PREFER(0),
339475fd0b74Schristos       FIX1(FIX(op, 0x75)),
339575fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREG4),
339675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
339775fd0b74Schristos 	   ENC(src1, reg, 1), ENC(dst, reg, 2)))
339875fd0b74Schristos 
339975fd0b74Schristos INSNE(subu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1),
340075fd0b74Schristos       FIX1(FIX(op, 0x2f)),
340175fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREGL1),
340275fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
340375fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
340475fd0b74Schristos INSNE(subu, l_xui_ui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0),
340575fd0b74Schristos       FIX1(FIX(op, 0x3f)),
340675fd0b74Schristos       OP3(ORXREG1, ORREG1, OWREGL1),
340775fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
340875fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
340975fd0b74Schristos 
341075fd0b74Schristos INSN(sub2, l, 1_or_2_src, 1cycle, C64X, 0,
341175fd0b74Schristos      FIX1(FIX(op, 0x04)),
341275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
341375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
341475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
341575fd0b74Schristos INSN(sub2, s, 1_or_2_src, 1cycle, C62X, 0,
341675fd0b74Schristos      FIX1(FIX(op, 0x11)),
341775fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
341875fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
341975fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
342075fd0b74Schristos INSN(sub2, d, ext_1_or_2_src, 1cycle, C64X, 0,
342175fd0b74Schristos      FIX1(FIX(op, 0x5)),
342275fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
342375fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
342475fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
342575fd0b74Schristos 
342675fd0b74Schristos INSN(sub4, l, 1_or_2_src, 1cycle, C64X, 0,
342775fd0b74Schristos      FIX1(FIX(op, 0x66)),
342875fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG1),
342975fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
343075fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
343175fd0b74Schristos 
343275fd0b74Schristos INSN(swap2, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
343375fd0b74Schristos      FIX2(FIX(op, 0x1b), FIX(x, 0)),
343475fd0b74Schristos      OP2(ORREG1, OWREG1),
343575fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
343675fd0b74Schristos 	  ENC(src2, reg, 0), ENC(dst, reg, 1)))
343775fd0b74Schristos INSN(swap2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS,
343875fd0b74Schristos      FIX2(FIX(op, 0x10), FIX(x, 0)),
343975fd0b74Schristos      OP2(ORREG1, OWREG1),
344075fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
344175fd0b74Schristos 	  ENC(src2, reg, 0), ENC(dst, reg, 1)))
344275fd0b74Schristos 
344375fd0b74Schristos /* Contrary to SPRUFE8, this is the correct encoding for this
344475fd0b74Schristos    instruction.  */
344575fd0b74Schristos INSN(swap4, l, unary, 1cycle, C64X, 0,
344675fd0b74Schristos      FIX1(FIX(op, 0x1)),
344775fd0b74Schristos      OP2(ORXREG1, OWREG1),
344875fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
344975fd0b74Schristos 	  ENC(dst, reg, 1)))
345075fd0b74Schristos 
345175fd0b74Schristos INSN(swe, nfu, swe, 1cycle, C64XP, 0,
345275fd0b74Schristos      FIX1(FIX(s, 0)),
345375fd0b74Schristos      OP0(),
345475fd0b74Schristos      ENC0())
345575fd0b74Schristos 
345675fd0b74Schristos INSN(swenr, nfu, swenr, 1cycle, C64XP, 0,
345775fd0b74Schristos      FIX1(FIX(s, 0)),
345875fd0b74Schristos      OP0(),
345975fd0b74Schristos      ENC0())
346075fd0b74Schristos 
346175fd0b74Schristos INSN(unpkhu4, l, unary, 1cycle, C64X, 0,
346275fd0b74Schristos      FIX1(FIX(op, 0x03)),
346375fd0b74Schristos      OP2(ORXREG1, OWREG1),
346475fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
346575fd0b74Schristos 	  ENC(dst, reg, 1)))
346675fd0b74Schristos INSN(unpkhu4, s, unary, 1cycle, C64X, 0,
346775fd0b74Schristos      FIX1(FIX(op, 0x03)),
346875fd0b74Schristos      OP2(ORXREG1, OWREG1),
346975fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
347075fd0b74Schristos 	  ENC(dst, reg, 1)))
347175fd0b74Schristos 
347275fd0b74Schristos INSN(unpklu4, l, unary, 1cycle, C64X, 0,
347375fd0b74Schristos      FIX1(FIX(op, 0x02)),
347475fd0b74Schristos      OP2(ORXREG1, OWREG1),
347575fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
347675fd0b74Schristos 	  ENC(dst, reg, 1)))
347775fd0b74Schristos INSN(unpklu4, s, unary, 1cycle, C64X, 0,
347875fd0b74Schristos      FIX1(FIX(op, 0x02)),
347975fd0b74Schristos      OP2(ORXREG1, OWREG1),
348075fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
348175fd0b74Schristos 	  ENC(dst, reg, 1)))
348275fd0b74Schristos 
348375fd0b74Schristos INSNE(xor, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
348475fd0b74Schristos       FIX1(FIX(op, 0x6f)),
348575fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
348675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
348775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
348875fd0b74Schristos INSNE(xor, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0,
348975fd0b74Schristos       FIX1(FIX(op, 0x6e)),
349075fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
349175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
349275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
349375fd0b74Schristos INSNE(xor, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
349475fd0b74Schristos       FIX1(FIX(op, 0x0b)),
349575fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
349675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
349775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
349875fd0b74Schristos INSNE(xor, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0,
349975fd0b74Schristos       FIX1(FIX(op, 0x0a)),
350075fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
350175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
350275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
350375fd0b74Schristos INSNE(xor, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
350475fd0b74Schristos       FIX1(FIX(op, 0xe)),
350575fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1),
350675fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
350775fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
350875fd0b74Schristos INSNE(xor, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0,
350975fd0b74Schristos       FIX1(FIX(op, 0xf)),
351075fd0b74Schristos       OP3(OACST, ORXREG1, OWREG1),
351175fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0),
351275fd0b74Schristos 	   ENC(src2, reg, 1), ENC(dst, reg, 2)))
351375fd0b74Schristos 
351475fd0b74Schristos /* 16 bits insn */
351575fd0b74Schristos INSN(xor, l, l2c, 1cycle, C64XP, 0,
351675fd0b74Schristos       FIX1(FIX(op, 0x2)),
351775fd0b74Schristos       OP3(ORREG1, ORXREG1, OWREG1NORS),
351875fd0b74Schristos       ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
351975fd0b74Schristos            ENC(src2, reg, 1), ENC(dst, reg, 2)))
352075fd0b74Schristos INSNU(xor, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
352175fd0b74Schristos      FIX2(FIX(op, 0x7), FIX(unit, 0x0)),
352275fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
352375fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
352475fd0b74Schristos INSNU(xor, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
352575fd0b74Schristos      FIX2(FIX(op, 0x7), FIX(unit, 0x1)),
352675fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
352775fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
352875fd0b74Schristos INSNU(xor, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS,
352975fd0b74Schristos      FIX2(FIX(op, 0x7), FIX(unit, 0x2)),
353075fd0b74Schristos      OP3(ORREG1, OHWCST1, OWREG1),
353175fd0b74Schristos      ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2)))
353275fd0b74Schristos /**/
353375fd0b74Schristos 
353475fd0b74Schristos INSN(xormpy, m, 1_or_2_src, 4cycle, C64XP, 0,
353575fd0b74Schristos      FIX1(FIX(op, 0x1b)),
353675fd0b74Schristos      OP3(ORREG1, ORXREG1, OWREG4),
353775fd0b74Schristos      ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0),
353875fd0b74Schristos 	  ENC(src2, reg, 1), ENC(dst, reg, 2)))
353975fd0b74Schristos 
354075fd0b74Schristos INSN(xpnd2, m, unary, 1616_m, C64X, 0,
354175fd0b74Schristos      FIX1(FIX(op, 0x19)),
354275fd0b74Schristos      OP2(ORXREG1, OWREG2),
354375fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
354475fd0b74Schristos 	  ENC(dst, reg, 1)))
354575fd0b74Schristos 
354675fd0b74Schristos INSN(xpnd4, m, unary, 1616_m, C64X, 0,
354775fd0b74Schristos      FIX1(FIX(op, 0x18)),
354875fd0b74Schristos      OP2(ORXREG1, OWREG2),
354975fd0b74Schristos      ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0),
355075fd0b74Schristos 	  ENC(dst, reg, 1)))
355175fd0b74Schristos 
355275fd0b74Schristos INSN(zero, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
355375fd0b74Schristos      FIX2(FIX(h, 0), FIX(cst, 0)),
355475fd0b74Schristos      OP1(OWREG1),
355575fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
355675fd0b74Schristos INSN(zero, l, unary, 1cycle, C64X,
355775fd0b74Schristos      TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
355875fd0b74Schristos      FIX3(FIX(x, 0), FIX(op, 0x05), FIX(src2, 0)),
355975fd0b74Schristos      OP1(OWREG1),
356075fd0b74Schristos      ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
356175fd0b74Schristos INSNE(zero, l_sub, l, 1_or_2_src, 1cycle, C62X,
356275fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
356375fd0b74Schristos       FIX2(FIX(op, 0x07), FIX(x, 0)),
356475fd0b74Schristos       OP1(OWREG1),
356575fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
356675fd0b74Schristos 	   ENC(dst, reg, 0)))
356775fd0b74Schristos INSNE(zero, l_sub_sl, l, 1_or_2_src, 1cycle, C62X,
356875fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO,
356975fd0b74Schristos       FIX2(FIX(op, 0x27), FIX(x, 0)),
357075fd0b74Schristos       OP1(OWREGL1),
357175fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0),
357275fd0b74Schristos 	   ENC(dst, reg, 0)))
357375fd0b74Schristos INSNE(zero, d_mvk, d, 1_or_2_src, 1cycle, C64X,
357475fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1),
357575fd0b74Schristos       FIX3(FIX(op, 0x00), FIX(src1, 0), FIX(src2, 0)),
357675fd0b74Schristos       OP1(OWREG1),
357775fd0b74Schristos       ENC2(ENC(s, fu, 0), ENC(dst, reg, 0)))
357875fd0b74Schristos INSNE(zero, d_sub, d, 1_or_2_src, 1cycle, C62X,
357975fd0b74Schristos       TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0),
358075fd0b74Schristos       FIX1(FIX(op, 0x11)),
358175fd0b74Schristos       OP1(OWREG1),
358275fd0b74Schristos       ENC4(ENC(s, fu, 0), ENC(src2, reg_unused, 0), ENC(src1, reg_unused, 0),
358375fd0b74Schristos 	   ENC(dst, reg, 0)))
358475fd0b74Schristos 
358575fd0b74Schristos #undef TIC6X_INSN_C64X_AND_C67X
358675fd0b74Schristos #undef tic6x_insn_format_nfu_s_branch_nop_cst
358775fd0b74Schristos #undef tic6x_insn_format_s_l_1_or_2_src
358875fd0b74Schristos #undef RAN
358975fd0b74Schristos #undef FIX
359075fd0b74Schristos #undef FIX0
359175fd0b74Schristos #undef FIX1
359275fd0b74Schristos #undef FIX2
359375fd0b74Schristos #undef FIX3
359475fd0b74Schristos #undef FIX4
359575fd0b74Schristos #undef OP0
359675fd0b74Schristos #undef OP1
359775fd0b74Schristos #undef OP2
359875fd0b74Schristos #undef OP3
359975fd0b74Schristos #undef OP4
360075fd0b74Schristos #undef OACST
360175fd0b74Schristos #undef OLCST
360275fd0b74Schristos #undef OHWCSTM1
360375fd0b74Schristos #undef OHWCST0
360475fd0b74Schristos #undef OHWCST1
360575fd0b74Schristos #undef OHWCST5
360675fd0b74Schristos #undef OHWCST16
360775fd0b74Schristos #undef OHWCST24
360875fd0b74Schristos #undef OHWCST31
360975fd0b74Schristos #undef OFULIST
361075fd0b74Schristos #undef ORIRP1
361175fd0b74Schristos #undef ORNRP1
361275fd0b74Schristos #undef OWREG1
361375fd0b74Schristos #undef OWRETREG1
361475fd0b74Schristos #undef ORREG1
361575fd0b74Schristos #undef ORDREG1
361675fd0b74Schristos #undef ORWREG1
361775fd0b74Schristos #undef ORAREG1
361875fd0b74Schristos #undef ORXREG1
361975fd0b74Schristos #undef ORREG12
362075fd0b74Schristos #undef ORREG14
362175fd0b74Schristos #undef ORXREG14
362275fd0b74Schristos #undef OWREG2
362375fd0b74Schristos #undef OWREG4
362475fd0b74Schristos #undef OWREG9
362575fd0b74Schristos #undef OWDREG5
362675fd0b74Schristos #undef OWREGL1
362775fd0b74Schristos #undef ORREGL1
362875fd0b74Schristos #undef OWREGD1
362975fd0b74Schristos #undef ORTREG1
363075fd0b74Schristos #undef ORTREGD1
363175fd0b74Schristos #undef OWTREG5
363275fd0b74Schristos #undef OWTREGD5
363375fd0b74Schristos #undef OWREGD12
363475fd0b74Schristos #undef OWREGD4
363575fd0b74Schristos #undef ORREGD1
363675fd0b74Schristos #undef OWREGD45
363775fd0b74Schristos #undef OWREGD67
363875fd0b74Schristos #undef ORDREGD1
363975fd0b74Schristos #undef OWDREGD5
364075fd0b74Schristos #undef ORREGD12
364175fd0b74Schristos #undef ORXREGD12
364275fd0b74Schristos #undef ORXREGD1234
364375fd0b74Schristos #undef ORREGD1324
364475fd0b74Schristos #undef OWREGD910
364575fd0b74Schristos #undef OWILC1
364675fd0b74Schristos #undef ORCREG1
364775fd0b74Schristos #undef OWCREG1
364875fd0b74Schristos #undef OWREG1Z
364975fd0b74Schristos #undef ORB15REG1
365075fd0b74Schristos #undef OWB15REG1
365175fd0b74Schristos #undef ORMEMDW
365275fd0b74Schristos #undef OWMEMDW
365375fd0b74Schristos #undef ORMEMSB
365475fd0b74Schristos #undef OWMEMSB
365575fd0b74Schristos #undef ORMEMLB
365675fd0b74Schristos #undef OWMEMLB
365775fd0b74Schristos #undef ORMEMSH
365875fd0b74Schristos #undef OWMEMSH
365975fd0b74Schristos #undef ORMEMLH
366075fd0b74Schristos #undef OWMEMLH
366175fd0b74Schristos #undef ORMEMSW
366275fd0b74Schristos #undef OWMEMSW
366375fd0b74Schristos #undef ORMEMLW
366475fd0b74Schristos #undef OWMEMLW
366575fd0b74Schristos #undef ORMEMSD
366675fd0b74Schristos #undef OWMEMSD
366775fd0b74Schristos #undef ORMEMND
366875fd0b74Schristos #undef OWMEMND
366975fd0b74Schristos #undef ENC
367075fd0b74Schristos #undef ENC0
367175fd0b74Schristos #undef ENC1
367275fd0b74Schristos #undef ENC2
367375fd0b74Schristos #undef ENC3
367475fd0b74Schristos #undef ENC4
367575fd0b74Schristos #undef ENC5
367675fd0b74Schristos #undef ENC6
367775fd0b74Schristos #undef ENC7
3678