| /* 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 */ |