* 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:
parent
33c5e3a91d
commit
290248614c
6 changed files with 57 additions and 6 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -771,4 +771,5 @@ if { [istarget mips*-*-*] } then {
|
|||
run_dump_test "mips16-dwarf2-n32"
|
||||
}
|
||||
}
|
||||
if { !$no_mips16 } { run_dump_test "mips16e-jrc" }
|
||||
}
|
||||
|
|
14
gas/testsuite/gas/mips/mips16e-jrc.d
Normal file
14
gas/testsuite/gas/mips/mips16e-jrc.d
Normal 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
|
6
gas/testsuite/gas/mips/mips16e-jrc.s
Normal file
6
gas/testsuite/gas/mips/mips16e-jrc.s
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Test the generation of jalrc/jrc opcodes
|
||||
jalr $31,$2
|
||||
jr $31
|
||||
li $2,1
|
||||
|
||||
.p2align 4
|
Loading…
Add table
Add a link
Reference in a new issue