This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: inline asm clobbers
- From: Ian Lance Taylor <iant at google dot com>
- To: David Wohlferd <dw at limegreensocks dot com>
- Cc: "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Wed, 11 Mar 2015 16:19:13 -0700
- Subject: Re: inline asm clobbers
- Authentication-results: sourceware.org; auth=none
- References: <5500C898 dot 3000601 at LimeGreenSocks dot com>
On Wed, Mar 11, 2015 at 3:58 PM, David Wohlferd <dw@limegreensocks.com> wrote:
>
> Why does gcc allow you to specify clobbers using numbers:
>
> asm ("" : : "r" (var) : "0"); // i386: clobbers eax
>
> How is this better than using register names?
>
> This makes even less sense when you realize that (apparently) the indices of
> registers aren't fixed. Which means there is no way to know which register
> you have clobbered in order to use it in the template.
>
> Having just seen someone trying (unsuccessfully) to use this, it seems like
> there is no practical way you can.
>
> Which makes me wonder why it's there. And whether it still should be.
I don't know why it works. It should be consistent, though. It's
simply GCC's internal hard register number, which doesn't normally
change.
I would agree that one should avoid it. I'd be wary of removing it
from GCC at this point since it might break working code.
Ian