summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/cgen/ChangeLog9
-rw-r--r--include/cgen/basic-ops.h12
-rw-r--r--include/coff/ChangeLog7
-rw-r--r--include/coff/rs6000.h64
-rw-r--r--include/elf/ChangeLog11
-rw-r--r--include/elf/mips.h32
-rw-r--r--include/opcode/ChangeLog58
-rw-r--r--include/opcode/i386.h1
-rw-r--r--include/opcode/mips.h491
9 files changed, 145 insertions, 540 deletions
diff --git a/include/cgen/ChangeLog b/include/cgen/ChangeLog
index 7692d4e54..556de24e6 100644
--- a/include/cgen/ChangeLog
+++ b/include/cgen/ChangeLog
@@ -1,12 +1,3 @@
-2013-07-18 Andrew Neitsch <andrew@neitsch.ca>
-
- PR binutils/15728
- * basic-ops.h: (SUBWORDSIQI) Make declaration static.
- * (SUBWORDSIHI): Likewise.
- * (SUBWORDDIQI): Likewise.
- * (SUBWORDDIHI): Likewise.
- * (SUBWORDDISI): Likewise.
-
2010-01-05 Doug Evans <dje@sebabeach.org>
* basic-modes.h (MAKEDI): New macro.
diff --git a/include/cgen/basic-ops.h b/include/cgen/basic-ops.h
index 49883f495..324f0b15e 100644
--- a/include/cgen/basic-ops.h
+++ b/include/cgen/basic-ops.h
@@ -1,5 +1,5 @@
/* Basic semantics ops support for CGEN.
- Copyright 2005-2013 Free Software Foundation, Inc.
+ Copyright 2005, 2007, 2009 Free Software Foundation, Inc.
Contributed by Red Hat.
This file is part of the GNU opcodes library.
@@ -295,11 +295,11 @@ extern SI TRUNCDISI (DI);
significant and word number 0 is the most significant word.
??? May also wish an endian-dependent version. Later. */
-static QI SUBWORDSIQI (SI, int);
-static HI SUBWORDSIHI (SI, int);
-static QI SUBWORDDIQI (DI, int);
-static HI SUBWORDDIHI (DI, int);
-static SI SUBWORDDISI (DI, int);
+QI SUBWORDSIQI (SI, int);
+HI SUBWORDSIHI (SI, int);
+QI SUBWORDDIQI (DI, int);
+HI SUBWORDDIHI (DI, int);
+SI SUBWORDDISI (DI, int);
#ifdef SEMOPS_DEFINE_INLINE
diff --git a/include/coff/ChangeLog b/include/coff/ChangeLog
index 2a9c0aba1..f10aa3477 100644
--- a/include/coff/ChangeLog
+++ b/include/coff/ChangeLog
@@ -1,10 +1,5 @@
-2013-07-10 Tristan Gingold <gingold@adacore.com>
-
- * rs6000.h (external_core_dumpx): New structure.
- (external_ld_info32): Ditto.
-
2013-07-02 Tristan Gingold <gingold@adacore.com>
-
+
* internal.h (C_STTLS, C_GTLS): Define.
* xcoff.h (XMC_TL, XMC_TU, XMC_TE): Define.
diff --git a/include/coff/rs6000.h b/include/coff/rs6000.h
index 7972d338c..d5b2af24a 100644
--- a/include/coff/rs6000.h
+++ b/include/coff/rs6000.h
@@ -46,7 +46,7 @@ struct external_filehdr {
/********************** AOUT "OPTIONAL HEADER" **********************/
-typedef struct
+typedef struct
{
unsigned char magic[2]; /* type of file */
unsigned char vstamp[2]; /* version stamp */
@@ -204,7 +204,7 @@ union external_auxent {
};
#define SYMENT struct external_syment
-#define SYMESZ 18
+#define SYMESZ 18
#define AUXENT union external_auxent
#define AUXESZ 18
#define DBXMASK 0x80 /* for dbx storage mask */
@@ -291,63 +291,3 @@ struct external_exceptab
};
#define EXCEPTSZ (4 + 2)
-
-/******************** Core files *************************/
-
-struct external_core_dumpx
-{
- unsigned char c_signo[1];
- unsigned char c_flag[1];
- unsigned char c_entries[2];
-
- unsigned char c_version[4];
-
- unsigned char c_fdsinfox[8];
- unsigned char c_loader[8];
- unsigned char c_lsize[8];
-
- unsigned char c_n_thr[4];
- unsigned char c_reserved0[4];
- unsigned char c_thr[8];
-
- unsigned char c_segs[8];
- unsigned char c_segregion[8];
-
- unsigned char c_stack[8];
- unsigned char c_stackorg[8];
- unsigned char c_size[8];
-
- unsigned char c_data[8];
- unsigned char c_dataorg[8];
- unsigned char c_datasize[8];
- unsigned char c_sdorg[8];
- unsigned char c_sdsize[8];
-
- unsigned char c_vmmregions[8];
- unsigned char c_vmm[8];
-
- unsigned char c_impl[4];
- unsigned char c_pad[4];
- unsigned char c_cprs[8];
- unsigned char c_reserved[7 * 8];
-
- /* Followed by:
- - context of the faulting thread.
- - user structure. */
-};
-
-
-/* Core file verion. */
-#define CORE_DUMPX_VERSION 0x0feeddb1
-#define CORE_DUMPXX_VERSION 0x0feeddb2
-
-struct external_ld_info32
-{
- unsigned char ldinfo_next[4];
- unsigned char core_offset[4];
- unsigned char ldinfo_textorg[4];
- unsigned char ldinfo_textsize[4];
- unsigned char ldinfo_dataorg[4];
- unsigned char ldinfo_datasize[4];
- unsigned char ldinfo_filename[2];
-};
diff --git a/include/elf/ChangeLog b/include/elf/ChangeLog
index 8445e61bf..2edd1dfcc 100644
--- a/include/elf/ChangeLog
+++ b/include/elf/ChangeLog
@@ -1,14 +1,3 @@
-2013-07-15 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (Tag_GNU_MIPS_ABI_FP): Remove comment.
- (Val_GNU_MIPS_ABI_FP_ANY, Val_GNU_MIPS_ABI_FP_DOUBLE,
- Val_GNU_MIPS_ABI_FP_SINGLE, Val_GNU_MIPS_ABI_FP_SOFT,
- Val_GNU_MIPS_ABI_FP_64): New enum.
-
-2013-07-12 Maciej W. Rozycki <macro@codesourcery.com>
-
- * mips.h (EF_MIPS_NAN2008): New macro.
-
2013-07-08 Tristan Gingold <gingold@adacore.com>
* ia64.h (STB_VMS_WEAK, STB_VMS_SYSTEM): Add.
diff --git a/include/elf/mips.h b/include/elf/mips.h
index d25e773f1..f3be987a0 100644
--- a/include/elf/mips.h
+++ b/include/elf/mips.h
@@ -191,9 +191,6 @@ END_RELOC_NUMBERS (R_MIPS_maxext)
(regs are 32-bits wide). */
#define EF_MIPS_32BITMODE 0x00000100
-/* Code in file uses the IEEE 754-2008 NaN encoding convention. */
-#define EF_MIPS_NAN2008 0x00000400
-
/* Architectural Extensions used by this file */
#define EF_MIPS_ARCH_ASE 0x0f000000
@@ -1129,30 +1126,11 @@ extern void bfd_mips_elf64_swap_reginfo_out
enum
{
/* 0-3 are generic. */
-
- /* Floating-point ABI used by this object file. */
- Tag_GNU_MIPS_ABI_FP = 4,
-};
-
-/* Object attribute values. */
-enum
-{
- /* Values defined for Tag_GNU_MIPS_ABI_FP. */
-
- /* Not tagged or not using any ABIs affected by the differences. */
- Val_GNU_MIPS_ABI_FP_ANY = 0,
-
- /* Using hard-float -mdouble-float. */
- Val_GNU_MIPS_ABI_FP_DOUBLE = 1,
-
- /* Using hard-float -msingle-float. */
- Val_GNU_MIPS_ABI_FP_SINGLE = 2,
-
- /* Using soft-float. */
- Val_GNU_MIPS_ABI_FP_SOFT = 3,
-
- /* Using -mips32r2 -mfp64. */
- Val_GNU_MIPS_ABI_FP_64 = 4,
+ Tag_GNU_MIPS_ABI_FP = 4, /* Value 1 for hard-float -mdouble-float, 2
+ for hard-float -msingle-float, 3 for
+ soft-float, 4 for -mips32r2 -mfp64; 0 for
+ not tagged or not using any ABIs affected
+ by the differences. */
};
#endif /* _ELF_MIPS_H */
diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog
index 4ef1fda89..4d5738452 100644
--- a/include/opcode/ChangeLog
+++ b/include/opcode/ChangeLog
@@ -1,61 +1,3 @@
-2013-08-01 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_decode_reg_operand): New function.
- (INSN_WRITE_SHIFT, INSN_WRITE_1, INSN_WRITE_2, INSN_WRITE_ALL)
- (INSN_READ_SHIFT, INSN_READ_1, INSN_READ_2, INSN_READ_3, INSN_READ_4)
- (INSN_READ_ALL, INSN_READ_GPR_24, INSN_WRITE_GPR_24, INSN_UDI):
- New macros.
- (INSN_WRITE_GPR_D, INSN_WRITE_GPR_T, INSN_WRITE_FPR_D)
- (INSN_WRITE_FPR_S, INSN_WRITE_FPR_T, INSN_READ_GPR_S, INSN_READ_GPR_T)
- (INSN_READ_FPR_S, INSN_READ_FPR_T, INSN_READ_FPR_R, INSN_WRITE_GPR_S)
- (INSN2_WRITE_GPR_Z, INSN2_WRITE_FPR_Z, INSN2_READ_GPR_Z)
- (INSN2_READ_FPR_Z, INSN2_READ_GPR_D, INSN2_READ_FPR_D)
- (INSN2_WRITE_GPR_MB, INSN2_READ_GPR_MC, INSN2_MOD_GPR_MD)
- (INSN2_READ_GPR_ME, INSN2_MOD_GPR_MF, INSN2_READ_GPR_MG)
- (INSN2_READ_GPR_MJ, INSN2_WRITE_GPR_MJ, INSN2_READ_GPR_MP)
- (INSN2_WRITE_GPR_MP, INSN2_READ_GPR_MQ, INSN2_READ_GP)
- (INSN2_WRITE_GPR_MH, INSN2_READ_GPR_MMN): Delete. Renumber other
- macros to cover the gaps.
- (INSN2_MOD_SP): Replace with...
- (INSN2_WRITE_SP, INSN2_READ_SP): ...these new macros.
- (MIPS16_INSN_WRITE_X, MIPS16_INSN_WRITE_Y, MIPS16_INSN_WRITE_Z)
- (MIPS16_INSN_WRITE_T, MIPS16_INSN_WRITE_31, MIPS16_INSN_WRITE_GPR_Y)
- (MIPS16_INSN_READ_X, MIPS16_INSN_READ_Y, MIPS16_INSN_READ_Z)
- (MIPS16_INSN_READ_T, MIPS16_INSN_READ_SP, MIPS16_INSN_READ_GPR_X):
- Delete.
-
-2013-08-01 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (MIPS16_INSN_WRITE_SP, MIPS16_INSN_READ_31)
- (MIPS16_INSN_READ_PC, MIPS16_INSN_UNCOND_BRANCH)
- (MIPS16_INSN_COND_BRANCH): Delete.
-
-2013-07-24 Anna Tikhonova <anna.tikhonova@intel.com>
- Kirill Yukhin <kirill.yukhin@intel.com>
- Michael Zolotukhin <michael.v.zolotukhin@intel.com>
-
- * i386.h (BND_PREFIX_OPCODE): New.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_operand_type): Add OP_ENTRY_EXIT_LIST and
- OP_SAVE_RESTORE_LIST.
- (decode_mips16_operand): Declare.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h (mips_operand_type, mips_reg_operand_type): New enums.
- (mips_operand, mips_int_operand, mips_mapped_int_operand)
- (mips_msb_operand, mips_reg_operand, mips_reg_pair_operand)
- (mips_pcrel_operand): New structures.
- (mips_insert_operand, mips_extract_operand, mips_signed_operand)
- (mips_decode_int_operand, mips_decode_pcrel_operand): New functions.
- (decode_mips_operand, decode_micromips_operand): Declare.
-
-2013-07-14 Richard Sandiford <rdsandiford@googlemail.com>
-
- * mips.h: Document MIPS16 "I" opcode.
-
2013-07-07 Richard Sandiford <rdsandiford@googlemail.com>
* mips.h (M_ACLR_OB, M_ASET_OB, M_CACHE_OB, M_CACHEE_OB, M_L_DOB)
diff --git a/include/opcode/i386.h b/include/opcode/i386.h
index 6021002bc..ad6d3c675 100644
--- a/include/opcode/i386.h
+++ b/include/opcode/i386.h
@@ -78,7 +78,6 @@
#define REPE_PREFIX_OPCODE 0xf3
#define XACQUIRE_PREFIX_OPCODE 0xf2
#define XRELEASE_PREFIX_OPCODE 0xf3
-#define BND_PREFIX_OPCODE 0xf2
#define TWO_BYTE_OPCODE_ESCAPE 0x0f
#define NOP_OPCODE (char) 0x90
diff --git a/include/opcode/mips.h b/include/opcode/mips.h
index b299bd870..89ea3e9a7 100644
--- a/include/opcode/mips.h
+++ b/include/opcode/mips.h
@@ -332,310 +332,6 @@
#define OP_SH_EVAOFFSET 7
#define OP_MASK_EVAOFFSET 0x1ff
-/* Enumerates the various types of MIPS operand. */
-enum mips_operand_type {
- /* Described by mips_int_operand. */
- OP_INT,
-
- /* Described by mips_mapped_int_operand. */
- OP_MAPPED_INT,
-
- /* Described by mips_msb_operand. */
- OP_MSB,
-
- /* Described by mips_reg_operand. */
- OP_REG,
-
- /* Described by mips_reg_pair_operand. */
- OP_REG_PAIR,
-
- /* Described by mips_pcrel_operand. */
- OP_PCREL,
-
- /* A performance register. The field is 5 bits in size, but the supported
- values are much more restricted. */
- OP_PERF_REG,
-
- /* The final operand in a microMIPS ADDIUSP instruction. It mostly acts
- as a normal 9-bit signed offset that is multiplied by four, but there
- are four special cases:
-
- -2 * 4 => -258 * 4
- -1 * 4 => -257 * 4
- 0 * 4 => 256 * 4
- 1 * 4 => 257 * 4. */
- OP_ADDIUSP_INT,
-
- /* The target of a (D)CLO or (D)CLZ instruction. The operand spans two
- 5-bit register fields, both of which must be set to the destination
- register. */
- OP_CLO_CLZ_DEST,
-
- /* A register list for a microMIPS LWM or SWM instruction. The operand
- size determines whether the 16-bit or 32-bit encoding is required. */
- OP_LWM_SWM_LIST,
-
- /* The register list for an emulated MIPS16 ENTRY or EXIT instruction. */
- OP_ENTRY_EXIT_LIST,
-
- /* The register list and frame size for a MIPS16 SAVE or RESTORE
- instruction. */
- OP_SAVE_RESTORE_LIST,
-
- /* A 10-bit field VVVVVNNNNN used for octobyte and quadhalf instructions:
-
- V Meaning
- ----- -------
- 0EEE0 8 copies of $vN[E], OB format
- 0EE01 4 copies of $vN[E], QH format
- 10110 all 8 elements of $vN, OB format
- 10101 all 4 elements of $vN, QH format
- 11110 8 copies of immediate N, OB format
- 11101 4 copies of immediate N, QH format. */
- OP_MDMX_IMM_REG,
-
- /* A register operand that must match the destination register. */
- OP_REPEAT_DEST_REG,
-
- /* A register operand that must match the previous register. */
- OP_REPEAT_PREV_REG,
-
- /* $pc, which has no encoding in the architectural instruction. */
- OP_PC
-};
-
-/* Enumerates the types of MIPS register. */
-enum mips_reg_operand_type {
- /* General registers $0-$31. Software names like $at can also be used. */
- OP_REG_GP,
-
- /* Floating-point registers $f0-$f31. */
- OP_REG_FP,
-
- /* Coprocessor condition code registers $cc0-$cc7. FPU condition codes
- can also be written $fcc0-$fcc7. */
- OP_REG_CCC,
-
- /* FPRs used in a vector capacity. They can be written $f0-$f31
- or $v0-$v31, although the latter form is not used for the VR5400
- vector instructions. */
- OP_REG_VEC,
-
- /* DSP accumulator registers $ac0-$ac3. */
- OP_REG_ACC,
-
- /* Coprocessor registers $0-$31. Mnemonic names like c0_cause can
- also be used in some contexts. */
- OP_REG_COPRO,
-
- /* Hardware registers $0-$31. Mnemonic names like hwr_cpunum can
- also be used in some contexts. */
- OP_REG_HW
-};
-
-/* Base class for all operands. */
-struct mips_operand
-{
- /* The type of the operand. */
- enum mips_operand_type type;
-
- /* The operand occupies SIZE bits of the instruction, starting at LSB. */
- unsigned short size;
- unsigned short lsb;
-};
-
-/* Describes an integer operand with a regular encoding pattern. */
-struct mips_int_operand
-{
- struct mips_operand root;
-
- /* The low ROOT.SIZE bits of MAX_VAL encodes (MAX_VAL + BIAS) << SHIFT.
- The cyclically previous field value encodes 1 << SHIFT less than that,
- and so on. E.g.
-
- - for { { T, 4, L }, 14, 0, 0 }, field values 0...14 encode themselves,
- but 15 encodes -1.
-
- - { { T, 8, L }, 127, 0, 2 } is a normal signed 8-bit operand that is
- shifted left two places.
-
- - { { T, 3, L }, 8, 0, 0 } is a normal unsigned 3-bit operand except
- that 0 encodes 8.
-
- - { { ... }, 0, 1, 3 } means that N encodes (N + 1) << 3. */
- unsigned int max_val;
- int bias;
- unsigned int shift;
-
- /* True if the operand should be printed as hex rather than decimal. */
- bfd_boolean print_hex;
-};
-
-/* Uses a lookup table to describe a small integer operand. */
-struct mips_mapped_int_operand
-{
- struct mips_operand root;
-
- /* Maps each encoding value to the integer that it represents. */
- const int *int_map;
-
- /* True if the operand should be printed as hex rather than decimal. */
- bfd_boolean print_hex;
-};
-
-/* An operand that encodes the most significant bit position of a bitfield.
- Given a bitfield that spans bits [MSB, LSB], some operands of this type
- encode MSB directly while others encode MSB - LSB. Each operand of this
- type is preceded by an integer operand that specifies LSB.
-
- The assembly form varies between instructions. For some instructions,
- such as EXT, the operand is written as the bitfield size. For others,
- such as EXTS, it is written in raw MSB - LSB form. */
-struct mips_msb_operand
-{
- struct mips_operand root;
-
- /* The assembly-level operand encoded by a field value of 0. */
- int bias;
-
- /* True if the operand encodes MSB directly, false if it encodes
- MSB - LSB. */
- bfd_boolean add_lsb;
-
- /* The maximum value of MSB + 1. */
- unsigned int opsize;
-};
-
-/* Describes a single register operand. */
-struct mips_reg_operand
-{
- struct mips_operand root;
-
- /* The type of register. */
- enum mips_reg_operand_type reg_type;
-
- /* If nonnull, REG_MAP[N] gives the register associated with encoding N,
- otherwise the encoding is the same as the register number. */
- const unsigned char *reg_map;
-};
-
-/* Describes an operand that encodes a pair of registers. */
-struct mips_reg_pair_operand
-{
- struct mips_operand root;
-
- /* The type of register. */
- enum mips_reg_operand_type reg_type;
-
- /* Encoding N represents REG1_MAP[N], REG2_MAP[N]. */
- unsigned char *reg1_map;
- unsigned char *reg2_map;
-};
-
-/* Describes an operand that is calculated relative to a base PC.
- The base PC is usually the address of the following instruction,
- but the rules for MIPS16 instructions like ADDIUPC are more complicated. */
-struct mips_pcrel_operand
-{
- struct mips_operand root;
-
- /* The low ALIGN_LOG2 bits of the base PC are cleared to give PC'. */
- unsigned int align_log2 : 8;
-
- /* The operand is shifted left SHIFT places and added to PC'.
- The operand is signed if IS_SIGNED. */
- unsigned int shift : 8;
- unsigned int is_signed : 1;
-
- /* If INCLUDE_ISA_BIT, the ISA bit of the original base PC is then
- reinstated. This is true for jumps and branches and false for
- PC-relative data instructions. */
- unsigned int include_isa_bit : 1;
-
- /* If FLIP_ISA_BIT, the ISA bit of the result is inverted.
- This is true for JALX and false otherwise. */
- unsigned int flip_isa_bit : 1;
-};
-
-/* Return a version of INSN in which the field specified by OPERAND
- has value UVAL. */
-
-static inline unsigned int
-mips_insert_operand (const struct mips_operand *operand, unsigned int insn,
- unsigned int uval)
-{
- unsigned int mask;
-
- mask = (1 << operand->size) - 1;
- insn &= ~(mask << operand->lsb);
- insn |= (uval & mask) << operand->lsb;
- return insn;
-}
-
-/* Extract OPERAND from instruction INSN. */
-
-static inline unsigned int
-mips_extract_operand (const struct mips_operand *operand, unsigned int insn)
-{
- return (insn >> operand->lsb) & ((1 << operand->size) - 1);
-}
-
-/* UVAL is the value encoded by OPERAND. Return it in signed form. */
-
-static inline int
-mips_signed_operand (const struct mips_operand *operand, unsigned int uval)
-{
- unsigned int sign_bit, mask;
-
- mask = (1 << operand->size) - 1;
- sign_bit = 1 << (operand->size - 1);
- return ((uval + sign_bit) & mask) - sign_bit;
-}
-
-/* Return the integer that OPERAND encodes as UVAL. */
-
-static inline int
-mips_decode_int_operand (const struct mips_int_operand *operand,
- unsigned int uval)
-{
- uval |= (operand->max_val - uval) & -(1 << operand->root.size);
- uval += operand->bias;
- uval <<= operand->shift;
- return uval;
-}
-
-/* Return the register that OPERAND encodes as UVAL. */
-
-static inline int
-mips_decode_reg_operand (const struct mips_reg_operand *operand,
- unsigned int uval)
-{
- if (operand->reg_map)
- uval = operand->reg_map[uval];
- return uval;
-}
-
-/* PC-relative operand OPERAND has value UVAL and is relative to BASE_PC.
- Return the address that it encodes. */
-
-static inline bfd_vma
-mips_decode_pcrel_operand (const struct mips_pcrel_operand *operand,
- bfd_vma base_pc, unsigned int uval)
-{
- bfd_vma addr;
-
- addr = base_pc & -(1 << operand->align_log2);
- if (operand->is_signed)
- addr += mips_signed_operand (&operand->root, uval) * (1 << operand->shift);
- else
- addr += uval << operand->shift;
- if (operand->include_isa_bit)
- addr |= base_pc & 1;
- if (operand->flip_isa_bit)
- addr ^= 1;
- return addr;
-}
-
/* This structure holds information for a particular instruction. */
struct mips_opcode
@@ -847,67 +543,71 @@ struct mips_opcode
/* These are the bits which may be set in the pinfo field of an
instructions, if it is not equal to INSN_MACRO. */
-/* Writes to operand number N. */
-#define INSN_WRITE_SHIFT 0
-#define INSN_WRITE_1 0x00000001
-#define INSN_WRITE_2 0x00000002
-#define INSN_WRITE_ALL 0x00000003
-/* Reads from operand number N. */
-#define INSN_READ_SHIFT 2
-#define INSN_READ_1 0x00000004
-#define INSN_READ_2 0x00000008
-#define INSN_READ_3 0x00000010
-#define INSN_READ_4 0x00000020
-#define INSN_READ_ALL 0x0000003c
+/* Modifies the general purpose register in OP_*_RD. */
+#define INSN_WRITE_GPR_D 0x00000001
+/* Modifies the general purpose register in OP_*_RT. */
+#define INSN_WRITE_GPR_T 0x00000002
/* Modifies general purpose register 31. */
-#define INSN_WRITE_GPR_31 0x00000040
+#define INSN_WRITE_GPR_31 0x00000004
+/* Modifies the floating point register in OP_*_FD. */
+#define INSN_WRITE_FPR_D 0x00000008
+/* Modifies the floating point register in OP_*_FS. */
+#define INSN_WRITE_FPR_S 0x00000010
+/* Modifies the floating point register in OP_*_FT. */
+#define INSN_WRITE_FPR_T 0x00000020
+/* Reads the general purpose register in OP_*_RS. */
+#define INSN_READ_GPR_S 0x00000040
+/* Reads the general purpose register in OP_*_RT. */
+#define INSN_READ_GPR_T 0x00000080
+/* Reads the floating point register in OP_*_FS. */
+#define INSN_READ_FPR_S 0x00000100
+/* Reads the floating point register in OP_*_FT. */
+#define INSN_READ_FPR_T 0x00000200
+/* Reads the floating point register in OP_*_FR. */
+#define INSN_READ_FPR_R 0x00000400
/* Modifies coprocessor condition code. */
-#define INSN_WRITE_COND_CODE 0x00000080
+#define INSN_WRITE_COND_CODE 0x00000800
/* Reads coprocessor condition code. */
-#define INSN_READ_COND_CODE 0x00000100
+#define INSN_READ_COND_CODE 0x00001000
/* TLB operation. */
-#define INSN_TLB 0x00000200
+#define INSN_TLB 0x00002000
/* Reads coprocessor register other than floating point register. */
-#define INSN_COP 0x00000400
+#define INSN_COP 0x00004000
/* Instruction loads value from memory, requiring delay. */
-#define INSN_LOAD_MEMORY_DELAY 0x00000800
+#define INSN_LOAD_MEMORY_DELAY 0x00008000
/* Instruction loads value from coprocessor, requiring delay. */
-#define INSN_LOAD_COPROC_DELAY 0x00001000
+#define INSN_LOAD_COPROC_DELAY 0x00010000
/* Instruction has unconditional branch delay slot. */
-#define INSN_UNCOND_BRANCH_DELAY 0x00002000
+#define INSN_UNCOND_BRANCH_DELAY 0x00020000
/* Instruction has conditional branch delay slot. */
-#define INSN_COND_BRANCH_DELAY 0x00004000
+#define INSN_COND_BRANCH_DELAY 0x00040000
/* Conditional branch likely: if branch not taken, insn nullified. */
-#define INSN_COND_BRANCH_LIKELY 0x00008000
+#define INSN_COND_BRANCH_LIKELY 0x00080000
/* Moves to coprocessor register, requiring delay. */
-#define INSN_COPROC_MOVE_DELAY 0x00010000
+#define INSN_COPROC_MOVE_DELAY 0x00100000
/* Loads coprocessor register from memory, requiring delay. */
-#define INSN_COPROC_MEMORY_DELAY 0x00020000
+#define INSN_COPROC_MEMORY_DELAY 0x00200000
/* Reads the HI register. */
-#define INSN_READ_HI 0x00040000
+#define INSN_READ_HI 0x00400000
/* Reads the LO register. */
-#define INSN_READ_LO 0x00080000
+#define INSN_READ_LO 0x00800000
/* Modifies the HI register. */
-#define INSN_WRITE_HI 0x00100000
+#define INSN_WRITE_HI 0x01000000
/* Modifies the LO register. */
-#define INSN_WRITE_LO 0x00200000
+#define INSN_WRITE_LO 0x02000000
/* Not to be placed in a branch delay slot, either architecturally
or for ease of handling (such as with instructions that take a trap). */
-#define INSN_NO_DELAY_SLOT 0x00400000
+#define INSN_NO_DELAY_SLOT 0x04000000
/* Instruction stores value into memory. */
-#define INSN_STORE_MEMORY 0x00800000
+#define INSN_STORE_MEMORY 0x08000000
/* Instruction uses single precision floating point. */
-#define FP_S 0x01000000
+#define FP_S 0x10000000
/* Instruction uses double precision floating point. */
-#define FP_D 0x02000000
+#define FP_D 0x20000000
/* Instruction is part of the tx39's integer multiply family. */
-#define INSN_MULT 0x04000000
-/* Reads general purpose register 24. */
-#define INSN_READ_GPR_24 0x08000000
-/* Writes to general purpose register 24. */
-#define INSN_WRITE_GPR_24 0x10000000
-/* A user-defined instruction. */
-#define INSN_UDI 0x20000000
+#define INSN_MULT 0x40000000
+/* Modifies the general purpose register in MICROMIPSOP_*_RS. */
+#define INSN_WRITE_GPR_S 0x80000000
/* Instruction is actually a macro. It should be ignored by the
disassembler, and requires special treatment by the assembler. */
#define INSN_MACRO 0xffffffff
@@ -929,24 +629,62 @@ struct mips_opcode
only be set for macros. For instructions, FP_D in pinfo carries the
same information. */
#define INSN2_M_FP_D 0x00000010
+/* Modifies the general purpose register in OP_*_RZ. */
+#define INSN2_WRITE_GPR_Z 0x00000020
+/* Modifies the floating point register in OP_*_FZ. */
+#define INSN2_WRITE_FPR_Z 0x00000040
+/* Reads the general purpose register in OP_*_RZ. */
+#define INSN2_READ_GPR_Z 0x00000080
+/* Reads the floating point register in OP_*_FZ. */
+#define INSN2_READ_FPR_Z 0x00000100
+/* Reads the general purpose register in OP_*_RD. */
+#define INSN2_READ_GPR_D 0x00000200
+
+
/* Instruction has a branch delay slot that requires a 16-bit instruction. */
-#define INSN2_BRANCH_DELAY_16BIT 0x00000020
+#define INSN2_BRANCH_DELAY_16BIT 0x00000400
/* Instruction has a branch delay slot that requires a 32-bit instruction. */
-#define INSN2_BRANCH_DELAY_32BIT 0x00000040
-/* Writes to the stack pointer ($29). */
-#define INSN2_WRITE_SP 0x00000080
-/* Reads from the stack pointer ($29). */
-#define INSN2_READ_SP 0x00000100
+#define INSN2_BRANCH_DELAY_32BIT 0x00000800
+/* Reads the floating point register in MICROMIPSOP_*_FD. */
+#define INSN2_READ_FPR_D 0x00001000
+/* Modifies the general purpose register in MICROMIPSOP_*_MB. */
+#define INSN2_WRITE_GPR_MB 0x00002000
+/* Reads the general purpose register in MICROMIPSOP_*_MC. */
+#define INSN2_READ_GPR_MC 0x00004000
+/* Reads/writes the general purpose register in MICROMIPSOP_*_MD. */
+#define INSN2_MOD_GPR_MD 0x00008000
+/* Reads the general purpose register in MICROMIPSOP_*_ME. */
+#define INSN2_READ_GPR_ME 0x00010000
+/* Reads/writes the general purpose register in MICROMIPSOP_*_MF. */
+#define INSN2_MOD_GPR_MF 0x00020000
+/* Reads the general purpose register in MICROMIPSOP_*_MG. */
+#define INSN2_READ_GPR_MG 0x00040000
+/* Reads the general purpose register in MICROMIPSOP_*_MJ. */
+#define INSN2_READ_GPR_MJ 0x00080000
+/* Modifies the general purpose register in MICROMIPSOP_*_MJ. */
+#define INSN2_WRITE_GPR_MJ 0x00100000
+/* Reads the general purpose register in MICROMIPSOP_*_MP. */
+#define INSN2_READ_GPR_MP 0x00200000
+/* Modifies the general purpose register in MICROMIPSOP_*_MP. */
+#define INSN2_WRITE_GPR_MP 0x00400000
+/* Reads the general purpose register in MICROMIPSOP_*_MQ. */
+#define INSN2_READ_GPR_MQ 0x00800000
+/* Reads/Writes the stack pointer ($29). */
+#define INSN2_MOD_SP 0x01000000
/* Reads the RA ($31) register. */
-#define INSN2_READ_GPR_31 0x00000200
+#define INSN2_READ_GPR_31 0x02000000
+/* Reads the global pointer ($28). */
+#define INSN2_READ_GP 0x04000000
/* Reads the program counter ($pc). */
-#define INSN2_READ_PC 0x00000400
+#define INSN2_READ_PC 0x08000000
/* Is an unconditional branch insn. */
-#define INSN2_UNCOND_BRANCH 0x00000800
+#define INSN2_UNCOND_BRANCH 0x10000000
/* Is a conditional branch insn. */
-#define INSN2_COND_BRANCH 0x00001000
-/* Reads from $16. This is true of the MIPS16 0x6500 nop. */
-#define INSN2_READ_GPR_16 0x00002000
+#define INSN2_COND_BRANCH 0x20000000
+/* Modifies the general purpose registers in MICROMIPSOP_*_MH. */
+#define INSN2_WRITE_GPR_MH 0x40000000
+/* Reads the general purpose registers in MICROMIPSOP_*_MM/N. */
+#define INSN2_READ_GPR_MMN 0x80000000
/* Masks used to mark instructions to indicate which MIPS ISA level
they were introduced in. INSN_ISA_MASK masks an enumeration that
@@ -1477,7 +1215,6 @@ enum
Many instructions are short hand for other instructions (i.e., The
jal <register> instruction is short for jalr <register>). */
-extern const struct mips_operand *decode_mips_operand (const char *);
extern const struct mips_opcode mips_builtin_opcodes[];
extern const int bfd_mips_num_builtin_opcodes;
extern struct mips_opcode *mips_opcodes;
@@ -1568,8 +1305,6 @@ extern int bfd_mips_num_opcodes;
"l" register list for entry instruction
"L" register list for exit instruction
- "I" an immediate value used for macros
-
The remaining codes may be extended. Except as otherwise noted,
the full extended operand is a 16 bit signed value.
"<" 3 bit unsigned shift count * 0 (MIPS16OP_*_RZ) (full 5 bit unsigned)
@@ -1602,6 +1337,44 @@ extern int bfd_mips_num_opcodes;
#define MIPS16_ALL_ARGS 0xe
#define MIPS16_ALL_STATICS 0xb
+/* For the mips16, we use the same opcode table format and a few of
+ the same flags. However, most of the flags are different. */
+
+/* Modifies the register in MIPS16OP_*_RX. */
+#define MIPS16_INSN_WRITE_X 0x00000001
+/* Modifies the register in MIPS16OP_*_RY. */
+#define MIPS16_INSN_WRITE_Y 0x00000002
+/* Modifies the register in MIPS16OP_*_RZ. */
+#define MIPS16_INSN_WRITE_Z 0x00000004
+/* Modifies the T ($24) register. */
+#define MIPS16_INSN_WRITE_T 0x00000008
+/* Modifies the SP ($29) register. */
+#define MIPS16_INSN_WRITE_SP 0x00000010
+/* Modifies the RA ($31) register. */
+#define MIPS16_INSN_WRITE_31 0x00000020
+/* Modifies the general purpose register in MIPS16OP_*_REG32R. */
+#define MIPS16_INSN_WRITE_GPR_Y 0x00000040
+/* Reads the register in MIPS16OP_*_RX. */
+#define MIPS16_INSN_READ_X 0x00000080
+/* Reads the register in MIPS16OP_*_RY. */
+#define MIPS16_INSN_READ_Y 0x00000100
+/* Reads the register in MIPS16OP_*_MOVE32Z. */
+#define MIPS16_INSN_READ_Z 0x00000200
+/* Reads the T ($24) register. */
+#define MIPS16_INSN_READ_T 0x00000400
+/* Reads the SP ($29) register. */
+#define MIPS16_INSN_READ_SP 0x00000800
+/* Reads the RA ($31) register. */
+#define MIPS16_INSN_READ_31 0x00001000
+/* Reads the program counter. */
+#define MIPS16_INSN_READ_PC 0x00002000
+/* Reads the general purpose register in MIPS16OP_*_REGR32. */
+#define MIPS16_INSN_READ_GPR_X 0x00004000
+/* Is an unconditional branch insn. */
+#define MIPS16_INSN_UNCOND_BRANCH 0x00008000
+/* Is a conditional branch insn. */
+#define MIPS16_INSN_COND_BRANCH 0x00010000
+
/* The following flags have the same value for the mips16 opcode
table:
@@ -1618,7 +1391,6 @@ extern int bfd_mips_num_opcodes;
FP_D (never used)
*/
-extern const struct mips_operand *decode_mips16_operand (char, bfd_boolean);
extern const struct mips_opcode mips16_opcodes[];
extern const int bfd_mips16_num_opcodes;
@@ -2006,7 +1778,6 @@ extern const int bfd_mips16_num_opcodes;
" bcdefghij lmn pq st xyz"
*/
-extern const struct mips_operand *decode_micromips_operand (const char *);
extern const struct mips_opcode micromips_opcodes[];
extern const int bfd_micromips_num_opcodes;