[8u] RFR: JDK-8164041: support old pre-c++11 toolchains and ucLibc

Edward Nevill edward.nevill at gmail.com
Fri Sep 2 11:14:59 UTC 2016

On Fri, 2016-08-26 at 16:01 +0300, Andrey Petushkov wrote:
> Hi Ed,
> Thank you for response! It’s though not quite clear to me if it’s possible to use generated code there since these functions are inline, so having them as generated incur indirect call, which likely alleviates any performance gain (so for universal binary it’s easier to just build against the lowest supported CPU anyway)

Yes, of course, the fact that it cannot inline the dynamic calls leads
to a performance hit.

Two possible solutions to this

1) Do a static test.

   if (has_ldrexd()) do_ldrexd; else do_somethingelse;

This can then be inlined and reduces the cost to a single static test
and a predicted branch.

2) Generate 2 versions of libjvm.so (say libjvm.so and
libjvm_ldrexd.so) and have the loader select the correct version in a
similar way to the way it selects the client ot server vm.

This would have no performance overhead, but is considerably more
complex and would require a JEP if it were to be accepted upstream.

I do think there is value in having a single image which works across
all variants of ARMs.

All the best,

More information about the aarch32-port-dev mailing list