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