This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
> The code looks good, but it orphans the emit_nop() code from the comment > that describes it. I think the comment block should be moved into the > "else" as well. > > Your comment also doesn't follow FSF conventions (start with a capital > letter, end with ". ".) > > IMO, this sort of thing really needs a testcase. > > Richard > ok, test case attached. here is the new patch. gas regressions ok. David. * 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. Index: gas/config/tc-mips.c =================================================================== RCS file: /cvs/src/src/gas/config/tc-mips.c,v retrieving revision 1.323 diff -c -p -b -r1.323 tc-mips.c *** gas/config/tc-mips.c 11 Oct 2005 11:16:16 -0000 1.323 --- gas/config/tc-mips.c 14 Oct 2005 17:23:59 -0000 *************** append_insn (struct mips_cl_insn *ip, ex *** 2693,2704 **** --- 2693,2721 ---- sync.p, we can not swap. */ || (prev_pinfo & INSN_SYNC)) { + 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; } Index: gas/testsuite/gas/mips/mips.exp =================================================================== RCS file: /cvs/src/src/gas/testsuite/gas/mips/mips.exp,v retrieving revision 1.109 diff -c -p -b -r1.109 mips.exp *** gas/testsuite/gas/mips/mips.exp 6 Sep 2005 18:56:21 -0000 1.109 --- gas/testsuite/gas/mips/mips.exp 14 Oct 2005 17:24:54 -0000 *************** if { [istarget mips*-*-*] } then { *** 771,774 **** --- 771,775 ---- run_dump_test "mips16-dwarf2-n32" } } + if { !$no_mips16 } { run_dump_test "mips16e-jrc" } }
Attachment:
mips16e-jrc.d
Description: Text document
Attachment:
mips16e-jrc.s
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |