This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC 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: MS/CW-style inline assembly for GCC


>>>>> "Geoff" == Geoff Keating <geoffk@geoffk.org> writes:

 Geoff> "Richard Earnshaw" <Richard.Earnshaw@arm.com> writes:
 >> On Fri, 2004-05-07 at 22:38, Paul Koning wrote:
 >> 
 >> > I think an asm statement with any semantics OTHER than "make
 >> this > block of instructions appear in the binary exactly as
 >> written" is > badly broken.  (Yes, that's why the MIPS assembler
 >> is bogus -- > although there at least you can tell it ".set
 >> noreorder".)
 >> > 
 >> 
 >> I used to think that way myself, but these days I'm not so sure.
 >> Modern processors perform abysmally if code is not correctly
 >> scheduled, and there's no way that a programmer can tune their
 >> code for every variant of a CPU on the market.  Allowing the tools
 >> to reschedule the contents of ASM blocks is potentially a major
 >> win.
 >> 
 >> It's true that there are cases where the ordering is subtly
 >> important, but as you say, there are ways to avoid scheduling in
 >> those cases.
 >> 
 >> It's always dangerous to say "never"!

 Geoff> Why wouldn't you write the code in C in these cases?  It seems
 Geoff> to me that if you're willing to have the compiler schedule the
 Geoff> code, you might as well let it select the instructions and do
 Geoff> register allocation as well.

Good argument.

Assembler belongs in places where you need more performance than a
compiler can give you -- in which case you MUST know scheduling.  And
it belongs in places where you need absolute control over what happens
-- diagnostics, DRAM initialization, bootstraps, stuff like that.

If you can allow your code to be mangled by a program, you might as
well write it in C, it will be far more maintainable.

     paul


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