Re: A question about register constraint of inline assembly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 01 Jun 2005 23:23:46 -0400, Ian Lance Taylor wrote
> "Lin Chun-Zhi" <lcz90@xxxxxxxxxxxxx> writes:
> 
> > I got a question about register constraint in kernel source.
> > Here is the cut of bios32_service()
> > 
> > 597         __asm__("lcall (%%edi); cld"
> > 598                 : "=a" (return_code),
> > 599                   "=b" (address),
> > 600                   "=c" (length),
> > 601                   "=d" (entry)
> > 602                 : "" (service),
> > 603                   "1" (0),
> > 604                   "D" (&bios32_indirect));
> > 
> > In line 602, its register constraint is a NULL string. I can't find how
> > compiler arranges the registers in gcc.info.
> 
> If there are no constraints, the compiler does not constrain the
> operand.  It could be anywhere.  The statement will use "service",
> though; assignments to it will not be deleted.
> 
> By the way, in linux-2.6.8.1 that statement looks like this:
> 
> 	__asm__("lcall *(%%edi); cld"
> 		: "=a" (return_code),
> 		  "=b" (address),
> 		  "=c" (length),
> 		  "=d" (entry)
> 		: "0" (service),
> 		  "1" (0),
> 		  "D" (&bios32_indirect));
> 
> Ian

Thank you, Ian. I got it.

But there is another wield thing. I can't pass the compiling stage use the 
code below.

int main(void)
{
        int __value, __port;

        asm volatile ( "movl %1,%0" : "=a" (__value), "=d" (__port)
                                   : ""   (__value), "1"  (__port)
                     );

        return 0;
}

The error message is
[root@littleroach tmp]# gcc a.c
a.c: In function `main':
a.c:10: warning: asm operand 2 probably doesn't match constraints
a.c:10: error: impossible constraint in `asm'

But the same code in the kernel works very well.
Do I miss something?

Roach

--
Open WebMail Project (http://openwebmail.org)

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux