This is the mail archive of the 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: Inline assembly syntax

On 7 May 2004, Ian Lance Taylor wrote:

> These lead us in the direction of
> asm
>   {
>     add r0, foo, bar    // register r0 = variable foo + variable bar
>     add r0, "r1", r2    // register r0 = variable r1 + register r2
>     {                   // instructions in block may not be rearranged
>       cli               // disable interrupts
>       add 0(r0), 1      // * (register r0) += 1
>       sti               // enable interuppts
>     }
>     svc 21 __clobber__(r0,r1,r2) // supervisor call
>     __noschedule__      // scheduling barrier
>     addi r0, r1, constant __constraint__(i) // specify constraint
>   }
> Hmmm.
> Ian

I can see large problems with this. You wind up needing to scan the
assembly block twice: once to determine the register constraints, and once
to actually process the code.

For example, on the SH there's an instruction:

	mov.l	@(r0,rm),rn

where the index register must be r0.

If the user tries to use two different variables for the index register:

	mov.l	@("index1","base1"),var1
	mov.l	@("index2","base2"),var2

then you wind up with the compiler crashing later on because you're trying
to use two different variables in r0, or else you have to do reloads.


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