public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Richard Sandiford <rdsandiford@googlemail.com>
To: "Maciej W. Rozycki" <macro@codesourcery.com>
Cc: Ilie Garbacea <ilie@mips.com>,
	 Joseph Myers <joseph@codesourcery.com>,
	 binutils@sourceware.org,  Chao-ying Fu <fu@mips.com>,
	 Rich Fuhler <rich@mips.com>,  David Lau <davidlau@mips.com>,
	 Kevin Mills <kevinm@mips.com>,
	 Catherine Moore <clm@codesourcery.com>,
	 Nathan Sidwell <nathan@codesourcery.com>,
	 Nathan Froyd <froydnj@codesourcery.com>
Subject: Re: [PATCH] MIPS: microMIPS ASE support
Date: Tue, 14 Dec 2010 14:51:00 -0000	[thread overview]
Message-ID: <g4bp4oscro.fsf@richards-desktop-2.stglab.manchester.uk.ibm.com> (raw)
In-Reply-To: <alpine.DEB.1.10.1012131400320.4142@tp.orcam.me.uk> (Maciej	W. Rozycki's message of "Tue\, 14 Dec 2010 12\:06\:04 +0000 \(GMT\)")

"Maciej W. Rozycki" <macro@codesourcery.com> writes:
>> I think we're getting close, so could you post any updates as patches
>> relative to this one, rather than reposting the whole thing?
>
>  Yes, I think it will make it easier for us both to keep track of what has 
> been addressed and what not.  I have no technical problem with including 
> further changes in a separate patch.

Thanks.  For avoidance of doubt, please make any updates (with the FIXMEs
fixed, for instance), relative to the original.

>> Formatting nit:
>> 
>>       /* If the output section is the PLT section,
>>          then the target is not microMIPS.  */
>>       target_is_micromips_code_p = (htab->splt != sec
>> 				    && ELF_ST_IS_MICROMIPS (h->root.other));
>> 
>> More importantly, the comment isn't any help.  When do we create
>> statically-resolved relocations against .plt?

Oops, ignore this, I was thinking "sec" was the section that contained
the relocation.

>> >    /* Calls from 16-bit code to 32-bit code and vice versa require the
>> > -     mode change.  */
>> > -  *cross_mode_jump_p = !info->relocatable
>> > -		       && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
>> > -			   || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
>> > -			       && target_is_16_bit_code_p));
>> > +     mode change.  This is not required for calls to undefined weak
>> > +     symbols, which should never be executed at runtime.  */
>> 
>> But why do we need to go out of our way to check for them?  I'm sure
>> there's a good reason, but the comment doesn't give much clue what it is.
>
>  Undefined weak symbols are, well, undefined, so they have resolved to nil 
> and are meant never to be jumped to, so we don't want to error out on them 
> just because they do not have the ISA bit set and a JALX therefore 
> required could not be used for some reason, like the invocation being a 
> sibling call or because it would not satisfy the fixed delay slot 
> dependency.

OK, makes sense.  Please update the comment to something like:

  /* Calls from 16-bit code to 32-bit code and vice versa require the
     mode change.  However, we can ignore calls to undefined weak symbols,
     which should never be executed at runtime.  This exception is important
     because the assembly writer may have "known" that any definition of the
     symbol would be 16-bit code, and that direct jumps were therefore
     acceptable.  */

>> At least, that's what the code seems to do, since it returns 2 for
>> things like:
>> 
>> > +  { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
>> 
>> which as far as I can tell from the opcodes patch allows both 16-bit
>> and 32-bit delay slots.  (IV-g doesn't seem to be public yet, so I can't
>> check the spec.)  But from the way the function is used, it looks
>> like 0 really means "no size constraints", so why doesn't the function
>> return 0 for instructions like these?
>
>  Only link variations of branches and jumps have a fixed-size delay slot 
> -- that's because the link register is set to a fixed offset from the 
> delay-slot instruction (either four as with JAL or two as with JALS).  Of 
> all such jumps and branches only JALX does not have a JALXS counterpart 
> (regrettably, as it would have made life of software much, much easier).
>
>  I've explained the meaning of 0 below -- it's unsafe to return this value 
> for a variable-size delay slot.

Hmm, I was thinking of the case where there was no branch _after_
the LUI, and where the instruction after the LUI could then become
the delay slot for a variable-length branch before the (deleted) LUI.
But yeah, I can see that 0 isn't correct if there is a branch immediately
after the LUI.

>> I'm not sure whether I like the idea of making this function quadratic
>> simply to decide whether the preceding instruction is a branch,
>> but there's probably not much we can do about that.
>
>  Hmm, we could do this in two passes over the reloc table (still O(n)) and 
> first make a fast auxiliary data structure (e.g. a hash) to keep addresses 
> of branch and jump relocations.  Given linker relaxation is off by default 
> I'd vote for this as a future improvement.

Yeah, I'd wondered about that, but then we'd need to measure whether that
made things better or not.  I'm OK with leaving it.

Richard

  reply	other threads:[~2010-12-14 13:30 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-18 18:19 [PATCH] MIPS: microMIPS and MCU ASE instruction set support Maciej W. Rozycki
2010-05-23 21:38 ` Richard Sandiford
2010-05-24 22:25   ` Fu, Chao-Ying
2010-05-26 19:47     ` Richard Sandiford
2010-06-01 14:21   ` Maciej W. Rozycki
2010-06-01 14:39     ` Catherine Moore
2010-06-01 22:04     ` Richard Sandiford
2010-06-01 22:47     ` Fu, Chao-Ying
2010-06-05  9:17     ` Richard Sandiford
2010-07-26 10:56   ` [PATCH] MIPS: microMIPS ASE support Maciej W. Rozycki
2010-07-26 13:25     ` Nathan Froyd
2010-07-26 13:53       ` Maciej W. Rozycki
2010-07-26 19:03     ` Richard Sandiford
2010-12-07  1:13       ` Maciej W. Rozycki
2010-12-12 14:59         ` Richard Sandiford
2010-12-14 13:30           ` Maciej W. Rozycki
2010-12-14 14:51             ` Richard Sandiford [this message]
2010-12-16 11:54               ` Maciej W. Rozycki
2010-12-18 10:26                 ` Richard Sandiford
2010-12-14 17:56             ` Joseph S. Myers
2010-12-16 15:28               ` Maciej W. Rozycki
2010-12-17 20:56             ` Fu, Chao-Ying
2010-12-18 10:09               ` Richard Sandiford
2011-01-02 11:36         ` Richard Sandiford
2011-02-21 15:35           ` Maciej W. Rozycki
2011-02-22 20:12             ` Fu, Chao-Ying
2011-02-22 20:19             ` Fu, Chao-Ying
2011-02-24 10:46               ` Maciej W. Rozycki
2011-02-26 11:41                 ` Richard Sandiford
2011-02-28 16:41                   ` Maciej W. Rozycki
2011-02-26  0:00             ` Maciej W. Rozycki
2011-03-13  9:23               ` Richard Sandiford
2011-07-25  7:49                 ` Richard Sandiford
2011-07-26  2:01                   ` Maciej W. Rozycki
2011-07-29  0:58                     ` Maciej W. Rozycki
2011-07-29 11:30                       ` Richard Sandiford
2011-07-29 22:52                         ` Maciej W. Rozycki
2011-02-26 11:36             ` Richard Sandiford
2011-07-26 14:00               ` Maciej W. Rozycki
2010-05-26 20:19 ` [PATCH] MIPS: microMIPS and MCU ASE instruction set support Richard Sandiford
2010-05-27 21:39 ` Richard Sandiford

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=g4bp4oscro.fsf@richards-desktop-2.stglab.manchester.uk.ibm.com \
    --to=rdsandiford@googlemail.com \
    --cc=binutils@sourceware.org \
    --cc=clm@codesourcery.com \
    --cc=davidlau@mips.com \
    --cc=froydnj@codesourcery.com \
    --cc=fu@mips.com \
    --cc=ilie@mips.com \
    --cc=joseph@codesourcery.com \
    --cc=kevinm@mips.com \
    --cc=macro@codesourcery.com \
    --cc=nathan@codesourcery.com \
    --cc=rich@mips.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).