A question about register constraint of inline assembly

Submitted by roach
on June 1, 2005 - 7:11pm

Hi there,

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 here in gcc.info.

Does anyone know the further information?

Kindly regards,
Roach

which kernel?

strcmp
on
June 2, 2005 - 3:24am

Due to the similarities i assume you are talking about some older linux version? Today's version arch/i386/pci/pcbios.c as well as the 2.6.8 i keep lying around for reading purposes look better in this regard. One can assume the code works identical to your version. Perhaps this was some undocumented (even undesired) feature, caused e.g. by the default value of some variable and a missing error check, which got corrected for gcc4 or icc compatibility?

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.