binutils-gdb/include/elf
Maciej W. Rozycki 25499ac7ee MIPS16e2: Add MIPS16e2 ASE support
Add MIPS16e2 ASE support as per the architecture specification[1],
including in particular:

1. A new ELF ASE flag to mark MIPS16e2 binaries.

2. MIPS16e2 instruction assembly support, including a relaxation update
   to use LUI rather than an LI/SLL instruction pair for loading the
   high part of 32-bit addresses.

3. MIPS16e2 instruction disassembly support, including updated rules for
   extended forms of instructions that are now subdecoded and therefore
   do not alias to the original MIPS16 ISA revision instructions even
   for encodings that are not valid in the MIPS16e2 instruction set.

Add `-mmips16e2' and `-mno-mips16e2' GAS command-line options and their
corresponding `mips16e2' and `no-mips16e2' settings for the `.set' and
`.module' pseudo-ops.  Control the availability of the MT ASE subset of
the MIPS16e2 instruction set with a combination of these controls and
the preexisting MT ASE controls.

Parts of this change by Matthew Fortune and Andrew Bennett.

References:

[1] "MIPS32 Architecture for Programmers: MIPS16e2 Application-Specific
    Extension Technical Reference Manual", Imagination Technologies
    Ltd., Document Number: MD01172, Revision 01.00, April 26, 2016

	include/
	* elf/mips.h (AFL_ASE_MIPS16E2): New macro.
	(AFL_ASE_MASK): Adjust accordingly.
	* opcode/mips.h: Document new operand codes defined.
	(mips_operand_type): Add OP_REG28 enum value.
	(INSN2_SHORT_ONLY): Update description.
	(ASE_MIPS16E2, ASE_MIPS16E2_MT): New macros.

	bfd/
	* elfxx-mips.c (print_mips_ases): Handle MIPS16e2 ASE.

	opcodes/
	* mips-dis.c (mips_arch_choices): Add ASE_MIPS16E2 and
	ASE_MIPS16E2_MT flags to the unnamed MIPS16 entry.
	(mips_convert_abiflags_ases): Handle the AFL_ASE_MIPS16E2 flag.
	(print_insn_arg) <OP_REG28>: Add handler.
	(validate_insn_args) <OP_REG28>: Handle.
	(print_mips16_insn_arg): Handle MIPS16 instructions that require
	32-bit encoding and 9-bit immediates.
	(print_insn_mips16): Handle MIPS16 instructions that require
	32-bit encoding and MFC0/MTC0 operand decoding.
	* mips16-opc.c (decode_mips16_operand) <'>', '9', 'G', 'N', 'O'>
	<'Q', 'T', 'b', 'c', 'd', 'r', 'u'>: Add handlers.
	(RD_C0, WR_C0, E2, E2MT): New macros.
	(mips16_opcodes): Add entries for MIPS16e2 instructions:
	GP-relative "addiu" and its "addu" spelling, "andi", "cache",
	"di", "ehb", "ei", "ext", "ins", GP-relative "lb", "lbu", "lh",
	"lhu", and "lw" instructions, "ll", "lui", "lwl", "lwr", "mfc0",
	"movn", "movtn", "movtz", "movz", "mtc0", "ori", "pause",
	"pref", "rdhwr", "sc", GP-relative "sb", "sh" and "sw"
	instructions, "swl", "swr", "sync" and its "sync_acquire",
	"sync_mb", "sync_release", "sync_rmb" and "sync_wmb" aliases,
	"xori", "dmt", "dvpe", "emt" and "evpe".  Add split
	regular/extended entries for original MIPS16 ISA revision
	instructions whose extended forms are subdecoded in the MIPS16e2
	ISA revision: "li", "sll" and "srl".

	binutils/
	* readelf.c (print_mips_ases): Handle MIPS16e2 ASE.
	* NEWS: Mention MIPS16e2 ASE support.

	gas/
	* config/tc-mips.c (RELAX_MIPS16_ENCODE): Add `e2' flag.
	(RELAX_MIPS16_E2): New macro.
	(RELAX_MIPS16_PIC, RELAX_MIPS16_SYM32, RELAX_MIPS16_NOMACRO)
	(RELAX_MIPS16_USER_SMALL, RELAX_MIPS16_USER_EXT)
	(RELAX_MIPS16_DSLOT, RELAX_MIPS16_JAL_DSLOT)
	(RELAX_MIPS16_EXTENDED, RELAX_MIPS16_MARK_EXTENDED)
	(RELAX_MIPS16_CLEAR_EXTENDED, RELAX_MIPS16_ALWAYS_EXTENDED)
	(RELAX_MIPS16_MARK_ALWAYS_EXTENDED)
	(RELAX_MIPS16_CLEAR_ALWAYS_EXTENDED, RELAX_MIPS16_MACRO)
	(RELAX_MIPS16_MARK_MACRO, RELAX_MIPS16_CLEAR_MACRO): Shift bits.
	(mips16_immed_extend): New prototype.
	(options): Add OPTION_MIPS16E2 and OPTION_NO_MIPS16E2 enum
	values.
	(md_longopts): Add "mmips16e2" and "mno-mips16e2" options.
	(mips_ases): Add "mips16e2" entry.
	(mips_set_ase): Handle MIPS16e2 ASE.
	(insn_insert_operand): Explicitly handle immediates with MIPS16
	instructions that require 32-bit encoding.
	(is_opcode_valid_16): Pass enabled ASE bitmask on to
	`opcode_is_member'.
	(validate_mips_insn): Explicitly handle immediates with MIPS16
	instructions that require 32-bit encoding.
	(operand_reg_mask) <OP_REG28>: Add handler.
	(match_reg28_operand): New function.
	(match_operand) <OP_REG28>: Add handler.
	(append_insn): Pass ASE_MIPS16E2 setting to RELAX_MIPS16_ENCODE.
	(match_mips16_insn): Handle MIPS16 instructions that require
	32-bit encoding and `V' and `u' operand codes.
	(mips16_ip): Allow any characters except from `.' in opcodes.
	(mips16_immed_extend): Handle 9-bit immediates.  Do not shuffle
	immediates whose width is not one of these listed.
	(md_estimate_size_before_relax): Handle MIPS16e2 relaxation.
	(mips_relax_frag): Likewise.
	(md_convert_frag): Likewise.
	(mips_convert_ase_flags): Handle MIPS16e2 ASE.

	* doc/as.texinfo (Target MIPS options): Add `-mmips16e2' and
	`-mno-mips16e2' options.
	(-mmips16e2, -mno-mips16e2): New options.
	* doc/c-mips.texi (MIPS Options): Add `-mmips16e2' and
	`-mno-mips16e2' options.
	(MIPS ASE Instruction Generation Overrides): Add `.set mips16e2'
	and `.set nomips16e2'.
2017-05-15 13:57:10 +01:00
..
aarch64.h Rename R_AARCH64_TLSDESC_LD64_LO12_NC to R_AARCH64_TLSDESC_LD64_LO12 and R_AARCH64_TLSDESC_ADD_LO12_NC to R_AARCH64_TLSDESC_ADD_LO12. 2017-03-13 09:58:04 +00:00
alpha.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
arc-reloc.def Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
arc.h [ARC] Object attributes. 2017-05-10 14:42:22 +02:00
arm.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
avr.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
bfin.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ChangeLog-0415 binutils ChangeLog rotation 2016-01-01 22:59:17 +10:30
ChangeLog-9103
common.h Support ELF SHF_GNU_MBIND and PT_GNU_MBIND_XXX 2017-04-04 09:06:04 -07:00
cr16.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
cr16c.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
cris.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
crx.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
d10v.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
d30v.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
dlx.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
dwarf.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
epiphany.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
external.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
fr30.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
frv.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ft32.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
h8.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
hppa.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
i370.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
i386.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
i860.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
i960.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ia64.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
internal.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ip2k.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
iq2000.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
lm32.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
m32c.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
m32r.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
m68hc11.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
m68k.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mcore.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mep.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
metag.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
microblaze.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mips.h MIPS16e2: Add MIPS16e2 ASE support 2017-05-15 13:57:10 +01:00
mmix.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mn10200.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mn10300.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
moxie.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
msp430.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
mt.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
nds32.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
nios2.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
or1k.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
pj.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
ppc64.h PowerPC addpcis fix 2017-02-28 11:59:47 +10:30
ppc.h PowerPC addpcis fix 2017-02-28 11:59:47 +10:30
pru.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
reloc-macros.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
riscv.h RISC-V: Resurrect GP-relative disassembly hints 2017-04-04 08:29:16 -07:00
rl78.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
rx.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
s390.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
score.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
sh.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
sparc.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
spu.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
tic6x-attrs.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
tic6x.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
tilegx.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
tilepro.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
v850.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
vax.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
visium.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
vxworks.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
wasm32.h Add support for the WebAssembly file format and the wasm32 ELF conversion to gas and the binutils. 2017-03-30 10:57:21 +01:00
x86-64.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xc16x.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xgate.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xstormy16.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30
xtensa.h Update year range in copyright notice of all files. 2017-01-02 14:08:56 +10:30