1/* TI C6X opcode table. 2 Copyright (C) 2010-2017 Free Software Foundation, Inc. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 3 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 17 MA 02110-1301, USA. */ 18 19/* Define the INSN macro before including this file; it takes as 20 arguments the fields from tic6x_opcode (defined in tic6x.h). The 21 name is given as an identifier; the subsequent four operands should 22 have "tic6x_func_unit_", "tic6x_insn_format_", "tic6x_pipeline_" 23 and "TIC6X_INSN_", respectively, prepended to them by the macro 24 definition. Also define INSNE, which has a second argument that 25 goes after tic6x_opcode_NAME_ to form the enumeration value for 26 this instruction, where the value otherwise formed from the name, 27 functional unit and format is ambiguous, but otherwise has the same 28 arguments as INSN. */ 29 30#define TIC6X_INSN_C64X_AND_C67X TIC6X_INSN_C64X|TIC6X_INSN_C67X 31#define tic6x_insn_format_nfu_s_branch_nop_cst \ 32 tic6x_insn_format_s_branch_nop_cst 33#define tic6x_insn_format_s_l_1_or_2_src tic6x_insn_format_l_1_or_2_src 34#define RAN(id, min, max) { CONCAT2(tic6x_field_,id), (min), (max) } 35#define FIX(id, val) RAN(id, val, val) 36#define FIX0() 0, { { 0, 0, 0 } } 37#define FIX1(a) 1, { a } 38#define FIX2(a, b) 2, { a, b } 39#define FIX3(a, b, c) 3, { a, b, c } 40#define FIX4(a, b, c, d) 4, { a, b, c, d } 41#define OP0() 0, { { 0, 0, FALSE, 0, 0, 0, 0 } } 42#define OP1(a) 1, { a } 43#define OP2(a, b) 2, { a, b } 44#define OP3(a, b, c) 3, { a, b, c } 45#define OP4(a, b, c, d) 4, { a, b, c, d } 46#define OACST { tic6x_operand_asm_const, 0, tic6x_rw_none, 0, 0, 0, 0 } 47#define OLCST { tic6x_operand_link_const, 0, tic6x_rw_none, 0, 0, 0, 0 } 48#define OHWCSTM1 { tic6x_operand_hw_const_minus_1, 0, tic6x_rw_none, 0, 0, 0, 0 } 49#define OHWCST0 { tic6x_operand_hw_const_0, 0, tic6x_rw_none, 0, 0, 0, 0 } 50#define OHWCST1 { tic6x_operand_hw_const_1, 0, tic6x_rw_none, 0, 0, 0, 0 } 51#define OHWCST5 { tic6x_operand_hw_const_5, 0, tic6x_rw_none, 0, 0, 0, 0 } 52#define OHWCST16 { tic6x_operand_hw_const_16, 0, tic6x_rw_none, 0, 0, 0, 0 } 53#define OHWCST24 { tic6x_operand_hw_const_24, 0, tic6x_rw_none, 0, 0, 0, 0 } 54#define OHWCST31 { tic6x_operand_hw_const_31, 0, tic6x_rw_none, 0, 0, 0, 0 } 55#define OFULIST { tic6x_operand_func_unit, 0, tic6x_rw_none, 0, 0, 0, 0 } 56#define ORIRP1 { tic6x_operand_irp, 4, tic6x_rw_read, 1, 1, 0, 0 } 57#define ORNRP1 { tic6x_operand_nrp, 4, tic6x_rw_read, 1, 1, 0, 0 } 58#define OWREG1 { tic6x_operand_reg, 4, tic6x_rw_write, 1, 1, 0, 0 } 59#define OWREG1Z { tic6x_operand_zreg, 4, tic6x_rw_write, 1, 1, 0, 0 } 60#define OWREG1NORS { tic6x_operand_reg_nors, 4, tic6x_rw_write, 1, 1, 0, 0 } 61#define ORREG1B { tic6x_operand_reg_bside, 4, tic6x_rw_write, 1, 1, 0, 0 } 62#define ORREG1BNORS { tic6x_operand_reg_bside_nors, 4, tic6x_rw_write, 1, 1, 0, 0 } 63#define OWRETREG1 { tic6x_operand_retreg, 4, tic6x_rw_write, 1, 1, 0, 0 } 64#define ORREG1 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 1, 0, 0 } 65#define ORDREG1 { tic6x_operand_dreg, 4, tic6x_rw_read, 1, 1, 0, 0 } 66#define ORTREG1 { tic6x_operand_treg, 4, tic6x_rw_read, 1, 1, 0, 0 } 67#define ORWREG1 { tic6x_operand_reg, 4, tic6x_rw_read_write, 1, 1, 0, 0 } 68#define ORB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_read, 1, 1, 0, 0 } 69#define OWB15REG1 { tic6x_operand_b15reg, 4, tic6x_rw_write, 1, 1, 0, 0 } 70#define ORAREG1 { tic6x_operand_areg, 4, tic6x_rw_read, 1, 1, 0, 0 } 71#define ORXREG1 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 1, 0, 0 } 72#define ORREG12 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 2, 0, 0 } 73#define ORREG14 { tic6x_operand_reg, 4, tic6x_rw_read, 1, 4, 0, 0 } 74#define ORXREG14 { tic6x_operand_xreg, 4, tic6x_rw_read, 1, 4, 0, 0 } 75#define OWREG2 { tic6x_operand_reg, 4, tic6x_rw_write, 2, 2, 0, 0 } 76#define OWREG4 { tic6x_operand_reg, 4, tic6x_rw_write, 4, 4, 0, 0 } 77#define OWREG9 { tic6x_operand_reg, 4, tic6x_rw_write, 9, 9, 0, 0 } 78#define OWDREG5 { tic6x_operand_dreg, 4, tic6x_rw_write, 5, 5, 0, 0 } 79#define OWTREG5 { tic6x_operand_treg, 4, tic6x_rw_write, 5, 5, 0, 0 } 80#define OWREGL1 { tic6x_operand_regpair, 5, tic6x_rw_write, 1, 1, 1, 1 } 81#define ORREGL1 { tic6x_operand_regpair, 5, tic6x_rw_read, 1, 1, 1, 1 } 82#define OWREGD1 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 1, 1 } 83#define OWREGD12 { tic6x_operand_regpair, 8, tic6x_rw_write, 1, 1, 2, 2 } 84#define OWREGD4 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 4, 4 } 85#define ORREGD1 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 1, 1 } 86#define OWREGD45 { tic6x_operand_regpair, 8, tic6x_rw_write, 4, 4, 5, 5 } 87#define OWREGD67 { tic6x_operand_regpair, 8, tic6x_rw_write, 6, 6, 7, 7 } 88#define ORDREGD1 { tic6x_operand_dregpair, 8, tic6x_rw_read, 1, 1, 1, 1 } 89#define ORTREGD1 { tic6x_operand_tregpair, 8, tic6x_rw_read, 1, 1, 1, 1 } 90#define OWDREGD5 { tic6x_operand_dregpair, 8, tic6x_rw_write, 5, 5, 5, 5 } 91#define OWTREGD5 { tic6x_operand_tregpair, 8, tic6x_rw_write, 5, 5, 5, 5 } 92#define ORREGD12 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 1, 2, 2 } 93#define ORXREGD12 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 1, 2, 2 } 94#define ORREGD1234 { tic6x_operand_regpair, 8, tic6x_rw_read, 1, 2, 3, 4 } 95#define ORXREGD1324 { tic6x_operand_xregpair, 8, tic6x_rw_read, 1, 3, 2, 4 } 96#define OWREGD910 { tic6x_operand_regpair, 8, tic6x_rw_write, 9, 9, 10, 10 } 97#define ORCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_read, 1, 1, 0, 0 } 98#define OWCREG1 { tic6x_operand_ctrl, 4, tic6x_rw_write, 1, 1, 0, 0 } 99#define OWILC1 { tic6x_operand_ilc, 4, tic6x_rw_write, 1, 1, 0, 0 } 100#define ORMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_read, 3, 3, 0, 0 } 101#define OWMEMDW { tic6x_operand_mem_deref, 4, tic6x_rw_write, 3, 3, 0, 0 } 102#define ORMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_read, 3, 3, 0, 0 } 103#define OWMEMSB { tic6x_operand_mem_short, 1, tic6x_rw_write, 3, 3, 0, 0 } 104#define ORMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_read, 3, 3, 0, 0 } 105#define OWMEMLB { tic6x_operand_mem_long, 1, tic6x_rw_write, 3, 3, 0, 0 } 106#define ORMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_read, 3, 3, 0, 0 } 107#define OWMEMSH { tic6x_operand_mem_short, 2, tic6x_rw_write, 3, 3, 0, 0 } 108#define ORMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_read, 3, 3, 0, 0 } 109#define OWMEMLH { tic6x_operand_mem_long, 2, tic6x_rw_write, 3, 3, 0, 0 } 110#define ORMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_read, 3, 3, 0, 0 } 111#define OWMEMSW { tic6x_operand_mem_short, 4, tic6x_rw_write, 3, 3, 0, 0 } 112#define ORMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_read, 3, 3, 0, 0 } 113#define OWMEMLW { tic6x_operand_mem_long, 4, tic6x_rw_write, 3, 3, 0, 0 } 114#define ORMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_read, 3, 3, 0, 0 } 115#define OWMEMSD { tic6x_operand_mem_short, 8, tic6x_rw_write, 3, 3, 0, 0 } 116#define ORMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_read, 3, 3, 0, 0 } 117#define OWMEMND { tic6x_operand_mem_ndw, 8, tic6x_rw_write, 3, 3, 0, 0 } 118#define ENC(id, meth, op) { \ 119 CONCAT2(tic6x_field_,id), \ 120 CONCAT2(tic6x_coding_,meth), \ 121 op \ 122 } 123#define ENC0() 0, { { 0, 0, 0 } } 124#define ENC1(a) 1, { a } 125#define ENC2(a, b) 2, { a, b } 126#define ENC3(a, b, c) 3, { a, b, c } 127#define ENC4(a, b, c, d) 4, { a, b, c, d } 128#define ENC5(a, b, c, d, e) 5, { a, b, c, d, e } 129#define ENC6(a, b, c, d, e, f) 6, { a, b, c, d, e, f } 130#define ENC7(a, b, c, d, e, f, g) 7, { a, b, c, d, e, f, g } 131 132INSN(abs, l, unary, 1cycle, C62X, 0, 133 FIX1(FIX(op, 0)), 134 OP2(ORXREG1, OWREG1), 135 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 136 ENC(dst, reg, 1))) 137INSN(abs, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 138 FIX3(FIX(op, 0x38), FIX(x, 0), FIX(src1, 0)), 139 OP2(ORREGL1, OWREGL1), 140 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1))) 141 142INSN(abs2, l, unary, 1cycle, C64X, 0, 143 FIX1(FIX(op, 0x4)), 144 OP2(ORXREG1, OWREG1), 145 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 146 ENC(dst, reg, 1))) 147 148INSN(absdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS, 149 FIX2(FIX(op, 0x2c), FIX(x, 0)), 150 OP2(ORREGD1, OWREGD12), 151 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 152 ENC(dst, reg, 1))) 153 154INSN(abssp, s, unary, 1cycle, C67X, 0, 155 FIX1(FIX(op, 0)), 156 OP2(ORXREG1, OWREG1), 157 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 158 ENC(dst, reg, 1))) 159 160INSNE(add, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 161 FIX1(FIX(op, 0x3)), 162 OP3(ORREG1, ORXREG1, OWREG1), 163 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 164 ENC(src2, reg, 1), ENC(dst, reg, 2))) 165INSNE(add, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, 0, 166 FIX1(FIX(op, 0x23)), 167 OP3(ORREG1, ORXREG1, OWREGL1), 168 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 169 ENC(src2, reg, 1), ENC(dst, reg, 2))) 170INSNE(add, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0, 171 FIX1(FIX(op, 0x21)), 172 OP3(ORXREG1, ORREGL1, OWREGL1), 173 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 174 ENC(src2, reg, 1), ENC(dst, reg, 2))) 175INSNE(add, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 176 FIX1(FIX(op, 0x2)), 177 OP3(OACST, ORXREG1, OWREG1), 178 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 179 ENC(src2, reg, 1), ENC(dst, reg, 2))) 180INSNE(add, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 181 FIX2(FIX(op, 0x20), FIX(x, 0)), 182 OP3(OACST, ORREGL1, OWREGL1), 183 ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1), 184 ENC(dst, reg, 2))) 185INSNE(add, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0, 186 FIX1(FIX(op, 0x7)), 187 OP3(ORREG1, ORXREG1, OWREG1), 188 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 189 ENC(src2, reg, 1), ENC(dst, reg, 2))) 190INSNE(add, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0, 191 FIX1(FIX(op, 0x6)), 192 OP3(OACST, ORXREG1, OWREG1), 193 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 194 ENC(src2, reg, 1), ENC(dst, reg, 2))) 195INSNE(add, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, 196 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 197 FIX1(FIX(op, 0x10)), 198 OP3(ORREG1, ORREG1, OWREG1), 199 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 200 ENC(dst, reg, 2))) 201INSNE(add, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, 202 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 203 FIX1(FIX(op, 0x12)), 204 OP3(ORREG1, OACST, OWREG1), 205 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 206 ENC(dst, reg, 2))) 207INSNE(add, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0), 208 FIX1(FIX(op, 0xa)), 209 OP3(ORREG1, ORXREG1, OWREG1), 210 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 211 ENC(src2, reg, 1), ENC(dst, reg, 2))) 212INSNE(add, d_xsi_s5_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0), 213 FIX1(FIX(op, 0xb)), 214 OP3(ORXREG1, OACST, OWREG1), 215 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 216 ENC(src1, scst, 1), ENC(dst, reg, 2))) 217 218/* 16 bits insn */ 219INSN(add, l, l3_sat_0, 1cycle, C64XP, 0, 220 FIX1(FIX(op, 0x0)), 221 OP3(ORREG1, ORXREG1, OWREG1), 222 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 223 ENC(src2, reg, 1), ENC(dst, reg, 2))) 224INSN(add, l, l3i, 1cycle, C64XP, 0, 225 FIX0(), 226 OP3(OACST, ORXREG1, OWREG1), 227 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(cst, scst_l3i, 0), 228 ENC(src2, reg, 1), ENC(dst, reg, 2))) 229INSN(add, l, lx1, 1cycle, C64XP, 230 TIC6X_FLAG_NO_CROSS, 231 FIX1(FIX(op, 0x3)), 232 OP3(OHWCSTM1, ORREG1, OWREG1), 233 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2))) 234INSN(add, s, s3_sat_0, 1cycle, C64XP, 0, 235 FIX1(FIX(op, 0x0)), 236 OP3(ORREG1, ORXREG1, OWREG1), 237 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 238 ENC(src2, reg, 1), ENC(dst, reg, 2))) 239INSN(add, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 240 FIX1(FIX(op, 0x3)), 241 OP3(OHWCSTM1, ORREG1, OWREG1), 242 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2))) 243INSN(add, s, sx2op, 1cycle, C64XP, 0, 244 FIX1(FIX(op, 0x0)), 245 OP3(ORREG1, ORXREG1, OWREG1), 246 ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2), 247 ENC(src2, reg, 1), ENC(x, xpath, 1))) 248INSN(add, d, dx2op, 1cycle, C64XP, 0, 249 FIX1(FIX(op, 0x0)), 250 OP3(ORREG1, ORXREG1, OWREG1), 251 ENC5(ENC(s, fu, 0), ENC(x, xpath, 1), ENC(srcdst, reg, 0), 252 ENC(src2, reg, 1), ENC(srcdst, reg, 2))) 253INSNU(add, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 254 FIX2(FIX(op, 0x5), FIX(unit, 0x0)), 255 OP3(ORREG1, OHWCST1, OWREG1), 256 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 257INSNU(add, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 258 FIX2(FIX(op, 0x5), FIX(unit, 0x1)), 259 OP3(ORREG1, OHWCST1, OWREG1), 260 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 261INSNU(add, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 262 FIX2(FIX(op, 0x5), FIX(unit, 0x2)), 263 OP3(ORREG1, OHWCST1, OWREG1), 264 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 265/**/ 266 267INSNE(addab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 268 FIX1(FIX(op, 0x30)), 269 OP3(ORREG1, ORREG1, OWREG1), 270 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 271 ENC(dst, reg, 2))) 272INSNE(addab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, 273 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 274 FIX1(FIX(op, 0x32)), 275 OP3(ORREG1, OACST, OWREG1), 276 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 277 ENC(dst, reg, 2))) 278INSN(addab, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0), 279 FIX1(FIX(op, 3)), 280 OP3(ORAREG1, OLCST, OWREG1), 281 ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 1), 282 ENC(dst, reg, 2))) 283 284INSNE(addad, d_si_si_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X, 285 TIC6X_FLAG_NO_CROSS, 286 FIX1(FIX(op, 0x3c)), 287 OP3(ORREG1, ORREG1, OWREG1), 288 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 289 ENC(dst, reg, 2))) 290INSNE(addad, d_si_u5_si, d, 1_or_2_src, 1cycle, C64X_AND_C67X, 291 TIC6X_FLAG_NO_CROSS, 292 FIX1(FIX(op, 0x3d)), 293 OP3(ORREG1, OACST, OWREG1), 294 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 295 ENC(dst, reg, 2))) 296 297INSNE(addah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 298 FIX1(FIX(op, 0x34)), 299 OP3(ORREG1, ORREG1, OWREG1), 300 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 301 ENC(dst, reg, 2))) 302INSNE(addah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, 303 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 304 FIX1(FIX(op, 0x36)), 305 OP3(ORREG1, OACST, OWREG1), 306 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 307 ENC(dst, reg, 2))) 308INSN(addah, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0), 309 FIX1(FIX(op, 5)), 310 OP3(ORAREG1, OLCST, OWREG1), 311 ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 1), 312 ENC(dst, reg, 2))) 313 314INSNE(addaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 315 FIX1(FIX(op, 0x38)), 316 OP3(ORREG1, ORREG1, OWREG1), 317 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 318 ENC(dst, reg, 2))) 319INSNE(addaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, 320 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 321 FIX1(FIX(op, 0x3a)), 322 OP3(ORREG1, OACST, OWREG1), 323 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 324 ENC(dst, reg, 2))) 325INSN(addaw, d, adda_long, 1cycle, C64XP, TIC6X_FLAG_PREFER(0), 326 FIX1(FIX(op, 7)), 327 OP3(ORAREG1, OLCST, OWREG1), 328 ENC4(ENC(s, fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 1), 329 ENC(dst, reg, 2))) 330 331/* 16 bits insn */ 332INSN(addaw, d, dx5, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE, 333 FIX0(), 334 OP3(ORB15REG1, OACST, OWREG1), 335 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 1), ENC(dst, reg, 2))) 336INSN(addaw, d, dx5p, 1cycle, C64XP, TIC6X_FLAG_INSN16_BSIDE, 337 FIX1(FIX(op, 0)), 338 OP3(ORB15REG1, OACST, OWB15REG1), 339 ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1))) 340/**/ 341 342INSN(adddp, l, 1_or_2_src, addsubdp, C67X, 0, 343 FIX1(FIX(op, 0x18)), 344 OP3(ORREGD12, ORXREGD12, OWREGD67), 345 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 346 ENC(src2, reg, 1), ENC(dst, reg, 2))) 347INSN(adddp, s, l_1_or_2_src, addsubdp, C67XP, 0, 348 FIX1(FIX(op, 0x72)), 349 OP3(ORREGD12, ORXREGD12, OWREGD67), 350 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 351 ENC(src2, reg, 1), ENC(dst, reg, 2))) 352 353INSN(addk, s, addk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 354 FIX0(), 355 OP2(OLCST, OWREG1), 356 ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1))) 357 358/* 16 bits insn */ 359INSN(addk, s, sx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 360 FIX0(), 361 OP2(OACST, OWREG1), 362 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1))) 363/**/ 364 365INSN(addkpc, s, addkpc, 1cycle, C64X, 366 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_SIDE_B_ONLY, 367 FIX1(FIX(s, 1)), 368 OP3(OLCST, OWREG1, OACST), 369 ENC3(ENC(src1, pcrel, 0), ENC(dst, reg, 1), ENC(src2, ucst, 2))) 370 371INSN(addsp, l, 1_or_2_src, 4cycle, C67X, 0, 372 FIX1(FIX(op, 0x10)), 373 OP3(ORREG1, ORXREG1, OWREG4), 374 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 375 ENC(src2, reg, 1), ENC(dst, reg, 2))) 376INSN(addsp, s, l_1_or_2_src, 4cycle, C67XP, 0, 377 FIX1(FIX(op, 0x70)), 378 OP3(ORREG1, ORXREG1, OWREG4), 379 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 380 ENC(src2, reg, 1), ENC(dst, reg, 2))) 381 382INSN(addsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 383 FIX1(FIX(op, 0xc)), 384 OP3(ORREG1, ORXREG1, OWREGD1), 385 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 386 ENC(src2, reg, 1), ENC(dst, reg, 2))) 387 388INSN(addsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 389 FIX1(FIX(op, 0xd)), 390 OP3(ORREG1, ORXREG1, OWREGD1), 391 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 392 ENC(src2, reg, 1), ENC(dst, reg, 2))) 393 394INSNE(addu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, 0, 395 FIX1(FIX(op, 0x2b)), 396 OP3(ORREG1, ORXREG1, OWREGL1), 397 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 398 ENC(src2, reg, 1), ENC(dst, reg, 2))) 399INSNE(addu, l_xui_ul_ul, l, 1_or_2_src, 1cycle, C62X, 0, 400 FIX1(FIX(op, 0x29)), 401 OP3(ORXREG1, ORREGL1, OWREGL1), 402 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 403 ENC(src2, reg, 1), ENC(dst, reg, 2))) 404 405INSN(add2, s, 1_or_2_src, 1cycle, C62X, 0, 406 FIX1(FIX(op, 0x1)), 407 OP3(ORREG1, ORXREG1, OWREG1), 408 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 409 ENC(src2, reg, 1), ENC(dst, reg, 2))) 410INSN(add2, l, 1_or_2_src, 1cycle, C64X, 0, 411 FIX1(FIX(op, 0x5)), 412 OP3(ORREG1, ORXREG1, OWREG1), 413 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 414 ENC(src2, reg, 1), ENC(dst, reg, 2))) 415INSN(add2, d, ext_1_or_2_src, 1cycle, C64X, 0, 416 FIX1(FIX(op, 0x4)), 417 OP3(ORREG1, ORXREG1, OWREG1), 418 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 419 ENC(src2, reg, 1), ENC(dst, reg, 2))) 420 421INSN(add4, l, 1_or_2_src, 1cycle, C64X, 0, 422 FIX1(FIX(op, 0x65)), 423 OP3(ORREG1, ORXREG1, OWREG1), 424 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 425 ENC(src2, reg, 1), ENC(dst, reg, 2))) 426 427INSNE(and, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 428 FIX1(FIX(op, 0x7b)), 429 OP3(ORREG1, ORXREG1, OWREG1), 430 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 431 ENC(src2, reg, 1), ENC(dst, reg, 2))) 432INSNE(and, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 433 FIX1(FIX(op, 0x7a)), 434 OP3(OACST, ORXREG1, OWREG1), 435 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 436 ENC(src2, reg, 1), ENC(dst, reg, 2))) 437INSNE(and, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 438 FIX1(FIX(op, 0x1f)), 439 OP3(ORREG1, ORXREG1, OWREG1), 440 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 441 ENC(src2, reg, 1), ENC(dst, reg, 2))) 442INSNE(and, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 443 FIX1(FIX(op, 0x1e)), 444 OP3(OACST, ORXREG1, OWREG1), 445 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 446 ENC(src2, reg, 1), ENC(dst, reg, 2))) 447INSNE(and, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 448 FIX1(FIX(op, 0x6)), 449 OP3(ORREG1, ORXREG1, OWREG1), 450 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 451 ENC(src2, reg, 1), ENC(dst, reg, 2))) 452INSNE(and, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 453 FIX1(FIX(op, 0x7)), 454 OP3(OACST, ORXREG1, OWREG1), 455 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 456 ENC(src2, reg, 1), ENC(dst, reg, 2))) 457 458/* 16 bits insn */ 459INSN(and, l, l2c, 1cycle, C64XP, 0, 460 FIX1(FIX(op, 0)), 461 OP3(ORREG1, ORXREG1, OWREG1NORS), 462 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 463 ENC(src2, reg, 1), ENC(dst, reg, 2))) 464/**/ 465 466INSN(andn, l, 1_or_2_src, 1cycle, C64X, 0, 467 FIX1(FIX(op, 0x7c)), 468 OP3(ORREG1, ORXREG1, OWREG1), 469 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 470 ENC(src2, reg, 1), ENC(dst, reg, 2))) 471INSN(andn, s, ext_1_or_2_src, 1cycle, C64X, 0, 472 FIX1(FIX(op, 0x6)), 473 OP3(ORREG1, ORXREG1, OWREG1), 474 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 475 ENC(src2, reg, 1), ENC(dst, reg, 2))) 476INSN(andn, d, ext_1_or_2_src, 1cycle, C64X, 0, 477 FIX1(FIX(op, 0x0)), 478 OP3(ORREG1, ORXREG1, OWREG1), 479 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 480 ENC(src2, reg, 1), ENC(dst, reg, 2))) 481 482INSN(avg2, m, compound, 1616_m, C64X, 0, 483 FIX1(FIX(op, 0x13)), 484 OP3(ORREG1, ORXREG1, OWREG2), 485 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 486 ENC(src2, reg, 1), ENC(dst, reg, 2))) 487 488INSN(avgu4, m, compound, 1616_m, C64X, 0, 489 FIX1(FIX(op, 0x12)), 490 OP3(ORREG1, ORXREG1, OWREG2), 491 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 492 ENC(src2, reg, 1), ENC(dst, reg, 2))) 493 494INSN(b, s, ext_branch_cond_imm, branch, C62X, TIC6X_FLAG_NO_CROSS, 495 FIX0(), 496 OP1(OLCST), 497 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 498INSN(b, s, branch, branch, C62X, TIC6X_FLAG_SIDE_B_ONLY, 499 FIX1(FIX(s, 1)), 500 OP1(ORXREG1), 501 ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0))) 502INSN(b, s, b_irp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY, 503 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 504 OP1(ORIRP1), 505 ENC0()) 506INSN(b, s, b_nrp, branch, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY, 507 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 508 OP1(ORNRP1), 509 ENC0()) 510 511INSN(bdec, s, bdec, branch, C64X, TIC6X_FLAG_NO_CROSS, 512 FIX0(), 513 OP2(OLCST, ORWREG1), 514 ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1))) 515 516INSN(bitc4, m, unary, 1616_m, C64X, 0, 517 FIX1(FIX(op, 0x1e)), 518 OP2(ORXREG1, OWREG2), 519 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 520 ENC(dst, reg, 1))) 521 522INSN(bitr, m, unary, 1616_m, C64X, 0, 523 FIX1(FIX(op, 0x1f)), 524 OP2(ORXREG1, OWREG2), 525 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 526 ENC(dst, reg, 1))) 527 528INSN(bnop, s, branch_nop_cst, branch, C64X, 529 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 530 FIX0(), 531 OP2(OLCST, OACST), 532 ENC3(ENC(s, fu, 0), ENC(src2, pcrel_half, 0), ENC(src1, ucst, 1))) 533INSN(bnop, nfu, s_branch_nop_cst, branch, C64XP, 534 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP, 535 FIX1(FIX(s, 0)), 536 OP2(OLCST, OACST), 537 ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1))) 538INSN(bnop, s, branch_nop_reg, branch, C64X, 539 TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP, 540 FIX1(FIX(s, 1)), 541 OP2(ORXREG1, OACST), 542 ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1))) 543 544/* 16 bits insn format */ 545INSN(bnop, s, sbu8, branch, C64XP, 546 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 547 FIX0(), 548 OP2(OLCST, OHWCST5), 549 ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0))) 550INSN(bnop, s, sbs7, branch, C64XP, 551 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 552 FIX0(), 553 OP2(OLCST, OACST), 554 ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1))) 555INSN(bnop, s, sbu8c, branch, C64XP, 556 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED, 557 FIX0(), 558 OP2(OLCST, OHWCST5), 559 ENC2(ENC(s, fu, 0), ENC(cst, pcrel_half_unsigned, 0))) 560INSN(bnop, s, sbs7c, branch, C64XP, 561 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_INSN16_SPRED, 562 FIX0(), 563 OP2(OLCST, OACST), 564 ENC3(ENC(s, fu, 0), ENC(cst, pcrel_half, 0), ENC(n, ucst, 1))) 565INSN(bnop, s, sx1b, branch, C64XP, 566 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 567 FIX0(), 568 OP2(ORREG1BNORS, OACST), 569 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(n, ucst, 1))) 570/**/ 571 572INSN(bpos, s, bpos, branch, C64X, TIC6X_FLAG_NO_CROSS, 573 FIX0(), 574 OP2(OLCST, ORREG1), 575 ENC3(ENC(s, fu, 0), ENC(src, pcrel, 0), ENC(dst, reg, 1))) 576 577INSN(call, s, ext_branch_cond_imm, branch, C62X, 578 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL, 579 FIX0(), 580 OP1(OLCST), 581 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 582INSN(call, s, branch, branch, C62X, 583 TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL, 584 FIX1(FIX(s, 1)), 585 OP1(ORXREG1), 586 ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0))) 587INSN(call, s, b_irp, branch, C62X, 588 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL, 589 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 590 OP1(ORIRP1), 591 ENC0()) 592INSN(call, s, b_nrp, branch, C62X, 593 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL, 594 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 595 OP1(ORNRP1), 596 ENC0()) 597 598INSN(callnop, s, branch_nop_cst, branch, C64X, 599 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL, 600 FIX0(), 601 OP2(OLCST, OACST), 602 ENC3(ENC(s, fu, 0), ENC(src2, pcrel, 0), ENC(src1, ucst, 1))) 603INSN(callnop, nfu, s_branch_nop_cst, branch, C64XP, 604 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL, 605 FIX1(FIX(s, 0)), 606 OP2(OLCST, OACST), 607 ENC2(ENC(src2, pcrel, 0), ENC(src1, ucst, 1))) 608INSN(callnop, s, branch_nop_reg, branch, C64X, 609 TIC6X_FLAG_MACRO|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MCNOP|TIC6X_FLAG_CALL, 610 FIX1(FIX(s, 1)), 611 OP2(ORXREG1, OACST), 612 ENC3(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1))) 613 614 615INSN(callp, s, call_imm_nop, branch, C64XP, 616 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 617 FIX1(FIX(z, 1)), 618 OP2(OLCST, OWRETREG1), 619 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 620 621/* 16 bits insn format */ 622INSN(callp, s, scs10, branch, C64XP, 623 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP, 624 FIX0(), 625 OP2(OLCST, OWRETREG1), 626 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 627/**/ 628 629INSN(callret, s, ext_branch_cond_imm, branch, C62X, 630 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN, 631 FIX0(), 632 OP1(OLCST), 633 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 634INSN(callret, s, branch, branch, C62X, 635 TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN, 636 FIX1(FIX(s, 1)), 637 OP1(ORXREG1), 638 ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0))) 639INSN(callret, s, b_irp, branch, C62X, 640 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN, 641 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 642 OP1(ORIRP1), 643 ENC0()) 644INSN(callret, s, b_nrp, branch, C62X, 645 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_CALL|TIC6X_FLAG_RETURN, 646 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 647 OP1(ORNRP1), 648 ENC0()) 649 650INSN(clr, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 651 FIX1(FIX(op, 0x3)), 652 OP4(ORREG1, OACST, OACST, OWREG1), 653 ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1), 654 ENC(cstb, ucst, 2), ENC(dst, reg, 3))) 655INSN(clr, s, 1_or_2_src, 1cycle, C62X, 0, 656 FIX1(FIX(op, 0x3f)), 657 OP3(ORXREG1, ORREG1, OWREG1), 658 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 659 ENC(src1, reg, 1), ENC(dst, reg, 2))) 660 661/* 16 bits insn */ 662INSN(clr, s, sc5, 1cycle, C64XP, 0, 663 FIX1(FIX(op, 2)), 664 OP4(ORREG1, OACST, OACST, OWREG1), 665 ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1), 666 ENC(cst, ucst, 2), ENC(srcdst, reg, 3))) 667/**/ 668 669INSNE(cmpeq, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0, 670 FIX1(FIX(op, 0x53)), 671 OP3(ORREG1, ORXREG1, OWREG1), 672 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 673 ENC(src2, reg, 1), ENC(dst, reg, 2))) 674INSNE(cmpeq, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0, 675 FIX1(FIX(op, 0x52)), 676 OP3(OACST, ORXREG1, OWREG1), 677 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 678 ENC(src2, reg, 1), ENC(dst, reg, 2))) 679INSNE(cmpeq, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0, 680 FIX1(FIX(op, 0x51)), 681 OP3(ORXREG1, ORREGL1, OWREG1), 682 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 683 ENC(src2, reg, 1), ENC(dst, reg, 2))) 684INSNE(cmpeq, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 685 FIX2(FIX(op, 0x50), FIX(x, 0)), 686 OP3(OACST, ORREGL1, OWREG1), 687 ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1), 688 ENC(dst, reg, 2))) 689 690/* 16 bits insn */ 691INSN(cmpeq, l, lx3c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 692 FIX0(), 693 OP3(OACST, ORXREG1, OWREG1), 694 ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1), 695 ENC(dst, reg, 2))) 696 697INSN(cmpeq, l, l2c, 1cycle, C64XP, 0, 698 FIX1(FIX(op, 3)), 699 OP3(ORREG1, ORXREG1, OWREG1NORS), 700 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 701 ENC(src2, reg, 1), ENC(dst, reg, 2))) 702/**/ 703 704INSN(cmpeq2, s, 1_or_2_src, 1cycle, C64X, 0, 705 FIX1(FIX(op, 0x1d)), 706 OP3(ORREG1, ORXREG1, OWREG1), 707 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 708 ENC(src2, reg, 1), ENC(dst, reg, 2))) 709 710INSN(cmpeq4, s, 1_or_2_src, 1cycle, C64X, 0, 711 FIX1(FIX(op, 0x1c)), 712 OP3(ORREG1, ORXREG1, OWREG1), 713 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 714 ENC(src2, reg, 1), ENC(dst, reg, 2))) 715 716INSN(cmpeqdp, s, 1_or_2_src, dpcmp, C67X, 0, 717 FIX1(FIX(op, 0x28)), 718 OP3(ORREGD12, ORXREGD12, OWREG2), 719 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 720 ENC(src2, reg, 1), ENC(dst, reg, 2))) 721 722INSN(cmpeqsp, s, 1_or_2_src, 1cycle, C67X, 0, 723 FIX1(FIX(op, 0x38)), 724 OP3(ORREG1, ORXREG1, OWREG1), 725 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 726 ENC(src2, reg, 1), ENC(dst, reg, 2))) 727 728INSNE(cmpgt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 729 FIX1(FIX(op, 0x47)), 730 OP3(ORREG1, ORXREG1, OWREG1), 731 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 732 ENC(src2, reg, 1), ENC(dst, reg, 2))) 733INSNE(cmpgt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0, 734 FIX1(FIX(op, 0x46)), 735 OP3(OACST, ORXREG1, OWREG1), 736 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 737 ENC(src2, reg, 1), ENC(dst, reg, 2))) 738INSNE(cmpgt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0, 739 FIX1(FIX(op, 0x45)), 740 OP3(ORXREG1, ORREGL1, OWREG1), 741 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 742 ENC(src2, reg, 1), ENC(dst, reg, 2))) 743INSNE(cmpgt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 744 FIX2(FIX(op, 0x44), FIX(x, 0)), 745 OP3(OACST, ORREGL1, OWREG1), 746 ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1), 747 ENC(dst, reg, 2))) 748INSNE(cmpgt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X, 749 TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0), 750 FIX1(FIX(op, 0x57)), 751 OP3(ORXREG1, ORREG1, OWREG1), 752 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1), 753 ENC(src2, reg, 0), ENC(dst, reg, 2))) 754INSNE(cmpgt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 755 FIX1(FIX(op, 0x56)), 756 OP3(ORXREG1, OACST, OWREG1), 757 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1), 758 ENC(src2, reg, 0), ENC(dst, reg, 2))) 759INSNE(cmpgt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 760 FIX1(FIX(op, 0x55)), 761 OP3(ORREGL1, ORXREG1, OWREG1), 762 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1), 763 ENC(src2, reg, 0), ENC(dst, reg, 2))) 764INSNE(cmpgt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X, 765 TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS, 766 FIX2(FIX(op, 0x54), FIX(x, 0)), 767 OP3(ORREGL1, OACST, OWREG1), 768 ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0), 769 ENC(dst, reg, 2))) 770 771/* 16 bits insn */ 772INSN(cmpgt, l, lx1c, 1cycle, C64XP, 0, 773 FIX1(FIX(op, 1)), 774 OP3(OACST, ORREG1, OWREG1), 775 ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1), 776 ENC(dst, reg, 2))) 777INSN(cmpgt, l, l2c, 1cycle, C64XP, 0, 778 FIX1(FIX(op, 5)), 779 OP3(ORREG1, ORXREG1, OWREG1NORS), 780 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 781 ENC(src2, reg, 1), ENC(dst, reg, 2))) 782/**/ 783 784INSN(cmpgt2, s, 1_or_2_src, 1cycle, C64X, 0, 785 FIX1(FIX(op, 0x14)), 786 OP3(ORREG1, ORXREG1, OWREG1), 787 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 788 ENC(src2, reg, 1), ENC(dst, reg, 2))) 789 790INSN(cmpgtdp, s, 1_or_2_src, dpcmp, C67X, 0, 791 FIX1(FIX(op, 0x29)), 792 OP3(ORREGD12, ORXREGD12, OWREG2), 793 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 794 ENC(src2, reg, 1), ENC(dst, reg, 2))) 795 796INSN(cmpgtsp, s, 1_or_2_src, 1cycle, C67X, 0, 797 FIX1(FIX(op, 0x39)), 798 OP3(ORREG1, ORXREG1, OWREG1), 799 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 800 ENC(src2, reg, 1), ENC(dst, reg, 2))) 801 802INSNE(cmpgtu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 803 FIX1(FIX(op, 0x4f)), 804 OP3(ORREG1, ORXREG1, OWREG1), 805 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 806 ENC(src2, reg, 1), ENC(dst, reg, 2))) 807INSNE(cmpgtu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 808 FIX2(FIX(op, 0x4e), RAN(src1, 0, 15)), 809 OP3(OACST, ORXREG1, OWREG1), 810 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0), 811 ENC(src2, reg, 1), ENC(dst, reg, 2))) 812/* Although not mentioned in SPRUFE8, CMPGTU and CMPLTU support a 813 5-bit unsigned constant operand on C64X and above. */ 814INSNE(cmpgtu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0, 815 FIX2(FIX(op, 0x4e), RAN(src1, 16, 31)), 816 OP3(OACST, ORXREG1, OWREG1), 817 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0), 818 ENC(src2, reg, 1), ENC(dst, reg, 2))) 819INSNE(cmpgtu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0, 820 FIX1(FIX(op, 0x4d)), 821 OP3(ORXREG1, ORREGL1, OWREG1), 822 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 823 ENC(src2, reg, 1), ENC(dst, reg, 2))) 824INSNE(cmpgtu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X, 825 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 826 FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 0, 15)), 827 OP3(OACST, ORREGL1, OWREG1), 828 ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1), 829 ENC(dst, reg, 2))) 830INSNE(cmpgtu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS, 831 FIX3(FIX(op, 0x4c), FIX(x, 0), RAN(src1, 16, 31)), 832 OP3(OACST, ORREGL1, OWREG1), 833 ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1), 834 ENC(dst, reg, 2))) 835 836/* 16 bits insn */ 837INSN(cmpgtu, l, lx1c, 1cycle, C64XP, 0, 838 FIX1(FIX(op, 3)), 839 OP3(OACST, ORREG1, OWREG1), 840 ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1), 841 ENC(dst, reg, 2))) 842INSN(cmpgtu, l, l2c, 1cycle, C64XP, 0, 843 FIX1(FIX(op, 7)), 844 OP3(ORREG1, ORXREG1, OWREG1NORS), 845 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 846 ENC(src2, reg, 1), ENC(dst, reg, 2))) 847/**/ 848 849INSN(cmpgtu4, s, 1_or_2_src, 1cycle, C64X, 0, 850 FIX1(FIX(op, 0x15)), 851 OP3(ORREG1, ORXREG1, OWREG1), 852 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 853 ENC(src2, reg, 1), ENC(dst, reg, 2))) 854 855INSNE(cmplt, l_si_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 856 FIX1(FIX(op, 0x57)), 857 OP3(ORREG1, ORXREG1, OWREG1), 858 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 859 ENC(src2, reg, 1), ENC(dst, reg, 2))) 860INSNE(cmplt, l_s5_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0, 861 FIX1(FIX(op, 0x56)), 862 OP3(OACST, ORXREG1, OWREG1), 863 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 864 ENC(src2, reg, 1), ENC(dst, reg, 2))) 865INSNE(cmplt, l_xsi_sl_ui, l, 1_or_2_src, 1cycle, C62X, 0, 866 FIX1(FIX(op, 0x55)), 867 OP3(ORXREG1, ORREGL1, OWREG1), 868 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 869 ENC(src2, reg, 1), ENC(dst, reg, 2))) 870INSNE(cmplt, l_s5_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 871 FIX2(FIX(op, 0x54), FIX(x, 0)), 872 OP3(OACST, ORREGL1, OWREG1), 873 ENC4(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(src2, reg, 1), 874 ENC(dst, reg, 2))) 875INSNE(cmplt, l_xsi_si_ui, l, 1_or_2_src, 1cycle, C62X, 876 TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0), 877 FIX1(FIX(op, 0x47)), 878 OP3(ORXREG1, ORREG1, OWREG1), 879 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1), 880 ENC(src2, reg, 0), ENC(dst, reg, 2))) 881INSNE(cmplt, l_xsi_s5_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 882 FIX1(FIX(op, 0x46)), 883 OP3(ORXREG1, OACST, OWREG1), 884 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 1), 885 ENC(src2, reg, 0), ENC(dst, reg, 2))) 886INSNE(cmplt, l_sl_xsi_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 887 FIX1(FIX(op, 0x45)), 888 OP3(ORREGL1, ORXREG1, OWREG1), 889 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 1), 890 ENC(src2, reg, 0), ENC(dst, reg, 2))) 891INSNE(cmplt, l_sl_s5_ui, l, 1_or_2_src, 1cycle, C62X, 892 TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS, 893 FIX2(FIX(op, 0x44), FIX(x, 0)), 894 OP3(ORREGL1, OACST, OWREG1), 895 ENC4(ENC(s, fu, 0), ENC(src1, scst, 1), ENC(src2, reg, 0), 896 ENC(dst, reg, 2))) 897 898/* 16 bits insn */ 899INSN(cmplt, l, lx1c, 1cycle, C64XP, 0, 900 FIX1(FIX(op, 0)), 901 OP3(OACST, ORREG1, OWREG1), 902 ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1), 903 ENC(dst, reg, 2))) 904INSN(cmplt, l, l2c, 1cycle, C64XP, 0, 905 FIX1(FIX(op, 4)), 906 OP3(ORREG1, ORXREG1, OWREG1NORS), 907 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 908 ENC(src2, reg, 1), ENC(dst, reg, 2))) 909/**/ 910 911INSN(cmplt2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO, 912 FIX1(FIX(op, 0x14)), 913 OP3(ORXREG1, ORREG1, OWREG1), 914 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 915 ENC(src1, reg, 1), ENC(dst, reg, 2))) 916 917INSN(cmpltdp, s, 1_or_2_src, dpcmp, C67X, 0, 918 FIX1(FIX(op, 0x2a)), 919 OP3(ORREGD12, ORXREGD12, OWREG2), 920 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 921 ENC(src2, reg, 1), ENC(dst, reg, 2))) 922 923INSN(cmpltsp, s, 1_or_2_src, 1cycle, C67X, 0, 924 FIX1(FIX(op, 0x3a)), 925 OP3(ORREG1, ORXREG1, OWREG1), 926 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 927 ENC(src2, reg, 1), ENC(dst, reg, 2))) 928 929INSNE(cmpltu, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 930 FIX1(FIX(op, 0x5f)), 931 OP3(ORREG1, ORXREG1, OWREG1), 932 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 933 ENC(src2, reg, 1), ENC(dst, reg, 2))) 934INSNE(cmpltu, l_u4_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 935 FIX2(FIX(op, 0x5e), RAN(src1, 0, 15)), 936 OP3(OACST, ORXREG1, OWREG1), 937 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0), 938 ENC(src2, reg, 1), ENC(dst, reg, 2))) 939INSNE(cmpltu, l_u5_xui_ui, l, 1_or_2_src, 1cycle, C64X, 0, 940 FIX2(FIX(op, 0x5e), RAN(src1, 16, 31)), 941 OP3(OACST, ORXREG1, OWREG1), 942 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, ucst, 0), 943 ENC(src2, reg, 1), ENC(dst, reg, 2))) 944INSNE(cmpltu, l_xui_ul_ui, l, 1_or_2_src, 1cycle, C62X, 0, 945 FIX1(FIX(op, 0x5d)), 946 OP3(ORXREG1, ORREGL1, OWREG1), 947 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 948 ENC(src2, reg, 1), ENC(dst, reg, 2))) 949INSNE(cmpltu, l_u4_ul_ui, l, 1_or_2_src, 1cycle, C62X, 950 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 951 FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 0, 15)), 952 OP3(OACST, ORREGL1, OWREG1), 953 ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1), 954 ENC(dst, reg, 2))) 955INSNE(cmpltu, l_u5_ul_ui, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS, 956 FIX3(FIX(op, 0x5c), FIX(x, 0), RAN(src1, 16, 31)), 957 OP3(OACST, ORREGL1, OWREG1), 958 ENC4(ENC(s, fu, 0), ENC(src1, ucst, 0), ENC(src2, reg, 1), 959 ENC(dst, reg, 2))) 960 961/* 16 bits insn */ 962INSN(cmpltu, l, lx1c, 1cycle, C64XP, 0, 963 FIX1(FIX(op, 2)), 964 OP3(OACST, ORREG1, OWREG1), 965 ENC4(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(src2, reg, 1), 966 ENC(dst, reg, 2))) 967INSN(cmpltu, l, l2c, 1cycle, C64XP, 0, 968 FIX1(FIX(op, 6)), 969 OP3(ORREG1, ORXREG1, OWREG1NORS), 970 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 971 ENC(src2, reg, 1), ENC(dst, reg, 2))) 972/**/ 973 974INSN(cmpltu4, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO, 975 FIX1(FIX(op, 0x15)), 976 OP3(ORXREG1, ORREG1, OWREG1), 977 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 978 ENC(src1, reg, 1), ENC(dst, reg, 2))) 979 980INSN(cmpy, m, 1_or_2_src, 4cycle, C64XP, 0, 981 FIX1(FIX(op, 0xa)), 982 OP3(ORREG1, ORXREG1, OWREGD4), 983 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 984 ENC(src2, reg, 1), ENC(dst, reg, 2))) 985 986INSN(cmpyr, m, 1_or_2_src, 4cycle, C64XP, 0, 987 FIX1(FIX(op, 0xb)), 988 OP3(ORREG1, ORXREG1, OWREG4), 989 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 990 ENC(src2, reg, 1), ENC(dst, reg, 2))) 991 992INSN(cmpyr1, m, 1_or_2_src, 4cycle, C64XP, 0, 993 FIX1(FIX(op, 0xc)), 994 OP3(ORREG1, ORXREG1, OWREG4), 995 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 996 ENC(src2, reg, 1), ENC(dst, reg, 2))) 997 998INSN(cmtl, d, 1_or_2_src, load, C64XP, 999 TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS, 1000 FIX3(FIX(s, 1), FIX(op, 0xe), FIX(src1, 0)), 1001 OP2(ORMEMDW, OWDREG5), 1002 ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1))) 1003 1004INSN(ddotp4, m, 1_or_2_src, 4cycle, C64XP, 0, 1005 FIX1(FIX(op, 0x18)), 1006 OP3(ORREG1, ORXREG1, OWREGD4), 1007 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1008 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1009 1010INSN(ddotph2, m, 1_or_2_src, 4cycle, C64XP, 0, 1011 FIX1(FIX(op, 0x17)), 1012 OP3(ORREGD1, ORXREG1, OWREGD4), 1013 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1014 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1015 1016INSN(ddotph2r, m, 1_or_2_src, 4cycle, C64XP, 0, 1017 FIX1(FIX(op, 0x15)), 1018 OP3(ORREGD1, ORXREG1, OWREG4), 1019 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1020 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1021 1022INSN(ddotpl2, m, 1_or_2_src, 4cycle, C64XP, 0, 1023 FIX1(FIX(op, 0x16)), 1024 OP3(ORREGD1, ORXREG1, OWREGD4), 1025 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1026 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1027 1028INSN(ddotpl2r, m, 1_or_2_src, 4cycle, C64XP, 0, 1029 FIX1(FIX(op, 0x14)), 1030 OP3(ORREGD1, ORXREG1, OWREG4), 1031 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1032 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1033 1034INSN(deal, m, unary, 1616_m, C64X, 0, 1035 FIX1(FIX(op, 0x1d)), 1036 OP2(ORXREG1, OWREG2), 1037 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1038 ENC(dst, reg, 1))) 1039 1040INSN(dint, nfu, dint, 1cycle, C64XP, 0, 1041 FIX1(FIX(s, 0)), 1042 OP0(), 1043 ENC0()) 1044 1045INSN(dmv, s, ext_1_or_2_src, 1cycle, C64XP, 0, 1046 FIX1(FIX(op, 0xb)), 1047 OP3(ORREG1, ORXREG1, OWREGD1), 1048 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1049 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1050 1051INSNE(dotp2, m_s2_xs2_si, m, compound, 4cycle, C64X, 0, 1052 FIX1(FIX(op, 0xc)), 1053 OP3(ORREG1, ORXREG1, OWREG4), 1054 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1055 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1056INSNE(dotp2, m_s2_xs2_sll, m, compound, 4cycle, C64X, 0, 1057 FIX1(FIX(op, 0xb)), 1058 OP3(ORREG1, ORXREG1, OWREGD4), 1059 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1060 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1061 1062INSN(dotpn2, m, compound, 4cycle, C64X, 0, 1063 FIX1(FIX(op, 0x9)), 1064 OP3(ORREG1, ORXREG1, OWREG4), 1065 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1066 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1067 1068INSN(dotpnrsu2, m, compound, 4cycle, C64X, 0, 1069 FIX1(FIX(op, 0x7)), 1070 OP3(ORREG1, ORXREG1, OWREG4), 1071 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1072 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1073 1074INSN(dotpnrus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1075 FIX1(FIX(op, 0x7)), 1076 OP3(ORXREG1, ORREG1, OWREG4), 1077 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1078 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1079 1080INSN(dotprsu2, m, compound, 4cycle, C64X, 0, 1081 FIX1(FIX(op, 0xd)), 1082 OP3(ORREG1, ORXREG1, OWREG4), 1083 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1084 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1085 1086INSN(dotprus2, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1087 FIX1(FIX(op, 0xd)), 1088 OP3(ORXREG1, ORREG1, OWREG4), 1089 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1090 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1091 1092INSN(dotpsu4, m, compound, 4cycle, C64X, 0, 1093 FIX1(FIX(op, 0x2)), 1094 OP3(ORREG1, ORXREG1, OWREG4), 1095 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1096 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1097 1098INSN(dotpus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1099 FIX1(FIX(op, 0x2)), 1100 OP3(ORXREG1, ORREG1, OWREG4), 1101 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1102 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1103 1104INSN(dotpu4, m, compound, 4cycle, C64X, 0, 1105 FIX1(FIX(op, 0x6)), 1106 OP3(ORREG1, ORXREG1, OWREG4), 1107 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1108 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1109 1110INSN(dpack2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 1111 FIX1(FIX(op, 0x34)), 1112 OP3(ORREG1, ORXREG1, OWREGD1), 1113 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1114 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1115 1116INSN(dpackx2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 1117 FIX1(FIX(op, 0x33)), 1118 OP3(ORREG1, ORXREG1, OWREGD1), 1119 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1120 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1121 1122INSN(dpint, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS, 1123 FIX2(FIX(op, 0x8), FIX(x, 0)), 1124 OP2(ORREGD1, OWREG4), 1125 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 1126 ENC(dst, reg, 1))) 1127 1128INSN(dpsp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS, 1129 FIX2(FIX(op, 0x9), FIX(x, 0)), 1130 OP2(ORREGD1, OWREG4), 1131 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 1132 ENC(dst, reg, 1))) 1133 1134INSN(dptrunc, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_NO_CROSS, 1135 FIX2(FIX(op, 0x1), FIX(x, 0)), 1136 OP2(ORREGD1, OWREG4), 1137 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 1138 ENC(dst, reg, 1))) 1139 1140INSN(ext, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 1141 FIX1(FIX(op, 0x1)), 1142 OP4(ORREG1, OACST, OACST, OWREG1), 1143 ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1), 1144 ENC(cstb, ucst, 2), ENC(dst, reg, 3))) 1145INSN(ext, s, 1_or_2_src, 1cycle, C62X, 0, 1146 FIX1(FIX(op, 0x2f)), 1147 OP3(ORXREG1, ORREG1, OWREG1), 1148 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1149 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1150 1151/* 16 bits insn */ 1152INSNE(ext, hwcst16, s, s2ext, 1cycle, C64XP, 0, 1153 FIX1(FIX(op, 0x0)), 1154 OP4(ORREG1, OHWCST16, OHWCST16, OWREG1), 1155 ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3))) 1156INSNE(ext, hwcst24, s, s2ext, 1cycle, C64XP, 0, 1157 FIX1(FIX(op, 0x1)), 1158 OP4(ORREG1, OHWCST24, OHWCST24, OWREG1), 1159 ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3))) 1160/**/ 1161 1162INSN(extu, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 1163 FIX1(FIX(op, 0x0)), 1164 OP4(ORREG1, OACST, OACST, OWREG1), 1165 ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1), 1166 ENC(cstb, ucst, 2), ENC(dst, reg, 3))) 1167INSN(extu, s, 1_or_2_src, 1cycle, C62X, 0, 1168 FIX1(FIX(op, 0x2b)), 1169 OP3(ORXREG1, ORREG1, OWREG1), 1170 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1171 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1172 1173/* 16 bits insn */ 1174INSNE(extu, hwcst16, s, s2ext, 1cycle, C64XP, 0, 1175 FIX1(FIX(op, 0x2)), 1176 OP4(ORREG1, OHWCST16, OHWCST16, OWREG1), 1177 ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3))) 1178INSNE(extu, hwcst24, s, s2ext, 1cycle, C64XP, 0, 1179 FIX1(FIX(op, 0x3)), 1180 OP4(ORREG1, OHWCST24, OHWCST24, OWREG1), 1181 ENC3(ENC(s, fu, 0), ENC(src, reg, 0), ENC(dst, reg, 3))) 1182INSN(extu, s, sc5, 1cycle, C64XP, 0, 1183 FIX1(FIX(op, 0)), 1184 OP4(ORREG1, OACST, OHWCST31, OWREG1Z), 1185 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1))) 1186/**/ 1187 1188INSN(gmpy, m, 1_or_2_src, 4cycle, C64XP, TIC6X_FLAG_NO_CROSS, 1189 FIX2(FIX(op, 0x1f), FIX(x, 0)), 1190 OP3(ORREG1, ORREG1, OWREG4), 1191 ENC4(ENC(s, fu, 0), ENC(src1, reg, 0), ENC(src2, reg, 1), 1192 ENC(dst, reg, 2))) 1193 1194/* This instruction can be predicated as usual; SPRUFE8 is incorrect 1195 where it shows the "z" field as fixed to 1. */ 1196INSN(gmpy4, m, compound, 4cycle, C64X, 0, 1197 FIX1(FIX(op, 0x11)), 1198 OP3(ORREG1, ORXREG1, OWREG4), 1199 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1200 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1201 1202INSN(idle, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MCNOP, 1203 FIX2(FIX(s, 0), FIX(op, 0xf)), 1204 OP0(), 1205 ENC0()) 1206 1207INSN(intdp, l, 1_or_2_src, intdp, C67X, 0, 1208 FIX2(FIX(op, 0x39), FIX(src1, 0)), 1209 OP2(ORXREG1, OWREGD45), 1210 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1211 ENC(dst, reg, 1))) 1212 1213INSN(intdpu, l, 1_or_2_src, intdp, C67X, 0, 1214 FIX2(FIX(op, 0x3b), FIX(src1, 0)), 1215 OP2(ORXREG1, OWREGD45), 1216 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1217 ENC(dst, reg, 1))) 1218 1219INSN(intsp, l, 1_or_2_src, 4cycle, C67X, 0, 1220 FIX2(FIX(op, 0x4a), FIX(src1, 0)), 1221 OP2(ORXREG1, OWREG4), 1222 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1223 ENC(dst, reg, 1))) 1224 1225INSN(intspu, l, 1_or_2_src, 4cycle, C67X, 0, 1226 FIX2(FIX(op, 0x49), FIX(src1, 0)), 1227 OP2(ORXREG1, OWREG4), 1228 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1229 ENC(dst, reg, 1))) 1230 1231INSN(ldb, d, load_store, load, C62X, 1232 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 1233 FIX2(FIX(op, 2), FIX(r, 0)), 1234 OP2(ORMEMSB, OWDREG5), 1235 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1236 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1237 ENC(srcdst, reg, 1))) 1238INSN(ldb, d, load_store_long, load, C62X, 1239 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 1240 FIX1(FIX(op, 2)), 1241 OP2(ORMEMLB, OWDREG5), 1242 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0), 1243 ENC(dst, reg, 1))) 1244 1245/* 16 bits insn */ 1246INSN(ldb, d, doff4_dsz_x01, load, C64XP, 1247 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1248 FIX2(FIX(op, 1), FIX(sz, 1)), 1249 OP2(ORMEMSB, OWTREG5), 1250 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1251 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0))) 1252INSN(ldb, d, dind_dsz_x01, load, C64XP, 1253 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1254 FIX2(FIX(op, 1), FIX(sz, 1)), 1255 OP2(ORMEMSB, OWTREG5), 1256 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1257 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1258INSN(ldb, d, dinc_dsz_x01, load, C64XP, 1259 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1260 FIX2(FIX(op, 1), FIX(sz, 1)), 1261 OP2(ORMEMSB, OWTREG5), 1262 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1263 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1264INSN(ldb, d, ddec_dsz_x01, load, C64XP, 1265 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1266 FIX2(FIX(op, 1), FIX(sz, 1)), 1267 OP2(ORMEMSB, OWTREG5), 1268 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1269 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1270/**/ 1271 1272INSN(ldbu, d, load_store, load, C62X, 1273 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 1274 FIX2(FIX(op, 1), FIX(r, 0)), 1275 OP2(ORMEMSB, OWDREG5), 1276 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1277 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1278 ENC(srcdst, reg, 1))) 1279INSN(ldbu, d, load_store_long, load, C62X, 1280 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 1281 FIX1(FIX(op, 1)), 1282 OP2(ORMEMLB, OWDREG5), 1283 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_byte, 0), 1284 ENC(dst, reg, 1))) 1285 1286/* 16 bits insn */ 1287INSN(ldbu, d, dinc_dsz_000, load, C64XP, 1288 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1289 FIX2(FIX(op, 1), FIX(sz, 1)), 1290 OP2(ORMEMSB, OWTREG5), 1291 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0), 1292 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1293INSN(ldbu, d, dind_dsz_000, load, C64XP, 1294 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1295 FIX2(FIX(op, 1), FIX(sz, 1)), 1296 OP2(ORMEMSB, OWTREG5), 1297 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0), 1298 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1299INSN(ldbu, d, doff4_dsz_000, load, C64XP, 1300 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1301 FIX2(FIX(op, 1), FIX(sz, 1)), 1302 OP2(ORMEMSB, OWTREG5), 1303 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0), 1304 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1305INSN(ldbu, d, ddec_dsz_000, load, C64XP, 1306 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1307 FIX2(FIX(op, 1), FIX(sz, 1)), 1308 OP2(ORMEMSB, OWTREG5), 1309 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_minus_one, 0), 1310 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1311/**/ 1312 1313INSN(lddw, d, load_store, load, C64X_AND_C67X, 1314 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS, 1315 FIX2(FIX(op, 6), FIX(r, 1)), 1316 OP2(ORMEMSD, OWDREGD5), 1317 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1318 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1319 ENC(srcdst, reg, 1))) 1320 1321/* 16 bits insn */ 1322INSN(lddw, d, dpp, load, C64XP, 1323 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS, 1324 FIX2(FIX(op, 1), FIX(dw, 1)), 1325 OP2(ORMEMSD, OWDREGD5), 1326 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1327 ENC(cst, mem_offset_minus_one, 0))) 1328INSN(lddw, d, ddecdw, load, C64XP, 1329 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1330 FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)), 1331 OP2(ORMEMSD, OWTREGD5), 1332 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1), 1333 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1334INSN(lddw, d, dincdw, load, C64XP, 1335 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1336 FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)), 1337 OP2(ORMEMSD, OWTREGD5), 1338 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1), 1339 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1340INSN(lddw, d, dinddw, load, C64XP, 1341 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1342 FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)), 1343 OP2(ORMEMSD, OWTREGD5), 1344 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 0), 1345 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1))) 1346INSN(lddw, d, doff4dw, load, C64XP, 1347 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1348 FIX3(FIX(op, 1), FIX(na, 0), FIX(sz, 0)), 1349 OP2(ORMEMSD, OWTREGD5), 1350 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0), 1351 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1))) 1352/**/ 1353 1354INSN(ldh, d, load_store, load, C62X, 1355 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 1356 FIX2(FIX(op, 4), FIX(r, 0)), 1357 OP2(ORMEMSH, OWDREG5), 1358 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1359 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1360 ENC(srcdst, reg, 1))) 1361INSN(ldh, d, load_store_long, load, C62X, 1362 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 1363 FIX1(FIX(op, 4)), 1364 OP2(ORMEMLH, OWDREG5), 1365 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0), 1366 ENC(dst, reg, 1))) 1367 1368/* 16 bits insn */ 1369INSN(ldh, d, doff4_dsz_x11, load, C64XP, 1370 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1371 FIX2(FIX(op, 1), FIX(sz, 1)), 1372 OP2(ORMEMSH, OWTREG5), 1373 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0), 1374 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1375INSN(ldh, d, dind_dsz_x11, load, C64XP, 1376 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1377 FIX2(FIX(op, 1), FIX(sz, 1)), 1378 OP2(ORMEMSH, OWTREG5), 1379 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1380 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1381INSN(ldh, d, dinc_dsz_x11, load, C64XP, 1382 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1383 FIX2(FIX(op, 1), FIX(sz, 1)), 1384 OP2(ORMEMSH, OWTREG5), 1385 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1386 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1387INSN(ldh, d, ddec_dsz_x11, load, C64XP, 1388 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1389 FIX2(FIX(op, 1), FIX(sz, 1)), 1390 OP2(ORMEMSH, OWTREG5), 1391 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1392 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1393/**/ 1394 1395INSN(ldhu, d, load_store, load, C62X, 1396 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 1397 FIX2(FIX(op, 0), FIX(r, 0)), 1398 OP2(ORMEMSH, OWDREG5), 1399 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1400 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1401 ENC(srcdst, reg, 1))) 1402INSN(ldhu, d, load_store_long, load, C62X, 1403 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 1404 FIX1(FIX(op, 0)), 1405 OP2(ORMEMLH, OWDREG5), 1406 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_half, 0), 1407 ENC(dst, reg, 1))) 1408 1409/* 16 bits insn */ 1410INSN(ldhu, d, doff4_dsz_010, load, C64XP, 1411 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1412 FIX2(FIX(op, 1), FIX(sz, 1)), 1413 OP2(ORMEMSH, OWTREG5), 1414 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 0), 1415 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg, 1))) 1416INSN(ldhu, d, dind_dsz_010, load, C64XP, 1417 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1418 FIX2(FIX(op, 1), FIX(sz, 1)), 1419 OP2(ORMEMSH, OWTREG5), 1420 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1421 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1422INSN(ldhu, d, dinc_dsz_010, load, C64XP, 1423 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1424 FIX2(FIX(op, 1), FIX(sz, 1)), 1425 OP2(ORMEMSH, OWTREG5), 1426 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1427 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1428INSN(ldhu, d, ddec_dsz_010, load, C64XP, 1429 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1430 FIX2(FIX(op, 1), FIX(sz, 1)), 1431 OP2(ORMEMSH, OWTREG5), 1432 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1433 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1434/**/ 1435 1436INSN(ldndw, d, load_nonaligned, load, C64X, 1437 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED, 1438 FIX0(), 1439 OP2(ORMEMND, OWDREGD5), 1440 ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1441 ENC(offsetR, mem_offset_noscale, 0), ENC(baseR, reg, 0), 1442 ENC(sc, scaled, 0), ENC(dst, reg_shift, 1))) 1443 1444/* 16 bits insn */ 1445INSN(ldndw, d, ddecdw, load, C64XP, 1446 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1447 FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)), 1448 OP2(ORMEMND, OWTREGD5), 1449 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1), 1450 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0))) 1451INSN(ldndw, d, dincdw, load, C64XP, 1452 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1453 FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)), 1454 OP2(ORMEMND, OWTREGD5), 1455 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 1), 1456 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one_noscale, 0))) 1457INSN(ldndw, d, dinddw, load, C64XP, 1458 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1459 FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)), 1460 OP2(ORMEMND, OWTREGD5), 1461 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 0), 1462 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1))) 1463INSN(ldndw, d, doff4dw, load, C64XP, 1464 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1465 FIX3(FIX(op, 1), FIX(na, 1), FIX(sz, 0)), 1466 OP2(ORMEMND, OWTREGD5), 1467 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 0), 1468 ENC(ptr, reg_ptr, 0), ENC(srcdst, reg_shift, 1))) 1469/**/ 1470 1471INSN(ldnw, d, load_store, load, C64X, 1472 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED, 1473 FIX2(FIX(op, 3), FIX(r, 1)), 1474 OP2(ORMEMSW, OWDREG5), 1475 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1476 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1477 ENC(srcdst, reg, 1))) 1478 1479/* 16 bits insn */ 1480INSN(ldnw, d, doff4_dsz_110, load, C64XP, 1481 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1482 FIX2(FIX(op, 1), FIX(sz, 1)), 1483 OP2(ORMEMSW, OWTREG5), 1484 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1485 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0))) 1486INSN(ldnw, d, dind_dsz_110, load, C64XP, 1487 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1488 FIX2(FIX(op, 1), FIX(sz, 1)), 1489 OP2(ORMEMSW, OWTREG5), 1490 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1491 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1492INSN(ldnw, d, dinc_dsz_110, load, C64XP, 1493 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1494 FIX2(FIX(op, 1), FIX(sz, 1)), 1495 OP2(ORMEMSW, OWTREG5), 1496 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1497 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1498INSN(ldnw, d, ddec_dsz_110, load, C64XP, 1499 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1500 FIX2(FIX(op, 1), FIX(sz, 1)), 1501 OP2(ORMEMSW, OWTREG5), 1502 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1503 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1504/**/ 1505 1506INSN(ldw, d, load_store, load, C62X, 1507 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 1508 FIX2(FIX(op, 6), FIX(r, 0)), 1509 OP2(ORMEMSW, OWDREG5), 1510 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 0), 1511 ENC(offsetR, mem_offset, 0), ENC(baseR, reg, 0), 1512 ENC(srcdst, reg, 1))) 1513INSN(ldw, d, load_store_long, load, C62X, 1514 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 1515 FIX1(FIX(op, 6)), 1516 OP2(ORMEMLW, OWDREG5), 1517 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 0), ENC(offsetR, ulcst_dpr_word, 0), 1518 ENC(dst, reg, 1))) 1519 1520/* 16 bits insn */ 1521INSN(ldw, d, doff4_dsz_0xx, load, C64XP, 1522 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1523 FIX2(FIX(op, 1), FIX(sz, 0)), 1524 OP2(ORMEMSW, OWTREG5), 1525 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1526 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0))) 1527INSN(ldw, d, doff4_dsz_100, load, C64XP, 1528 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 1529 FIX2(FIX(op, 1), FIX(sz, 1)), 1530 OP2(ORMEMSW, OWTREG5), 1531 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1532 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset, 0))) 1533INSN(ldw, d, dind_dsz_0xx, load, C64XP, 1534 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1535 FIX2(FIX(op, 1), FIX(sz, 0)), 1536 OP2(ORMEMSW, OWTREG5), 1537 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1538 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1539INSN(ldw, d, dind_dsz_100, load, C64XP, 1540 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 1541 FIX2(FIX(op, 1), FIX(sz, 1)), 1542 OP2(ORMEMSW, OWTREG5), 1543 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1544 ENC(ptr, reg_ptr, 0), ENC(src1, mem_offset, 0))) 1545INSN(ldw, d, dinc_dsz_0xx, load, C64XP, 1546 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1547 FIX2(FIX(op, 1), FIX(sz, 0)), 1548 OP2(ORMEMSW, OWTREG5), 1549 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1550 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1551INSN(ldw, d, dinc_dsz_100, load, C64XP, 1552 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 1553 FIX2(FIX(op, 1), FIX(sz, 1)), 1554 OP2(ORMEMSW, OWTREG5), 1555 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1556 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1557INSN(ldw, d, ddec_dsz_0xx, load, C64XP, 1558 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1559 FIX2(FIX(op, 1), FIX(sz, 0)), 1560 OP2(ORMEMSW, OWTREG5), 1561 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1562 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1563INSN(ldw, d, ddec_dsz_100, load, C64XP, 1564 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 1565 FIX2(FIX(op, 1), FIX(sz, 1)), 1566 OP2(ORMEMSW, OWTREG5), 1567 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1568 ENC(ptr, reg_ptr, 0), ENC(cst, mem_offset_minus_one, 0))) 1569INSN(ldw, d, dpp, load, C64XP, 1570 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREINCR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS, 1571 FIX2(FIX(op, 1), FIX(dw, 0)), 1572 OP2(ORMEMSW, OWTREG5), 1573 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1574 ENC(cst, mem_offset_minus_one, 0))) 1575INSN(ldw, d, dstk, load, C64XP, 1576 TIC6X_FLAG_LOAD|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR, 1577 FIX2(FIX(op, 0x1), FIX(s, 1)), 1578 OP2(ORMEMSW, OWTREG5), 1579 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 1), 1580 ENC(cst, mem_offset, 0))) 1581/**/ 1582 1583INSN(ll, d, 1_or_2_src, load, C64XP, 1584 TIC6X_FLAG_LOAD|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS, 1585 FIX3(FIX(s, 1), FIX(op, 0xc), FIX(src1, 0)), 1586 OP2(ORMEMDW, OWDREG5), 1587 ENC2(ENC(src2, reg, 0), ENC(dst, reg, 1))) 1588 1589INSNE(lmbd, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 1590 FIX1(FIX(op, 0x6b)), 1591 OP3(ORREG1, ORXREG1, OWREG1), 1592 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1593 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1594INSNE(lmbd, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 1595 FIX1(FIX(op, 0x6a)), 1596 OP3(OACST, ORXREG1, OWREG1), 1597 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 1598 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1599 1600INSN(max2, l, 1_or_2_src, 1cycle, C64X, 0, 1601 FIX1(FIX(op, 0x42)), 1602 OP3(ORREG1, ORXREG1, OWREG1), 1603 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1604 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1605INSN(max2, s, ext_1_or_2_src, 1cycle, C64XP, 0, 1606 FIX1(FIX(op, 0xd)), 1607 OP3(ORREG1, ORXREG1, OWREG1), 1608 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1609 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1610 1611INSN(maxu4, l, 1_or_2_src, 1cycle, C64X, 0, 1612 FIX1(FIX(op, 0x43)), 1613 OP3(ORREG1, ORXREG1, OWREG1), 1614 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1615 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1616 1617INSN(min2, l, 1_or_2_src, 1cycle, C64X, 0, 1618 FIX1(FIX(op, 0x41)), 1619 OP3(ORREG1, ORXREG1, OWREG1), 1620 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1621 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1622INSN(min2, s, ext_1_or_2_src, 1cycle, C64XP, 0, 1623 FIX1(FIX(op, 0xc)), 1624 OP3(ORREG1, ORXREG1, OWREG1), 1625 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1626 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1627 1628INSN(minu4, l, 1_or_2_src, 1cycle, C64X, 0, 1629 FIX1(FIX(op, 0x48)), 1630 OP3(ORREG1, ORXREG1, OWREG1), 1631 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1632 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1633 1634INSNE(mpy, m_sl16_xsl16_si, m, mpy, 1616_m, C62X, 0, 1635 FIX1(FIX(op, 0x19)), 1636 OP3(ORREG1, ORXREG1, OWREG2), 1637 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1638 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1639INSNE(mpy, m_s5_xsl16_si, m, mpy, 1616_m, C62X, 0, 1640 FIX1(FIX(op, 0x18)), 1641 OP3(OACST, ORXREG1, OWREG2), 1642 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 1643 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1644 1645/* 16-bit insn. */ 1646INSN(mpy, m, m3_sat_0, 1616_m, C67X, 0, 1647 FIX1(FIX(op, 0x0)), 1648 OP3(ORREG1, ORXREG1, OWREG2), 1649 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1650 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 1651 1652INSN(mpydp, m, mpy, mpydp, C67X, 0, 1653 FIX1(FIX(op, 0x0e)), 1654 OP3(ORREGD1234, ORXREGD1324, OWREGD910), 1655 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1656 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1657 1658INSN(mpyh, m, mpy, 1616_m, C62X, 0, 1659 FIX1(FIX(op, 0x01)), 1660 OP3(ORREG1, ORXREG1, OWREG2), 1661 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1662 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1663 1664/* 16 bits insn */ 1665INSN(mpyh, m, m3_sat_0, 1616_m, C67X, 0, 1666 FIX1(FIX(op, 0x1)), 1667 OP3(ORREG1, ORXREG1, OWREG2), 1668 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1669 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 1670/**/ 1671 1672INSN(mpyhi, m, compound, 4cycle, C64X, 0, 1673 FIX1(FIX(op, 0x14)), 1674 OP3(ORREG1, ORXREG1, OWREGD4), 1675 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1676 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1677 1678INSN(mpyhir, m, compound, 4cycle, C64X, 0, 1679 FIX1(FIX(op, 0x10)), 1680 OP3(ORREG1, ORXREG1, OWREG4), 1681 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1682 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1683 1684INSN(mpyhl, m, mpy, 1616_m, C62X, 0, 1685 FIX1(FIX(op, 0x09)), 1686 OP3(ORREG1, ORXREG1, OWREG2), 1687 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1688 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1689 1690/* 16 bits insn */ 1691INSN(mpyhl, m, m3_sat_0, 1616_m, C67X, 0, 1692 FIX1(FIX(op, 0x3)), 1693 OP3(ORREG1, ORXREG1, OWREG2), 1694 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1695 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 1696/**/ 1697 1698INSN(mpyhlu, m, mpy, 1616_m, C62X, 0, 1699 FIX1(FIX(op, 0x0f)), 1700 OP3(ORREG1, ORXREG1, OWREG2), 1701 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1702 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1703 1704INSN(mpyhslu, m, mpy, 1616_m, C62X, 0, 1705 FIX1(FIX(op, 0x0b)), 1706 OP3(ORREG1, ORXREG1, OWREG2), 1707 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1708 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1709 1710INSN(mpyhsu, m, mpy, 1616_m, C62X, 0, 1711 FIX1(FIX(op, 0x03)), 1712 OP3(ORREG1, ORXREG1, OWREG2), 1713 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1714 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1715 1716INSN(mpyhu, m, mpy, 1616_m, C62X, 0, 1717 FIX1(FIX(op, 0x07)), 1718 OP3(ORREG1, ORXREG1, OWREG2), 1719 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1720 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1721 1722INSN(mpyhuls, m, mpy, 1616_m, C62X, 0, 1723 FIX1(FIX(op, 0x0d)), 1724 OP3(ORREG1, ORXREG1, OWREG2), 1725 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1726 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1727 1728INSN(mpyhus, m, mpy, 1616_m, C62X, 0, 1729 FIX1(FIX(op, 0x05)), 1730 OP3(ORREG1, ORXREG1, OWREG2), 1731 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1732 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1733 1734INSNE(mpyi, m_si_xsi_si, m, mpy, mpyi, C67X, 0, 1735 FIX1(FIX(op, 0x04)), 1736 OP3(ORREG14, ORXREG14, OWREG9), 1737 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1738 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1739INSNE(mpyi, m_s5_xsi_si, m, mpy, mpyi, C67X, 0, 1740 FIX1(FIX(op, 0x06)), 1741 OP3(OACST, ORXREG14, OWREG9), 1742 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 1743 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1744 1745INSNE(mpyid, m_si_xsi_sll, m, mpy, mpyid, C67X, 0, 1746 FIX1(FIX(op, 0x08)), 1747 OP3(ORREG14, ORXREG14, OWREGD910), 1748 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1749 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1750INSNE(mpyid, m_s5_xsi_sll, m, mpy, mpyid, C67X, 0, 1751 FIX1(FIX(op, 0x0c)), 1752 OP3(OACST, ORXREG14, OWREGD910), 1753 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 1754 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1755 1756INSN(mpyih, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1757 FIX1(FIX(op, 0x14)), 1758 OP3(ORXREG1, ORREG1, OWREGD4), 1759 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1760 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1761 1762INSN(mpyihr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1763 FIX1(FIX(op, 0x10)), 1764 OP3(ORXREG1, ORREG1, OWREG4), 1765 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1766 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1767 1768INSN(mpyil, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1769 FIX1(FIX(op, 0x15)), 1770 OP3(ORXREG1, ORREG1, OWREGD4), 1771 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1772 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1773 1774INSN(mpyilr, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1775 FIX1(FIX(op, 0x0e)), 1776 OP3(ORXREG1, ORREG1, OWREG4), 1777 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1778 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1779 1780INSN(mpylh, m, mpy, 1616_m, C62X, 0, 1781 FIX1(FIX(op, 0x11)), 1782 OP3(ORREG1, ORXREG1, OWREG2), 1783 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1784 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1785 1786/* 16 bits insn */ 1787INSN(mpylh, m, m3_sat_0, 1616_m, C67X, 0, 1788 FIX1(FIX(op, 0x2)), 1789 OP3(ORREG1, ORXREG1, OWREG2), 1790 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1791 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 1792/**/ 1793 1794INSN(mpylhu, m, mpy, 1616_m, C62X, 0, 1795 FIX1(FIX(op, 0x17)), 1796 OP3(ORREG1, ORXREG1, OWREG2), 1797 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1798 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1799 1800INSN(mpyli, m, compound, 4cycle, C64X, 0, 1801 FIX1(FIX(op, 0x15)), 1802 OP3(ORREG1, ORXREG1, OWREGD4), 1803 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1804 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1805 1806INSN(mpylir, m, compound, 4cycle, C64X, 0, 1807 FIX1(FIX(op, 0x0e)), 1808 OP3(ORREG1, ORXREG1, OWREG4), 1809 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1810 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1811 1812INSN(mpylshu, m, mpy, 1616_m, C62X, 0, 1813 FIX1(FIX(op, 0x13)), 1814 OP3(ORREG1, ORXREG1, OWREG2), 1815 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1816 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1817 1818INSN(mpyluhs, m, mpy, 1616_m, C62X, 0, 1819 FIX1(FIX(op, 0x15)), 1820 OP3(ORREG1, ORXREG1, OWREG2), 1821 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1822 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1823 1824INSN(mpysp, m, mpy, 4cycle, C67X, 0, 1825 FIX1(FIX(op, 0x1c)), 1826 OP3(ORREG1, ORXREG1, OWREG4), 1827 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1828 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1829 1830/* Contrary to SPRU733A, MPYSPDP and MPYSP2DP are on both C67X and 1831 C67X+. */ 1832INSN(mpyspdp, m, compound, mpyspdp, C67X, 0, 1833 FIX1(FIX(op, 0x16)), 1834 OP3(ORREG12, ORXREGD12, OWREGD67), 1835 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1836 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1837 1838INSN(mpysp2dp, m, compound, mpyspdp, C67X, 0, 1839 FIX1(FIX(op, 0x17)), 1840 OP3(ORREG1, ORXREG1, OWREGD45), 1841 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1842 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1843 1844INSNE(mpysu, m_sl16_xul16_si, m, mpy, 1616_m, C62X, 0, 1845 FIX1(FIX(op, 0x1b)), 1846 OP3(ORREG1, ORXREG1, OWREG2), 1847 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1848 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1849INSNE(mpysu, m_s5_xul16_si, m, mpy, 1616_m, C62X, 0, 1850 FIX1(FIX(op, 0x1e)), 1851 OP3(OACST, ORXREG1, OWREG2), 1852 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 1853 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1854 1855INSN(mpysu4, m, compound, 4cycle, C64X, 0, 1856 FIX1(FIX(op, 0x05)), 1857 OP3(ORREG1, ORXREG1, OWREGD4), 1858 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1859 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1860 1861INSN(mpyu, m, mpy, 1616_m, C62X, 0, 1862 FIX1(FIX(op, 0x1f)), 1863 OP3(ORREG1, ORXREG1, OWREG2), 1864 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1865 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1866 1867INSN(mpyu4, m, compound, 4cycle, C64X, 0, 1868 FIX1(FIX(op, 0x04)), 1869 OP3(ORREG1, ORXREG1, OWREGD4), 1870 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1871 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1872 1873INSN(mpyus, m, mpy, 1616_m, C62X, 0, 1874 FIX1(FIX(op, 0x1d)), 1875 OP3(ORREG1, ORXREG1, OWREG2), 1876 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1877 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1878 1879INSN(mpyus4, m, compound, 4cycle, C64X, TIC6X_FLAG_MACRO, 1880 FIX1(FIX(op, 0x05)), 1881 OP3(ORXREG1, ORREG1, OWREGD4), 1882 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1883 ENC(src1, reg, 1), ENC(dst, reg, 2))) 1884 1885INSN(mpy2, m, compound, 4cycle, C64X, 0, 1886 FIX1(FIX(op, 0x00)), 1887 OP3(ORREG1, ORXREG1, OWREGD4), 1888 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1889 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1890 1891INSN(mpy2ir, m, 1_or_2_src, 4cycle, C64XP, 0, 1892 FIX1(FIX(op, 0x0f)), 1893 OP3(ORREG1, ORXREG1, OWREGD4), 1894 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1895 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1896 1897INSNE(mpy32, 32_32_32, m, mpy, 4cycle, C64XP, 0, 1898 FIX1(FIX(op, 0x10)), 1899 OP3(ORREG1, ORXREG1, OWREG4), 1900 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1901 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1902INSNE(mpy32, 32_32_64, m, mpy, 4cycle, C64XP, 0, 1903 FIX1(FIX(op, 0x14)), 1904 OP3(ORREG1, ORXREG1, OWREGD4), 1905 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1906 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1907 1908INSN(mpy32su, m, mpy, 4cycle, C64XP, 0, 1909 FIX1(FIX(op, 0x16)), 1910 OP3(ORREG1, ORXREG1, OWREGD4), 1911 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1912 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1913 1914INSN(mpy32u, m, compound, 4cycle, C64XP, 0, 1915 FIX1(FIX(op, 0x18)), 1916 OP3(ORREG1, ORXREG1, OWREGD4), 1917 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1918 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1919 1920INSN(mpy32us, m, compound, 4cycle, C64XP, 0, 1921 FIX1(FIX(op, 0x19)), 1922 OP3(ORREG1, ORXREG1, OWREGD4), 1923 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 1924 ENC(src2, reg, 1), ENC(dst, reg, 2))) 1925 1926/* "or" forms of "mv" are preferred over "add" forms when available 1927 because "or" uses less power. However, 40-bit moves are only 1928 available through "add", and before C64X D-unit moves are only 1929 available through "add" (without cross paths being available). */ 1930INSNE(mv, l_xui_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 1931 FIX2(FIX(op, 0x7e), FIX(src1, 0)), 1932 OP2(ORXREG1, OWREG1), 1933 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1934 ENC(dst, reg, 1))) 1935INSNE(mv, l_sl_sl, l, 1_or_2_src, 1cycle, C62X, 1936 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 1937 FIX3(FIX(op, 0x20), FIX(x, 0), FIX(src1, 0)), 1938 OP2(ORREGL1, OWREGL1), 1939 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1))) 1940INSNE(mv, s_xui_ui, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 1941 FIX2(FIX(op, 0x1a), FIX(src1, 0)), 1942 OP2(ORXREG1, OWREG1), 1943 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1944 ENC(dst, reg, 1))) 1945INSNE(mv, d_si_si, d, 1_or_2_src, 1cycle, C62X, 1946 TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(0), 1947 FIX2(FIX(op, 0x12), FIX(src1, 0)), 1948 OP2(ORREG1, OWREG1), 1949 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1))) 1950INSNE(mv, d_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 1951 TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1), 1952 FIX2(FIX(op, 0x3), FIX(src1, 0)), 1953 OP2(ORXREG1, OWREG1), 1954 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 1955 ENC(dst, reg, 1))) 1956 1957/* 16 bits insn */ 1958INSNU(mv, l, lsdmvto, 1cycle, C64X, 0, 1959 FIX1(FIX(unit, 0x0)), 1960 OP2(ORXREG1, OWREG1), 1961 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1962 1963INSNU(mv, s, lsdmvto, 1cycle, C64X, 0, 1964 FIX1(FIX(unit, 0x1)), 1965 OP2(ORXREG1, OWREG1), 1966 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1967 1968INSNU(mv, d, lsdmvto, 1cycle, C64X, 0, 1969 FIX1(FIX(unit, 0x2)), 1970 OP2(ORXREG1, OWREG1), 1971 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1972 1973INSNU(mv, l, lsdmvfr, 1cycle, C64X, 0, 1974 FIX1(FIX(unit, 0x0)), 1975 OP2(ORXREG1, OWREG1), 1976 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1977 1978INSNU(mv, s, lsdmvfr, 1cycle, C64X, 0, 1979 FIX1(FIX(unit, 0x1)), 1980 OP2(ORXREG1, OWREG1), 1981 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1982 1983INSNU(mv, d, lsdmvfr, 1cycle, C64X, 0, 1984 FIX1(FIX(unit, 0x2)), 1985 OP2(ORXREG1, OWREG1), 1986 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(x, xpath, 0), ENC(dst, reg, 1))) 1987/**/ 1988 1989INSNE(mvc, from_cr, s, 1_or_2_src, 1cycle, C62X, 1990 TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_NO_CROSS, 1991 FIX3(FIX(s, 1), FIX(op, 0x0f), FIX(x, 0)), 1992 OP2(ORCREG1, OWREG1), 1993 ENC3(ENC(src1, crhi, 0), ENC(src2, crlo, 0), ENC(dst, reg, 1))) 1994INSNE(mvc, to_cr, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_SIDE_B_ONLY, 1995 FIX2(FIX(s, 1), FIX(op, 0x0e)), 1996 OP2(ORXREG1, OWCREG1), 1997 ENC4(ENC(x, xpath, 0), ENC(src2, reg, 0), ENC(src1, crhi, 1), 1998 ENC(dst, crlo, 1))) 1999 2000/* 16 bits insn */ 2001INSN(mvc, s, sx1, 1cycle, C64XP, 2002 TIC6X_FLAG_NO_CROSS, 2003 FIX1(FIX(op, 0x6)), 2004 OP2(ORREG1B, OWILC1), 2005 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 0))) 2006/**/ 2007 2008INSN(mvd, m, unary, 4cycle, C64X, 0, 2009 FIX1(FIX(op, 0x1a)), 2010 OP2(ORXREG1, OWREG4), 2011 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2012 ENC(dst, reg, 1))) 2013 2014INSN(mvk, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2015 FIX1(FIX(h, 0)), 2016 OP2(OLCST, OWREG1), 2017 ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1))) 2018INSN(mvk, l, unary, 1cycle, C64X, TIC6X_FLAG_NO_CROSS, 2019 FIX2(FIX(x, 0), FIX(op, 0x05)), 2020 OP2(OACST, OWREG1), 2021 ENC3(ENC(s, fu, 0), ENC(src2, scst, 0), ENC(dst, reg, 1))) 2022INSN(mvk, d, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_NO_CROSS, 2023 FIX2(FIX(op, 0x00), FIX(src2, 0)), 2024 OP2(OACST, OWREG1), 2025 ENC3(ENC(s, fu, 0), ENC(src1, scst, 0), ENC(dst, reg, 1))) 2026 2027/* 16 bits insn */ 2028INSN(mvk, l, lx5, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2029 FIX0(), 2030 OP2(OLCST, OWREG1), 2031 ENC3(ENC(s, fu, 0), ENC(cst, scst, 0), ENC(dst, reg, 1))) 2032INSN(mvk, s, smvk8, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2033 FIX0(), 2034 OP2(OLCST, OWREG1), 2035 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1))) 2036INSNU(mvk, l, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED, 2037 FIX1(FIX(unit, 0x0)), 2038 OP2(OACST, OWREG1), 2039 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1))) 2040INSNU(mvk, s, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED, 2041 FIX1(FIX(unit, 0x1)), 2042 OP2(OACST, OWREG1), 2043 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1))) 2044INSNU(mvk, d, lsdx1c, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_SPRED, 2045 FIX1(FIX(unit, 0x2)), 2046 OP2(OACST, OWREG1), 2047 ENC3(ENC(s, fu, 0), ENC(cst, ucst, 0), ENC(dst, reg, 1))) 2048INSNUE(mvk, zero, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2049 FIX2(FIX(op, 0), FIX(unit, 0x0)), 2050 OP2(OHWCST0, OWREG1), 2051 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2052INSNUE(mvk, zero, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2053 FIX2(FIX(op, 0), FIX(unit, 0x1)), 2054 OP2(OHWCST0, OWREG1), 2055 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2056INSNUE(mvk, zero, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2057 FIX2(FIX(op, 0), FIX(unit, 0x2)), 2058 OP2(OHWCST0, OWREG1), 2059 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2060INSNUE(mvk, one, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2061 FIX2(FIX(op, 1), FIX(unit, 0x0)), 2062 OP2(OHWCST1, OWREG1), 2063 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2064INSNUE(mvk, one, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2065 FIX2(FIX(op, 1), FIX(unit, 0x1)), 2066 OP2(OHWCST1, OWREG1), 2067 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2068INSNUE(mvk, one, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 2069 FIX2(FIX(op, 1), FIX(unit, 0x2)), 2070 OP2(OHWCST1, OWREG1), 2071 ENC2(ENC(s, fu, 0), ENC(srcdst, reg, 1))) 2072/**/ 2073 2074INSN(mvkh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2075 FIX1(FIX(h, 1)), 2076 OP2(OLCST, OWREG1), 2077 ENC3(ENC(s, fu, 0), ENC(cst, lcst_high16, 0), ENC(dst, reg, 1))) 2078 2079INSN(mvklh, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 2080 FIX1(FIX(h, 1)), 2081 OP2(OLCST, OWREG1), 2082 ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1))) 2083 2084INSN(mvkl, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 2085 FIX1(FIX(h, 0)), 2086 OP2(OLCST, OWREG1), 2087 ENC3(ENC(s, fu, 0), ENC(cst, lcst_low16, 0), ENC(dst, reg, 1))) 2088 2089INSNE(neg, s_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 2090 FIX2(FIX(op, 0x16), FIX(src1, 0)), 2091 OP2(ORXREG1, OWREG1), 2092 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2093 ENC(dst, reg, 1))) 2094INSNE(neg, l_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 2095 FIX2(FIX(op, 0x06), FIX(src1, 0)), 2096 OP2(ORXREG1, OWREG1), 2097 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2098 ENC(dst, reg, 1))) 2099INSNE(neg, l_sl_sl, l, 1_or_2_src, 1cycle, C62X, 2100 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 2101 FIX2(FIX(op, 0x24), FIX(src1, 0)), 2102 OP2(ORREGL1, OWREGL1), 2103 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2104 ENC(dst, reg, 1))) 2105 2106INSN(nop, nfu, nop_idle, nop, C62X, 0, 2107 FIX2(FIX(s, 0), RAN(op, 0, 8)), 2108 OP1(OACST), 2109 ENC1(ENC(op, ucst_minus_one, 0))) 2110INSNE(nop, 1, nfu, nop_idle, nop, C62X, TIC6X_FLAG_MACRO, 2111 FIX2(FIX(s, 0), FIX(op, 0)), 2112 OP0(), 2113 ENC0()) 2114 2115/* 16 bits insn */ 2116/* contrary to sprufe8b.pdf p767, and accordingly to 2117 * dis6x.exe output, unop3 opcode is decoded as NOP N3 + 1 */ 2118INSN(nop, nfu, unop, nop, C64XP, 0, 2119 FIX0(), 2120 OP1(OACST), 2121 ENC1(ENC(n, ucst_minus_one, 0))) 2122/**/ 2123 2124INSNE(norm, l_xsi_ui, l, 1_or_2_src, 1cycle, C62X, 0, 2125 FIX2(FIX(op, 0x63), FIX(src1, 0)), 2126 OP2(ORXREG1, OWREG1), 2127 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2128 ENC(dst, reg, 1))) 2129INSNE(norm, l_sl_ui, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2130 FIX3(FIX(op, 0x60), FIX(x, 0), FIX(src1, 0)), 2131 OP2(ORREGL1, OWREG1), 2132 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1))) 2133 2134INSN(not, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 2135 FIX2(FIX(op, 0x6e), FIX(src1, 0x1f)), 2136 OP2(ORXREG1, OWREG1), 2137 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2138 ENC(dst, reg, 1))) 2139INSN(not, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 2140 FIX2(FIX(op, 0x0a), FIX(src1, 0x1f)), 2141 OP2(ORXREG1, OWREG1), 2142 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2143 ENC(dst, reg, 1))) 2144INSN(not, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO, 2145 FIX2(FIX(op, 0xf), FIX(src1, 0x1f)), 2146 OP2(ORXREG1, OWREG1), 2147 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2148 ENC(dst, reg, 1))) 2149 2150INSNE(or, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 2151 FIX1(FIX(op, 0x2)), 2152 OP3(ORREG1, ORXREG1, OWREG1), 2153 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2154 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2155INSNE(or, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 2156 FIX1(FIX(op, 0x3)), 2157 OP3(OACST, ORXREG1, OWREG1), 2158 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2159 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2160INSNE(or, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 2161 FIX1(FIX(op, 0x7f)), 2162 OP3(ORREG1, ORXREG1, OWREG1), 2163 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2164 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2165INSNE(or, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 2166 FIX1(FIX(op, 0x7e)), 2167 OP3(OACST, ORXREG1, OWREG1), 2168 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2169 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2170INSNE(or, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 2171 FIX1(FIX(op, 0x1b)), 2172 OP3(ORREG1, ORXREG1, OWREG1), 2173 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2174 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2175INSNE(or, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 2176 FIX1(FIX(op, 0x1a)), 2177 OP3(OACST, ORXREG1, OWREG1), 2178 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2179 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2180 2181/* 16 bits insn */ 2182INSN(or, l, l2c, 1cycle, C64XP, 0, 2183 FIX1(FIX(op, 1)), 2184 OP3(ORREG1, ORXREG1, OWREG1NORS), 2185 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2186 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2187/**/ 2188 2189INSN(pack2, l, 1_or_2_src, 1cycle, C64X, 0, 2190 FIX1(FIX(op, 0x0)), 2191 OP3(ORREG1, ORXREG1, OWREG1), 2192 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2193 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2194INSN(pack2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2195 FIX1(FIX(op, 0xf)), 2196 OP3(ORREG1, ORXREG1, OWREG1), 2197 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2198 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2199 2200INSN(packh2, l, 1_or_2_src, 1cycle, C64X, 0, 2201 FIX1(FIX(op, 0x1e)), 2202 OP3(ORREG1, ORXREG1, OWREG1), 2203 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2204 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2205INSN(packh2, s, 1_or_2_src, 1cycle, C64X, 0, 2206 FIX1(FIX(op, 0x9)), 2207 OP3(ORREG1, ORXREG1, OWREG1), 2208 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2209 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2210 2211INSN(packh4, l, 1_or_2_src, 1cycle, C64X, 0, 2212 FIX1(FIX(op, 0x69)), 2213 OP3(ORREG1, ORXREG1, OWREG1), 2214 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2215 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2216 2217INSN(packhl2, l, 1_or_2_src, 1cycle, C64X, 0, 2218 FIX1(FIX(op, 0x1c)), 2219 OP3(ORREG1, ORXREG1, OWREG1), 2220 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2221 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2222INSN(packhl2, s, 1_or_2_src, 1cycle, C64X, 0, 2223 FIX1(FIX(op, 0x8)), 2224 OP3(ORREG1, ORXREG1, OWREG1), 2225 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2226 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2227 2228INSN(packlh2, l, 1_or_2_src, 1cycle, C64X, 0, 2229 FIX1(FIX(op, 0x1b)), 2230 OP3(ORREG1, ORXREG1, OWREG1), 2231 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2232 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2233INSN(packlh2, s, 1_or_2_src, 1cycle, C64X, 0, 2234 FIX1(FIX(op, 0x10)), 2235 OP3(ORREG1, ORXREG1, OWREG1), 2236 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2237 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2238 2239INSN(packl4, l, 1_or_2_src, 1cycle, C64X, 0, 2240 FIX1(FIX(op, 0x68)), 2241 OP3(ORREG1, ORXREG1, OWREG1), 2242 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2243 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2244 2245INSN(rcpdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS, 2246 FIX2(FIX(op, 0x2d), FIX(x, 0)), 2247 OP2(ORREGD1, OWREGD12), 2248 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 2249 ENC(dst, reg, 1))) 2250 2251INSN(rcpsp, s, 1_or_2_src, 1cycle, C67X, 0, 2252 FIX2(FIX(op, 0x3d), FIX(src1, 0)), 2253 OP2(ORXREG1, OWREG1), 2254 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2255 ENC(dst, reg, 1))) 2256 2257INSN(ret, s, ext_branch_cond_imm, branch, C62X, 2258 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN, 2259 FIX0(), 2260 OP1(OLCST), 2261 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 2262INSN(ret, s, branch, branch, C62X, 2263 TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN, 2264 FIX1(FIX(s, 1)), 2265 OP1(ORXREG1), 2266 ENC2(ENC(x, xpath, 0), ENC(src2, reg, 0))) 2267INSN(ret, s, b_irp, branch, C62X, 2268 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN, 2269 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 2270 OP1(ORIRP1), 2271 ENC0()) 2272INSN(ret, s, b_nrp, branch, C62X, 2273 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN, 2274 FIX3(FIX(s, 1), FIX(x, 0), FIX(dst, 0)), 2275 OP1(ORNRP1), 2276 ENC0()) 2277 2278INSN(retp, s, call_imm_nop, branch, C64XP, 2279 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MCNOP|TIC6X_FLAG_MACRO|TIC6X_FLAG_RETURN, 2280 FIX1(FIX(z, 1)), 2281 OP2(OLCST, OWRETREG1), 2282 ENC2(ENC(s, fu, 0), ENC(cst, pcrel, 0))) 2283 2284INSN(rint, nfu, rint, 1cycle, C64XP, 0, 2285 FIX1(FIX(s, 0)), 2286 OP0(), 2287 ENC0()) 2288 2289INSNE(rotl, m_ui_xui_ui, m, compound, 1616_m, C64X, 0, 2290 FIX1(FIX(op, 0x1d)), 2291 OP3(ORXREG1, ORREG1, OWREG2), 2292 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2293 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2294INSNE(rotl, m_u5_xui_ui, m, compound, 1616_m, C64X, 0, 2295 FIX1(FIX(op, 0x1e)), 2296 OP3(ORXREG1, OACST, OWREG2), 2297 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2298 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2299 2300INSN(rpack2, s, ext_1_or_2_src_noncond, 1cycle, C64XP, 0, 2301 FIX2(FIX(op, 0xb), FIX(z, 1)), 2302 OP3(ORREG1, ORXREG1, OWREG1), 2303 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2304 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2305 2306INSN(rsqrdp, s, 1_or_2_src, 2cycle_dp, C67X, TIC6X_FLAG_NO_CROSS, 2307 FIX2(FIX(op, 0x2e), FIX(x, 0)), 2308 OP2(ORREGD1, OWREGD12), 2309 ENC4(ENC(s, fu, 0), ENC(src2, regpair_msb, 0), ENC(src1, regpair_lsb, 0), 2310 ENC(dst, reg, 1))) 2311 2312INSN(rsqrsp, s, 1_or_2_src, 1cycle, C67X, 0, 2313 FIX2(FIX(op, 0x3e), FIX(src1, 0)), 2314 OP2(ORXREG1, OWREG1), 2315 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2316 ENC(dst, reg, 1))) 2317 2318INSNE(sadd, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 2319 FIX1(FIX(op, 0x13)), 2320 OP3(ORREG1, ORXREG1, OWREG1), 2321 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2322 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2323INSNE(sadd, l_xsi_sl_sl, l, 1_or_2_src, 1cycle, C62X, 0, 2324 FIX1(FIX(op, 0x31)), 2325 OP3(ORXREG1, ORREGL1, OWREGL1), 2326 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2327 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2328INSNE(sadd, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 2329 FIX1(FIX(op, 0x12)), 2330 OP3(OACST, ORXREG1, OWREG1), 2331 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2332 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2333INSNE(sadd, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2334 FIX1(FIX(op, 0x30)), 2335 OP3(OACST, ORREGL1, OWREGL1), 2336 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2337 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2338INSNE(sadd, s_si_xsi_si, s, 1_or_2_src, 1cycle, C64X, 0, 2339 FIX1(FIX(op, 0x20)), 2340 OP3(ORREG1, ORXREG1, OWREG1), 2341 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2342 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2343 2344/* 16 bits insn */ 2345INSN(sadd, l, l3_sat_1, 1cycle, C64XP, 0, 2346 FIX1(FIX(op, 0)), 2347 OP3(ORREG1, ORXREG1, OWREG1), 2348 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2349 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2350 2351INSN(sadd, s, s3_sat_1, 1cycle, C64XP,0, 2352 FIX1(FIX(op, 0x0)), 2353 OP3(ORREG1, ORXREG1, OWREG1), 2354 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2355 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2356/**/ 2357 2358INSN(sadd2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2359 FIX1(FIX(op, 0x0)), 2360 OP3(ORREG1, ORXREG1, OWREG1), 2361 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2362 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2363 2364INSN(saddsub, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 2365 FIX1(FIX(op, 0x0e)), 2366 OP3(ORREG1, ORXREG1, OWREGD1), 2367 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2368 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2369 2370INSN(saddsub2, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 2371 FIX1(FIX(op, 0x0f)), 2372 OP3(ORREG1, ORXREG1, OWREGD1), 2373 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2374 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2375 2376INSN(saddsu2, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO, 2377 FIX1(FIX(op, 0x1)), 2378 OP3(ORXREG1, ORREG1, OWREG1), 2379 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2380 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2381 2382INSN(saddus2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2383 FIX1(FIX(op, 0x1)), 2384 OP3(ORREG1, ORXREG1, OWREG1), 2385 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2386 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2387 2388INSN(saddu4, s, ext_1_or_2_src, 1cycle, C64X, 0, 2389 FIX1(FIX(op, 0x3)), 2390 OP3(ORREG1, ORXREG1, OWREG1), 2391 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2392 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2393 2394INSN(sat, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2395 FIX3(FIX(op, 0x40), FIX(x, 0), FIX(src1, 0)), 2396 OP2(ORREGL1, OWREG1), 2397 ENC3(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(dst, reg, 1))) 2398 2399INSN(set, s, field, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2400 FIX1(FIX(op, 0x2)), 2401 OP4(ORREG1, OACST, OACST, OWREG1), 2402 ENC5(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(csta, ucst, 1), 2403 ENC(cstb, ucst, 2), ENC(dst, reg, 3))) 2404INSN(set, s, 1_or_2_src, 1cycle, C62X, 0, 2405 FIX1(FIX(op, 0x3b)), 2406 OP3(ORXREG1, ORREG1, OWREG1), 2407 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2408 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2409 2410/* 16 bits insn */ 2411INSN(set, s, sc5, 1cycle, C64XP, 0, 2412 FIX1(FIX(op, 1)), 2413 OP4(ORREG1, OACST, OACST, OWREG1), 2414 ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(cst, ucst, 1), 2415 ENC(cst, ucst, 2), ENC(srcdst, reg, 3))) 2416/**/ 2417 2418INSN(shfl, m, unary, 1616_m, C64X, 0, 2419 FIX1(FIX(op, 0x1c)), 2420 OP2(ORXREG1, OWREG2), 2421 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2422 ENC(dst, reg, 1))) 2423 2424INSN(shfl3, l, 1_or_2_src_noncond, 1cycle, C64XP, 0, 2425 FIX1(FIX(op, 0x36)), 2426 OP3(ORREG1, ORXREG1, OWREGD1), 2427 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2428 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2429 2430INSNE(shl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0, 2431 FIX1(FIX(op, 0x33)), 2432 OP3(ORXREG1, ORREG1, OWREG1), 2433 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2434 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2435INSNE(shl, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2436 FIX2(FIX(op, 0x31), FIX(x, 0)), 2437 OP3(ORREGL1, ORREG1, OWREGL1), 2438 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 2439 ENC(dst, reg, 2))) 2440INSNE(shl, s_xui_ui_ul, s, 1_or_2_src, 1cycle, C62X, 0, 2441 FIX1(FIX(op, 0x13)), 2442 OP3(ORXREG1, ORREG1, OWREGL1), 2443 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2444 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2445INSNE(shl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0, 2446 FIX1(FIX(op, 0x32)), 2447 OP3(ORXREG1, OACST, OWREG1), 2448 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2449 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2450INSNE(shl, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2451 FIX2(FIX(op, 0x30), FIX(x, 0)), 2452 OP3(ORREGL1, OACST, OWREGL1), 2453 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 2454 ENC(dst, reg, 2))) 2455INSNE(shl, s_xui_u5_ul, s, 1_or_2_src, 1cycle, C62X, 0, 2456 FIX1(FIX(op, 0x12)), 2457 OP3(ORXREG1, OACST, OWREGL1), 2458 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2459 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2460 2461/* 16bit insn */ 2462INSN(shl, s, s3i, 1cycle, C64XP, 0, 2463 FIX1(FIX(op, 0x0)), 2464 OP3(ORXREG1, OACST, OWREG1), 2465 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2466 ENC(cst, cst_s3i, 1), ENC(dst, reg, 2))) 2467INSN(shl, s, ssh5_sat_x, 1cycle, C64XP, 2468 TIC6X_FLAG_NO_CROSS, 2469 FIX1(FIX(op, 0x0)), 2470 OP3(ORREG1, OACST, OWREG1), 2471 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), 2472 ENC(cst, ucst, 1), ENC(srcdst, reg, 2))) 2473INSN(shl, s, s2sh, 1cycle, C64XP, 0, 2474 FIX1(FIX(op, 0x0)), 2475 OP3(ORREG1, ORREG1, OWREG1), 2476 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1), 2477 ENC(srcdst, reg, 2))) 2478/**/ 2479 2480INSN(shlmb, l, 1_or_2_src, 1cycle, C64X, 0, 2481 FIX1(FIX(op, 0x61)), 2482 OP3(ORREG1, ORXREG1, OWREG1), 2483 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2484 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2485INSN(shlmb, s, ext_1_or_2_src, 1cycle, C64X, 0, 2486 FIX1(FIX(op, 0x9)), 2487 OP3(ORREG1, ORXREG1, OWREG1), 2488 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2489 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2490 2491INSNE(shr, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0, 2492 FIX1(FIX(op, 0x37)), 2493 OP3(ORXREG1, ORREG1, OWREG1), 2494 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2495 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2496INSNE(shr, s_sl_ui_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2497 FIX2(FIX(op, 0x35), FIX(x, 0)), 2498 OP3(ORREGL1, ORREG1, OWREGL1), 2499 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 2500 ENC(dst, reg, 2))) 2501INSNE(shr, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0, 2502 FIX1(FIX(op, 0x36)), 2503 OP3(ORXREG1, OACST, OWREG1), 2504 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2505 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2506INSNE(shr, s_sl_u5_sl, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2507 FIX2(FIX(op, 0x34), FIX(x, 0)), 2508 OP3(ORREGL1, OACST, OWREGL1), 2509 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 2510 ENC(dst, reg, 2))) 2511 2512/* 16bit insn */ 2513INSN(shr, s, s3i, 1cycle, C64XP, 0, 2514 FIX1(FIX(op, 0x1)), 2515 OP3(ORXREG1, OACST, OWREG1), 2516 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2517 ENC(cst, cst_s3i, 1), ENC(dst, reg, 2))) 2518INSN(shr, s, ssh5_sat_x, 1cycle, C64XP, 2519 TIC6X_FLAG_NO_CROSS, 2520 FIX1(FIX(op, 0x1)), 2521 OP3(ORREG1, OACST, OWREG1), 2522 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), 2523 ENC(cst, ucst, 1), ENC(srcdst, reg, 2))) 2524INSN(shr, s, s2sh, 1cycle, C64XP, 0, 2525 FIX1(FIX(op, 0x1)), 2526 OP3(ORREG1, ORREG1, OWREG1), 2527 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1), 2528 ENC(srcdst, reg, 2))) 2529/**/ 2530 2531INSNE(shr2, s_xs2_ui_s2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2532 FIX1(FIX(op, 0x7)), 2533 OP3(ORXREG1, ORREG1, OWREG1), 2534 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2535 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2536INSNE(shr2, s_xs2_u5_s2, s, 1_or_2_src, 1cycle, C64X, 0, 2537 FIX1(FIX(op, 0x18)), 2538 OP3(ORXREG1, OACST, OWREG1), 2539 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2540 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2541 2542INSN(shrmb, l, 1_or_2_src, 1cycle, C64X, 0, 2543 FIX1(FIX(op, 0x62)), 2544 OP3(ORREG1, ORXREG1, OWREG1), 2545 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2546 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2547INSN(shrmb, s, ext_1_or_2_src, 1cycle, C64X, 0, 2548 FIX1(FIX(op, 0xa)), 2549 OP3(ORREG1, ORXREG1, OWREG1), 2550 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2551 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2552 2553INSNE(shru, s_xui_ui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 2554 FIX1(FIX(op, 0x27)), 2555 OP3(ORXREG1, ORREG1, OWREG1), 2556 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2557 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2558INSNE(shru, s_ul_ui_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2559 FIX2(FIX(op, 0x25), FIX(x, 0)), 2560 OP3(ORREGL1, ORREG1, OWREGL1), 2561 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 2562 ENC(dst, reg, 2))) 2563INSNE(shru, s_xui_u5_ui, s, 1_or_2_src, 1cycle, C62X, 0, 2564 FIX1(FIX(op, 0x26)), 2565 OP3(ORXREG1, OACST, OWREG1), 2566 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2567 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2568INSNE(shru, s_ul_u5_ul, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2569 FIX2(FIX(op, 0x24), FIX(x, 0)), 2570 OP3(ORREGL1, OACST, OWREGL1), 2571 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 2572 ENC(dst, reg, 2))) 2573 2574/* 16 bits insn */ 2575INSN(shru, s, ssh5_sat_0, 1cycle, C64XP, 2576 TIC6X_FLAG_NO_CROSS, 2577 FIX1(FIX(op, 0x2)), 2578 OP3(ORREG1, OACST, OWREG1), 2579 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), 2580 ENC(cst, ucst, 1), ENC(srcdst, reg, 2))) 2581INSN(shru, s, s2sh, 1cycle, C64XP, 0, 2582 FIX1(FIX(op, 0x2)), 2583 OP3(ORREG1, ORREG1, OWREG1), 2584 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1), 2585 ENC(srcdst, reg, 2))) 2586/**/ 2587 2588INSNE(shru2, s_xu2_ui_u2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2589 FIX1(FIX(op, 0x8)), 2590 OP3(ORXREG1, ORREG1, OWREG1), 2591 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2592 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2593INSNE(shru2, s_xu2_u5_u2, s, 1_or_2_src, 1cycle, C64X, 0, 2594 FIX1(FIX(op, 0x19)), 2595 OP3(ORXREG1, OACST, OWREG1), 2596 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2597 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2598 2599INSN(sl, d, 1_or_2_src, store, C64XP, 2600 TIC6X_FLAG_STORE|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_SIDE_T2_ONLY|TIC6X_FLAG_NO_CROSS, 2601 FIX3(FIX(s, 1), FIX(op, 0xd), FIX(src1, 0)), 2602 OP2(ORDREG1, OWMEMDW), 2603 ENC2(ENC(dst, reg, 0), ENC(src2, reg, 1))) 2604 2605INSN(smpy, m, mpy, 1616_m, C62X, 0, 2606 FIX1(FIX(op, 0x1a)), 2607 OP3(ORREG1, ORXREG1, OWREG2), 2608 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2609 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2610 2611/* 16 bits insn */ 2612INSN(smpy, m, m3_sat_1, 1616_m, C67X, 0, 2613 FIX1(FIX(op, 0x0)), 2614 OP3(ORREG1, ORXREG1, OWREG2), 2615 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2616 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 2617/**/ 2618 2619INSN(smpyh, m, mpy, 1616_m, C62X, 0, 2620 FIX1(FIX(op, 0x02)), 2621 OP3(ORREG1, ORXREG1, OWREG2), 2622 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2623 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2624 2625/* 16 bits insn */ 2626INSN(smpyh, m, m3_sat_1, 1616_m, C67X, 0, 2627 FIX1(FIX(op, 0x1)), 2628 OP3(ORREG1, ORXREG1, OWREG2), 2629 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2630 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 2631/**/ 2632 2633INSN(smpyhl, m, mpy, 1616_m, C62X, 0, 2634 FIX1(FIX(op, 0x0a)), 2635 OP3(ORREG1, ORXREG1, OWREG2), 2636 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2637 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2638 2639/* 16 bits insn */ 2640INSN(smpyhl, m, m3_sat_1, 1616_m, C67X, 0, 2641 FIX1(FIX(op, 0x3)), 2642 OP3(ORREG1, ORXREG1, OWREG2), 2643 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2644 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 2645/**/ 2646 2647INSN(smpylh, m, mpy, 1616_m, C62X, 0, 2648 FIX1(FIX(op, 0x12)), 2649 OP3(ORREG1, ORXREG1, OWREG2), 2650 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2651 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2652 2653/* 16 bits insn */ 2654INSN(smpylh, m, m3_sat_1, 1616_m, C67X, 0, 2655 FIX1(FIX(op, 0x2)), 2656 OP3(ORREG1, ORXREG1, OWREG2), 2657 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2658 ENC(src2, reg, 1), ENC(dst, reg_shift, 2))) 2659/**/ 2660 2661INSN(smpy2, m, compound, 4cycle, C64X, 0, 2662 FIX1(FIX(op, 0x01)), 2663 OP3(ORREG1, ORXREG1, OWREGD4), 2664 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2665 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2666 2667/* Contrary to SPRUFE8, this is the correct operand order for this 2668 instruction. */ 2669INSN(smpy32, m, 1_or_2_src, 4cycle, C64XP, 0, 2670 FIX1(FIX(op, 0x19)), 2671 OP3(ORREG1, ORXREG1, OWREG4), 2672 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2673 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2674 2675INSN(spack2, s, ext_1_or_2_src, 1cycle, C64X, 0, 2676 FIX1(FIX(op, 0x2)), 2677 OP3(ORREG1, ORXREG1, OWREG1), 2678 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2679 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2680 2681INSN(spacku4, s, ext_1_or_2_src, 1cycle, C64X, 0, 2682 FIX1(FIX(op, 0x4)), 2683 OP3(ORREG1, ORXREG1, OWREG1), 2684 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2685 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2686 2687INSN(spdp, s, 1_or_2_src, 2cycle_dp, C67X, 0, 2688 FIX2(FIX(op, 0x02), FIX(src1, 0)), 2689 OP2(ORXREG1, OWREGD12), 2690 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2691 ENC(dst, reg, 1))) 2692 2693INSN(spint, l, 1_or_2_src, 4cycle, C67X, 0, 2694 FIX2(FIX(op, 0x0a), FIX(src1, 0)), 2695 OP2(ORXREG1, OWREG4), 2696 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2697 ENC(dst, reg, 1))) 2698 2699INSNE(spkernel, nfu_2, nfu, spkernel, 1cycle, C64XP, 2700 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL, 2701 FIX1(FIX(s, 0)), 2702 OP2(OACST, OACST), 2703 ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1))) 2704INSNE(spkernel, nfu_0, nfu, spkernel, 1cycle, C64XP, 2705 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL|TIC6X_FLAG_MACRO, 2706 FIX2(FIX(s, 0), FIX(fstgfcyc, 0)), 2707 OP0(), 2708 ENC0()) 2709 2710/* 16 bits insn */ 2711INSN(spkernel, nfu, uspk, 1cycle, C64XP, 2712 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL, 2713 FIX0(), 2714 OP2(OACST, OACST), 2715 ENC2(ENC(fstgfcyc, fstg, 0), ENC(fstgfcyc, fcyc, 1))) 2716/**/ 2717 2718INSN(spkernelr, nfu, spkernelr, 1cycle, C64XP, 2719 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPKERNEL, 2720 FIX1(FIX(s, 0)), 2721 OP0(), 2722 ENC0()) 2723 2724INSN(sploop, nfu, loop_buffer, 1cycle, C64XP, 2725 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP, 2726 FIX4(FIX(s, 0), FIX(op, 0xc), FIX(csta, 0), RAN(cstb, 0, 13)), 2727 OP1(OACST), 2728 ENC1(ENC(cstb, ucst_minus_one, 0))) 2729 2730INSN(sploopd, nfu, loop_buffer, 1cycle, C64XP, 2731 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP, 2732 FIX4(FIX(s, 0), FIX(op, 0xd), FIX(csta, 0), RAN(cstb, 0, 13)), 2733 OP1(OACST), 2734 ENC1(ENC(cstb, ucst_minus_one, 0))) 2735 2736INSN(sploopw, nfu, loop_buffer, 1cycle, C64XP, 2737 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP, 2738 FIX4(FIX(s, 0), FIX(op, 0xf), FIX(csta, 0), RAN(cstb, 0, 13)), 2739 OP1(OACST), 2740 ENC1(ENC(cstb, ucst_minus_one, 0))) 2741 2742/* 16 bits insn */ 2743INSN(sploop, nfu, uspl, 1cycle, C64XP, 2744 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP, 2745 FIX1(FIX(op, 0)), 2746 OP1(OACST), 2747 ENC1(ENC(ii, ucst_minus_one, 0))) 2748 2749INSN(sploopd, nfu, uspl, 1cycle, C64XP, 2750 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP, 2751 FIX1(FIX(op, 1)), 2752 OP1(OACST), 2753 ENC1(ENC(ii, ucst_minus_one, 0))) 2754 2755INSN(sploopd, nfu, uspldr, 1cycle, C64XP, 2756 TIC6X_FLAG_FIRST|TIC6X_FLAG_NO_MCNOP|TIC6X_FLAG_SPLOOP|TIC6X_FLAG_INSN16_SPRED, 2757 FIX0(), 2758 OP1(OACST), 2759 ENC1(ENC(ii, ucst_minus_one, 0))) 2760/**/ 2761 2762 2763/* Contrary to SPRUFE8, this is the correct encoding for this 2764 instruction. */ 2765INSN(spmask, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK, 2766 FIX2(FIX(s, 0), FIX(op, 0x8)), 2767 OP1(OFULIST), 2768 ENC1(ENC(mask, spmask, 0))) 2769 2770/* 16 bits insn */ 2771INSN(spmask, nfu, uspma, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK, 2772 FIX0(), 2773 OP1(OFULIST), 2774 ENC1(ENC(mask, spmask, 0))) 2775/**/ 2776 2777INSN(spmaskr, nfu, spmask, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK, 2778 FIX2(FIX(s, 0), FIX(op, 0x9)), 2779 OP1(OFULIST), 2780 ENC1(ENC(mask, spmask, 0))) 2781 2782/* 16 bits insn */ 2783INSN(spmaskr, nfu, uspmb, 1cycle, C64XP, TIC6X_FLAG_FIRST|TIC6X_FLAG_SPMASK, 2784 FIX0(), 2785 OP1(OFULIST), 2786 ENC1(ENC(mask, spmask, 0))) 2787/**/ 2788 2789INSN(sptrunc, l, 1_or_2_src, 4cycle, C67X, 0, 2790 FIX2(FIX(op, 0x0b), FIX(src1, 0)), 2791 OP2(ORXREG1, OWREG4), 2792 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2793 ENC(dst, reg, 1))) 2794 2795INSNE(sshl, s_xsi_ui_si, s, 1_or_2_src, 1cycle, C62X, 0, 2796 FIX1(FIX(op, 0x23)), 2797 OP3(ORXREG1, ORREG1, OWREG1), 2798 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2799 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2800INSNE(sshl, s_xsi_u5_si, s, 1_or_2_src, 1cycle, C62X, 0, 2801 FIX1(FIX(op, 0x22)), 2802 OP3(ORXREG1, OACST, OWREG1), 2803 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2804 ENC(src1, ucst, 1), ENC(dst, reg, 2))) 2805 2806/* 16 bits insn */ 2807INSN(sshl, s, ssh5_sat_1, 1cycle, C64XP, 2808 TIC6X_FLAG_NO_CROSS, 2809 FIX1(FIX(op, 0x2)), 2810 OP3(ORREG1, OACST, OWREG1), 2811 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), 2812 ENC(cst, ucst, 1), ENC(srcdst, reg, 2))) 2813INSN(sshl, s, s2sh, 1cycle, C64XP, 0, 2814 FIX1(FIX(op, 0x3)), 2815 OP3(ORREG1, ORREG1, OWREG1), 2816 ENC4(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(src1, reg, 1), 2817 ENC(srcdst, reg, 2))) 2818/**/ 2819 2820INSN(sshvl, m, compound, 1616_m, C64X, 0, 2821 FIX1(FIX(op, 0x1c)), 2822 OP3(ORXREG1, ORREG1, OWREG2), 2823 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2824 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2825 2826/* Contrary to SPRUFE8, this is the correct encoding for this 2827 instruction. */ 2828INSN(sshvr, m, compound, 1616_m, C64X, 0, 2829 FIX1(FIX(op, 0x1a)), 2830 OP3(ORXREG1, ORREG1, OWREG2), 2831 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 2832 ENC(src1, reg, 1), ENC(dst, reg, 2))) 2833 2834INSNE(ssub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 2835 FIX1(FIX(op, 0x0f)), 2836 OP3(ORREG1, ORXREG1, OWREG1), 2837 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2838 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2839INSNE(ssub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0), 2840 FIX1(FIX(op, 0x1f)), 2841 OP3(ORXREG1, ORREG1, OWREG1), 2842 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2843 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2844INSNE(ssub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 2845 FIX1(FIX(op, 0x0e)), 2846 OP3(OACST, ORXREG1, OWREG1), 2847 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2848 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2849INSNE(ssub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 2850 FIX1(FIX(op, 0x2c)), 2851 OP3(OACST, ORREGL1, OWREGL1), 2852 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 2853 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2854 2855/* 16 bits insn */ 2856INSN(ssub, l, l3_sat_1, 1cycle, C64XP, 0, 2857 FIX1(FIX(op, 1)), 2858 OP3(ORREG1, ORXREG1, OWREG1), 2859 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2860 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2861/**/ 2862 2863INSN(ssub2, l, 1_or_2_src, 1cycle, C64XP, 0, 2864 FIX1(FIX(op, 0x64)), 2865 OP3(ORREG1, ORXREG1, OWREG1), 2866 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 2867 ENC(src2, reg, 1), ENC(dst, reg, 2))) 2868 2869INSN(stb, d, load_store, store, C62X, 2870 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 2871 FIX2(FIX(op, 3), FIX(r, 0)), 2872 OP2(ORDREG1, OWMEMSB), 2873 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 2874 ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1), 2875 ENC(srcdst, reg, 0))) 2876INSN(stb, d, load_store_long, store, C62X, 2877 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 2878 FIX1(FIX(op, 3)), 2879 OP2(ORDREG1, OWMEMLB), 2880 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_byte, 1), 2881 ENC(dst, reg, 0))) 2882 2883/* 16 bits insn */ 2884INSN(stb, d, doff4_dsz_000, store, C64XP, 2885 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 2886 FIX2(FIX(op, 0), FIX(sz, 1)), 2887 OP2(ORTREG1, OWMEMSB), 2888 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2889 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 2890INSN(stb, d, doff4_dsz_x01, store, C64XP, 2891 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 2892 FIX2(FIX(op, 0), FIX(sz, 1)), 2893 OP2(ORTREG1, OWMEMSB), 2894 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2895 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 2896INSN(stb, d, dind_dsz_000, store, C64XP, 2897 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 2898 FIX2(FIX(op, 0), FIX(sz, 1)), 2899 OP2(ORTREG1, OWMEMSB), 2900 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1), 2901 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0))) 2902INSN(stb, d, dind_dsz_x01, store, C64XP, 2903 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 2904 FIX2(FIX(op, 0), FIX(sz, 1)), 2905 OP2(ORTREG1, OWMEMSB), 2906 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1), 2907 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg, 0))) 2908INSN(stb, d, dinc_dsz_000, store, C64XP, 2909 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 2910 FIX2(FIX(op, 0), FIX(sz, 1)), 2911 OP2(ORTREG1, OWMEMSB), 2912 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2913 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2914INSN(stb, d, dinc_dsz_x01, store, C64XP, 2915 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 2916 FIX2(FIX(op, 0), FIX(sz, 1)), 2917 OP2(ORTREG1, OWMEMSB), 2918 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2919 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2920INSN(stb, d, ddec_dsz_000, store, C64XP, 2921 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 2922 FIX2(FIX(op, 0), FIX(sz, 1)), 2923 OP2(ORTREG1, OWMEMSB), 2924 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2925 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2926INSN(stb, d, ddec_dsz_x01, store, C64XP, 2927 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 2928 FIX2(FIX(op, 0), FIX(sz, 1)), 2929 OP2(ORTREG1, OWMEMSB), 2930 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2931 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2932/**/ 2933 2934INSN(stdw, d, load_store, store, C64X, TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS, 2935 FIX2(FIX(op, 4), FIX(r, 1)), 2936 OP2(ORDREGD1, OWMEMSD), 2937 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 2938 ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1), 2939 ENC(srcdst, reg, 0))) 2940 2941/* 16 bits insn */ 2942INSN(stdw, d, dpp, store, C64XP, 2943 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS, 2944 FIX3(FIX(op, 0), FIX(dw, 1), FIX(s, 1)), 2945 OP2(ORTREGD1, OWMEMSD), 2946 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2947 ENC(cst, mem_offset_minus_one, 1))) 2948INSN(stdw, d, ddecdw, store, C64XP, 2949 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 2950 FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)), 2951 OP2(ORTREGD1, OWMEMSD), 2952 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0), 2953 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2954INSN(stdw, d, dincdw, store, C64XP, 2955 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 2956 FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)), 2957 OP2(ORTREGD1, OWMEMSD), 2958 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0), 2959 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 2960INSN(stdw, d, dinddw, store, C64XP, 2961 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 2962 FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)), 2963 OP2(ORTREGD1, OWMEMSD), 2964 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset, 1), 2965 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0))) 2966INSN(stdw, d, doff4dw, store, C64XP, 2967 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 2968 FIX3(FIX(op, 0), FIX(na, 0), FIX(sz, 0)), 2969 OP2(ORTREGD1, OWMEMSD), 2970 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset, 1), 2971 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0))) 2972/**/ 2973 2974INSN(sth, d, load_store, store, C62X, 2975 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 2976 FIX2(FIX(op, 5), FIX(r, 0)), 2977 OP2(ORDREG1, OWMEMSH), 2978 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 2979 ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1), 2980 ENC(srcdst, reg, 0))) 2981INSN(sth, d, load_store_long, store, C62X, 2982 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 2983 FIX1(FIX(op, 5)), 2984 OP2(ORDREG1, OWMEMLH), 2985 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_half, 1), 2986 ENC(dst, reg, 0))) 2987 2988/* 16 bits insn */ 2989INSN(sth, d, doff4_dsz_01x, store, C64XP, 2990 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 2991 FIX2(FIX(op, 0), FIX(sz, 1)), 2992 OP2(ORTREG1, OWMEMSH), 2993 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 2994 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 2995INSN(sth, d, doff4_dsz_111, store, C64XP, 2996 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 2997 FIX2(FIX(op, 0), FIX(sz, 1)), 2998 OP2(ORTREG1, OWMEMSH), 2999 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3000 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 3001INSN(sth, d, dind_dsz_01x, store, C64XP, 3002 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3003 FIX2(FIX(op, 0), FIX(sz, 1)), 3004 OP2(ORTREG1, OWMEMSH), 3005 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3006 ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1))) 3007INSN(sth, d, dind_dsz_111, store, C64XP, 3008 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3009 FIX2(FIX(op, 0), FIX(sz, 1)), 3010 OP2(ORTREG1, OWMEMSH), 3011 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3012 ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1))) 3013INSN(sth, d, dinc_dsz_01x, store, C64XP, 3014 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3015 FIX2(FIX(op, 0), FIX(sz, 1)), 3016 OP2(ORTREG1, OWMEMSH), 3017 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3018 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3019INSN(sth, d, dinc_dsz_111, store, C64XP, 3020 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3021 FIX2(FIX(op, 0), FIX(sz, 1)), 3022 OP2(ORTREG1, OWMEMSH), 3023 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3024 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3025INSN(sth, d, ddec_dsz_01x, store, C64XP, 3026 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3027 FIX2(FIX(op, 0), FIX(sz, 1)), 3028 OP2(ORTREG1, OWMEMSH), 3029 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3030 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3031INSN(sth, d, ddec_dsz_111, store, C64XP, 3032 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3033 FIX2(FIX(op, 0), FIX(sz, 1)), 3034 OP2(ORTREG1, OWMEMSH), 3035 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3036 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3037/**/ 3038 3039INSN(stndw, d, store_nonaligned, store, C64X, 3040 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED, 3041 FIX0(), 3042 OP2(ORDREGD1, OWMEMND), 3043 ENC7(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 3044 ENC(offsetR, mem_offset_noscale, 1), ENC(baseR, reg, 1), 3045 ENC(sc, scaled, 1), ENC(src, reg_shift, 0))) 3046 3047/* 16 bits insn */ 3048INSN(stndw, d, ddecdw, store, C64XP, 3049 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3050 FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)), 3051 OP2(ORTREGD1, OWMEMND), 3052 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0), 3053 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1))) 3054INSN(stndw, d, dincdw, store, C64XP, 3055 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3056 FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)), 3057 OP2(ORTREGD1, OWMEMND), 3058 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg_shift, 0), 3059 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one_noscale, 1))) 3060INSN(stndw, d, dinddw, store, C64XP, 3061 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3062 FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)), 3063 OP2(ORTREGD1, OWMEMND), 3064 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(src1, mem_offset_noscale, 1), 3065 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0))) 3066INSN(stndw, d, doff4dw, store, C64XP, 3067 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 3068 FIX3(FIX(op, 0), FIX(na, 1), FIX(sz, 0)), 3069 OP2(ORTREGD1, OWMEMND), 3070 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(cst, mem_offset_noscale, 1), 3071 ENC(ptr, reg_ptr, 1), ENC(srcdst, reg_shift, 0))) 3072/**/ 3073 3074INSN(stnw, d, load_store, store, C64X, 3075 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_UNALIGNED, 3076 FIX2(FIX(op, 5), FIX(r, 1)), 3077 OP2(ORDREG1, OWMEMSW), 3078 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 3079 ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1), 3080 ENC(srcdst, reg, 0))) 3081 3082/* 16 bits insn */ 3083INSN(stnw, d, doff4_dsz_110, store, C64XP, 3084 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 3085 FIX2(FIX(op, 0), FIX(sz, 1)), 3086 OP2(ORTREG1, OWMEMSW), 3087 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3088 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 3089INSN(stnw, d, dind_dsz_110, store, C64XP, 3090 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3091 FIX2(FIX(op, 0), FIX(sz, 1)), 3092 OP2(ORTREG1, OWMEMSW), 3093 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3094 ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1))) 3095INSN(stnw, d, dinc_dsz_110, store, C64XP, 3096 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3097 FIX2(FIX(op, 0), FIX(sz, 1)), 3098 OP2(ORTREG1, OWMEMSW), 3099 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3100 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3101INSN(stnw, d, ddec_dsz_110, store, C64XP, 3102 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3103 FIX2(FIX(op, 0), FIX(sz, 1)), 3104 OP2(ORTREG1, OWMEMSW), 3105 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3106 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3107/**/ 3108 3109INSN(stw, d, load_store, store, C62X, 3110 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 3111 FIX2(FIX(op, 7), FIX(r, 0)), 3112 OP2(ORDREG1, OWMEMSW), 3113 ENC6(ENC(s, data_fu, 0), ENC(y, fu, 0), ENC(mode, mem_mode, 1), 3114 ENC(offsetR, mem_offset, 1), ENC(baseR, reg, 1), 3115 ENC(srcdst, reg, 0))) 3116INSN(stw, d, load_store_long, store, C62X, 3117 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_SIDE_B_ONLY|TIC6X_FLAG_PREFER(0), 3118 FIX1(FIX(op, 7)), 3119 OP2(ORDREG1, OWMEMLW), 3120 ENC4(ENC(s, data_fu, 0), ENC(y, areg, 1), ENC(offsetR, ulcst_dpr_word, 1), 3121 ENC(dst, reg, 0))) 3122 3123/* 16 bits insn */ 3124INSN(stw, d, doff4_dsz_0xx, store, C64XP, 3125 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 3126 FIX2(FIX(op, 0), FIX(sz, 0)), 3127 OP2(ORTREG1, OWMEMSW), 3128 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3129 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 3130INSN(stw, d, doff4_dsz_100, store, C64XP, 3131 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE), 3132 FIX2(FIX(op, 0), FIX(sz, 1)), 3133 OP2(ORTREG1, OWMEMSW), 3134 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3135 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset, 1))) 3136INSN(stw, d, dind_dsz_0xx, store, C64XP, 3137 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3138 FIX2(FIX(op, 0), FIX(sz, 0)), 3139 OP2(ORTREG1, OWMEMSW), 3140 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3141 ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1))) 3142INSN(stw, d, dind_dsz_100, store, C64XP, 3143 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(REG_POSITIVE), 3144 FIX2(FIX(op, 0), FIX(sz, 1)), 3145 OP2(ORTREG1, OWMEMSW), 3146 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3147 ENC(ptr, reg_ptr, 1), ENC(src1, mem_offset, 1))) 3148INSN(stw, d, dinc_dsz_0xx, store, C64XP, 3149 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3150 FIX2(FIX(op, 0), FIX(sz, 0)), 3151 OP2(ORTREG1, OWMEMSW), 3152 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3153 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3154INSN(stw, d, dinc_dsz_100, store, C64XP, 3155 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTINCR), 3156 FIX2(FIX(op, 0), FIX(sz, 1)), 3157 OP2(ORTREG1, OWMEMSW), 3158 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3159 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3160INSN(stw, d, ddec_dsz_0xx, store, C64XP, 3161 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3162 FIX2(FIX(op, 0), FIX(sz, 0)), 3163 OP2(ORTREG1, OWMEMSW), 3164 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3165 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3166INSN(stw, d, ddec_dsz_100, store, C64XP, 3167 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(PREDECR), 3168 FIX2(FIX(op, 0), FIX(sz, 1)), 3169 OP2(ORTREG1, OWMEMSW), 3170 ENC5(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3171 ENC(ptr, reg_ptr, 1), ENC(cst, mem_offset_minus_one, 1))) 3172INSN(stw, d, dpp, store, C64XP, 3173 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSTDECR)|TIC6X_FLAG_INSN16_B15PTR|TIC6X_FLAG_INSN16_NORS, 3174 FIX2(FIX(op, 0), FIX(dw, 0)), 3175 OP2(ORTREG1, OWMEMSW), 3176 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3177 ENC(cst, mem_offset_minus_one, 1))) 3178INSN(stw, d, dstk, store, C64XP, 3179 TIC6X_FLAG_STORE|TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_INSN16_MEM_MODE(POSITIVE)|TIC6X_FLAG_INSN16_B15PTR, 3180 FIX2(FIX(op, 0x0), FIX(s, 1)), 3181 OP2(ORTREG1, OWMEMSW), 3182 ENC4(ENC(s, fu, 0), ENC(t, rside, 0), ENC(srcdst, reg, 0), 3183 ENC(cst, mem_offset, 1))) 3184/**/ 3185 3186INSNE(sub, l_si_xsi_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 3187 FIX1(FIX(op, 0x07)), 3188 OP3(ORREG1, ORXREG1, OWREG1), 3189 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3190 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3191INSNE(sub, l_xsi_si_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0), 3192 FIX1(FIX(op, 0x17)), 3193 OP3(ORXREG1, ORREG1, OWREG1), 3194 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3195 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3196INSNE(sub, l_si_xsi_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 3197 FIX1(FIX(op, 0x27)), 3198 OP3(ORREG1, ORXREG1, OWREGL1), 3199 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3200 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3201INSNE(sub, l_xsi_si_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0), 3202 FIX1(FIX(op, 0x37)), 3203 OP3(ORXREG1, ORREG1, OWREGL1), 3204 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3205 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3206INSNE(sub, l_s5_xsi_si, l, 1_or_2_src, 1cycle, C62X, 0, 3207 FIX1(FIX(op, 0x06)), 3208 OP3(OACST, ORXREG1, OWREG1), 3209 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3210 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3211INSNE(sub, l_s5_sl_sl, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3212 FIX1(FIX(op, 0x24)), 3213 OP3(OACST, ORREGL1, OWREGL1), 3214 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3215 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3216INSNE(sub, l_xsi_s5_si, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 3217 FIX1(FIX(op, 0x2)), 3218 OP3(ORXREG1, OACST, OWREG1), 3219 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1), 3220 ENC(src2, reg, 0), ENC(dst, reg, 2))) 3221INSNE(sub, l_sl_s5_sl, l, 1_or_2_src, 1cycle, C62X, 3222 TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS, 3223 FIX2(FIX(op, 0x20), FIX(x, 0)), 3224 OP3(ORREGL1, OACST, OWREGL1), 3225 ENC4(ENC(s, fu, 0), ENC(src1, scst_negate, 1), ENC(src2, reg, 0), 3226 ENC(dst, reg, 2))) 3227INSNE(sub, s_si_xsi_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 3228 FIX1(FIX(op, 0x17)), 3229 OP3(ORREG1, ORXREG1, OWREG1), 3230 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3231 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3232INSNE(sub, s_s5_xsi_si, s, 1_or_2_src, 1cycle, C62X, 0, 3233 FIX1(FIX(op, 0x16)), 3234 OP3(OACST, ORXREG1, OWREG1), 3235 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3236 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3237/* Contrary to SPRUFE8, this is the correct encoding for this 3238 instruction; this instruction can be predicated. */ 3239INSNE(sub, s_xsi_si_si, s, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0), 3240 FIX1(FIX(op, 0x5)), 3241 OP3(ORXREG1, ORREG1, OWREG1), 3242 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3243 ENC(src1, reg, 1), ENC(dst, reg, 2))) 3244INSNE(sub, s_xsi_s5_si, s, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_MACRO, 3245 FIX1(FIX(op, 0x6)), 3246 OP3(ORXREG1, OACST, OWREG1), 3247 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst_negate, 1), 3248 ENC(src2, reg, 0), ENC(dst, reg, 2))) 3249INSNE(sub, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, 3250 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_PREFER(1), 3251 FIX1(FIX(op, 0x11)), 3252 OP3(ORREG1, ORREG1, OWREG1), 3253 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 3254 ENC(dst, reg, 2))) 3255INSNE(sub, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3256 FIX1(FIX(op, 0x13)), 3257 OP3(ORREG1, OACST, OWREG1), 3258 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 3259 ENC(dst, reg, 2))) 3260INSNE(sub, d_si_xsi_si, d, ext_1_or_2_src, 1cycle, C64X, TIC6X_FLAG_PREFER(0), 3261 FIX1(FIX(op, 0xc)), 3262 OP3(ORREG1, ORXREG1, OWREG1), 3263 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3264 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3265 3266/* 16 bits insn */ 3267INSN(sub, l, l3_sat_0, 1cycle, C64XP, 0, 3268 FIX1(FIX(op, 0x1)), 3269 OP3(ORREG1, ORXREG1, OWREG1), 3270 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3271 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3272INSN(sub, l, lx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3273 FIX1(FIX(op, 0x2)), 3274 OP3(OHWCST0, ORREG1, OWREG1), 3275 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2))) 3276INSN(sub, s, sx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3277 FIX1(FIX(op, 0x2)), 3278 OP3(OHWCST0, ORREG1, OWREG1), 3279 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 1), ENC(srcdst, reg, 2))) 3280INSN(sub, s, sx2op, 1cycle, C64XP, 0, 3281 FIX1(FIX(op, 0x1)), 3282 OP3(ORREG1, ORXREG1, OWREG1), 3283 ENC5(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2), 3284 ENC(src2, reg, 1), ENC(x, xpath, 1))) 3285INSN(sub, s, s3_sat_x, 1cycle, C64XP, 0, 3286 FIX1(FIX(op, 0x1)), 3287 OP3(ORREG1, ORXREG1, OWREG1), 3288 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3289 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3290INSN(sub, d, dx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3291 FIX1(FIX(op, 0x3)), 3292 OP3(ORREG1, OHWCST1, OWREG1), 3293 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 3294INSN(sub, d, dx2op, 1cycle, C64XP, 0, 3295 FIX1(FIX(op, 0x1)), 3296 OP3(ORREG1, ORXREG1, OWREG1), 3297 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(srcdst, reg, 0), 3298 ENC(src2, reg, 1), ENC(srcdst, reg, 2))) 3299/**/ 3300 3301INSNE(subab, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3302 FIX1(FIX(op, 0x31)), 3303 OP3(ORREG1, ORREG1, OWREG1), 3304 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 3305 ENC(dst, reg, 2))) 3306INSNE(subab, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3307 FIX1(FIX(op, 0x33)), 3308 OP3(ORREG1, OACST, OWREG1), 3309 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 3310 ENC(dst, reg, 2))) 3311 3312INSN(subabs4, l, 1_or_2_src, 1cycle, C64X, 0, 3313 FIX1(FIX(op, 0x5a)), 3314 OP3(ORREG1, ORXREG1, OWREG1), 3315 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3316 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3317 3318INSNE(subah, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3319 FIX1(FIX(op, 0x35)), 3320 OP3(ORREG1, ORREG1, OWREG1), 3321 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 3322 ENC(dst, reg, 2))) 3323INSNE(subah, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3324 FIX1(FIX(op, 0x37)), 3325 OP3(ORREG1, OACST, OWREG1), 3326 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 3327 ENC(dst, reg, 2))) 3328 3329INSNE(subaw, d_si_si_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3330 FIX1(FIX(op, 0x39)), 3331 OP3(ORREG1, ORREG1, OWREG1), 3332 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, reg, 1), 3333 ENC(dst, reg, 2))) 3334INSNE(subaw, d_si_u5_si, d, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_NO_CROSS, 3335 FIX1(FIX(op, 0x3b)), 3336 OP3(ORREG1, OACST, OWREG1), 3337 ENC4(ENC(s, fu, 0), ENC(src2, reg, 0), ENC(src1, ucst, 1), 3338 ENC(dst, reg, 2))) 3339 3340/* 16 bits insn */ 3341INSN(subaw, d, dx5p, 1cycle, C64XP, 0, 3342 FIX1(FIX(op, 1)), 3343 OP3(ORB15REG1, OACST, OWB15REG1), 3344 ENC2(ENC(s, fu, 0), ENC(cst, ucst, 1))) 3345/**/ 3346 3347INSN(subc, l, 1_or_2_src, 1cycle, C62X, 0, 3348 FIX1(FIX(op, 0x4b)), 3349 OP3(ORREG1, ORXREG1, OWREG1), 3350 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3351 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3352 3353INSNE(subdp, l_dp_xdp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(1), 3354 FIX1(FIX(op, 0x19)), 3355 OP3(ORREGD12, ORXREGD12, OWREGD67), 3356 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3357 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3358INSNE(subdp, l_xdp_dp_dp, l, 1_or_2_src, addsubdp, C67X, TIC6X_FLAG_PREFER(0), 3359 FIX1(FIX(op, 0x1d)), 3360 OP3(ORXREGD12, ORREGD12, OWREGD67), 3361 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3362 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3363INSNE(subdp, s_dp_xdp_dp, s, l_1_or_2_src, addsubdp, C67XP, 3364 TIC6X_FLAG_PREFER(1), 3365 FIX1(FIX(op, 0x73)), 3366 OP3(ORREGD12, ORXREGD12, OWREGD67), 3367 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3368 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3369INSNE(subdp, s_xdp_dp_dp, s, l_1_or_2_src, addsubdp, C67XP, 3370 TIC6X_FLAG_PREFER(0), 3371 FIX1(FIX(op, 0x77)), 3372 OP3(ORXREGD12, ORREGD12, OWREGD67), 3373 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3374 ENC(src1, reg, 1), ENC(dst, reg, 2))) 3375 3376INSNE(subsp, l_sp_xsp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(1), 3377 FIX1(FIX(op, 0x11)), 3378 OP3(ORREG1, ORXREG1, OWREG4), 3379 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3380 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3381INSNE(subsp, l_xsp_sp_sp, l, 1_or_2_src, 4cycle, C67X, TIC6X_FLAG_PREFER(0), 3382 FIX1(FIX(op, 0x15)), 3383 OP3(ORXREG1, ORREG1, OWREG4), 3384 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3385 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3386INSNE(subsp, s_sp_xsp_sp, s, l_1_or_2_src, 4cycle, C67XP, 3387 TIC6X_FLAG_PREFER(1), 3388 FIX1(FIX(op, 0x71)), 3389 OP3(ORREG1, ORXREG1, OWREG4), 3390 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3391 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3392INSNE(subsp, s_xsp_sp_sp, s, l_1_or_2_src, 4cycle, C67XP, 3393 TIC6X_FLAG_PREFER(0), 3394 FIX1(FIX(op, 0x75)), 3395 OP3(ORXREG1, ORREG1, OWREG4), 3396 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3397 ENC(src1, reg, 1), ENC(dst, reg, 2))) 3398 3399INSNE(subu, l_ui_xui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(1), 3400 FIX1(FIX(op, 0x2f)), 3401 OP3(ORREG1, ORXREG1, OWREGL1), 3402 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3403 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3404INSNE(subu, l_xui_ui_ul, l, 1_or_2_src, 1cycle, C62X, TIC6X_FLAG_PREFER(0), 3405 FIX1(FIX(op, 0x3f)), 3406 OP3(ORXREG1, ORREG1, OWREGL1), 3407 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3408 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3409 3410INSN(sub2, l, 1_or_2_src, 1cycle, C64X, 0, 3411 FIX1(FIX(op, 0x04)), 3412 OP3(ORREG1, ORXREG1, OWREG1), 3413 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3414 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3415INSN(sub2, s, 1_or_2_src, 1cycle, C62X, 0, 3416 FIX1(FIX(op, 0x11)), 3417 OP3(ORREG1, ORXREG1, OWREG1), 3418 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3419 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3420INSN(sub2, d, ext_1_or_2_src, 1cycle, C64X, 0, 3421 FIX1(FIX(op, 0x5)), 3422 OP3(ORREG1, ORXREG1, OWREG1), 3423 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3424 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3425 3426INSN(sub4, l, 1_or_2_src, 1cycle, C64X, 0, 3427 FIX1(FIX(op, 0x66)), 3428 OP3(ORREG1, ORXREG1, OWREG1), 3429 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3430 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3431 3432INSN(swap2, l, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS, 3433 FIX2(FIX(op, 0x1b), FIX(x, 0)), 3434 OP2(ORREG1, OWREG1), 3435 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3436 ENC(src2, reg, 0), ENC(dst, reg, 1))) 3437INSN(swap2, s, 1_or_2_src, 1cycle, C64X, TIC6X_FLAG_MACRO|TIC6X_FLAG_NO_CROSS, 3438 FIX2(FIX(op, 0x10), FIX(x, 0)), 3439 OP2(ORREG1, OWREG1), 3440 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3441 ENC(src2, reg, 0), ENC(dst, reg, 1))) 3442 3443/* Contrary to SPRUFE8, this is the correct encoding for this 3444 instruction. */ 3445INSN(swap4, l, unary, 1cycle, C64X, 0, 3446 FIX1(FIX(op, 0x1)), 3447 OP2(ORXREG1, OWREG1), 3448 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3449 ENC(dst, reg, 1))) 3450 3451INSN(swe, nfu, swe, 1cycle, C64XP, 0, 3452 FIX1(FIX(s, 0)), 3453 OP0(), 3454 ENC0()) 3455 3456INSN(swenr, nfu, swenr, 1cycle, C64XP, 0, 3457 FIX1(FIX(s, 0)), 3458 OP0(), 3459 ENC0()) 3460 3461INSN(unpkhu4, l, unary, 1cycle, C64X, 0, 3462 FIX1(FIX(op, 0x03)), 3463 OP2(ORXREG1, OWREG1), 3464 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3465 ENC(dst, reg, 1))) 3466INSN(unpkhu4, s, unary, 1cycle, C64X, 0, 3467 FIX1(FIX(op, 0x03)), 3468 OP2(ORXREG1, OWREG1), 3469 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3470 ENC(dst, reg, 1))) 3471 3472INSN(unpklu4, l, unary, 1cycle, C64X, 0, 3473 FIX1(FIX(op, 0x02)), 3474 OP2(ORXREG1, OWREG1), 3475 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3476 ENC(dst, reg, 1))) 3477INSN(unpklu4, s, unary, 1cycle, C64X, 0, 3478 FIX1(FIX(op, 0x02)), 3479 OP2(ORXREG1, OWREG1), 3480 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3481 ENC(dst, reg, 1))) 3482 3483INSNE(xor, l_ui_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 3484 FIX1(FIX(op, 0x6f)), 3485 OP3(ORREG1, ORXREG1, OWREG1), 3486 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3487 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3488INSNE(xor, l_s5_xui_ui, l, 1_or_2_src, 1cycle, C62X, 0, 3489 FIX1(FIX(op, 0x6e)), 3490 OP3(OACST, ORXREG1, OWREG1), 3491 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3492 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3493INSNE(xor, s_ui_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 3494 FIX1(FIX(op, 0x0b)), 3495 OP3(ORREG1, ORXREG1, OWREG1), 3496 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3497 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3498INSNE(xor, s_s5_xui_ui, s, 1_or_2_src, 1cycle, C62X, 0, 3499 FIX1(FIX(op, 0x0a)), 3500 OP3(OACST, ORXREG1, OWREG1), 3501 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3502 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3503INSNE(xor, d_ui_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 3504 FIX1(FIX(op, 0xe)), 3505 OP3(ORREG1, ORXREG1, OWREG1), 3506 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3507 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3508INSNE(xor, d_s5_xui_ui, d, ext_1_or_2_src, 1cycle, C64X, 0, 3509 FIX1(FIX(op, 0xf)), 3510 OP3(OACST, ORXREG1, OWREG1), 3511 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, scst, 0), 3512 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3513 3514/* 16 bits insn */ 3515INSN(xor, l, l2c, 1cycle, C64XP, 0, 3516 FIX1(FIX(op, 0x2)), 3517 OP3(ORREG1, ORXREG1, OWREG1NORS), 3518 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3519 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3520INSNU(xor, l, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3521 FIX2(FIX(op, 0x7), FIX(unit, 0x0)), 3522 OP3(ORREG1, OHWCST1, OWREG1), 3523 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 3524INSNU(xor, s, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3525 FIX2(FIX(op, 0x7), FIX(unit, 0x1)), 3526 OP3(ORREG1, OHWCST1, OWREG1), 3527 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 3528INSNU(xor, d, lsdx1, 1cycle, C64XP, TIC6X_FLAG_NO_CROSS, 3529 FIX2(FIX(op, 0x7), FIX(unit, 0x2)), 3530 OP3(ORREG1, OHWCST1, OWREG1), 3531 ENC3(ENC(s, fu, 0), ENC(srcdst, reg, 0), ENC(srcdst, reg, 2))) 3532/**/ 3533 3534INSN(xormpy, m, 1_or_2_src, 4cycle, C64XP, 0, 3535 FIX1(FIX(op, 0x1b)), 3536 OP3(ORREG1, ORXREG1, OWREG4), 3537 ENC5(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src1, reg, 0), 3538 ENC(src2, reg, 1), ENC(dst, reg, 2))) 3539 3540INSN(xpnd2, m, unary, 1616_m, C64X, 0, 3541 FIX1(FIX(op, 0x19)), 3542 OP2(ORXREG1, OWREG2), 3543 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3544 ENC(dst, reg, 1))) 3545 3546INSN(xpnd4, m, unary, 1616_m, C64X, 0, 3547 FIX1(FIX(op, 0x18)), 3548 OP2(ORXREG1, OWREG2), 3549 ENC4(ENC(s, fu, 0), ENC(x, xpath, 0), ENC(src2, reg, 0), 3550 ENC(dst, reg, 1))) 3551 3552INSN(zero, s, mvk, 1cycle, C62X, TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 3553 FIX2(FIX(h, 0), FIX(cst, 0)), 3554 OP1(OWREG1), 3555 ENC2(ENC(s, fu, 0), ENC(dst, reg, 0))) 3556INSN(zero, l, unary, 1cycle, C64X, 3557 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1), 3558 FIX3(FIX(x, 0), FIX(op, 0x05), FIX(src2, 0)), 3559 OP1(OWREG1), 3560 ENC2(ENC(s, fu, 0), ENC(dst, reg, 0))) 3561INSNE(zero, l_sub, l, 1_or_2_src, 1cycle, C62X, 3562 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0), 3563 FIX2(FIX(op, 0x07), FIX(x, 0)), 3564 OP1(OWREG1), 3565 ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0), 3566 ENC(dst, reg, 0))) 3567INSNE(zero, l_sub_sl, l, 1_or_2_src, 1cycle, C62X, 3568 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO, 3569 FIX2(FIX(op, 0x27), FIX(x, 0)), 3570 OP1(OWREGL1), 3571 ENC4(ENC(s, fu, 0), ENC(src1, reg_unused, 0), ENC(src2, reg_unused, 0), 3572 ENC(dst, reg, 0))) 3573INSNE(zero, d_mvk, d, 1_or_2_src, 1cycle, C64X, 3574 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(1), 3575 FIX3(FIX(op, 0x00), FIX(src1, 0), FIX(src2, 0)), 3576 OP1(OWREG1), 3577 ENC2(ENC(s, fu, 0), ENC(dst, reg, 0))) 3578INSNE(zero, d_sub, d, 1_or_2_src, 1cycle, C62X, 3579 TIC6X_FLAG_NO_CROSS|TIC6X_FLAG_MACRO|TIC6X_FLAG_PREFER(0), 3580 FIX1(FIX(op, 0x11)), 3581 OP1(OWREG1), 3582 ENC4(ENC(s, fu, 0), ENC(src2, reg_unused, 0), ENC(src1, reg_unused, 0), 3583 ENC(dst, reg, 0))) 3584 3585#undef TIC6X_INSN_C64X_AND_C67X 3586#undef tic6x_insn_format_nfu_s_branch_nop_cst 3587#undef tic6x_insn_format_s_l_1_or_2_src 3588#undef RAN 3589#undef FIX 3590#undef FIX0 3591#undef FIX1 3592#undef FIX2 3593#undef FIX3 3594#undef FIX4 3595#undef OP0 3596#undef OP1 3597#undef OP2 3598#undef OP3 3599#undef OP4 3600#undef OACST 3601#undef OLCST 3602#undef OHWCSTM1 3603#undef OHWCST0 3604#undef OHWCST1 3605#undef OHWCST5 3606#undef OHWCST16 3607#undef OHWCST24 3608#undef OHWCST31 3609#undef OFULIST 3610#undef ORIRP1 3611#undef ORNRP1 3612#undef OWREG1 3613#undef OWRETREG1 3614#undef ORREG1 3615#undef ORDREG1 3616#undef ORWREG1 3617#undef ORAREG1 3618#undef ORXREG1 3619#undef ORREG12 3620#undef ORREG14 3621#undef ORXREG14 3622#undef OWREG2 3623#undef OWREG4 3624#undef OWREG9 3625#undef OWDREG5 3626#undef OWREGL1 3627#undef ORREGL1 3628#undef OWREGD1 3629#undef ORTREG1 3630#undef ORTREGD1 3631#undef OWTREG5 3632#undef OWTREGD5 3633#undef OWREGD12 3634#undef OWREGD4 3635#undef ORREGD1 3636#undef OWREGD45 3637#undef OWREGD67 3638#undef ORDREGD1 3639#undef OWDREGD5 3640#undef ORREGD12 3641#undef ORXREGD12 3642#undef ORXREGD1234 3643#undef ORREGD1324 3644#undef OWREGD910 3645#undef OWILC1 3646#undef ORCREG1 3647#undef OWCREG1 3648#undef OWREG1Z 3649#undef ORB15REG1 3650#undef OWB15REG1 3651#undef ORMEMDW 3652#undef OWMEMDW 3653#undef ORMEMSB 3654#undef OWMEMSB 3655#undef ORMEMLB 3656#undef OWMEMLB 3657#undef ORMEMSH 3658#undef OWMEMSH 3659#undef ORMEMLH 3660#undef OWMEMLH 3661#undef ORMEMSW 3662#undef OWMEMSW 3663#undef ORMEMLW 3664#undef OWMEMLW 3665#undef ORMEMSD 3666#undef OWMEMSD 3667#undef ORMEMND 3668#undef OWMEMND 3669#undef ENC 3670#undef ENC0 3671#undef ENC1 3672#undef ENC2 3673#undef ENC3 3674#undef ENC4 3675#undef ENC5 3676#undef ENC6 3677#undef ENC7 3678