This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
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