From: Dave Airlie (airlied at domain csn.ul.ie)
Date: Wed 15 Aug 2001 - 16:36:29 IST
I can't explain the %%, don't seem em on MIPS or VAX gas, the stuff at the
end the inputs/outputs is a pure versatility thing, with what I've read in
MSDN (all 5 lines) you can use variables in MS inline asm, GNU inline
makes you decide how you want those variable represented using the stuff
at the end... so you can make the inliner use registers or non-regs and
specify inputs and outputs, it's more complicated but it is shit loads
more powerful...
Dave. now that I understand GNU inline's "r", "g" etc..
> Ok,
> Why is it in quotes? %% before register names is annoying and mainly the
> : : (r) (=m) "memory" stuff at the end of the asm block. Here's an example
> for those who never wandered through the source code: (strstr.c)
>
> char * strstr(const char * cs,const char * ct)
> {
> int d0, d1;
> register char * __res;
> __asm__ __volatile__(
> "movl %6,%%edi\n\t"
> "repne\n\t"
> "scasb\n\t"
> "notl %%ecx\n\t"
> "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
> "movl %%ecx,%%edx\n"
> "1:\tmovl %6,%%edi\n\t"
> "movl %%esi,%%eax\n\t"
> "movl %%edx,%%ecx\n\t"
> "repe\n\t"
> "cmpsb\n\t"
> "je 2f\n\t" /* also works for empty string, see above */
> "xchgl %%eax,%%esi\n\t"
> "incl %%esi\n\t"
> "cmpb $0,-1(%%eax)\n\t"
> "jne 1b\n\t"
> "xorl %%eax,%%eax\n\t"
> "2:"
> :"=a" (__res), "=&c" (d0), "=&S" (d1)
> :"0" (0), "1" (0xffffffff), "2" (cs), "g" (ct)
> :"dx", "di");
> return __res;
> }
>
>
>
>
-- David Airlie, Software Engineer http://www.skynet.ie/~airlied / airlied at domain skynet.ie pam_smb / Linux DecStation / Linux VAX / ILUG person
This archive was generated by hypermail 2.1.6 : Thu 06 Feb 2003 - 13:11:40 GMT