(enum reg): Rearrange registers, remove 'ccfg' and 'pc'.
(enum reg_type): Remove CRX_PC_REGTYPE, CRX_MTPR_REGTYPE. (enum operand_type): Rearrange operands, edit comments. replace us<N> with ui<N> for unsigned immediate. replace d<N> with disps<N>/dispu<N>/dispe<N> for signed/unsigned/escaped displacements (respectively). replace rbase_ridx_scl2_dispu<N> with rindex_disps<N> for register index. (instruction type): Add NO_TYPE_INS. (instruction flags): Add USER_REG, CST4MAP, NO_SP, NO_RPTR. (operand_entry): New field - 'flags'. (operand flags): New.
This commit is contained in:
		| @@ -41,20 +41,16 @@ typedef enum | |||||||
|     uhi, ulo, |     uhi, ulo, | ||||||
|     /* Processor Status Register.  */ |     /* Processor Status Register.  */ | ||||||
|     psr, |     psr, | ||||||
|     /* Configuration Register.  */ |  | ||||||
|     cfg, |  | ||||||
|     /* Coprocessor Configuration Register.  */ |  | ||||||
|     cpcfg, |  | ||||||
|     /* Cashe Configuration Register.  */ |  | ||||||
|     ccfg, |  | ||||||
|     /* Interrupt Base Register.  */ |     /* Interrupt Base Register.  */ | ||||||
|     intbase, |     intbase, | ||||||
|     /* Interrupt Stack Pointer Register.  */ |     /* Interrupt Stack Pointer Register.  */ | ||||||
|     isp, |     isp, | ||||||
|  |     /* Configuration Register.  */ | ||||||
|  |     cfg, | ||||||
|  |     /* Coprocessor Configuration Register.  */ | ||||||
|  |     cpcfg, | ||||||
|     /* Coprocessor Enable Register.  */ |     /* Coprocessor Enable Register.  */ | ||||||
|     cen, |     cen, | ||||||
|     /* Program Counter Register.  */ |  | ||||||
|     pc, |  | ||||||
|     /* Not a register.  */ |     /* Not a register.  */ | ||||||
|     nullregister, |     nullregister, | ||||||
|     MAX_REG |     MAX_REG | ||||||
| @@ -83,13 +79,11 @@ copreg; | |||||||
|  |  | ||||||
| typedef enum | typedef enum | ||||||
|   { |   { | ||||||
|     CRX_PC_REGTYPE,   /*  pc type */ |  | ||||||
|     CRX_R_REGTYPE,    /*  r<N>	  */ |     CRX_R_REGTYPE,    /*  r<N>	  */ | ||||||
|     CRX_U_REGTYPE,    /*  u<N>	  */ |     CRX_U_REGTYPE,    /*  u<N>	  */ | ||||||
|     CRX_C_REGTYPE,    /*  c<N>	  */ |     CRX_C_REGTYPE,    /*  c<N>	  */ | ||||||
|     CRX_CS_REGTYPE,   /*  cs<N>	  */ |     CRX_CS_REGTYPE,   /*  cs<N>	  */ | ||||||
|     CRX_MTPR_REGTYPE, /*  mtpr	  */ |     CRX_CFG_REGTYPE   /*  configuration register   */ | ||||||
|     CRX_CFG_REGTYPE   /*  *hi|lo, *cfg, psr */ |  | ||||||
|   } |   } | ||||||
| reg_type; | reg_type; | ||||||
|  |  | ||||||
| @@ -117,40 +111,38 @@ typedef enum | |||||||
| argtype; | argtype; | ||||||
|  |  | ||||||
| /* CRX operand types : | /* CRX operand types : | ||||||
|    The operand types correspond to instructions operands |    The operand types correspond to instructions operands.  */ | ||||||
|  |  | ||||||
|    Operand Types : |  | ||||||
|    cst4 - 4-bit encoded constant |  | ||||||
|    iN - N-bit immediate field |  | ||||||
|    d, dispsN - N-bit immediate signed displacement |  | ||||||
|    dispuN - N-bit immediate unsigned displacement |  | ||||||
|    absN - N-bit absolute address |  | ||||||
|    rbase - 4-bit genaral-purpose register specifier |  | ||||||
|    regr - 4-bit genaral-purpose register specifier |  | ||||||
|    regr8 - 8-bit register address space |  | ||||||
|    copregr - coprocessor register |  | ||||||
|    copsregr - coprocessor special register |  | ||||||
|    scl2 - 2-bit scaling factor for memory index |  | ||||||
|    ridx - register index.  */ |  | ||||||
|  |  | ||||||
| typedef enum | typedef enum | ||||||
|   { |   { | ||||||
|     dummy, cst4, disps9, |     dummy, | ||||||
|     /* Immediate operands.  */ |     /* 4-bit encoded constant.  */ | ||||||
|  |     cst4, | ||||||
|  |     /* N-bit immediate.  */ | ||||||
|     i16, i32, |     i16, i32, | ||||||
|     /* Unsigned immediate operands.  */ |     /* N-bit unsigned immediate.  */ | ||||||
|     us3, us4, us5, us16, |     ui3, ui4, ui5, ui16, | ||||||
|     /* Signed displacement operands.  */ |     /* N-bit signed displacement.  */ | ||||||
|     d5, d9, d17, d25, d33, |     disps9, disps17, disps25, disps32, | ||||||
|     /* Absolute operands.  */ |     /* N-bit unsigned displacement.  */ | ||||||
|  |     dispu5,  | ||||||
|  |     /* N-bit escaped displacement.  */ | ||||||
|  |     dispe9, | ||||||
|  |     /* N-bit absolute address.  */ | ||||||
|     abs16, abs32, |     abs16, abs32, | ||||||
|     /* Register relative operands.  */ |     /* Register relative.  */ | ||||||
|     rbase, rbase_cst4, |     rbase, rbase_cst4, | ||||||
|     rbase_dispu8, rbase_dispu12, rbase_dispu16, rbase_dispu28, rbase_dispu32, |     rbase_disps12, rbase_disps16, rbase_disps28, rbase_disps32, | ||||||
|     /* Index operands.  */ |     /* Register index.  */ | ||||||
|     rbase_ridx_scl2_dispu6, rbase_ridx_scl2_dispu22, |     rindex_disps6, rindex_disps22, | ||||||
|     /* Register and processor register operands.  */ |     /* 4-bit genaral-purpose register specifier.  */ | ||||||
|     regr, regr8, copregr,copregr8,copsregr, |     regr,  | ||||||
|  |     /* 8-bit register address space.  */ | ||||||
|  |     regr8, | ||||||
|  |     /* coprocessor register.  */ | ||||||
|  |     copregr,  | ||||||
|  |     /* coprocessor special register.  */ | ||||||
|  |     copsregr, | ||||||
|     /* Not an operand.  */ |     /* Not an operand.  */ | ||||||
|     nulloperand, |     nulloperand, | ||||||
|     /* Maximum supported operand.  */ |     /* Maximum supported operand.  */ | ||||||
| @@ -160,6 +152,7 @@ operand_type; | |||||||
|  |  | ||||||
| /* CRX instruction types.  */ | /* CRX instruction types.  */ | ||||||
|  |  | ||||||
|  | #define NO_TYPE_INS       0 | ||||||
| #define ARITH_INS         1 | #define ARITH_INS         1 | ||||||
| #define LD_STOR_INS       2 | #define LD_STOR_INS       2 | ||||||
| #define BRANCH_INS        3 | #define BRANCH_INS        3 | ||||||
| @@ -192,23 +185,37 @@ operand_type; | |||||||
| #define REG_LIST	CRX_INS_MAX | #define REG_LIST	CRX_INS_MAX | ||||||
| /* The operands in binary and assembly are placed in reverse order. | /* The operands in binary and assembly are placed in reverse order. | ||||||
|    load - (REVERSE_MATCH)/store - (! REVERSE_MATCH).  */ |    load - (REVERSE_MATCH)/store - (! REVERSE_MATCH).  */ | ||||||
| #define REVERSE_MATCH  (REG_LIST << 1) | #define REVERSE_MATCH  (1 << 6) | ||||||
|  |  | ||||||
| /* Kind of displacement map used DISPU[BWD]4.  */ | /* Kind of displacement map used DISPU[BWD]4.  */ | ||||||
| #define DISPUB4	       (REVERSE_MATCH << 1) | #define DISPUB4	       (1 << 7) | ||||||
| #define DISPUW4	       (DISPUB4 << 1) | #define DISPUW4	       (1 << 8) | ||||||
| #define DISPUD4	       (DISPUW4 << 1) | #define DISPUD4	       (1 << 9) | ||||||
| #define CST4MAP	       (DISPUB4 | DISPUW4 | DISPUD4) | #define DISPU4MAP      (DISPUB4 | DISPUW4 | DISPUD4) | ||||||
|  |  | ||||||
| /* Printing formats, where the instruction prefix isn't consecutive.  */ | /* Printing formats, where the instruction prefix isn't consecutive.  */ | ||||||
| #define FMT_1	       (DISPUD4 << 1) /* 0xF0F00000 */ | #define FMT_1	       (1 << 10)   /* 0xF0F00000 */ | ||||||
| #define FMT_2	       (FMT_1 << 1)   /* 0xFFF0FF00 */ | #define FMT_2	       (1 << 11)   /* 0xFFF0FF00 */ | ||||||
| #define FMT_3	       (FMT_2 << 1)   /* 0xFFF00F00 */ | #define FMT_3	       (1 << 12)   /* 0xFFF00F00 */ | ||||||
| #define FMT_4	       (FMT_3 << 1)   /* 0xFFF0F000 */ | #define FMT_4	       (1 << 13)   /* 0xFFF0F000 */ | ||||||
| #define FMT_5	       (FMT_4 << 1)   /* 0xFFF0FFF0 */ | #define FMT_5	       (1 << 14)   /* 0xFFF0FFF0 */ | ||||||
| #define FMT_CRX	       (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5) | #define FMT_CRX	       (FMT_1 | FMT_2 | FMT_3 | FMT_4 | FMT_5) | ||||||
|  |  | ||||||
| #define RELAXABLE      (FMT_5 << 1) | /* Indicates whether this instruction can be relaxed.  */ | ||||||
|  | #define RELAXABLE      (1 << 15) | ||||||
|  |  | ||||||
|  | /* Indicates that instruction uses user registers (and not  | ||||||
|  |    general-purpose registers) as operands.  */ | ||||||
|  | #define USER_REG       (1 << 16) | ||||||
|  |  | ||||||
|  | /* Indicates that instruction can perfom a cst4 mapping.  */ | ||||||
|  | #define CST4MAP	       (1 << 17) | ||||||
|  |  | ||||||
|  | /* Instruction shouldn't allow 'sp' usage.  */ | ||||||
|  | #define NO_SP	       (1 << 18) | ||||||
|  |  | ||||||
|  | /* Instruction shouldn't allow to push a register which is used as a rptr.  */ | ||||||
|  | #define NO_RPTR	       (1 << 19) | ||||||
|  |  | ||||||
| /* Maximum operands per instruction.  */ | /* Maximum operands per instruction.  */ | ||||||
| #define MAX_OPERANDS	  5 | #define MAX_OPERANDS	  5 | ||||||
| @@ -219,6 +226,24 @@ operand_type; | |||||||
| /* Maximum instruction length. */ | /* Maximum instruction length. */ | ||||||
| #define MAX_INST_LEN	  256 | #define MAX_INST_LEN	  256 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* Values defined for the flags field of a struct operand_entry.  */ | ||||||
|  |  | ||||||
|  | /* Operand must be an unsigned number.  */ | ||||||
|  | #define OPERAND_UNSIGNED  (1 << 0) | ||||||
|  | /* Operand must be a signed number.  */ | ||||||
|  | #define OPERAND_SIGNED	  (1 << 1) | ||||||
|  | /* A cst4 operand.  */ | ||||||
|  | #define OPERAND_CST4	  (1 << 2) | ||||||
|  | /* Operand must be an even number.  */ | ||||||
|  | #define OPERAND_EVEN	  (1 << 3) | ||||||
|  | /* Operand is shifted right.  */ | ||||||
|  | #define OPERAND_SHIFT	  (1 << 4) | ||||||
|  | /* Operand is shifted right and decremented.  */ | ||||||
|  | #define OPERAND_SHIFT_DEC (1 << 5) | ||||||
|  | /* Operand has reserved escape sequences.  */ | ||||||
|  | #define OPERAND_ESC	  (1 << 6) | ||||||
|  |  | ||||||
| /* Single operand description.  */ | /* Single operand description.  */ | ||||||
|  |  | ||||||
| typedef struct | typedef struct | ||||||
| @@ -300,6 +325,8 @@ typedef struct | |||||||
|     unsigned int bit_size; |     unsigned int bit_size; | ||||||
|     /* Argument type.  */ |     /* Argument type.  */ | ||||||
|     argtype arg_type; |     argtype arg_type; | ||||||
|  |     /* One bit syntax flags.  */ | ||||||
|  |     int flags; | ||||||
|   } |   } | ||||||
| operand_entry; | operand_entry; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user