diff options
author | J.T. Conklin <jtc@acorntoolworks.com> | 1996-08-22 23:56:25 +0000 |
---|---|---|
committer | J.T. Conklin <jtc@acorntoolworks.com> | 1996-08-22 23:56:25 +0000 |
commit | 27021dd45914b1295ffb66ddec20764d17357c73 (patch) | |
tree | 4035255e072fec60e1fe9e435689bc766d5af335 /include/opcode | |
parent | 40484384a7f724d7ca576a8e96a1619a4000eeb4 (diff) | |
download | gdb-27021dd45914b1295ffb66ddec20764d17357c73.zip gdb-27021dd45914b1295ffb66ddec20764d17357c73.tar.gz gdb-27021dd45914b1295ffb66ddec20764d17357c73.tar.bz2 |
* v850.h (v850_operands): Add insert and extract fields, pointers
to functions used to handle unusual operand encoding.
(V850_OPERAND_REG, V850_OPERAND_SRG, V850_OPERAND_CC,
V850_OPERAND_SIGNED): Defined.
Diffstat (limited to 'include/opcode')
-rw-r--r-- | include/opcode/ChangeLog | 7 | ||||
-rw-r--r-- | include/opcode/v850.h | 51 |
2 files changed, 56 insertions, 2 deletions
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index 447bf7d..b6eeefc 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,4 +1,11 @@ start-sanitize-v850 +Thu Aug 22 16:51:25 1996 J.T. Conklin <jtc@rtl.cygnus.com> + + * v850.h (v850_operands): Add insert and extract fields, pointers + to functions used to handle unusual operand encoding. + (V850_OPERAND_REG, V850_OPERAND_SRG, V850_OPERAND_CC, + V850_OPERAND_SIGNED): Defined. + Wed Aug 21 17:45:10 1996 J.T. Conklin <jtc@rtl.cygnus.com> * v850.h (v850_operands): Add flags field. diff --git a/include/opcode/v850.h b/include/opcode/v850.h index 227393e..f1100d2 100644 --- a/include/opcode/v850.h +++ b/include/opcode/v850.h @@ -61,6 +61,45 @@ struct v850_operand /* How far the operand is left shifted in the instruction. */ int shift; + /* Insertion function. This is used by the assembler. To insert an + operand value into an instruction, check this field. + + If it is NULL, execute + i |= (op & ((1 << o->bits) - 1)) << o->shift; + (i is the instruction which we are filling in, o is a pointer to + this structure, and op is the opcode value; this assumes twos + complement arithmetic). + + If this field is not NULL, then simply call it with the + instruction and the operand value. It will return the new value + of the instruction. If the ERRMSG argument is not NULL, then if + the operand value is illegal, *ERRMSG will be set to a warning + string (the operand will be inserted in any case). If the + operand value is legal, *ERRMSG will be unchanged (most operands + can accept any value). */ + unsigned long (*insert) PARAMS ((unsigned long instruction, long op, + const char **errmsg)); + + /* Extraction function. This is used by the disassembler. To + extract this operand type from an instruction, check this field. + + If it is NULL, compute + op = ((i) >> o->shift) & ((1 << o->bits) - 1); + if ((o->flags & PPC_OPERAND_SIGNED) != 0 + && (op & (1 << (o->bits - 1))) != 0) + op -= 1 << o->bits; + (i is the instruction, o is a pointer to this structure, and op + is the result; this assumes twos complement arithmetic). + + If this field is not NULL, then simply call it with the + instruction value. It will return the value of the operand. If + the INVALID argument is not NULL, *INVALID will be set to + non-zero if this operand type can not actually be extracted from + this operand (i.e., the instruction does not match). If the + operand is valid, *INVALID will not be changed. */ + long (*extract) PARAMS ((unsigned long instruction, int *invalid)); + + /* One bit syntax flags. */ int flags; }; @@ -70,9 +109,17 @@ struct v850_operand extern const struct v850_operand v850_operands[]; /* Values defined for the flags field of a struct v850_operand. */ -#define OPERAND_NUM 1 /* number or symbol */ -#define OPERAND_REG 2 /* register */ +/* This operand names a general purpose register */ +#define V850_OPERAND_REG 0x01 +/* This operand names a system register */ +#define V850_OPERAND_SRG 0x02 + +/* This operand names a condition code used in the setf instruction */ +#define V850_OPERAND_CC 0x04 + +/* This operand takes signed values */ +#define V850_OPERAND_SIGNED 0x08 #endif /* V850_H */ |