[PATCH] microMIPS insn32 mode support
Maciej W. Rozycki
macro@codesourcery.com
Tue Jun 25 18:32:00 GMT 2013
On Wed, 12 Jun 2013, Richard Sandiford wrote:
> > This change adds microMIPS insn32 mode support to GAS and LD. This is
> > required for some odd purposes I am told.
>
> Go on, give us a hint. What purposes?
For that I had to ask at the source. And the answer is this mode lets
one make a reliable pipeline performance comparison between the standard
MIPS and the microMIPS execution mode. With only 32-bit instructions used
the code size and any memory offsets, branch displacements, etc. can be
the same so the influence of the caches, bus cycles etc. can be ruled out.
One way to make such a comparison is to compile code to standard MIPS
assembly and then pass this code to the assembler, requesting machine code
generation in the microMIPS/insn32 mode. Of course there are some
limitations, e.g. branch displacements must fit in the narrower range and
also it also means the three new macros I added are not particularly
useful (but I did not know that while implementing them).
> Looks like a good implementation of an odd feature though. Patch is OK,
> thanks.
I had to regenerate the change and trivially adjust it to take your
recent ECOFF support wipeout into account. Following your another recent
change I also removed @sc formatting commands from the new sections of the
GAS manual. No regressions in testing. Here's the final version and its
corresponding ChangeLog entries that I have committed.
Thanks for your review.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
Paul Brook <paul@codesourcery.com>
bfd/
* elfxx-mips.h (_bfd_mips_elf_insn32): New prototype.
* elfxx-mips.c (mips_elf_link_hash_table): Add insn32 member.
(STUB_MOVE32_MICROMIPS, STUB_JALR32_MICROMIPS): New macros.
(MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE): Likewise.
(MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE): Likewise.
(micromips_insn32_o32_exec_plt0_entry): New variable.
(micromips_insn32_o32_exec_plt_entry): Likewise.
(_bfd_mips_elf_adjust_dynamic_symbol): Handle insn32 mode.
(mips_elf_estimate_stub_size): Likewise.
(_bfd_mips_elf_size_dynamic_sections): Likewise.
(_bfd_mips_elf_finish_dynamic_symbol): Likewise.
(mips_finish_exec_plt): Likewise.
(_bfd_mips_elf_relax_section): Likewise.
(_bfd_mips_elf_insn32): New function.
(_bfd_mips_elf_get_synthetic_symtab): Handle insn32 PLT.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
gas/
* config/tc-mips.c (mips_set_options): Add insn32 member.
(mips_opts): Initialize it.
(NOP_INSN, NOP_INSN_SIZE): Handle insn32 mode.
(options): Add OPTION_INSN32 and OPTION_NO_INSN32 enum values.
(md_longopts): Add "minsn32" and "mno-insn32" options.
(is_size_valid): Handle insn32 mode.
(md_assemble): Pass instruction string down to macro.
(brk_fmt): Add second dimension and insn32 mode initializers.
(mfhl_fmt): Likewise.
(BRK_FMT, MFHL_FMT): Handle insn32 mode.
(macro_build) <'c'>: Handle microMIPS 32-bit BREAK encoding.
(macro_build_jalr, move_register): Handle insn32 mode.
(macro_build_branch_rs): Likewise.
(macro): Handle insn32 mode.
<M_JRADDIUSP>, <M_JRC>, <M_MOVEP>: New cases.
(mips_ip): Handle insn32 mode.
(md_parse_option): Handle OPTION_INSN32 and OPTION_NO_INSN32.
(s_mipsset): Handle "insn32" and "noinsn32" pseudo-ops.
(mips_handle_align): Handle insn32 mode.
(md_show_usage): Add -minsn32 and -mno-insn32.
* doc/as.texinfo (Target MIPS options): Add -minsn32 and
-mno-insn32 options.
(-minsn32, -mno-insn32): New options.
* doc/c-mips.texi (MIPS Opts): Add -minsn32 and -mno-insn32
options.
(MIPS assembly options): New node. Document .set insn32 and
.set noinsn32.
(MIPS-Dependent): List the new node.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
gas/testsuite/
* gas/mips/micromips-insn32.d: New test.
* gas/mips/micromips-noinsn32.d: Likewise.
* gas/mips/micromips.l: Rename to...
* gas/mips/micromips-warn.l: ... this.
* gas/mips/micromips.d: Update accordingly.
* gas/mips/micromips-trap.d: Likewise.
* gas/mips/micromips.l: New list test.
* gas/mips/micromips.s: Add conditionals.
* gas/mips/mips.exp: Run the new tests.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
include/opcode/
* mips.h: Add M_JRADDIUSP, M_JRC and M_MOVEP anonymous enum
values.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
ld/
* emultempl/mipself.em (insn32): New variable.
(mips_create_output_section_statements): Handle insn32 mode.
(PARSE_AND_LIST_PROLOGUE): New macro.
(PARSE_AND_LIST_LONGOPTS): Likewise.
(PARSE_AND_LIST_OPTIONS): Likewise.
* gen-doc.texi: Set MIPS.
* ld.texinfo: Likewise.
(Options specific to MIPS targets): New section.
(ld and MIPS family): New node.
(Top, Machine Dependent): List the new node.
2013-06-25 Maciej W. Rozycki <macro@codesourcery.com>
opcodes/
* micromips-opc.c (micromips_opcodes): Add "jraddiusp", "jrc"
and "movep" macros.
Maciej
binutils-umips-insn32.diff
[Patch attached compressed due to its size.]
-------------- next part --------------
A non-text attachment was scrubbed...
Name: binutils-umips-insn32.diff.bz2
Type: application/octet-stream
Size: 40702 bytes
Desc:
URL: <https://sourceware.org/pipermail/binutils/attachments/20130625/3fadd063/attachment.obj>
More information about the Binutils
mailing list