lkml.org 
[lkml]   [2007]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 0/24] make atomic_read() behave consistently across all architectures
    On Wed, 15 Aug 2007, Satyam Sharma wrote:

    > (C)
    > $ cat tp3.c
    > int a;
    >
    > void func(void)
    > {
    > *(volatile int *)&a = 10;
    > *(volatile int *)&a = 20;
    > }
    > $ gcc -Os -S tp3.c
    > $ cat tp3.s
    > ...
    > movl $10, a
    > movl $20, a
    > ...

    I'm curious about one minor tangential point. Why, instead of:

    b = *(volatile int *)&a;

    why can't this just be expressed as:

    b = (volatile int)a;

    Isn't it the contents of a that's volatile, i.e. it's value can change
    invisibly to the compiler, and that's why you want to force a read from
    memory? Why do you need the "*(volatile int *)&" construct?

    -Bill
    -
    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: 2007-08-16 05:49    [W:4.154 / U:0.380 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site