This is the mail archive of the binutils@sources.redhat.com 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]

Re: [patch] MIPS gas problems with gcc's explicit relocs


>>>>> "Thiemo" == Thiemo Seufer <ica2_ts@csv.ica.uni-stuttgart.de> writes:

 Thiemo> Andreas Schwab wrote:
 >> Eric Christopher <echristo@redhat.com> writes:
 >> 
 >> >> - Work around the problem by not using "m" constraints for
 >> (d)la in >> the inline assembler, that is instead of
 >> >> 
 >> >> asm("dla\t%0,%1" : "=r" (result) : "m" (foo));
 >> >> 
 >> >> something like
 >> >> 
 >> >> asm("dla\t%0,foo" : "=r" (result));
 >> >
 >> > I like this I think the most. It fits with what people are
 >> trying to do > with the la instruction, i.e. load an address for a
 >> symbol that they > know.
 >> 
 >> For "load address" and "push address" type insns there is the "p"
 >> constraint letter.  Wouldn't that be the correct constraint here?

 Thiemo> Interestingly, "p" causes this expansion:

 Thiemo> lui $2,%highest(foo) daddiu $2,$2,%higher(foo) sll $2,$2,16
 Thiemo> daddiu $2,$2,%hi(foo) dsll $2,$2,16 ld $2,%lo(foo)($2) #APP
 Thiemo> dla $2,$2 #NO_APP

 Thiemo> So the inline assembler gets a fully loaded register for it.

That sounds like a bug -- it does not match what the documentation
says it should do, and it doesn't make any real sense either.

My view is that the built-in macro stuff of the MIPS assembler is a
mistake, and the compiler should always do the job, not the
assembler, because the compiler can do it better.  So for the compiler
to expand the multiple steps needed to load an address is correct.

For example, if I use an "m" constraint, I'd expect the corresponding
%x operand to become an offset and base register pair with a valid
offset and the base register loaded with the rest of the address.

       paul


 Thiemo> Thiemo


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]