mfence on i686 with volatile?

David Holmes - Sun Microsystems David.Holmes at Sun.COM
Wed Nov 18 00:04:47 PST 2009


Denis,

Is this with -client or -server ?

For x86 we should see a StoreLoad barrier after the assignment to v2:

http://gee.cs.oswego.edu/dl/jmm/cookbook.html

For -server printOptoAssembly shows our "mfence" replacement a lock:addl 
(which is the implementation of membar-volatile().

[ Got to go get hsdis myself to test printAssembly directly ]

David Holmes

David Holmes - Sun Microsystems said the following on 11/18/09 11:42:
> Denis,
> 
> This is OT for the discuss mailing list so I've moved it to hotspot-dev. 
> (discuss-list was bcc'ed).
> 
> Regards,
> David Holmes
> 
> Dennis Byrne said the following on 11/18/09 09:28:
>> I am not observing any fences in the output from PrintAssembly.  The
>> following java produces the following assembly, regardless of whether
>> or not I make v and v2 volatile.
>>
>> class HelloWorld extends Thread{
>>   public static int v = 0;
>>   public static int v2 = 1;
>>   public static void main(String[] args){
>>     new HelloWorld().start();
>>     new HelloWorld().start();
>>   }
>>   public void run() {
>>        for(int i = 0; i < 1000000; i++){
>>         v += 333;
>>         v2 += v;
>>        }
>>        System.out.println(v);
>>        System.out.println(v2);
>>   }
>> }
>>
>>
>>   0x02e33d30: mov    %eax,-0x3000(%esp) ;
>>   0x02e33d37: push    %ebp                           ;
>>   0x02e33d38: mov    %esp,%ebp              ;
>>   0x02e33d3a: sub    $0x28,%esp             ;
>>   0x02e33d3d: mov    $0x0,%esi              ;
>>   0x02e33d42: jmp    0x02e33d7a             ;
>>   0x02e33d47: nop                        ;
>>   0x02e33d48: mov    $0x95ba5348,%edx       ;
>>
>>   0x02e33d4d: mov    0x1b8(%edx),%ecx       ;
>>   0x02e33d53: add    $0x14d,%ecx            ; v += 333
>>   0x02e33d59: mov    %ecx,0x1b8(%edx)       ;
>>   0x02e33d5f: mov    0x1bc(%edx),%ecx       ;
>>   0x02e33d65: mov    0x1b8(%edx),%edi       ;
>>   0x02e33d6b: add    %edi,%ecx              ; v2 += v
>>   0x02e33d6d: mov    %ecx,0x1bc(%edx)       ;
>>   0x02e33d73: inc    %esi                           ; i++
>>                                             ;
>>                                             ;
>>                                             ; - HelloWorld::run at 31 
>> (line 12)
>>
>>


More information about the hotspot-dev mailing list