lkml.org 
[lkml]   [2003]   [Dec]   [9]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
/
DateMon, 08 Dec 2003 21:37:33 -0800
From"H. Peter Anvin" <>
SubjectRe: const versus __attribute__((const))
Jamie Lokier wrote:
> H. Peter Anvin wrote:
> 
>>>It would be nice to have a way to declare an asm like "pure" not
>>>"const", so that it's allowed to read memory but multiple calls can be
>>>eliminated; I don't know of a way to express that.
>>
>>Just specify memory input operands.
> 
> 
> Thanks.  That's even more useful than "pure" because it implies the
> asm only reads the explicitly passed memory operands.
> 
> Memory input operands don't work if you want the asm to read arbitrary
> memory not mentioned in the inputs (like "pure" allows) or traverse
> linked lists.
> 
> (A long time ago there was a question about whether GCC could ever
> copy the value associated with an "m" operand to a stack slot, and
> pass the address of the stack slot.  After all, GCC _will_ copy the
> value if the operand is an "r", and presumably gives mixed results
> with "rm".  We seem to have concluded that it never will).
> 

Sure it will:


int foo(int x)
{
   int y, z;
   asm("movl %1,%0" : "=r" (y) : "r" (x));
   asm("movl %1,%0" : "=r" (z) : "m" (y));

   return z;
}
: smyrno 21 ; gcc -O2 -c testme.c
: smyrno 22 ; objdump -dr testme.o

testme.o:     file format elf32-i386

Disassembly of section .text:

00000000 <foo>:
    0:   55                      push   %ebp			; Make stack frame
    1:   89 e5                   mov    %esp,%ebp		; d:o
    3:   50                      push   %eax			; Allocate stack slot
    4:   8b 45 08                mov    0x8(%ebp),%eax		; Copy to register
    7:   89 c0                   mov    %eax,%eax		; First asm()
    9:   89 45 fc                mov    %eax,0xfffffffc(%ebp) 	; Copy to stack slot
    c:   8b 45 fc                mov    0xfffffffc(%ebp),%eax	; Second asm()
    f:   c9                      leave				; Destroy stack frame
   10:   c3                      ret

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:59    [from the cache]
©2003-2008