qemu/target/tricore/tricore-opcodes.h

1475 lines
67 KiB
C
Raw Normal View History

/*
* Copyright (c) 2012-2014 Bastian Koppelmann C-Lab/University Paderborn
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
#ifndef TARGET_TRICORE_TRICORE_OPCODES_H
#define TARGET_TRICORE_TRICORE_OPCODES_H
/*
* Opcode Masks for Tricore
* Format MASK_OP_InstrFormatName_Field
*/
/* This creates a mask with bits start .. end set to 1 and applies it to op */
#define MASK_BITS_SHIFT(op, start, end) (extract32(op, (start), \
(end) - (start) + 1))
#define MASK_BITS_SHIFT_SEXT(op, start, end) (sextract32(op, (start),\
(end) - (start) + 1))
/* new opcode masks */
#define MASK_OP_MAJOR(op) MASK_BITS_SHIFT(op, 0, 7)
/* 16-Bit Formats */
#define MASK_OP_SB_DISP8(op) MASK_BITS_SHIFT(op, 8, 15)
#define MASK_OP_SB_DISP8_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 8, 15)
#define MASK_OP_SBC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SBC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
#define MASK_OP_SBC_DISP4(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SBR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SBR_DISP4(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SBRN_N(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SBRN_DISP4(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SC_CONST8(op) MASK_BITS_SHIFT(op, 8, 15)
#define MASK_OP_SLR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SLR_D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SLRO_OFF4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SLRO_D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SR_OP2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SR_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SRC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SRC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
#define MASK_OP_SRC_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SRO_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SRO_OFF4(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SRR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SRR_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SRRS_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SRRS_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SRRS_N(op) MASK_BITS_SHIFT(op, 6, 7)
#define MASK_OP_SSR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SSR_S1(op) MASK_BITS_SHIFT(op, 8, 11)
#define MASK_OP_SSRO_OFF4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_SSRO_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* 32-Bit Formats */
/* ABS Format */
#define MASK_OP_ABS_OFF18(op) (MASK_BITS_SHIFT(op, 16, 21) + \
(MASK_BITS_SHIFT(op, 28, 31) << 6) + \
(MASK_BITS_SHIFT(op, 22, 25) << 10) +\
(MASK_BITS_SHIFT(op, 12, 15) << 14))
#define MASK_OP_ABS_OP2(op) MASK_BITS_SHIFT(op, 26, 27)
#define MASK_OP_ABS_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
/* ABSB Format */
#define MASK_OP_ABSB_OFF18(op) MASK_OP_ABS_OFF18(op)
#define MASK_OP_ABSB_OP2(op) MASK_BITS_SHIFT(op, 26, 27)
#define MASK_OP_ABSB_B(op) MASK_BITS_SHIFT(op, 11, 11)
#define MASK_OP_ABSB_BPOS(op) MASK_BITS_SHIFT(op, 8, 10)
/* B Format */
#define MASK_OP_B_DISP24(op) (MASK_BITS_SHIFT(op, 16, 31) + \
(MASK_BITS_SHIFT(op, 8, 15) << 16))
#define MASK_OP_B_DISP24_SEXT(op) (MASK_BITS_SHIFT(op, 16, 31) + \
(MASK_BITS_SHIFT_SEXT(op, 8, 15) << 16))
/* BIT Format */
#define MASK_OP_BIT_D(op) MASK_BITS_SHIFT(op, 28, 31)
#define MASK_OP_BIT_POS2(op) MASK_BITS_SHIFT(op, 23, 27)
#define MASK_OP_BIT_OP2(op) MASK_BITS_SHIFT(op, 21, 22)
#define MASK_OP_BIT_POS1(op) MASK_BITS_SHIFT(op, 16, 20)
#define MASK_OP_BIT_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_BIT_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* BO Format */
#define MASK_OP_BO_OFF10(op) (MASK_BITS_SHIFT(op, 16, 21) + \
(MASK_BITS_SHIFT(op, 28, 31) << 6))
#define MASK_OP_BO_OFF10_SEXT(op) (MASK_BITS_SHIFT(op, 16, 21) + \
(MASK_BITS_SHIFT_SEXT(op, 28, 31) << 6))
#define MASK_OP_BO_OP2(op) MASK_BITS_SHIFT(op, 22, 27)
#define MASK_OP_BO_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_BO_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
/* BOL Format */
#define MASK_OP_BOL_OFF16(op) ((MASK_BITS_SHIFT(op, 16, 21) + \
(MASK_BITS_SHIFT(op, 28, 31) << 6)) + \
(MASK_BITS_SHIFT(op, 22, 27) << 10))
#define MASK_OP_BOL_OFF16_SEXT(op) ((MASK_BITS_SHIFT(op, 16, 21) + \
(MASK_BITS_SHIFT(op, 28, 31) << 6)) + \
(MASK_BITS_SHIFT_SEXT(op, 22, 27) << 10))
#define MASK_OP_BOL_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_BOL_S1D(op) MASK_BITS_SHIFT(op, 8, 11)
/* BRC Format */
#define MASK_OP_BRC_OP2(op) MASK_BITS_SHIFT(op, 31, 31)
#define MASK_OP_BRC_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
#define MASK_OP_BRC_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
#define MASK_OP_BRC_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_BRC_CONST4_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 15)
#define MASK_OP_BRC_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* BRN Format */
#define MASK_OP_BRN_OP2(op) MASK_BITS_SHIFT(op, 31, 31)
#define MASK_OP_BRN_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
#define MASK_OP_BRN_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
#define MASK_OP_BRN_N(op) (MASK_BITS_SHIFT(op, 12, 15) + \
(MASK_BITS_SHIFT(op, 7, 7) << 4))
#define MASK_OP_BRN_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* BRR Format */
#define MASK_OP_BRR_OP2(op) MASK_BITS_SHIFT(op, 31, 31)
#define MASK_OP_BRR_DISP15(op) MASK_BITS_SHIFT(op, 16, 30)
#define MASK_OP_BRR_DISP15_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 16, 30)
#define MASK_OP_BRR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_BRR_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* META MASK for similar instr Formats */
#define MASK_OP_META_D(op) MASK_BITS_SHIFT(op, 28, 31)
#define MASK_OP_META_S1(op) MASK_BITS_SHIFT(op, 8, 11)
/* RC Format */
#define MASK_OP_RC_D(op) MASK_OP_META_D(op)
#define MASK_OP_RC_OP2(op) MASK_BITS_SHIFT(op, 21, 27)
#define MASK_OP_RC_CONST9(op) MASK_BITS_SHIFT(op, 12, 20)
#define MASK_OP_RC_CONST9_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 20)
#define MASK_OP_RC_S1(op) MASK_OP_META_S1(op)
/* RCPW Format */
#define MASK_OP_RCPW_D(op) MASK_OP_META_D(op)
#define MASK_OP_RCPW_POS(op) MASK_BITS_SHIFT(op, 23, 27)
#define MASK_OP_RCPW_OP2(op) MASK_BITS_SHIFT(op, 21, 22)
#define MASK_OP_RCPW_WIDTH(op) MASK_BITS_SHIFT(op, 16, 20)
#define MASK_OP_RCPW_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RCPW_S1(op) MASK_OP_META_S1(op)
/* RCR Format */
#define MASK_OP_RCR_D(op) MASK_OP_META_D(op)
#define MASK_OP_RCR_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RCR_OP2(op) MASK_BITS_SHIFT(op, 21, 23)
#define MASK_OP_RCR_CONST9(op) MASK_BITS_SHIFT(op, 12, 20)
#define MASK_OP_RCR_CONST9_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 20)
#define MASK_OP_RCR_S1(op) MASK_OP_META_S1(op)
/* RCRR Format */
#define MASK_OP_RCRR_D(op) MASK_OP_META_D(op)
#define MASK_OP_RCRR_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RCRR_OP2(op) MASK_BITS_SHIFT(op, 21, 23)
#define MASK_OP_RCRR_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RCRR_S1(op) MASK_OP_META_S1(op)
/* RCRW Format */
#define MASK_OP_RCRW_D(op) MASK_OP_META_D(op)
#define MASK_OP_RCRW_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RCRW_OP2(op) MASK_BITS_SHIFT(op, 21, 23)
#define MASK_OP_RCRW_WIDTH(op) MASK_BITS_SHIFT(op, 16, 20)
#define MASK_OP_RCRW_CONST4(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RCRW_S1(op) MASK_OP_META_S1(op)
/* RLC Format */
#define MASK_OP_RLC_D(op) MASK_OP_META_D(op)
#define MASK_OP_RLC_CONST16(op) MASK_BITS_SHIFT(op, 12, 27)
#define MASK_OP_RLC_CONST16_SEXT(op) MASK_BITS_SHIFT_SEXT(op, 12, 27)
#define MASK_OP_RLC_S1(op) MASK_OP_META_S1(op)
/* RR Format */
#define MASK_OP_RR_D(op) MASK_OP_META_D(op)
#define MASK_OP_RR_OP2(op) MASK_BITS_SHIFT(op, 20, 27)
#define MASK_OP_RR_N(op) MASK_BITS_SHIFT(op, 16, 17)
#define MASK_OP_RR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RR_S1(op) MASK_OP_META_S1(op)
/* RR1 Format */
#define MASK_OP_RR1_D(op) MASK_OP_META_D(op)
#define MASK_OP_RR1_OP2(op) MASK_BITS_SHIFT(op, 18, 27)
#define MASK_OP_RR1_N(op) MASK_BITS_SHIFT(op, 16, 17)
#define MASK_OP_RR1_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RR1_S1(op) MASK_OP_META_S1(op)
/* RR2 Format */
#define MASK_OP_RR2_D(op) MASK_OP_META_D(op)
#define MASK_OP_RR2_OP2(op) MASK_BITS_SHIFT(op, 16, 27)
#define MASK_OP_RR2_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RR2_S1(op) MASK_OP_META_S1(op)
/* RRPW Format */
#define MASK_OP_RRPW_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRPW_POS(op) MASK_BITS_SHIFT(op, 23, 27)
#define MASK_OP_RRPW_OP2(op) MASK_BITS_SHIFT(op, 21, 22)
#define MASK_OP_RRPW_WIDTH(op) MASK_BITS_SHIFT(op, 16, 20)
#define MASK_OP_RRPW_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRPW_S1(op) MASK_OP_META_S1(op)
/* RRR Format */
#define MASK_OP_RRR_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRR_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RRR_OP2(op) MASK_BITS_SHIFT(op, 20, 23)
#define MASK_OP_RRR_N(op) MASK_BITS_SHIFT(op, 16, 17)
#define MASK_OP_RRR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRR_S1(op) MASK_OP_META_S1(op)
/* RRR1 Format */
#define MASK_OP_RRR1_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRR1_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RRR1_OP2(op) MASK_BITS_SHIFT(op, 18, 23)
#define MASK_OP_RRR1_N(op) MASK_BITS_SHIFT(op, 16, 17)
#define MASK_OP_RRR1_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRR1_S1(op) MASK_OP_META_S1(op)
/* RRR2 Format */
#define MASK_OP_RRR2_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRR2_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RRR2_OP2(op) MASK_BITS_SHIFT(op, 16, 23)
#define MASK_OP_RRR2_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRR2_S1(op) MASK_OP_META_S1(op)
/* RRRR Format */
#define MASK_OP_RRRR_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRRR_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RRRR_OP2(op) MASK_BITS_SHIFT(op, 21, 23)
#define MASK_OP_RRRR_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRRR_S1(op) MASK_OP_META_S1(op)
/* RRRW Format */
#define MASK_OP_RRRW_D(op) MASK_OP_META_D(op)
#define MASK_OP_RRRW_S3(op) MASK_BITS_SHIFT(op, 24, 27)
#define MASK_OP_RRRW_OP2(op) MASK_BITS_SHIFT(op, 21, 23)
#define MASK_OP_RRRW_WIDTH(op) MASK_BITS_SHIFT(op, 16, 20)
#define MASK_OP_RRRW_S2(op) MASK_BITS_SHIFT(op, 12, 15)
#define MASK_OP_RRRW_S1(op) MASK_OP_META_S1(op)
/* SYS Format */
#define MASK_OP_SYS_OP2(op) MASK_BITS_SHIFT(op, 22, 27)
#define MASK_OP_SYS_S1D(op) MASK_OP_META_S1(op)
/*
* Tricore Opcodes Enums
*
* Format: OPC(1|2|M)_InstrLen_Name
* OPC1 = only op1 field is used
* OPC2 = op1 and op2 field used part of OPCM
* OPCM = op1 field used to group Instr
* InstrLen = 16|32
* Name = Name of Instr
*/
/* 16-Bit */
enum {
OPCM_16_SR_SYSTEM = 0x00,
OPCM_16_SR_ACCU = 0x32,
OPC1_16_SRC_ADD = 0xc2,
OPC1_16_SRC_ADD_A15 = 0x92,
OPC1_16_SRC_ADD_15A = 0x9a,
OPC1_16_SRR_ADD = 0x42,
OPC1_16_SRR_ADD_A15 = 0x12,
OPC1_16_SRR_ADD_15A = 0x1a,
OPC1_16_SRC_ADD_A = 0xb0,
OPC1_16_SRR_ADD_A = 0x30,
OPC1_16_SRR_ADDS = 0x22,
OPC1_16_SRRS_ADDSC_A = 0x10,
OPC1_16_SC_AND = 0x16,
OPC1_16_SRR_AND = 0x26,
OPC1_16_SC_BISR = 0xe0,
OPC1_16_SRC_CADD = 0x8a,
OPC1_16_SRC_CADDN = 0xca,
OPC1_16_SB_CALL = 0x5c,
OPC1_16_SRC_CMOV = 0xaa,
OPC1_16_SRR_CMOV = 0x2a,
OPC1_16_SRC_CMOVN = 0xea,
OPC1_16_SRR_CMOVN = 0x6a,
OPC1_16_SRC_EQ = 0xba,
OPC1_16_SRR_EQ = 0x3a,
OPC1_16_SB_J = 0x3c,
OPC1_16_SBC_JEQ = 0x1e,
OPC1_16_SBC_JEQ2 = 0x9e,
OPC1_16_SBR_JEQ = 0x3e,
OPC1_16_SBR_JEQ2 = 0xbe,
OPC1_16_SBR_JGEZ = 0xce,
OPC1_16_SBR_JGTZ = 0x4e,
OPC1_16_SR_JI = 0xdc,
OPC1_16_SBR_JLEZ = 0x8e,
OPC1_16_SBR_JLTZ = 0x0e,
OPC1_16_SBC_JNE = 0x5e,
OPC1_16_SBC_JNE2 = 0xde,
OPC1_16_SBR_JNE = 0x7e,
OPC1_16_SBR_JNE2 = 0xfe,
OPC1_16_SB_JNZ = 0xee,
OPC1_16_SBR_JNZ = 0xf6,
OPC1_16_SBR_JNZ_A = 0x7c,
OPC1_16_SBRN_JNZ_T = 0xae,
OPC1_16_SB_JZ = 0x6e,
OPC1_16_SBR_JZ = 0x76,
OPC1_16_SBR_JZ_A = 0xbc,
OPC1_16_SBRN_JZ_T = 0x2e,
OPC1_16_SC_LD_A = 0xd8,
OPC1_16_SLR_LD_A = 0xd4,
OPC1_16_SLR_LD_A_POSTINC = 0xc4,
OPC1_16_SLRO_LD_A = 0xc8,
OPC1_16_SRO_LD_A = 0xcc,
OPC1_16_SLR_LD_BU = 0x14,
OPC1_16_SLR_LD_BU_POSTINC = 0x04,
OPC1_16_SLRO_LD_BU = 0x08,
OPC1_16_SRO_LD_BU = 0x0c,
OPC1_16_SLR_LD_H = 0x94,
OPC1_16_SLR_LD_H_POSTINC = 0x84,
OPC1_16_SLRO_LD_H = 0x88,
OPC1_16_SRO_LD_H = 0x8c,
OPC1_16_SC_LD_W = 0x58,
OPC1_16_SLR_LD_W = 0x54,
OPC1_16_SLR_LD_W_POSTINC = 0x44,
OPC1_16_SLRO_LD_W = 0x48,
OPC1_16_SRO_LD_W = 0x4c,
OPC1_16_SBR_LOOP = 0xfc,
OPC1_16_SRC_LT = 0xfa,
OPC1_16_SRR_LT = 0x7a,
OPC1_16_SC_MOV = 0xda,
OPC1_16_SRC_MOV = 0x82,
OPC1_16_SRR_MOV = 0x02,
OPC1_16_SRC_MOV_E = 0xd2,/* 1.6 only */
OPC1_16_SRC_MOV_A = 0xa0,
OPC1_16_SRR_MOV_A = 0x60,
OPC1_16_SRR_MOV_AA = 0x40,
OPC1_16_SRR_MOV_D = 0x80,
OPC1_16_SRR_MUL = 0xe2,
OPC1_16_SR_NOT = 0x46,
OPC1_16_SC_OR = 0x96,
OPC1_16_SRR_OR = 0xa6,
OPC1_16_SRC_SH = 0x06,
OPC1_16_SRC_SHA = 0x86,
OPC1_16_SC_ST_A = 0xf8,
OPC1_16_SRO_ST_A = 0xec,
OPC1_16_SSR_ST_A = 0xf4,
OPC1_16_SSR_ST_A_POSTINC = 0xe4,
OPC1_16_SSRO_ST_A = 0xe8,
OPC1_16_SRO_ST_B = 0x2c,
OPC1_16_SSR_ST_B = 0x34,
OPC1_16_SSR_ST_B_POSTINC = 0x24,
OPC1_16_SSRO_ST_B = 0x28,
OPC1_16_SRO_ST_H = 0xac,
OPC1_16_SSR_ST_H = 0xb4,
OPC1_16_SSR_ST_H_POSTINC = 0xa4,
OPC1_16_SSRO_ST_H = 0xa8,
OPC1_16_SC_ST_W = 0x78,
OPC1_16_SRO_ST_W = 0x6c,
OPC1_16_SSR_ST_W = 0x74,
OPC1_16_SSR_ST_W_POSTINC = 0x64,
OPC1_16_SSRO_ST_W = 0x68,
OPC1_16_SRR_SUB = 0xa2,
OPC1_16_SRR_SUB_A15B = 0x52,
OPC1_16_SRR_SUB_15AB = 0x5a,
OPC1_16_SC_SUB_A = 0x20,
OPC1_16_SRR_SUBS = 0x62,
OPC1_16_SRR_XOR = 0xc6,
};
/*
* SR Format
*/
/* OPCM_16_SR_SYSTEM */
enum {
OPC2_16_SR_NOP = 0x00,
OPC2_16_SR_RET = 0x09,
OPC2_16_SR_RFE = 0x08,
OPC2_16_SR_DEBUG = 0x0a,
OPC2_16_SR_FRET = 0x07,
};
/* OPCM_16_SR_ACCU */
enum {
OPC2_16_SR_RSUB = 0x05,
OPC2_16_SR_SAT_B = 0x00,
OPC2_16_SR_SAT_BU = 0x01,
OPC2_16_SR_SAT_H = 0x02,
OPC2_16_SR_SAT_HU = 0x03,
};
/* 32-Bit */
enum {
/* ABS Format 1, M */
OPCM_32_ABS_LDW = 0x85,
OPCM_32_ABS_LDB = 0x05,
OPCM_32_ABS_LDMST_SWAP = 0xe5,
OPCM_32_ABS_LDST_CONTEXT = 0x15,
OPCM_32_ABS_STORE = 0xa5,
OPCM_32_ABS_STOREB_H = 0x25,
OPC1_32_ABS_STOREQ = 0x65,
OPC1_32_ABS_LD_Q = 0x45,
OPC1_32_ABS_LEA = 0xc5,
/* ABSB Format */
OPC1_32_ABSB_ST_T = 0xd5,
/* B Format */
OPC1_32_B_CALL = 0x6d,
OPC1_32_B_CALLA = 0xed,
OPC1_32_B_FCALL = 0x61,
OPC1_32_B_FCALLA = 0xe1,
OPC1_32_B_J = 0x1d,
OPC1_32_B_JA = 0x9d,
OPC1_32_B_JL = 0x5d,
OPC1_32_B_JLA = 0xdd,
/* Bit Format */
OPCM_32_BIT_ANDACC = 0x47,
OPCM_32_BIT_LOGICAL_T1 = 0x87,
OPCM_32_BIT_INSERT = 0x67,
OPCM_32_BIT_LOGICAL_T2 = 0x07,
OPCM_32_BIT_ORAND = 0xc7,
OPCM_32_BIT_SH_LOGIC1 = 0x27,
OPCM_32_BIT_SH_LOGIC2 = 0xa7,
/* BO Format */
OPCM_32_BO_ADDRMODE_POST_PRE_BASE = 0x89,
OPCM_32_BO_ADDRMODE_BITREVERSE_CIRCULAR = 0xa9,
OPCM_32_BO_ADDRMODE_LD_POST_PRE_BASE = 0x09,
OPCM_32_BO_ADDRMODE_LD_BITREVERSE_CIRCULAR = 0x29,
OPCM_32_BO_ADDRMODE_STCTX_POST_PRE_BASE = 0x49,
OPCM_32_BO_ADDRMODE_LDMST_BITREVERSE_CIRCULAR = 0x69,
/* BOL Format */
OPC1_32_BOL_LD_A_LONGOFF = 0x99,
OPC1_32_BOL_LD_W_LONGOFF = 0x19,
OPC1_32_BOL_LEA_LONGOFF = 0xd9,
OPC1_32_BOL_ST_W_LONGOFF = 0x59,
OPC1_32_BOL_ST_A_LONGOFF = 0xb5, /* 1.6 only */
OPC1_32_BOL_LD_B_LONGOFF = 0x79, /* 1.6 only */
OPC1_32_BOL_LD_BU_LONGOFF = 0x39, /* 1.6 only */
OPC1_32_BOL_LD_H_LONGOFF = 0xc9, /* 1.6 only */
OPC1_32_BOL_LD_HU_LONGOFF = 0xb9, /* 1.6 only */
OPC1_32_BOL_ST_B_LONGOFF = 0xe9, /* 1.6 only */
OPC1_32_BOL_ST_H_LONGOFF = 0xf9, /* 1.6 only */
/* BRC Format */
OPCM_32_BRC_EQ_NEQ = 0xdf,
OPCM_32_BRC_GE = 0xff,
OPCM_32_BRC_JLT = 0xbf,
OPCM_32_BRC_JNE = 0x9f,
/* BRN Format */
OPCM_32_BRN_JTT = 0x6f,
/* BRR Format */
OPCM_32_BRR_EQ_NEQ = 0x5f,
OPCM_32_BRR_ADDR_EQ_NEQ = 0x7d,
OPCM_32_BRR_GE = 0x7f,
OPCM_32_BRR_JLT = 0x3f,
OPCM_32_BRR_JNE = 0x1f,
OPCM_32_BRR_JNZ = 0xbd,
OPCM_32_BRR_LOOP = 0xfd,
/* RC Format */
OPCM_32_RC_LOGICAL_SHIFT = 0x8f,
OPCM_32_RC_ACCUMULATOR = 0x8b,
OPCM_32_RC_SERVICEROUTINE = 0xad,
OPCM_32_RC_MUL = 0x53,
/* RCPW Format */
OPCM_32_RCPW_MASK_INSERT = 0xb7,
/* RCR Format */
OPCM_32_RCR_COND_SELECT = 0xab,
OPCM_32_RCR_MADD = 0x13,
OPCM_32_RCR_MSUB = 0x33,
/* RCRR Format */
OPC1_32_RCRR_INSERT = 0x97,
/* RCRW Format */
OPCM_32_RCRW_MASK_INSERT = 0xd7,
/* RLC Format */
OPC1_32_RLC_ADDI = 0x1b,
OPC1_32_RLC_ADDIH = 0x9b,
OPC1_32_RLC_ADDIH_A = 0x11,
OPC1_32_RLC_MFCR = 0x4d,
OPC1_32_RLC_MOV = 0x3b,
OPC1_32_RLC_MOV_64 = 0xfb, /* 1.6 only */
OPC1_32_RLC_MOV_U = 0xbb,
OPC1_32_RLC_MOV_H = 0x7b,
OPC1_32_RLC_MOVH_A = 0x91,
OPC1_32_RLC_MTCR = 0xcd,
/* RR Format */
OPCM_32_RR_LOGICAL_SHIFT = 0x0f,
OPCM_32_RR_ACCUMULATOR = 0x0b,
OPCM_32_RR_ADDRESS = 0x01,
OPCM_32_RR_DIVIDE = 0x4b,
OPCM_32_RR_IDIRECT = 0x2d,
/* RR1 Format */
OPCM_32_RR1_MUL = 0xb3,
OPCM_32_RR1_MULQ = 0x93,
/* RR2 Format */
OPCM_32_RR2_MUL = 0x73,
/* RRPW Format */
OPCM_32_RRPW_EXTRACT_INSERT = 0x37,
OPC1_32_RRPW_DEXTR = 0x77,
/* RRR Format */
OPCM_32_RRR_COND_SELECT = 0x2b,
OPCM_32_RRR_DIVIDE = 0x6b,
/* RRR1 Format */
OPCM_32_RRR1_MADD = 0x83,
OPCM_32_RRR1_MADDQ_H = 0x43,
OPCM_32_RRR1_MADDSU_H = 0xc3,
OPCM_32_RRR1_MSUB_H = 0xa3,
OPCM_32_RRR1_MSUB_Q = 0x63,
OPCM_32_RRR1_MSUBAD_H = 0xe3,
/* RRR2 Format */
OPCM_32_RRR2_MADD = 0x03,
OPCM_32_RRR2_MSUB = 0x23,
/* RRRR Format */
OPCM_32_RRRR_EXTRACT_INSERT = 0x17,
/* RRRW Format */
OPCM_32_RRRW_EXTRACT_INSERT = 0x57,
/* SYS Format */
OPCM_32_SYS_INTERRUPTS = 0x0d,
OPC1_32_SYS_RSTV = 0x2f,
};
/*
* ABS Format
*/
/* OPCM_32_ABS_LDW */
enum {
OPC2_32_ABS_LD_A = 0x02,
OPC2_32_ABS_LD_D = 0x01,
OPC2_32_ABS_LD_DA = 0x03,
OPC2_32_ABS_LD_W = 0x00,
};
/* OPCM_32_ABS_LDB */
enum {
OPC2_32_ABS_LD_B = 0x00,
OPC2_32_ABS_LD_BU = 0x01,
OPC2_32_ABS_LD_H = 0x02,
OPC2_32_ABS_LD_HU = 0x03,
};
/* OPCM_32_ABS_LDMST_SWAP */
enum {
OPC2_32_ABS_LDMST = 0x01,
OPC2_32_ABS_SWAP_W = 0x00,
};
/* OPCM_32_ABS_LDST_CONTEXT */
enum {
OPC2_32_ABS_LDLCX = 0x02,
OPC2_32_ABS_LDUCX = 0x03,
OPC2_32_ABS_STLCX = 0x00,
OPC2_32_ABS_STUCX = 0x01,
};
/* OPCM_32_ABS_STORE */
enum {
OPC2_32_ABS_ST_A = 0x02,
OPC2_32_ABS_ST_D = 0x01,
OPC2_32_ABS_ST_DA = 0x03,
OPC2_32_ABS_ST_W = 0x00,
};
/* OPCM_32_ABS_STOREB_H */
enum {
OPC2_32_ABS_ST_B = 0x00,
OPC2_32_ABS_ST_H = 0x02,
};
/*
* Bit Format
*/
/* OPCM_32_BIT_ANDACC */
enum {
OPC2_32_BIT_AND_AND_T = 0x00,
OPC2_32_BIT_AND_ANDN_T = 0x03,
OPC2_32_BIT_AND_NOR_T = 0x02,
OPC2_32_BIT_AND_OR_T = 0x01,
};
/* OPCM_32_BIT_LOGICAL_T */
enum {
OPC2_32_BIT_AND_T = 0x00,
OPC2_32_BIT_ANDN_T = 0x03,
OPC2_32_BIT_NOR_T = 0x02,
OPC2_32_BIT_OR_T = 0x01,
};
/* OPCM_32_BIT_INSERT */
enum {
OPC2_32_BIT_INS_T = 0x00,
OPC2_32_BIT_INSN_T = 0x01,
};
/* OPCM_32_BIT_LOGICAL_T2 */
enum {
OPC2_32_BIT_NAND_T = 0x00,
OPC2_32_BIT_ORN_T = 0x01,
OPC2_32_BIT_XNOR_T = 0x02,
OPC2_32_BIT_XOR_T = 0x03,
};
/* OPCM_32_BIT_ORAND */
enum {
OPC2_32_BIT_OR_AND_T = 0x00,
OPC2_32_BIT_OR_ANDN_T = 0x03,
OPC2_32_BIT_OR_NOR_T = 0x02,
OPC2_32_BIT_OR_OR_T = 0x01,
};
/*OPCM_32_BIT_SH_LOGIC1 */
enum {
OPC2_32_BIT_SH_AND_T = 0x00,
OPC2_32_BIT_SH_ANDN_T = 0x03,
OPC2_32_BIT_SH_NOR_T = 0x02,
OPC2_32_BIT_SH_OR_T = 0x01,
};
/* OPCM_32_BIT_SH_LOGIC2 */
enum {
OPC2_32_BIT_SH_NAND_T = 0x00,
OPC2_32_BIT_SH_ORN_T = 0x01,
OPC2_32_BIT_SH_XNOR_T = 0x02,
OPC2_32_BIT_SH_XOR_T = 0x03,
};
/*
* BO Format
*/
/* OPCM_32_BO_ADDRMODE_POST_PRE_BASE */
enum {
OPC2_32_BO_CACHEA_I_SHORTOFF = 0x2e,
OPC2_32_BO_CACHEA_I_POSTINC = 0x0e,
OPC2_32_BO_CACHEA_I_PREINC = 0x1e,
OPC2_32_BO_CACHEA_W_SHORTOFF = 0x2c,
OPC2_32_BO_CACHEA_W_POSTINC = 0x0c,
OPC2_32_BO_CACHEA_W_PREINC = 0x1c,
OPC2_32_BO_CACHEA_WI_SHORTOFF = 0x2d,
OPC2_32_BO_CACHEA_WI_POSTINC = 0x0d,
OPC2_32_BO_CACHEA_WI_PREINC = 0x1d,
/* 1.3.1 only */
OPC2_32_BO_CACHEI_W_SHORTOFF = 0x2b,
OPC2_32_BO_CACHEI_W_POSTINC = 0x0b,
OPC2_32_BO_CACHEI_W_PREINC = 0x1b,
OPC2_32_BO_CACHEI_WI_SHORTOFF = 0x2f,
OPC2_32_BO_CACHEI_WI_POSTINC = 0x0f,
OPC2_32_BO_CACHEI_WI_PREINC = 0x1f,
/* end 1.3.1 only */
OPC2_32_BO_ST_A_SHORTOFF = 0x26,
OPC2_32_BO_ST_A_POSTINC = 0x06,
OPC2_32_BO_ST_A_PREINC = 0x16,
OPC2_32_BO_ST_B_SHORTOFF = 0x20,
OPC2_32_BO_ST_B_POSTINC = 0x00,
OPC2_32_BO_ST_B_PREINC = 0x10,
OPC2_32_BO_ST_D_SHORTOFF = 0x25,
OPC2_32_BO_ST_D_POSTINC = 0x05,
OPC2_32_BO_ST_D_PREINC = 0x15,
OPC2_32_BO_ST_DA_SHORTOFF = 0x27,
OPC2_32_BO_ST_DA_POSTINC = 0x07,
OPC2_32_BO_ST_DA_PREINC = 0x17,
OPC2_32_BO_ST_H_SHORTOFF = 0x22,
OPC2_32_BO_ST_H_POSTINC = 0x02,
OPC2_32_BO_ST_H_PREINC = 0x12,
OPC2_32_BO_ST_Q_SHORTOFF = 0x28,
OPC2_32_BO_ST_Q_POSTINC = 0x08,
OPC2_32_BO_ST_Q_PREINC = 0x18,
OPC2_32_BO_ST_W_SHORTOFF = 0x24,
OPC2_32_BO_ST_W_POSTINC = 0x04,
OPC2_32_BO_ST_W_PREINC = 0x14,
};
/* OPCM_32_BO_ADDRMODE_BITREVERSE_CIRCULAR */
enum {
OPC2_32_BO_CACHEA_I_BR = 0x0e,
OPC2_32_BO_CACHEA_I_CIRC = 0x1e,
OPC2_32_BO_CACHEA_W_BR = 0x0c,
OPC2_32_BO_CACHEA_W_CIRC = 0x1c,
OPC2_32_BO_CACHEA_WI_BR = 0x0d,
OPC2_32_BO_CACHEA_WI_CIRC = 0x1d,
OPC2_32_BO_ST_A_BR = 0x06,
OPC2_32_BO_ST_A_CIRC = 0x16,
OPC2_32_BO_ST_B_BR = 0x00,
OPC2_32_BO_ST_B_CIRC = 0x10,
OPC2_32_BO_ST_D_BR = 0x05,
OPC2_32_BO_ST_D_CIRC = 0x15,
OPC2_32_BO_ST_DA_BR = 0x07,
OPC2_32_BO_ST_DA_CIRC = 0x17,
OPC2_32_BO_ST_H_BR = 0x02,
OPC2_32_BO_ST_H_CIRC = 0x12,
OPC2_32_BO_ST_Q_BR = 0x08,
OPC2_32_BO_ST_Q_CIRC = 0x18,
OPC2_32_BO_ST_W_BR = 0x04,
OPC2_32_BO_ST_W_CIRC = 0x14,
};
/* OPCM_32_BO_ADDRMODE_LD_POST_PRE_BASE */
enum {
OPC2_32_BO_LD_A_SHORTOFF = 0x26,
OPC2_32_BO_LD_A_POSTINC = 0x06,
OPC2_32_BO_LD_A_PREINC = 0x16,
OPC2_32_BO_LD_B_SHORTOFF = 0x20,
OPC2_32_BO_LD_B_POSTINC = 0x00,
OPC2_32_BO_LD_B_PREINC = 0x10,
OPC2_32_BO_LD_BU_SHORTOFF = 0x21,
OPC2_32_BO_LD_BU_POSTINC = 0x01,
OPC2_32_BO_LD_BU_PREINC = 0x11,
OPC2_32_BO_LD_D_SHORTOFF = 0x25,
OPC2_32_BO_LD_D_POSTINC = 0x05,
OPC2_32_BO_LD_D_PREINC = 0x15,
OPC2_32_BO_LD_DA_SHORTOFF = 0x27,
OPC2_32_BO_LD_DA_POSTINC = 0x07,
OPC2_32_BO_LD_DA_PREINC = 0x17,
OPC2_32_BO_LD_H_SHORTOFF = 0x22,
OPC2_32_BO_LD_H_POSTINC = 0x02,
OPC2_32_BO_LD_H_PREINC = 0x12,
OPC2_32_BO_LD_HU_SHORTOFF = 0x23,
OPC2_32_BO_LD_HU_POSTINC = 0x03,
OPC2_32_BO_LD_HU_PREINC = 0x13,
OPC2_32_BO_LD_Q_SHORTOFF = 0x28,
OPC2_32_BO_LD_Q_POSTINC = 0x08,
OPC2_32_BO_LD_Q_PREINC = 0x18,
OPC2_32_BO_LD_W_SHORTOFF = 0x24,
OPC2_32_BO_LD_W_POSTINC = 0x04,
OPC2_32_BO_LD_W_PREINC = 0x14,
};
/* OPCM_32_BO_ADDRMODE_LD_BITREVERSE_CIRCULAR */
enum {
OPC2_32_BO_LD_A_BR = 0x06,
OPC2_32_BO_LD_A_CIRC = 0x16,
OPC2_32_BO_LD_B_BR = 0x00,
OPC2_32_BO_LD_B_CIRC = 0x10,
OPC2_32_BO_LD_BU_BR = 0x01,
OPC2_32_BO_LD_BU_CIRC = 0x11,
OPC2_32_BO_LD_D_BR = 0x05,
OPC2_32_BO_LD_D_CIRC = 0x15,
OPC2_32_BO_LD_DA_BR = 0x07,
OPC2_32_BO_LD_DA_CIRC = 0x17,
OPC2_32_BO_LD_H_BR = 0x02,
OPC2_32_BO_LD_H_CIRC = 0x12,
OPC2_32_BO_LD_HU_BR = 0x03,
OPC2_32_BO_LD_HU_CIRC = 0x13,
OPC2_32_BO_LD_Q_BR = 0x08,
OPC2_32_BO_LD_Q_CIRC = 0x18,
OPC2_32_BO_LD_W_BR = 0x04,
OPC2_32_BO_LD_W_CIRC = 0x14,
};
/* OPCM_32_BO_ADDRMODE_STCTX_POST_PRE_BASE */
enum {
OPC2_32_BO_LDLCX_SHORTOFF = 0x24,
OPC2_32_BO_LDMST_SHORTOFF = 0x21,
OPC2_32_BO_LDMST_POSTINC = 0x01,
OPC2_32_BO_LDMST_PREINC = 0x11,
OPC2_32_BO_LDUCX_SHORTOFF = 0x25,
OPC2_32_BO_LEA_SHORTOFF = 0x28,
OPC2_32_BO_STLCX_SHORTOFF = 0x26,
OPC2_32_BO_STUCX_SHORTOFF = 0x27,
OPC2_32_BO_SWAP_W_SHORTOFF = 0x20,
OPC2_32_BO_SWAP_W_POSTINC = 0x00,
OPC2_32_BO_SWAP_W_PREINC = 0x10,
OPC2_32_BO_CMPSWAP_W_SHORTOFF = 0x23,
OPC2_32_BO_CMPSWAP_W_POSTINC = 0x03,
OPC2_32_BO_CMPSWAP_W_PREINC = 0x13,
OPC2_32_BO_SWAPMSK_W_SHORTOFF = 0x22,
OPC2_32_BO_SWAPMSK_W_POSTINC = 0x02,
OPC2_32_BO_SWAPMSK_W_PREINC = 0x12,
};
/*OPCM_32_BO_ADDRMODE_LDMST_BITREVERSE_CIRCULAR */
enum {
OPC2_32_BO_LDMST_BR = 0x01,
OPC2_32_BO_LDMST_CIRC = 0x11,
OPC2_32_BO_SWAP_W_BR = 0x00,
OPC2_32_BO_SWAP_W_CIRC = 0x10,
OPC2_32_BO_CMPSWAP_W_BR = 0x03,
OPC2_32_BO_CMPSWAP_W_CIRC = 0x13,
OPC2_32_BO_SWAPMSK_W_BR = 0x02,
OPC2_32_BO_SWAPMSK_W_CIRC = 0x12,
};
/*
* BRC Format
*/
/*OPCM_32_BRC_EQ_NEQ */
enum {
OPC2_32_BRC_JEQ = 0x00,
OPC2_32_BRC_JNE = 0x01,
};
/* OPCM_32_BRC_GE */
enum {
OP2_32_BRC_JGE = 0x00,
OPC_32_BRC_JGE_U = 0x01,
};
/* OPCM_32_BRC_JLT */
enum {
OPC2_32_BRC_JLT = 0x00,
OPC2_32_BRC_JLT_U = 0x01,
};
/* OPCM_32_BRC_JNE */
enum {
OPC2_32_BRC_JNED = 0x01,
OPC2_32_BRC_JNEI = 0x00,
};
/*
* BRN Format
*/
/* OPCM_32_BRN_JTT */
enum {
OPC2_32_BRN_JNZ_T = 0x01,
OPC2_32_BRN_JZ_T = 0x00,
};
/*
* BRR Format
*/
/* OPCM_32_BRR_EQ_NEQ */
enum {
OPC2_32_BRR_JEQ = 0x00,
OPC2_32_BRR_JNE = 0x01,
};
/* OPCM_32_BRR_ADDR_EQ_NEQ */
enum {
OPC2_32_BRR_JEQ_A = 0x00,
OPC2_32_BRR_JNE_A = 0x01,
};
/*OPCM_32_BRR_GE */
enum {
OPC2_32_BRR_JGE = 0x00,
OPC2_32_BRR_JGE_U = 0x01,
};
/* OPCM_32_BRR_JLT */
enum {
OPC2_32_BRR_JLT = 0x00,
OPC2_32_BRR_JLT_U = 0x01,
};
/* OPCM_32_BRR_JNE */
enum {
OPC2_32_BRR_JNED = 0x01,
OPC2_32_BRR_JNEI = 0x00,
};
/* OPCM_32_BRR_JNZ */
enum {
OPC2_32_BRR_JNZ_A = 0x01,
OPC2_32_BRR_JZ_A = 0x00,
};
/* OPCM_32_BRR_LOOP */
enum {
OPC2_32_BRR_LOOP = 0x00,
OPC2_32_BRR_LOOPU = 0x01,
};
/*
* RC Format
*/
/* OPCM_32_RC_LOGICAL_SHIFT */
enum {
OPC2_32_RC_AND = 0x08,
OPC2_32_RC_ANDN = 0x0e,
OPC2_32_RC_NAND = 0x09,
OPC2_32_RC_NOR = 0x0b,
OPC2_32_RC_OR = 0x0a,
OPC2_32_RC_ORN = 0x0f,
OPC2_32_RC_SH = 0x00,
OPC2_32_RC_SH_H = 0x40,
OPC2_32_RC_SHA = 0x01,
OPC2_32_RC_SHA_H = 0x41,
OPC2_32_RC_SHAS = 0x02,
OPC2_32_RC_XNOR = 0x0d,
OPC2_32_RC_XOR = 0x0c,
};
/* OPCM_32_RC_ACCUMULATOR */
enum {
OPC2_32_RC_ABSDIF = 0x0e,
OPC2_32_RC_ABSDIFS = 0x0f,
OPC2_32_RC_ADD = 0x00,
OPC2_32_RC_ADDC = 0x05,
OPC2_32_RC_ADDS = 0x02,
OPC2_32_RC_ADDS_U = 0x03,
OPC2_32_RC_ADDX = 0x04,
OPC2_32_RC_AND_EQ = 0x20,
OPC2_32_RC_AND_GE = 0x24,
OPC2_32_RC_AND_GE_U = 0x25,
OPC2_32_RC_AND_LT = 0x22,
OPC2_32_RC_AND_LT_U = 0x23,
OPC2_32_RC_AND_NE = 0x21,
OPC2_32_RC_EQ = 0x10,
OPC2_32_RC_EQANY_B = 0x56,
OPC2_32_RC_EQANY_H = 0x76,
OPC2_32_RC_GE = 0x14,
OPC2_32_RC_GE_U = 0x15,
OPC2_32_RC_LT = 0x12,
OPC2_32_RC_LT_U = 0x13,
OPC2_32_RC_MAX = 0x1a,
OPC2_32_RC_MAX_U = 0x1b,
OPC2_32_RC_MIN = 0x18,
OPC2_32_RC_MIN_U = 0x19,
OPC2_32_RC_NE = 0x11,
OPC2_32_RC_OR_EQ = 0x27,
OPC2_32_RC_OR_GE = 0x2b,
OPC2_32_RC_OR_GE_U = 0x2c,
OPC2_32_RC_OR_LT = 0x29,
OPC2_32_RC_OR_LT_U = 0x2a,
OPC2_32_RC_OR_NE = 0x28,
OPC2_32_RC_RSUB = 0x08,
OPC2_32_RC_RSUBS = 0x0a,
OPC2_32_RC_RSUBS_U = 0x0b,
OPC2_32_RC_SH_EQ = 0x37,
OPC2_32_RC_SH_GE = 0x3b,
OPC2_32_RC_SH_GE_U = 0x3c,
OPC2_32_RC_SH_LT = 0x39,
OPC2_32_RC_SH_LT_U = 0x3a,
OPC2_32_RC_SH_NE = 0x38,
OPC2_32_RC_XOR_EQ = 0x2f,
OPC2_32_RC_XOR_GE = 0x33,
OPC2_32_RC_XOR_GE_U = 0x34,
OPC2_32_RC_XOR_LT = 0x31,
OPC2_32_RC_XOR_LT_U = 0x32,
OPC2_32_RC_XOR_NE = 0x30,
};
/* OPCM_32_RC_SERVICEROUTINE */
enum {
OPC2_32_RC_BISR = 0x00,
OPC2_32_RC_SYSCALL = 0x04,
};
/* OPCM_32_RC_MUL */
enum {
OPC2_32_RC_MUL_32 = 0x01,
OPC2_32_RC_MUL_64 = 0x03,
OPC2_32_RC_MULS_32 = 0x05,
OPC2_32_RC_MUL_U_64 = 0x02,
OPC2_32_RC_MULS_U_32 = 0x04,
};
/*
* RCPW Format
*/
/* OPCM_32_RCPW_MASK_INSERT */
enum {
OPC2_32_RCPW_IMASK = 0x01,
OPC2_32_RCPW_INSERT = 0x00,
};
/*
* RCR Format
*/
/* OPCM_32_RCR_COND_SELECT */
enum {
OPC2_32_RCR_CADD = 0x00,
OPC2_32_RCR_CADDN = 0x01,
OPC2_32_RCR_SEL = 0x04,
OPC2_32_RCR_SELN = 0x05,
};
/* OPCM_32_RCR_MADD */
enum {
OPC2_32_RCR_MADD_32 = 0x01,
OPC2_32_RCR_MADD_64 = 0x03,
OPC2_32_RCR_MADDS_32 = 0x05,
OPC2_32_RCR_MADDS_64 = 0x07,
OPC2_32_RCR_MADD_U_64 = 0x02,
OPC2_32_RCR_MADDS_U_32 = 0x04,
OPC2_32_RCR_MADDS_U_64 = 0x06,
};
/* OPCM_32_RCR_MSUB */
enum {
OPC2_32_RCR_MSUB_32 = 0x01,
OPC2_32_RCR_MSUB_64 = 0x03,
OPC2_32_RCR_MSUBS_32 = 0x05,
OPC2_32_RCR_MSUBS_64 = 0x07,
OPC2_32_RCR_MSUB_U_64 = 0x02,
OPC2_32_RCR_MSUBS_U_32 = 0x04,
OPC2_32_RCR_MSUBS_U_64 = 0x06,
};
/*
* RCRW Format
*/
/* OPCM_32_RCRW_MASK_INSERT */
enum {
OPC2_32_RCRW_IMASK = 0x01,
OPC2_32_RCRW_INSERT = 0x00,
};
/*
* RR Format
*/
/* OPCM_32_RR_LOGICAL_SHIFT */
enum {
OPC2_32_RR_AND = 0x08,
OPC2_32_RR_ANDN = 0x0e,
OPC2_32_RR_CLO = 0x1c,
OPC2_32_RR_CLO_H = 0x7d,
OPC2_32_RR_CLS = 0x1d,
OPC2_32_RR_CLS_H = 0x7e,
OPC2_32_RR_CLZ = 0x1b,
OPC2_32_RR_CLZ_H = 0x7c,
OPC2_32_RR_NAND = 0x09,
OPC2_32_RR_NOR = 0x0b,
OPC2_32_RR_OR = 0x0a,
OPC2_32_RR_ORN = 0x0f,
OPC2_32_RR_SH = 0x00,
OPC2_32_RR_SH_H = 0x40,
OPC2_32_RR_SHA = 0x01,
OPC2_32_RR_SHA_H = 0x41,
OPC2_32_RR_SHAS = 0x02,
OPC2_32_RR_XNOR = 0x0d,
OPC2_32_RR_XOR = 0x0c,
};
/* OPCM_32_RR_ACCUMULATOR */
enum {
OPC2_32_RR_ABS = 0x1c,
OPC2_32_RR_ABS_B = 0x5c,
OPC2_32_RR_ABS_H = 0x7c,
OPC2_32_RR_ABSDIF = 0x0e,
OPC2_32_RR_ABSDIF_B = 0x4e,
OPC2_32_RR_ABSDIF_H = 0x6e,
OPC2_32_RR_ABSDIFS = 0x0f,
OPC2_32_RR_ABSDIFS_H = 0x6f,
OPC2_32_RR_ABSS = 0x1d,
OPC2_32_RR_ABSS_H = 0x7d,
OPC2_32_RR_ADD = 0x00,
OPC2_32_RR_ADD_B = 0x40,
OPC2_32_RR_ADD_H = 0x60,
OPC2_32_RR_ADDC = 0x05,
OPC2_32_RR_ADDS = 0x02,
OPC2_32_RR_ADDS_H = 0x62,
OPC2_32_RR_ADDS_HU = 0x63,
OPC2_32_RR_ADDS_U = 0x03,
OPC2_32_RR_ADDX = 0x04,
OPC2_32_RR_AND_EQ = 0x20,
OPC2_32_RR_AND_GE = 0x24,
OPC2_32_RR_AND_GE_U = 0x25,
OPC2_32_RR_AND_LT = 0x22,
OPC2_32_RR_AND_LT_U = 0x23,
OPC2_32_RR_AND_NE = 0x21,
OPC2_32_RR_EQ = 0x10,
OPC2_32_RR_EQ_B = 0x50,
OPC2_32_RR_EQ_H = 0x70,
OPC2_32_RR_EQ_W = 0x90,
OPC2_32_RR_EQANY_B = 0x56,
OPC2_32_RR_EQANY_H = 0x76,
OPC2_32_RR_GE = 0x14,
OPC2_32_RR_GE_U = 0x15,
OPC2_32_RR_LT = 0x12,
OPC2_32_RR_LT_U = 0x13,
OPC2_32_RR_LT_B = 0x52,
OPC2_32_RR_LT_BU = 0x53,
OPC2_32_RR_LT_H = 0x72,
OPC2_32_RR_LT_HU = 0x73,
OPC2_32_RR_LT_W = 0x92,
OPC2_32_RR_LT_WU = 0x93,
OPC2_32_RR_MAX = 0x1a,
OPC2_32_RR_MAX_U = 0x1b,
OPC2_32_RR_MAX_B = 0x5a,
OPC2_32_RR_MAX_BU = 0x5b,
OPC2_32_RR_MAX_H = 0x7a,
OPC2_32_RR_MAX_HU = 0x7b,
target-tricore: Add instructions of RR opcode format, that have 0xb as the first opcode Add instructions of RR opcode format, that have 0xb as the first opcode. Add helper functions, for hword and byte arithmetics: * add_h_ssov/suov: Add two halfword and saturate on overflow. * sub_h_ssov/suov: Sub two halfword and saturate on overflow. * absdif_h_ssov: Compute absolute difference for halfwords and saturate on overflow. * abs_h_ssov/suov: Compute absolute value for two halfwords and saturate on overflow. * abs_b/h: Compute absolute value for four/two bytes/halfwords * absdif_b/h: Compute absolute difference for four/two bytes/halfwords * add_b/h: Add four/two bytes/halfwords. * sub_b/h: Sub four/two bytes/halfwords. * eq_b/h: Compare four/two bytes/halfwords with four/two bytes/halfwords on equality and set all bits of to either one ore zero. * eqany_b/h: Compare four/two bytes/halfwords with four/two bytes/halfwords on equality. * lt_b/bu/h/hu: Compare four/two bytes/halfwords with four/two bytes/halfwords on less than signed and unsigned. * max_b/bu/h/hu: Calculate max for four/two bytes/halfwords signed and unsigned. * min_b/bu/h/hu: Calculate min for four/two bytes/halfwords signed and unsigned. Add helper function abs_ssov, that computes the absolute value for a 32 bit integer and saturates on overflow. Add microcode generator functions: * gen_sub_CC: Caluclates sub and sets the carry bit. * gen_subc_CC: Caluclates sub and carry and sets the carry bit * gen_abs: Compute absolute value for a 32 bit integer. * gen_cond_w: Compares two 32 bit values on cond and sets result either zero or all bits one. OPC2_32_RR_MIN switched with OPC2_32_RR_MIN_U. Signed-off-by: Bastian Koppelmann <kbastian@mail.uni-paderborn.de> Reviewed-by: Richard Henderson <rth@twiddle.net>
2014-11-27 17:30:33 +03:00
OPC2_32_RR_MIN = 0x18,
OPC2_32_RR_MIN_U = 0x19,
OPC2_32_RR_MIN_B = 0x58,
OPC2_32_RR_MIN_BU = 0x59,
OPC2_32_RR_MIN_H = 0x78,
OPC2_32_RR_MIN_HU = 0x79,
OPC2_32_RR_MOV = 0x1f,
OPC2_32_RR_MOVS_64 = 0x80,
OPC2_32_RR_MOV_64 = 0x81,
OPC2_32_RR_NE = 0x11,
OPC2_32_RR_OR_EQ = 0x27,
OPC2_32_RR_OR_GE = 0x2b,
OPC2_32_RR_OR_GE_U = 0x2c,
OPC2_32_RR_OR_LT = 0x29,
OPC2_32_RR_OR_LT_U = 0x2a,
OPC2_32_RR_OR_NE = 0x28,
OPC2_32_RR_SAT_B = 0x5e,
OPC2_32_RR_SAT_BU = 0x5f,
OPC2_32_RR_SAT_H = 0x7e,
OPC2_32_RR_SAT_HU = 0x7f,
OPC2_32_RR_SH_EQ = 0x37,
OPC2_32_RR_SH_GE = 0x3b,
OPC2_32_RR_SH_GE_U = 0x3c,
OPC2_32_RR_SH_LT = 0x39,
OPC2_32_RR_SH_LT_U = 0x3a,
OPC2_32_RR_SH_NE = 0x38,
OPC2_32_RR_SUB = 0x08,
OPC2_32_RR_SUB_B = 0x48,
OPC2_32_RR_SUB_H = 0x68,
OPC2_32_RR_SUBC = 0x0d,
OPC2_32_RR_SUBS = 0x0a,
OPC2_32_RR_SUBS_U = 0x0b,
OPC2_32_RR_SUBS_H = 0x6a,
OPC2_32_RR_SUBS_HU = 0x6b,
OPC2_32_RR_SUBX = 0x0c,
OPC2_32_RR_XOR_EQ = 0x2f,
OPC2_32_RR_XOR_GE = 0x33,
OPC2_32_RR_XOR_GE_U = 0x34,
OPC2_32_RR_XOR_LT = 0x31,
OPC2_32_RR_XOR_LT_U = 0x32,
OPC2_32_RR_XOR_NE = 0x30,
};
/* OPCM_32_RR_ADDRESS */
enum {
OPC2_32_RR_ADD_A = 0x01,
OPC2_32_RR_ADDSC_A = 0x60,
OPC2_32_RR_ADDSC_AT = 0x62,
OPC2_32_RR_EQ_A = 0x40,
OPC2_32_RR_EQZ = 0x48,
OPC2_32_RR_GE_A = 0x43,
OPC2_32_RR_LT_A = 0x42,
OPC2_32_RR_MOV_A = 0x63,
OPC2_32_RR_MOV_AA = 0x00,
OPC2_32_RR_MOV_D = 0x4c,
OPC2_32_RR_NE_A = 0x41,
OPC2_32_RR_NEZ_A = 0x49,
OPC2_32_RR_SUB_A = 0x02,
};
/* OPCM_32_RR_FLOAT */
enum {
OPC2_32_RR_BMERGE = 0x01,
OPC2_32_RR_BSPLIT = 0x09,
OPC2_32_RR_DVINIT_B = 0x5a,
OPC2_32_RR_DVINIT_BU = 0x4a,
OPC2_32_RR_DVINIT_H = 0x3a,
OPC2_32_RR_DVINIT_HU = 0x2a,
OPC2_32_RR_DVINIT = 0x1a,
OPC2_32_RR_DVINIT_U = 0x0a,
OPC2_32_RR_PARITY = 0x02,
OPC2_32_RR_UNPACK = 0x08,
OPC2_32_RR_CRC32 = 0x03,
OPC2_32_RR_DIV = 0x20,
OPC2_32_RR_DIV_U = 0x21,
OPC2_32_RR_MUL_F = 0x04,
OPC2_32_RR_DIV_F = 0x05,
OPC2_32_RR_FTOI = 0x10,
OPC2_32_RR_ITOF = 0x14,
OPC2_32_RR_CMP_F = 0x00,
OPC2_32_RR_FTOIZ = 0x13,
OPC2_32_RR_FTOQ31 = 0x11,
OPC2_32_RR_FTOQ31Z = 0x18,
OPC2_32_RR_FTOU = 0x12,
OPC2_32_RR_FTOUZ = 0x17,
OPC2_32_RR_Q31TOF = 0x15,
OPC2_32_RR_QSEED_F = 0x19,
OPC2_32_RR_UPDFL = 0x0c,
OPC2_32_RR_UTOF = 0x16,
};
/* OPCM_32_RR_IDIRECT */
enum {
OPC2_32_RR_JI = 0x03,
OPC2_32_RR_JLI = 0x02,
OPC2_32_RR_CALLI = 0x00,
OPC2_32_RR_FCALLI = 0x01,
};
/*
* RR1 Format
*/
/* OPCM_32_RR1_MUL */
enum {
OPC2_32_RR1_MUL_H_32_LL = 0x1a,
OPC2_32_RR1_MUL_H_32_LU = 0x19,
OPC2_32_RR1_MUL_H_32_UL = 0x18,
OPC2_32_RR1_MUL_H_32_UU = 0x1b,
OPC2_32_RR1_MULM_H_64_LL = 0x1e,
OPC2_32_RR1_MULM_H_64_LU = 0x1d,
OPC2_32_RR1_MULM_H_64_UL = 0x1c,
OPC2_32_RR1_MULM_H_64_UU = 0x1f,
OPC2_32_RR1_MULR_H_16_LL = 0x0e,
OPC2_32_RR1_MULR_H_16_LU = 0x0d,
OPC2_32_RR1_MULR_H_16_UL = 0x0c,
OPC2_32_RR1_MULR_H_16_UU = 0x0f,
};
/* OPCM_32_RR1_MULQ */
enum {
OPC2_32_RR1_MUL_Q_32 = 0x02,
OPC2_32_RR1_MUL_Q_64 = 0x1b,
OPC2_32_RR1_MUL_Q_32_L = 0x01,
OPC2_32_RR1_MUL_Q_64_L = 0x19,
OPC2_32_RR1_MUL_Q_32_U = 0x00,
OPC2_32_RR1_MUL_Q_64_U = 0x18,
OPC2_32_RR1_MUL_Q_32_LL = 0x05,
OPC2_32_RR1_MUL_Q_32_UU = 0x04,
OPC2_32_RR1_MULR_Q_32_L = 0x07,
OPC2_32_RR1_MULR_Q_32_U = 0x06,
};
/*
* RR2 Format
*/
/* OPCM_32_RR2_MUL */
enum {
OPC2_32_RR2_MUL_32 = 0x0a,
OPC2_32_RR2_MUL_64 = 0x6a,
OPC2_32_RR2_MULS_32 = 0x8a,
OPC2_32_RR2_MUL_U_64 = 0x68,
OPC2_32_RR2_MULS_U_32 = 0x88,
};
/*
* RRPW Format
*/
/* OPCM_32_RRPW_EXTRACT_INSERT */
enum {
OPC2_32_RRPW_EXTR = 0x02,
OPC2_32_RRPW_EXTR_U = 0x03,
OPC2_32_RRPW_IMASK = 0x01,
OPC2_32_RRPW_INSERT = 0x00,
};
/*
* RRR Format
*/
/* OPCM_32_RRR_COND_SELECT */
enum {
OPC2_32_RRR_CADD = 0x00,
OPC2_32_RRR_CADDN = 0x01,
OPC2_32_RRR_CSUB = 0x02,
OPC2_32_RRR_CSUBN = 0x03,
OPC2_32_RRR_SEL = 0x04,
OPC2_32_RRR_SELN = 0x05,
};
/* OPCM_32_RRR_FLOAT */
enum {
OPC2_32_RRR_DVADJ = 0x0d,
OPC2_32_RRR_DVSTEP = 0x0f,
OPC2_32_RRR_DVSTEP_U = 0x0e,
OPC2_32_RRR_IXMAX = 0x0a,
OPC2_32_RRR_IXMAX_U = 0x0b,
OPC2_32_RRR_IXMIN = 0x08,
OPC2_32_RRR_IXMIN_U = 0x09,
OPC2_32_RRR_PACK = 0x00,
OPC2_32_RRR_ADD_F = 0x02,
OPC2_32_RRR_SUB_F = 0x03,
OPC2_32_RRR_MADD_F = 0x06,
OPC2_32_RRR_MSUB_F = 0x07,
};
/*
* RRR1 Format
*/
/* OPCM_32_RRR1_MADD */
enum {
OPC2_32_RRR1_MADD_H_LL = 0x1a,
OPC2_32_RRR1_MADD_H_LU = 0x19,
OPC2_32_RRR1_MADD_H_UL = 0x18,
OPC2_32_RRR1_MADD_H_UU = 0x1b,
OPC2_32_RRR1_MADDS_H_LL = 0x3a,
OPC2_32_RRR1_MADDS_H_LU = 0x39,
OPC2_32_RRR1_MADDS_H_UL = 0x38,
OPC2_32_RRR1_MADDS_H_UU = 0x3b,
OPC2_32_RRR1_MADDM_H_LL = 0x1e,
OPC2_32_RRR1_MADDM_H_LU = 0x1d,
OPC2_32_RRR1_MADDM_H_UL = 0x1c,
OPC2_32_RRR1_MADDM_H_UU = 0x1f,
OPC2_32_RRR1_MADDMS_H_LL = 0x3e,
OPC2_32_RRR1_MADDMS_H_LU = 0x3d,
OPC2_32_RRR1_MADDMS_H_UL = 0x3c,
OPC2_32_RRR1_MADDMS_H_UU = 0x3f,
OPC2_32_RRR1_MADDR_H_LL = 0x0e,
OPC2_32_RRR1_MADDR_H_LU = 0x0d,
OPC2_32_RRR1_MADDR_H_UL = 0x0c,
OPC2_32_RRR1_MADDR_H_UU = 0x0f,
OPC2_32_RRR1_MADDRS_H_LL = 0x2e,
OPC2_32_RRR1_MADDRS_H_LU = 0x2d,
OPC2_32_RRR1_MADDRS_H_UL = 0x2c,
OPC2_32_RRR1_MADDRS_H_UU = 0x2f,
};
/* OPCM_32_RRR1_MADDQ_H */
enum {
OPC2_32_RRR1_MADD_Q_32 = 0x02,
OPC2_32_RRR1_MADD_Q_64 = 0x1b,
OPC2_32_RRR1_MADD_Q_32_L = 0x01,
OPC2_32_RRR1_MADD_Q_64_L = 0x19,
OPC2_32_RRR1_MADD_Q_32_U = 0x00,
OPC2_32_RRR1_MADD_Q_64_U = 0x18,
OPC2_32_RRR1_MADD_Q_32_LL = 0x05,
OPC2_32_RRR1_MADD_Q_64_LL = 0x1d,
OPC2_32_RRR1_MADD_Q_32_UU = 0x04,
OPC2_32_RRR1_MADD_Q_64_UU = 0x1c,
OPC2_32_RRR1_MADDS_Q_32 = 0x22,
OPC2_32_RRR1_MADDS_Q_64 = 0x3b,
OPC2_32_RRR1_MADDS_Q_32_L = 0x21,
OPC2_32_RRR1_MADDS_Q_64_L = 0x39,
OPC2_32_RRR1_MADDS_Q_32_U = 0x20,
OPC2_32_RRR1_MADDS_Q_64_U = 0x38,
OPC2_32_RRR1_MADDS_Q_32_LL = 0x25,
OPC2_32_RRR1_MADDS_Q_64_LL = 0x3d,
OPC2_32_RRR1_MADDS_Q_32_UU = 0x24,
OPC2_32_RRR1_MADDS_Q_64_UU = 0x3c,
OPC2_32_RRR1_MADDR_H_64_UL = 0x1e,
OPC2_32_RRR1_MADDRS_H_64_UL = 0x3e,
OPC2_32_RRR1_MADDR_Q_32_LL = 0x07,
OPC2_32_RRR1_MADDR_Q_32_UU = 0x06,
OPC2_32_RRR1_MADDRS_Q_32_LL = 0x27,
OPC2_32_RRR1_MADDRS_Q_32_UU = 0x26,
};
/* OPCM_32_RRR1_MADDSU_H */
enum {
OPC2_32_RRR1_MADDSU_H_32_LL = 0x1a,
OPC2_32_RRR1_MADDSU_H_32_LU = 0x19,
OPC2_32_RRR1_MADDSU_H_32_UL = 0x18,
OPC2_32_RRR1_MADDSU_H_32_UU = 0x1b,
OPC2_32_RRR1_MADDSUS_H_32_LL = 0x3a,
OPC2_32_RRR1_MADDSUS_H_32_LU = 0x39,
OPC2_32_RRR1_MADDSUS_H_32_UL = 0x38,
OPC2_32_RRR1_MADDSUS_H_32_UU = 0x3b,
OPC2_32_RRR1_MADDSUM_H_64_LL = 0x1e,
OPC2_32_RRR1_MADDSUM_H_64_LU = 0x1d,
OPC2_32_RRR1_MADDSUM_H_64_UL = 0x1c,
OPC2_32_RRR1_MADDSUM_H_64_UU = 0x1f,
OPC2_32_RRR1_MADDSUMS_H_64_LL = 0x3e,
OPC2_32_RRR1_MADDSUMS_H_64_LU = 0x3d,
OPC2_32_RRR1_MADDSUMS_H_64_UL = 0x3c,
OPC2_32_RRR1_MADDSUMS_H_64_UU = 0x3f,
OPC2_32_RRR1_MADDSUR_H_16_LL = 0x0e,
OPC2_32_RRR1_MADDSUR_H_16_LU = 0x0d,
OPC2_32_RRR1_MADDSUR_H_16_UL = 0x0c,
OPC2_32_RRR1_MADDSUR_H_16_UU = 0x0f,
OPC2_32_RRR1_MADDSURS_H_16_LL = 0x2e,
OPC2_32_RRR1_MADDSURS_H_16_LU = 0x2d,
OPC2_32_RRR1_MADDSURS_H_16_UL = 0x2c,
OPC2_32_RRR1_MADDSURS_H_16_UU = 0x2f,
};
/* OPCM_32_RRR1_MSUB_H */
enum {
OPC2_32_RRR1_MSUB_H_LL = 0x1a,
OPC2_32_RRR1_MSUB_H_LU = 0x19,
OPC2_32_RRR1_MSUB_H_UL = 0x18,
OPC2_32_RRR1_MSUB_H_UU = 0x1b,
OPC2_32_RRR1_MSUBS_H_LL = 0x3a,
OPC2_32_RRR1_MSUBS_H_LU = 0x39,
OPC2_32_RRR1_MSUBS_H_UL = 0x38,
OPC2_32_RRR1_MSUBS_H_UU = 0x3b,
OPC2_32_RRR1_MSUBM_H_LL = 0x1e,
OPC2_32_RRR1_MSUBM_H_LU = 0x1d,
OPC2_32_RRR1_MSUBM_H_UL = 0x1c,
OPC2_32_RRR1_MSUBM_H_UU = 0x1f,
OPC2_32_RRR1_MSUBMS_H_LL = 0x3e,
OPC2_32_RRR1_MSUBMS_H_LU = 0x3d,
OPC2_32_RRR1_MSUBMS_H_UL = 0x3c,
OPC2_32_RRR1_MSUBMS_H_UU = 0x3f,
OPC2_32_RRR1_MSUBR_H_LL = 0x0e,
OPC2_32_RRR1_MSUBR_H_LU = 0x0d,
OPC2_32_RRR1_MSUBR_H_UL = 0x0c,
OPC2_32_RRR1_MSUBR_H_UU = 0x0f,
OPC2_32_RRR1_MSUBRS_H_LL = 0x2e,
OPC2_32_RRR1_MSUBRS_H_LU = 0x2d,
OPC2_32_RRR1_MSUBRS_H_UL = 0x2c,
OPC2_32_RRR1_MSUBRS_H_UU = 0x2f,
};
/* OPCM_32_RRR1_MSUB_Q */
enum {
OPC2_32_RRR1_MSUB_Q_32 = 0x02,
OPC2_32_RRR1_MSUB_Q_64 = 0x1b,
OPC2_32_RRR1_MSUB_Q_32_L = 0x01,
OPC2_32_RRR1_MSUB_Q_64_L = 0x19,
OPC2_32_RRR1_MSUB_Q_32_U = 0x00,
OPC2_32_RRR1_MSUB_Q_64_U = 0x18,
OPC2_32_RRR1_MSUB_Q_32_LL = 0x05,
OPC2_32_RRR1_MSUB_Q_64_LL = 0x1d,
OPC2_32_RRR1_MSUB_Q_32_UU = 0x04,
OPC2_32_RRR1_MSUB_Q_64_UU = 0x1c,
OPC2_32_RRR1_MSUBS_Q_32 = 0x22,
OPC2_32_RRR1_MSUBS_Q_64 = 0x3b,
OPC2_32_RRR1_MSUBS_Q_32_L = 0x21,
OPC2_32_RRR1_MSUBS_Q_64_L = 0x39,
OPC2_32_RRR1_MSUBS_Q_32_U = 0x20,
OPC2_32_RRR1_MSUBS_Q_64_U = 0x38,
OPC2_32_RRR1_MSUBS_Q_32_LL = 0x25,
OPC2_32_RRR1_MSUBS_Q_64_LL = 0x3d,
OPC2_32_RRR1_MSUBS_Q_32_UU = 0x24,
OPC2_32_RRR1_MSUBS_Q_64_UU = 0x3c,
OPC2_32_RRR1_MSUBR_H_64_UL = 0x1e,
OPC2_32_RRR1_MSUBRS_H_64_UL = 0x3e,
OPC2_32_RRR1_MSUBR_Q_32_LL = 0x07,
OPC2_32_RRR1_MSUBR_Q_32_UU = 0x06,
OPC2_32_RRR1_MSUBRS_Q_32_LL = 0x27,
OPC2_32_RRR1_MSUBRS_Q_32_UU = 0x26,
};
/* OPCM_32_RRR1_MSUBADS_H */
enum {
OPC2_32_RRR1_MSUBAD_H_32_LL = 0x1a,
OPC2_32_RRR1_MSUBAD_H_32_LU = 0x19,
OPC2_32_RRR1_MSUBAD_H_32_UL = 0x18,
OPC2_32_RRR1_MSUBAD_H_32_UU = 0x1b,
OPC2_32_RRR1_MSUBADS_H_32_LL = 0x3a,
OPC2_32_RRR1_MSUBADS_H_32_LU = 0x39,
OPC2_32_RRR1_MSUBADS_H_32_UL = 0x38,
OPC2_32_RRR1_MSUBADS_H_32_UU = 0x3b,
OPC2_32_RRR1_MSUBADM_H_64_LL = 0x1e,
OPC2_32_RRR1_MSUBADM_H_64_LU = 0x1d,
OPC2_32_RRR1_MSUBADM_H_64_UL = 0x1c,
OPC2_32_RRR1_MSUBADM_H_64_UU = 0x1f,
OPC2_32_RRR1_MSUBADMS_H_64_LL = 0x3e,
OPC2_32_RRR1_MSUBADMS_H_64_LU = 0x3d,
OPC2_32_RRR1_MSUBADMS_H_64_UL = 0x3c,
OPC2_32_RRR1_MSUBADMS_H_64_UU = 0x3f,
OPC2_32_RRR1_MSUBADR_H_16_LL = 0x0e,
OPC2_32_RRR1_MSUBADR_H_16_LU = 0x0d,
OPC2_32_RRR1_MSUBADR_H_16_UL = 0x0c,
OPC2_32_RRR1_MSUBADR_H_16_UU = 0x0f,
OPC2_32_RRR1_MSUBADRS_H_16_LL = 0x2e,
OPC2_32_RRR1_MSUBADRS_H_16_LU = 0x2d,
OPC2_32_RRR1_MSUBADRS_H_16_UL = 0x2c,
OPC2_32_RRR1_MSUBADRS_H_16_UU = 0x2f,
};
/*
* RRR2 Format
*/
/* OPCM_32_RRR2_MADD */
enum {
OPC2_32_RRR2_MADD_32 = 0x0a,
OPC2_32_RRR2_MADD_64 = 0x6a,
OPC2_32_RRR2_MADDS_32 = 0x8a,
OPC2_32_RRR2_MADDS_64 = 0xea,
OPC2_32_RRR2_MADD_U_64 = 0x68,
OPC2_32_RRR2_MADDS_U_32 = 0x88,
OPC2_32_RRR2_MADDS_U_64 = 0xe8,
};
/* OPCM_32_RRR2_MSUB */
enum {
OPC2_32_RRR2_MSUB_32 = 0x0a,
OPC2_32_RRR2_MSUB_64 = 0x6a,
OPC2_32_RRR2_MSUBS_32 = 0x8a,
OPC2_32_RRR2_MSUBS_64 = 0xea,
OPC2_32_RRR2_MSUB_U_64 = 0x68,
OPC2_32_RRR2_MSUBS_U_32 = 0x88,
OPC2_32_RRR2_MSUBS_U_64 = 0xe8,
};
/*
* RRRR Format
*/
/* OPCM_32_RRRR_EXTRACT_INSERT */
enum {
OPC2_32_RRRR_DEXTR = 0x04,
OPC2_32_RRRR_EXTR = 0x02,
OPC2_32_RRRR_EXTR_U = 0x03,
OPC2_32_RRRR_INSERT = 0x00,
};
/*
* RRRW Format
*/
/* OPCM_32_RRRW_EXTRACT_INSERT */
enum {
OPC2_32_RRRW_EXTR = 0x02,
OPC2_32_RRRW_EXTR_U = 0x03,
OPC2_32_RRRW_IMASK = 0x01,
OPC2_32_RRRW_INSERT = 0x00,
};
/*
* SYS Format
*/
/* OPCM_32_SYS_INTERRUPTS */
enum {
OPC2_32_SYS_DEBUG = 0x04,
OPC2_32_SYS_DISABLE = 0x0d,
OPC2_32_SYS_DSYNC = 0x12,
OPC2_32_SYS_ENABLE = 0x0c,
OPC2_32_SYS_ISYNC = 0x13,
OPC2_32_SYS_NOP = 0x00,
OPC2_32_SYS_RET = 0x06,
OPC2_32_SYS_RFE = 0x07,
OPC2_32_SYS_RFM = 0x05,
OPC2_32_SYS_RSLCX = 0x09,
OPC2_32_SYS_SVLCX = 0x08,
OPC2_32_SYS_TRAPSV = 0x15,
OPC2_32_SYS_TRAPV = 0x14,
OPC2_32_SYS_RESTORE = 0x0e,
OPC2_32_SYS_FRET = 0x03,
};
#endif