Writing MIPS assembler instructions in C

C. Jayachandran c.jayachandran at gmail.com
Thu Feb 25 05:26:53 UTC 2010


On Thu, Feb 25, 2010 at 8:01 AM, Patrick Mahan <mahan at mahan.org> wrote:
>
> > %[foo] can be used to refer to named parameters (input or output,
> > maybe even clobbered) of inline assembly instructions rather than
> > using %0, %1, etc., which can be hard to read.  Consider:
> >
> > The brackets with the input and output parameters specify what names
> > to use to refer to them in the assembly listing (here they happen to
> > be mostly the same as the variable names, but that's not necessary.)
> >
>
> Ah Sooo <*whack!*>......
>
> I did not even twig on that... I had gotten it in my head that %[rt]
> was something special to the compiler that caused a certain behavior
> to occur.
>
> Now my problem is I still need to force the value pointed to "addr" into
> a specific register because there is a jalr to a function else where
> that I only have binary access too and it expects it's a value in
> that register.  Can I coerce this?

I may be missing something here,  but have you tried :

__asm__ __volatile__(
           "ld     $8, 0(%0)\n\t"
           "jalr   $8\n"
           : : "r"(addr) : "$8");
}

Or is there a reason this will not work?

JC.

JC


More information about the freebsd-mips mailing list