RFR(M): 8153076: Atomic::* on Solaris should use inline assembly instead of .il files

Dean Long dean.long at oracle.com
Sat Apr 9 00:20:13 UTC 2016


Hi Erik.  Does this work any better?

   __asm__ volatile ("lock; addl $1,%0" : "+m" (*dest) : : "cc", "memory");


dl

On 4/8/2016 4:52 AM, Erik Österlund wrote:
> Hi,
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8153076
> Webrev: http://cr.openjdk.java.net/~eosterlund/8153076/webrev.00/
>
> On Solaris, the Atomic class puts its assembly in a separate .il file, 
> then the code blobs are declared as extern "C" and called from Atomic. 
> More modern GCC-style inline assembly is now supported, and we should 
> use that instead. It works fine the way it is, but making calls just 
> to get an instruction that could be inlined, seems suboptimal.
>
> There are two important things to note:
>
> 1) I have removed all the 32 bit code from solaris Atomic, and weird 
> combinations with GCC and compiler1. JDK9 is only supported on 64 bit 
> SPARC and x86, building using Solaris Studio. Since it is using 
> GCC-style inline assembly, the code should work with GCC too, but I 
> have not tested that as it is not a supported way of building OpenJDK. 
> I personally do not think we should spend too much time on supporting 
> unsupported code.
>
> 2) There appears to be a bug in Solaris Studio for emitting memory 
> accesses on x86.
>
> The following code:
>
> inline void Atomic::inc    (volatile jint*     dest) {
>   __asm__ volatile ("lock; addl $1,(%0)" :
>                     : "r" (dest) : "cc", "memory");
> }
>
> generated the following in HandleMark::initialize(Thread* thread) on 
> Solaris, x64, using SS12.4:
>
> lock addl $1, (%eax)
>
> Note the %eax instead of %rax. It is wrong and caused SIGSEGV as the 
> address was truncated, and libraries are not put within the first 4 GB 
> of VA.
>
> I worked around the issue by assigning the address operands to a fixed 
> register, rdx. Being awkward with the choice of registers is still 
> better than having to make calls. This will have to be fixed, once the 
> solaris studio bug is fixed.
>
> Note that for SPARC there were no issues like this and the generated 
> code is fine.
>
> Testing: JPRT
>
> I need a sponsor to push this.
>
> Thanks,
> /Erik



More information about the hotspot-runtime-dev mailing list