blob: 85d856449b9586bbec58b41da39299a62f99c28c [file] [log] [blame]
/* CPU data header for arc.
THIS FILE IS MACHINE GENERATED WITH CGEN.
Copyright 1996-2007 Free Software Foundation, Inc.
This file is part of the GNU Binutils and/or GDB, the GNU debugger.
This file is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3, or (at your option)
any later version.
It 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 General Public
License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef ARC_CPU_H
#define ARC_CPU_H
#include "opcode/cgen-bitset.h"
#define CGEN_ARCH arc
/* Given symbol S, return arc_cgen_<S>. */
#if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
#define CGEN_SYM(s) arc##_cgen_##s
#else
#define CGEN_SYM(s) arc/**/_cgen_/**/s
#endif
/* Selected cpu families. */
#define HAVE_CPU_A5F
#define HAVE_CPU_ARC600F
#define HAVE_CPU_ARC700F
#define CGEN_INSN_LSB0_P 0
/* Minimum size of any insn (in bytes). */
#define CGEN_MIN_INSN_SIZE 4
/* Maximum size of any insn (in bytes). */
#define CGEN_MAX_INSN_SIZE 4
#define CGEN_INT_INSN_P 1
/* Maximum number of syntax elements in an instruction. */
#define CGEN_ACTUAL_MAX_SYNTAX_ELEMENTS 19
/* CGEN_MNEMONIC_OPERANDS is defined if mnemonics have operands.
e.g. In "b,a foo" the ",a" is an operand. If mnemonics have operands
we can't hash on everything up to the space. */
#define CGEN_MNEMONIC_OPERANDS
/* Maximum number of fields in an instruction. */
#define CGEN_ACTUAL_MAX_IFMT_OPERANDS 8
/* Enums. */
/* Enum declaration for enum values for Qcond to be used in case form. */
typedef enum e_qvalues {
COND_AL = 0, COND_EQ = 1, COND_Z = 1, COND_NE = 2
, COND_NZ = 2, COND_PL = 3, COND_P = 3, COND_MI = 4
, COND_N = 4, COND_CS = 5, COND_C = 5, COND_LO = 5
, COND_CC = 6, COND_NC = 6, COND_HS = 6, COND_VS = 7
, COND_V = 7, COND_VC = 8, COND_NV = 8, COND_GT = 9
, COND_GE = 10, COND_LT = 11, COND_LE = 12, COND_HI = 13
, COND_LS = 14, COND_PNZ = 15
} E_QVALUES;
/* Enum declaration for enum values for i3cond to be used in case form. */
typedef enum e_i3cond {
COND3_GT = 0, COND3_GE = 1, COND3_LT = 2, COND3_LE = 3
, COND3_HI = 4, COND3_CC = 5, COND3_NC = 5, COND3_HS = 5
, COND3_CS = 6, COND3_C = 6, COND3_LO = 6, COND3_LS = 7
} E_I3COND;
/* Enum declaration for enum values for brcond to be used in case form. */
typedef enum e_brcond {
CONDBR_REQ = 0, CONDBR_RNE = 1, CONDBR_RLT = 2, CONDBR_RGE = 3
, CONDBR_RLO = 4, CONDBR_RHS = 5, CONDBR_BIT0 = 14, CONDBR_BIT1 = 15
} E_BRCOND;
/* Enum declaration for . */
typedef enum cr_names {
H_CR_GP = 26, H_CR_FP = 27, H_CR_SP = 28, H_CR_BLINK = 31
, H_CR_MLO = 57, H_CR_MMID = 58, H_CR_MHI = 59, H_CR_LP_COUNT = 60
, H_CR_PCL = 63, H_CR_ILINK1 = 29, H_CR_ILINK2 = 30, H_CR_R29 = 29
, H_CR_R30 = 30, H_CR_R0 = 0, H_CR_R1 = 1, H_CR_R2 = 2
, H_CR_R3 = 3, H_CR_R4 = 4, H_CR_R5 = 5, H_CR_R6 = 6
, H_CR_R7 = 7, H_CR_R8 = 8, H_CR_R9 = 9, H_CR_R10 = 10
, H_CR_R11 = 11, H_CR_R12 = 12, H_CR_R13 = 13, H_CR_R14 = 14
, H_CR_R15 = 15, H_CR_R16 = 16, H_CR_R17 = 17, H_CR_R18 = 18
, H_CR_R19 = 19, H_CR_R20 = 20, H_CR_R21 = 21, H_CR_R22 = 22
, H_CR_R23 = 23, H_CR_R24 = 24, H_CR_R25 = 25, H_CR_R26 = 26
, H_CR_R27 = 27, H_CR_R28 = 28, H_CR_R31 = 31, H_CR_R32 = 32
, H_CR_R33 = 33, H_CR_R34 = 34, H_CR_R35 = 35, H_CR_R36 = 36
, H_CR_R37 = 37, H_CR_R38 = 38, H_CR_R39 = 39, H_CR_R40 = 40
, H_CR_R41 = 41, H_CR_R42 = 42, H_CR_R43 = 43, H_CR_R44 = 44
, H_CR_R45 = 45, H_CR_R46 = 46, H_CR_R47 = 47, H_CR_R48 = 48
, H_CR_R49 = 49, H_CR_R50 = 50, H_CR_R51 = 51, H_CR_R52 = 52
, H_CR_R53 = 53, H_CR_R54 = 54, H_CR_R55 = 55, H_CR_R56 = 56
, H_CR_R57 = 57, H_CR_R58 = 58, H_CR_R59 = 59, H_CR_R60 = 60
} CR_NAMES;
/* Enum declaration for Core Register A encodings. */
typedef enum e_ra_rn {
RA_R0, RA_R1, RA_R2, RA_R3
, RA_R4, RA_R5, RA_R6, RA_R7
, RA_R8, RA_R9, RA_R10, RA_R11
, RA_R12, RA_R13, RA_R14, RA_R15
, RA_R16, RA_R17, RA_R18, RA_R19
, RA_R20, RA_R21, RA_R22, RA_R23
, RA_R24, RA_R25, RA_R26, RA_R27
, RA_R28, RA_R29, RA_R30, RA_R31
, RA_R32, RA_R33, RA_R34, RA_R35
, RA_R36, RA_R37, RA_R38, RA_R39
, RA_R40, RA_R41, RA_R42, RA_R43
, RA_R44, RA_R45, RA_R46, RA_R47
, RA_R48, RA_R49, RA_R50, RA_R51
, RA_R52, RA_R53, RA_R54, RA_R55
, RA_R56, RA_R57, RA_R58, RA_R59
, RA_R60, RA_R61, RA_R62, RA_R63
} E_RA_RN;
/* Enum declaration for major opcode. */
typedef enum op_maj {
OPM_B = 0, OPM_BLR = 1, OPM_LD_S9 = 2, OPM_ST_S9 = 3
, OPM_GO = 4, OPM_X05 = 5, OPM_X06 = 6, OPM_X07 = 7
, OPM_SLDADDR = 12, OPM_SADDSUBSHI = 13, OPM_SMOVCMPADDH = 14, OPM_SGO = 15
, OPM_LDO_S = 16, OPM_LDOB_S = 17, OPM_LDOW_S = 18, OPM_LDOWX_S = 19
, OPM_STO_S = 20, OPM_STOB_S = 21, OPM_STOW_S = 22, OPM_SSHSUBBIMM = 23
, OPM_SP = 24, OPM_GP = 25, OPM_LDPCREL = 26, OPM_SMOVU8 = 27
, OPM_SADDCMPU7 = 28, OPM_BR_S = 29, OPM_B_S = 30, OPM_BL_S = 31
, OPM_PSEUDO = 32
} OP_MAJ;
/* Enum declaration for general operations type. */
typedef enum go_type {
GO_TYPE_R_R, GO_TYPE_U6, GO_TYPE_S12, GO_TYPE_CC
} GO_TYPE;
/* Enum declaration for general operations conditional subtype. */
typedef enum go_cc_type {
GO_CC_REG, GO_CC_U6
} GO_CC_TYPE;
/* Enum declaration for general operations type. */
typedef enum go_op {
GO_OP_ADD = 0, GO_OP_ADC = 1, GO_OP_SUB = 2, GO_OP_SBC = 3
, GO_OP_AND = 4, GO_OP_OR = 5, GO_OP_BIC = 6, GO_OP_XOR = 7
, GO_OP_MAX = 8, GO_OP_MIN = 9, GO_OP_MOV = 10, GO_OP_TST = 11
, GO_OP_CMP = 12, GO_OP_RCMP = 13, GO_OP_RSUB = 14, GO_OP_BSET = 15
, GO_OP_BCLR = 16, GO_OP_BTST = 17, GO_OP_BXOR = 18, GO_OP_BMSK = 19
, GO_OP_ADD1 = 20, GO_OP_ADD2 = 21, GO_OP_ADD3 = 22, GO_OP_SUB1 = 23
, GO_OP_SUB2 = 24, GO_OP_SUB3 = 25, GO_OP_MPY = 26, GO_OP_MPYH = 27
, GO_OP_MPYHU = 28, GO_OP_MPYU = 29, GO_OP_RES30 = 30, GO_OP_RES31 = 31
, GO_OP_J = 32, GO_OP_J_D = 33, GO_OP_JL = 34, GO_OP_JL_D = 35
, GO_OP_LP = 40, GO_OP_FLAG = 41, GO_OP_LR = 42, GO_OP_SR = 43
, GO_OP_SOP = 47
} GO_OP;
/* Enum declaration for general single-operand operations type. */
typedef enum go_sop {
GO_OP_SOP_ASL = 0, GO_OP_SOP_ASR = 1, GO_OP_SOP_LSR = 2, GO_OP_SOP_ROR = 3
, GO_OP_SOP_RRC = 4, GO_OP_SOP_SEXB = 5, GO_OP_SOP_SEXW = 6, GO_OP_SOP_EXTB = 7
, GO_OP_SOP_EXTW = 8, GO_OP_SOP_ABS = 9, GO_OP_SOP_NOT = 10, GO_OP_SOP_RLC = 11
, GO_OP_SOP_EX = 12, GO_OP_SOP_ZOP = 63, GO_OP_SOP_PSEUDO = 62
} GO_SOP;
/* Enum declaration for short add / sub immediate type. */
typedef enum i16ldaddr_type {
I16_LDADDR_LD, I16_LDADDR_LDB, I16_LDADDR_LDW, I16_LDADDR_ADD
} I16LDADDR_TYPE;
/* Enum declaration for short add / sub immediate type. */
typedef enum i16addsubshi_type {
I16_ADDSUBSHI_ADD, I16_ADDSUBSHI_SUB, I16_ADDSUBSHI_ASL, I16_ADDSUBSHI_ASR
} I16ADDSUBSHI_TYPE;
/* Enum declaration for short mov / cmp / add with high register type. */
typedef enum i16movcmpaddh_type {
I16_MOVCMPADDH_ADD, I16_MOVCMPADDH_MOVBH, I16_MOVCMPADDH_CMP, I16_MOVCMPADDH_MOVHB
} I16MOVCMPADDH_TYPE;
/* Enum declaration for short general operations. */
typedef enum i16go_type {
I16_GO_SOP = 0, I16_GO_SUB = 2, I16_GO_AND = 4, I16_GO_OR = 5
, I16_GO_BIC = 6, I16_GO_XOR = 7, I16_GO_TST = 11, I16_GO_MUL64 = 12
, I16_GO_SEXB = 13, I16_GO_SEXW = 14, I16_GO_EXTB = 15, I16_GO_EXTW = 16
, I16_GO_ABS = 17, I16_GO_NOT = 18, I16_GO_NEG = 19, I16_GO_ADD1 = 20
, I16_GO_ADD2 = 21, I16_GO_ADD3 = 22, I16_GO_ASLM = 24, I16_GO_LSRM = 25
, I16_GO_ASRM = 26, I16_GO_ASL = 27, I16_GO_ASR = 28, I16_GO_LSR = 29
, I16_GO_TRAP = 30, I16_GO_BRK = 31
} I16GO_TYPE;
/* Enum declaration for short general operations single operand. */
typedef enum i16go_sop_type {
I16_GO_SOP_J = 0, I16_GO_SOP_J_D = 1, I16_GO_SOP_JL = 2, I16_GO_SOP_JL_D = 3
, I16_GO_SOP_SUB_NE = 6, I16_GO_SOP_ZOP = 7
} I16GO_SOP_TYPE;
/* Enum declaration for short general operations single operand. */
typedef enum i16go_zop_type {
I16_GO_ZOP_NOP = 0, I16_GO_ZOP_UNIMP = 1, I16_GO_ZOP_JEQ = 4, I16_GO_ZOP_JNE = 5
, I16_GO_ZOP_J = 6, I16_GO_ZOP_J_D = 7
} I16GO_ZOP_TYPE;
/* Enum declaration for sp based insn type. */
typedef enum i16sp_type {
I16_SP_LD, I16_SP_LDB, I16_SP_ST, I16_SP_STB
, I16_SP_ADD, I16_SP_ADDSUB, I16_SP_POP, I16_SP_PUSH
} I16SP_TYPE;
/* Enum declaration for sp based 1op insn type. */
typedef enum i16addsub_spsp_type {
I16_SP_ADDSUB_ADD, I16_SP_ADDSUB_SUB
} I16ADDSUB_SPSP_TYPE;
/* Enum declaration for gp-relative insn type. */
typedef enum i16gp_type {
I16_GP_LD, I16_GP_LDB, I16_GP_LDW, I16_GP_ADD
} I16GP_TYPE;
/* Enum declaration for short add / cmp immediate type. */
typedef enum i16addcmpu7_type {
I16_ADDCMPU7_ADD, I16_ADDCMPU7_CMP
} I16ADDCMPU7_TYPE;
/* Enum declaration for shift / sub / bit immediate short insn w/ u5 type. */
typedef enum i16shsubbimm {
I16_SHSUBBIMM_ASL, I16_SHSUBBIMM_LSR, I16_SHSUBBIMM_ASR, I16_SHSUBBIMM_SUB
, I16_SHSUBBIMM_BSET, I16_SHSUBBIMM_BCLR, I16_SHSUBBIMM_BMSK, I16_SHSUBBIMM_BTST
} I16SHSUBBIMM;
/* Enum declaration for . */
typedef enum i_buf {
B_CC, B_UNCOND_FAR
} I_BUF;
/* Enum declaration for . */
typedef enum i_blr {
BLR_BL, BLR_BR
} I_BLR;
/* Enum declaration for . */
typedef enum i_br {
BR_RC, BR_U6
} I_BR;
/* Enum declaration for . */
typedef enum op_bl {
BL_CC, BL_UNCOND_FAR
} OP_BL;
/* Enum declaration for . */
typedef enum i_bcc_s {
B_S_CC = 3
} I_BCC_S;
/* Enum declaration for . */
typedef enum i_ldozz {
LDO_LD = 0, LDO_LDB = 2, LDO_LDBX = 3, LDO_LDW = 4
, LDO_LDWX = 5
} I_LDOZZ;
/* Enum declaration for . */
typedef enum i_ldr6zzx {
LDR_LD = 48, LDR_LDB = 50, LDR_LDBX = 51, LDR_LDW = 52
, LDR_LDWX = 53
} I_LDR6ZZX;
/* Enum declaration for . */
typedef enum i_stozzr {
STO_ST = 0, STO_STB = 2, STO_STW = 4
} I_STOZZR;
/* Enum declaration for . */
typedef enum i_ldoaa {
LDOAA_NO, LDOAA_AW, LDOAA_AB, LDOAA_AS
} I_LDOAA;
/* Enum declaration for . */
typedef enum i_ldraa {
LDRAA_NO, LDRAA_AW, LDRAA_AB, LDRAA_AS
} I_LDRAA;
/* Enum declaration for . */
typedef enum i_stoaa {
STOAA_NO, STOAA_AW, STOAA_AB, STOAA_AS
} I_STOAA;
/* Enum declaration for general zero-operand operations type. */
typedef enum go_zop {
GO_OP_ZOP_SLEEP = 1, GO_OP_ZOP_SWI = 2, GO_OP_ZOP_SYNC = 3, GO_OP_ZOP_RTIE = 4
, GO_OP_ZOP_BRK = 5
} GO_ZOP;
/* Enum declaration for general operations type. */
typedef enum x05_go_op {
X05_ASL = 0, X05_LSR = 1, X05_ASR = 2, X05_ROR = 3
, X05_MUL64 = 4, X05_MULU64 = 5, X05_ADDS = 6, X05_SUBS = 7
, X05_DIVAW = 8, X05_ASLS = 10, X05_ASRS = 11, X05_ADDSDW = 40
, X05_SUBSDW = 41, X05_SOP = 47, X05_CMACRDW = 38, X05_MACDW = 16
, X05_MACFLW = 52, X05_MACHFLW = 55, X05_MACHLW = 54, X05_MACHULW = 53
, X05_MACLW = 51, X05_MACRDW = 18, X05_MACUDW = 17, X05_MSUBDW = 20
, X05_MULDW = 12, X05_MULFLW = 50, X05_MULHFLW = 57, X05_MULHLW = 56
, X05_MULLW = 49, X05_MULRDW = 14, X05_MULUDW = 13, X05_MULULW = 48
} X05_GO_OP;
/* Enum declaration for x06 extension single-operand operantion. */
typedef enum x05_sop_kind {
X05_SOP_SWAP = 0, X05_SOP_NORM = 1, X05_SOP_SAT16 = 2, X05_SOP_RND16 = 3
, X05_SOP_ABSSW = 4, X05_SOP_ABSS = 5, X05_SOP_NEGSW = 6, X05_SOP_NEGS = 7
, X05_SOP_NORMW = 8, X05_SOP_ZOP = 63
} X05_SOP_KIND;
/* Enum declaration for . */
typedef enum pushpop_kind {
PUSHPOP_B = 1, PUSHPOP_BLINK = 17
} PUSHPOP_KIND;
/* Enum declaration for . */
typedef enum pushpop_r_b {
OP_B_0
} PUSHPOP_R_B;
/* Attributes. */
/* Enum declaration for machine type selection. */
typedef enum mach_attr {
MACH_BASE, MACH_A5, MACH_ARC600, MACH_ARC700
, MACH_MAX
} MACH_ATTR;
/* Enum declaration for instruction set selection. */
typedef enum isa_attr {
ISA_ARCOMPACT, ISA_MAX
} ISA_ATTR;
/* Enum declaration for can take long immediate for operand. */
typedef enum limm_attr {
LIMM_NONE, LIMM_H, LIMM_B, LIMM_BC
, LIMM_C
} LIMM_ATTR;
/* Number of architecture variants. */
#define MAX_ISAS 1
#define MAX_MACHS ((int) MACH_MAX)
/* Ifield support. */
/* Ifield attribute indices. */
/* Enum declaration for cgen_ifld attrs. */
typedef enum cgen_ifld_attr {
CGEN_IFLD_VIRTUAL, CGEN_IFLD_PCREL_ADDR, CGEN_IFLD_ABS_ADDR, CGEN_IFLD_RESERVED
, CGEN_IFLD_SIGN_OPT, CGEN_IFLD_SIGNED, CGEN_IFLD_END_BOOLS, CGEN_IFLD_START_NBOOLS = 31
, CGEN_IFLD_MACH, CGEN_IFLD_END_NBOOLS
} CGEN_IFLD_ATTR;
/* Number of non-boolean elements in cgen_ifld_attr. */
#define CGEN_IFLD_NBOOL_ATTRS (CGEN_IFLD_END_NBOOLS - CGEN_IFLD_START_NBOOLS - 1)
/* cgen_ifld attribute accessor macros. */
#define CGEN_ATTR_CGEN_IFLD_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_IFLD_MACH-CGEN_IFLD_START_NBOOLS-1].nonbitset)
#define CGEN_ATTR_CGEN_IFLD_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_VIRTUAL)) != 0)
#define CGEN_ATTR_CGEN_IFLD_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_PCREL_ADDR)) != 0)
#define CGEN_ATTR_CGEN_IFLD_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_ABS_ADDR)) != 0)
#define CGEN_ATTR_CGEN_IFLD_RESERVED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_RESERVED)) != 0)
#define CGEN_ATTR_CGEN_IFLD_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGN_OPT)) != 0)
#define CGEN_ATTR_CGEN_IFLD_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_IFLD_SIGNED)) != 0)
/* Enum declaration for arc ifield types. */
typedef enum ifield_type {
ARC_F_NIL, ARC_F_ANYOF, ARC_F_COND_Q, ARC_F_COND_I2
, ARC_F_COND_I3, ARC_F_BRCOND, ARC_F_OP__A, ARC_F_OP__B
, ARC_F_OP__C, ARC_F_B_5_3, ARC_F_OP_B, ARC_F_OP_C
, ARC_F_OP_CJ, ARC_F_H_2_0, ARC_F_H_5_3, ARC_F_OP_H
, ARC_F_U6, ARC_F_U6X2, ARC_F_DELAY_N, ARC_F_RES27
, ARC_F_F, ARC_F_CBRANCH_IMM, ARC_F_OP_A, ARC_F_S12H
, ARC_F_S12, ARC_F_S12X2, ARC_F_REL10, ARC_F_REL7
, ARC_F_REL8, ARC_F_REL13BL, ARC_F_D21L, ARC_F_D21BL
, ARC_F_D21H, ARC_F_D25M, ARC_F_D25H, ARC_F_REL21
, ARC_F_REL21BL, ARC_F_REL25, ARC_F_REL25BL, ARC_F_D9L
, ARC_F_D9H, ARC_F_REL9, ARC_F_U3, ARC_F_U5
, ARC_F_U7, ARC_F_U8, ARC_F_S9, ARC_F_U5X2
, ARC_F_U5X4, ARC_F_U8X4, ARC_F_S9X1, ARC_F_S9X2
, ARC_F_S9X4, ARC_F_DUMMY, ARC_F_OPM, ARC_F_GO_TYPE
, ARC_F_GO_CC_TYPE, ARC_F_GO_OP, ARC_F_I16_43, ARC_F_I16_GO
, ARC_F_I16_GP_TYPE, ARC_F_I16ADDCMPU7_TYPE, ARC_F_BUF, ARC_F_BR
, ARC_F_BLUF, ARC_F_BRSCOND, ARC_F_LDOZZX, ARC_F_LDR6ZZX
, ARC_F_STOZZR, ARC_F_LDOAA, ARC_F_LDRAA, ARC_F_STOAA
, ARC_F_LDODI, ARC_F_LDRDI, ARC_F_STODI, ARC_F_TRAPNUM
, ARC_F_MAX
} IFIELD_TYPE;
#define MAX_IFLD ((int) ARC_F_MAX)
/* Hardware attribute indices. */
/* Enum declaration for cgen_hw attrs. */
typedef enum cgen_hw_attr {
CGEN_HW_VIRTUAL, CGEN_HW_CACHE_ADDR, CGEN_HW_PC, CGEN_HW_PROFILE
, CGEN_HW_END_BOOLS, CGEN_HW_START_NBOOLS = 31, CGEN_HW_MACH, CGEN_HW_END_NBOOLS
} CGEN_HW_ATTR;
/* Number of non-boolean elements in cgen_hw_attr. */
#define CGEN_HW_NBOOL_ATTRS (CGEN_HW_END_NBOOLS - CGEN_HW_START_NBOOLS - 1)
/* cgen_hw attribute accessor macros. */
#define CGEN_ATTR_CGEN_HW_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_HW_MACH-CGEN_HW_START_NBOOLS-1].nonbitset)
#define CGEN_ATTR_CGEN_HW_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_VIRTUAL)) != 0)
#define CGEN_ATTR_CGEN_HW_CACHE_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_CACHE_ADDR)) != 0)
#define CGEN_ATTR_CGEN_HW_PC_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PC)) != 0)
#define CGEN_ATTR_CGEN_HW_PROFILE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_HW_PROFILE)) != 0)
/* Enum declaration for arc hardware types. */
typedef enum cgen_hw_type {
HW_H_MEMORY, HW_H_SINT, HW_H_UINT, HW_H_ADDR
, HW_H_IADDR, HW_H_LBIT, HW_H_ZBIT, HW_H_NBIT
, HW_H_CBIT, HW_H_VBIT, HW_H_UBIT, HW_H_E1
, HW_H_E2, HW_H_S1BIT, HW_H_S2BIT, HW_H_QCONDB
, HW_H_QCONDJ, HW_H_QCONDI, HW_H_UNCONDB, HW_H_UNCONDJ
, HW_H_UNCONDI, HW_H_I2COND, HW_H_I3COND, HW_H_DELAY
, HW_H_UFLAGS, HW_H_NIL, HW_H_AUFLAGS, HW_H_AUFFLAGS
, HW_H_DI, HW_H_INSN16, HW_H_INSN32, HW_H__AW
, HW_H_CR, HW_H_CR16, HW_H_R0, HW_H_GP
, HW_H_SP, HW_H_PCL, HW_H_NOILINK, HW_H_ILINKX
, HW_H_R31, HW_H_AUXR, HW_H_STATUS32, HW_H_TIMER_EXPIRE
, HW_H_PROF_OFFSET, HW_H_NE, HW_H_PC, HW_H_RCCS
, HW_H_RCC, HW_MAX
} CGEN_HW_TYPE;
#define MAX_HW ((int) HW_MAX)
/* Operand attribute indices. */
/* Enum declaration for cgen_operand attrs. */
typedef enum cgen_operand_attr {
CGEN_OPERAND_VIRTUAL, CGEN_OPERAND_PCREL_ADDR, CGEN_OPERAND_ABS_ADDR, CGEN_OPERAND_SIGN_OPT
, CGEN_OPERAND_SIGNED, CGEN_OPERAND_NEGATIVE, CGEN_OPERAND_RELAX, CGEN_OPERAND_SEM_ONLY
, CGEN_OPERAND_END_BOOLS, CGEN_OPERAND_START_NBOOLS = 31, CGEN_OPERAND_MACH, CGEN_OPERAND_END_NBOOLS
} CGEN_OPERAND_ATTR;
/* Number of non-boolean elements in cgen_operand_attr. */
#define CGEN_OPERAND_NBOOL_ATTRS (CGEN_OPERAND_END_NBOOLS - CGEN_OPERAND_START_NBOOLS - 1)
/* cgen_operand attribute accessor macros. */
#define CGEN_ATTR_CGEN_OPERAND_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_OPERAND_MACH-CGEN_OPERAND_START_NBOOLS-1].nonbitset)
#define CGEN_ATTR_CGEN_OPERAND_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_VIRTUAL)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_PCREL_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_PCREL_ADDR)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_ABS_ADDR_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_ABS_ADDR)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_SIGN_OPT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGN_OPT)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_SIGNED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SIGNED)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_NEGATIVE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_NEGATIVE)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_RELAX_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_RELAX)) != 0)
#define CGEN_ATTR_CGEN_OPERAND_SEM_ONLY_VALUE(attrs) (((attrs)->bool & (1 << CGEN_OPERAND_SEM_ONLY)) != 0)
/* Enum declaration for arc operand types. */
typedef enum cgen_operand_type {
ARC_OPERAND_PC, ARC_OPERAND_LBIT, ARC_OPERAND_ZBIT, ARC_OPERAND_NBIT
, ARC_OPERAND_CBIT, ARC_OPERAND_VBIT, ARC_OPERAND_S1BIT, ARC_OPERAND_S2BIT
, ARC_OPERAND_QCONDB, ARC_OPERAND_QCONDJ, ARC_OPERAND_QCONDI, ARC_OPERAND_UNCONDB
, ARC_OPERAND_UNCONDJ, ARC_OPERAND_UNCONDI, ARC_OPERAND_I2COND, ARC_OPERAND_I3COND
, ARC_OPERAND_DELAY_N, ARC_OPERAND__S, ARC_OPERAND__L, ARC_OPERAND_F
, ARC_OPERAND_F1, ARC_OPERAND_F1F, ARC_OPERAND_F0, ARC_OPERAND_R_A
, ARC_OPERAND_RA, ARC_OPERAND_R_B, ARC_OPERAND_RB, ARC_OPERAND_R_C
, ARC_OPERAND_RC, ARC_OPERAND_RH, ARC_OPERAND_R0, ARC_OPERAND_R31
, ARC_OPERAND_GP, ARC_OPERAND_SP, ARC_OPERAND_PCL, ARC_OPERAND_RA_0
, ARC_OPERAND_RB_0, ARC_OPERAND_RC_ILINK, ARC_OPERAND_RC_NOILINK, ARC_OPERAND_NE
, ARC_OPERAND_U6, ARC_OPERAND_U6X2, ARC_OPERAND_U3, ARC_OPERAND_U5
, ARC_OPERAND_U7, ARC_OPERAND_U8, ARC_OPERAND_S9, ARC_OPERAND_S12
, ARC_OPERAND_S12X2, ARC_OPERAND_U5X4, ARC_OPERAND_SC_U5_, ARC_OPERAND_SC_U5W
, ARC_OPERAND_SC_U5B, ARC_OPERAND_U8X4, ARC_OPERAND_S9X4, ARC_OPERAND_SC_S9_
, ARC_OPERAND_SC_S9W, ARC_OPERAND_SC_S9B, ARC_OPERAND_LABEL7, ARC_OPERAND_LABEL8
, ARC_OPERAND_LABEL9, ARC_OPERAND_LABEL10, ARC_OPERAND_LABEL13A, ARC_OPERAND_LABEL21
, ARC_OPERAND_LABEL21A, ARC_OPERAND_LABEL25, ARC_OPERAND_LABEL25A, ARC_OPERAND_DUMMY_OP
, ARC_OPERAND_RCCS, ARC_OPERAND_RCC, ARC_OPERAND_LDODI, ARC_OPERAND_LDRDI
, ARC_OPERAND_STODI, ARC_OPERAND_EXDI, ARC_OPERAND__AW, ARC_OPERAND_TRAPNUM
, ARC_OPERAND_MAX
} CGEN_OPERAND_TYPE;
/* Number of operands types. */
#define MAX_OPERANDS 76
/* Maximum number of operands referenced by any insn. */
#define MAX_OPERAND_INSTANCES 26
/* Insn attribute indices. */
/* Enum declaration for cgen_insn attrs. */
typedef enum cgen_insn_attr {
CGEN_INSN_ALIAS, CGEN_INSN_VIRTUAL, CGEN_INSN_UNCOND_CTI, CGEN_INSN_COND_CTI
, CGEN_INSN_SKIP_CTI, CGEN_INSN_DELAY_SLOT, CGEN_INSN_RELAXABLE, CGEN_INSN_RELAXED
, CGEN_INSN_NO_DIS, CGEN_INSN_PBB, CGEN_INSN_SHORT_P, CGEN_INSN_END_BOOLS
, CGEN_INSN_START_NBOOLS = 31, CGEN_INSN_MACH, CGEN_INSN_LIMM, CGEN_INSN_END_NBOOLS
} CGEN_INSN_ATTR;
/* Number of non-boolean elements in cgen_insn_attr. */
#define CGEN_INSN_NBOOL_ATTRS (CGEN_INSN_END_NBOOLS - CGEN_INSN_START_NBOOLS - 1)
/* cgen_insn attribute accessor macros. */
#define CGEN_ATTR_CGEN_INSN_MACH_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_MACH-CGEN_INSN_START_NBOOLS-1].nonbitset)
#define CGEN_ATTR_CGEN_INSN_LIMM_VALUE(attrs) ((attrs)->nonbool[CGEN_INSN_LIMM-CGEN_INSN_START_NBOOLS-1].nonbitset)
#define CGEN_ATTR_CGEN_INSN_ALIAS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_ALIAS)) != 0)
#define CGEN_ATTR_CGEN_INSN_VIRTUAL_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_VIRTUAL)) != 0)
#define CGEN_ATTR_CGEN_INSN_UNCOND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_UNCOND_CTI)) != 0)
#define CGEN_ATTR_CGEN_INSN_COND_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_COND_CTI)) != 0)
#define CGEN_ATTR_CGEN_INSN_SKIP_CTI_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_SKIP_CTI)) != 0)
#define CGEN_ATTR_CGEN_INSN_DELAY_SLOT_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_DELAY_SLOT)) != 0)
#define CGEN_ATTR_CGEN_INSN_RELAXABLE_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXABLE)) != 0)
#define CGEN_ATTR_CGEN_INSN_RELAXED_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_RELAXED)) != 0)
#define CGEN_ATTR_CGEN_INSN_NO_DIS_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_NO_DIS)) != 0)
#define CGEN_ATTR_CGEN_INSN_PBB_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_PBB)) != 0)
#define CGEN_ATTR_CGEN_INSN_SHORT_P_VALUE(attrs) (((attrs)->bool & (1 << CGEN_INSN_SHORT_P)) != 0)
/* cgen.h uses things we just defined. */
#include "opcode/cgen.h"
extern const struct cgen_ifld arc_cgen_ifld_table[];
/* Attributes. */
extern const CGEN_ATTR_TABLE arc_cgen_hardware_attr_table[];
extern const CGEN_ATTR_TABLE arc_cgen_ifield_attr_table[];
extern const CGEN_ATTR_TABLE arc_cgen_operand_attr_table[];
extern const CGEN_ATTR_TABLE arc_cgen_insn_attr_table[];
/* Hardware decls. */
extern CGEN_KEYWORD arc_cgen_opval_h_Qcondb;
extern CGEN_KEYWORD arc_cgen_opval_h_Qcondj;
extern CGEN_KEYWORD arc_cgen_opval_h_Qcondi;
extern CGEN_KEYWORD arc_cgen_opval_h_uncondb;
extern CGEN_KEYWORD arc_cgen_opval_h_uncondj;
extern CGEN_KEYWORD arc_cgen_opval_h_uncondi;
extern CGEN_KEYWORD arc_cgen_opval_h_i2cond;
extern CGEN_KEYWORD arc_cgen_opval_h_i3cond;
extern CGEN_KEYWORD arc_cgen_opval_h_delay;
extern CGEN_KEYWORD arc_cgen_opval_h_uflags;
extern CGEN_KEYWORD arc_cgen_opval_h_nil;
extern CGEN_KEYWORD arc_cgen_opval_h_auflags;
extern CGEN_KEYWORD arc_cgen_opval_h_aufflags;
extern CGEN_KEYWORD arc_cgen_opval_h_Di;
extern CGEN_KEYWORD arc_cgen_opval_h_insn16;
extern CGEN_KEYWORD arc_cgen_opval_h_insn32;
extern CGEN_KEYWORD arc_cgen_opval_h__aw;
extern CGEN_KEYWORD arc_cgen_opval_cr_names;
extern CGEN_KEYWORD arc_cgen_opval_h_cr16;
extern CGEN_KEYWORD arc_cgen_opval_h_r0;
extern CGEN_KEYWORD arc_cgen_opval_h_gp;
extern CGEN_KEYWORD arc_cgen_opval_h_sp;
extern CGEN_KEYWORD arc_cgen_opval_h_pcl;
extern CGEN_KEYWORD arc_cgen_opval_h_noilink;
extern CGEN_KEYWORD arc_cgen_opval_h_ilinkx;
extern CGEN_KEYWORD arc_cgen_opval_h_r31;
extern CGEN_KEYWORD arc_cgen_opval_cr_names;
extern CGEN_KEYWORD arc_cgen_opval_h_status32;
extern CGEN_KEYWORD arc_cgen_opval_h_ne;
extern CGEN_KEYWORD arc_cgen_opval_h_RccS;
extern CGEN_KEYWORD arc_cgen_opval_h_Rcc;
extern const CGEN_HW_ENTRY arc_cgen_hw_table[];
#endif /* ARC_CPU_H */