* config/tc-mips.c (append_insn): Convert MIPS16 jr/jalr jumps

into jrc/jalrc versions if ISA_MIPS32+ and not doing the swap,
hence avoiding to emit a nop.

* gas/mips/mips.exp: Run new test.
* gas/testsuite/gas/mips/mips16e-jrc.s: New test for converting
jalr/jr to the compact jalrc/jrc instructions.
* gas/testsuite/gas/mips/mips16e-jrc.d: New.
This commit is contained in:
David Ung 2005-10-19 18:47:09 +00:00
parent 33c5e3a91d
commit 290248614c
6 changed files with 57 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2005-10-19 David Ung <davidu@mips.com>
* config/tc-mips.c (append_insn): Convert MIPS16 jr/jalr jumps
into jrc/jalrc versions if ISA_MIPS32+ and not doing the swap,
hence avoiding to emit a nop.
2005-10-19 Jie Zhang <jie.zhang@analog.com>
* config/tc-bfin.c (md_begin): Let the lex_type of '(' be

View file

@ -2693,12 +2693,29 @@ append_insn (struct mips_cl_insn *ip, expressionS *address_expr,
sync.p, we can not swap. */
|| (prev_pinfo & INSN_SYNC))
{
/* We could do even better for unconditional branches to
portions of this object file; we could pick up the
instruction at the destination, put it in the delay
slot, and bump the destination address. */
insert_into_history (0, 1, ip);
emit_nop ();
if (mips_opts.mips16
&& (pinfo & INSN_UNCOND_BRANCH_DELAY)
&& (pinfo & (MIPS16_INSN_READ_X | MIPS16_INSN_READ_31))
&& (mips_opts.isa == ISA_MIPS32
|| mips_opts.isa == ISA_MIPS32R2
|| mips_opts.isa == ISA_MIPS64
|| mips_opts.isa == ISA_MIPS64R2))
{
/* Convert MIPS16 jr/jalr into a "compact" jump. */
ip->insn_opcode |= 0x0080;
install_insn (ip);
insert_into_history (0, 1, ip);
}
else
{
/* We could do even better for unconditional branches to
portions of this object file; we could pick up the
instruction at the destination, put it in the delay
slot, and bump the destination address. */
insert_into_history (0, 1, ip);
emit_nop ();
}
if (mips_relax.sequence)
mips_relax.sizes[mips_relax.sequence - 1] += 4;
}

View file

@ -1,3 +1,10 @@
2005-10-19 David Ung <davidu@mips.com>
* gas/mips/mips.exp: Run new test.
* gas/testsuite/gas/mips/mips16e-jrc.s: New test for converting
jalr/jr to the compact jalrc/jrc instructions.
* gas/testsuite/gas/mips/mips16e-jrc.d: New.
2005-10-19 Martin Schwidefsky <schwidefsky@de.ibm.com>
* gas/s390/zarch-z9-109.s: Add tests for unnormalized hfp multiply

View file

@ -771,4 +771,5 @@ if { [istarget mips*-*-*] } then {
run_dump_test "mips16-dwarf2-n32"
}
}
if { !$no_mips16 } { run_dump_test "mips16e-jrc" }
}

View file

@ -0,0 +1,14 @@
#objdump: -dr -mmips:isa32 -mmips:16
#as: -march=mips32 -mips16
#name: mips16e jalrc/jrc
.*: file format .*
Disassembly of section .text:
00000000 <.text>:
0: eac0 jalrc v0
2: e8a0 jrc ra
4: 6a01 li v0,1
6: 6500 nop
8: 6500 nop
a: 6500 nop
c: 6500 nop
e: 6500 nop

View file

@ -0,0 +1,6 @@
# Test the generation of jalrc/jrc opcodes
jalr $31,$2
jr $31
li $2,1
.p2align 4