lkml.org 
[lkml]   [2003]   [Dec]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
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 13:59    [W:0.035 / U:0.304 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site