OpenJDK extension to AArch64 and Windows

Monica Beckwith Monica.Beckwith at microsoft.com
Wed Jun 24 16:40:24 UTC 2020


Hello OpenJDK community,

As the project lead here @Microsoft, I am pleased to share that we have been working towards a Windows addition to the OpenJDK AArch64 port. We are very thankful to all that have contributed to the Linux+aarch64 and Windows+x86-64. Both these codebases came to our rescue on numerous occasions.

Support status: We have successfully ported C2 and can build the server release (cross-compiled environment) 
Test coverage: C2 + ParallelGC (No AOT, JVMCI, ZGC, ShenandoahGC, G1GC)
Tests and benchmarks covered [1]: JTReg [2], JCStress, jmh-jdk-microbenchmarks, SPEC SERT, SPECJBB2015 [3], SPEC JVM2008, Scimark2, SPEC JBB2005.
Umbrella Bug ID: https://bugs.openjdk.java.net/browse/JDK-8248238 
Webrevs: 
`Webrev P1`: http://cr.openjdk.java.net/~burban/winarm64_p1_llp64/  & 
`Webrev P2`: http://cr.openjdk.java.net/~burban/winarm64_p2_new-target/ 

The first patch `Webrev P1` (patch 1 aka P1 in our tests) helps integrate support for Windows (LLP64) on Linux + AArch64
The second patch `Webrev P2` (patch 2 aka P2 in our tests) adds the 'windows-aarch64' support in `os_cpu`. We also had to modify shared code, and I am highlighting a few details here:
	* In windows_x86 such as the `get_frame_at_stack_banging_point` in `os_windows_x86.cpp`,
	* In `os/windows os_windows.cpp` to make it aware of Windows + Arm64
	* `os/windows` in `threadCritical_windows.cpp`,
	* Windbg support
	* `globalDefinitions_visCPP.hpp` in `share/utilities`
	* We also added Vectored Exception Handling (VEH) to P2, as it is a requirement on Windows + Arm64 (due to ABI specifications).
Also, in `Webrev P2`, you will find that we have made some significant changes to `cpu/aarch64` around register usage since on Windows + Arm64, register R18 points to TEB [4]. We have discussed this with Andrew Haley and Andrew Dinn, and they are helping us with a cleaner implementation of the same. Their constant support and guidance have humbled me.

I'd also like to recognize the great work done by Ludovic Henry (our resident runtime expert) in driving the C2 support and by Bernhard Urban-Forster, (who recently joined our team) in helping expand the coverage to G1 GC.

As a part of this project, we have also worked on two additional patches:
	* Expanding VEH on Windows to x86-64 (patch 3 aka P3 in our tests). Details here: https://bugs.openjdk.java.net/browse/JDK-8247941 
	* Improvements in the shared cross-platform code on Windows (patch 4 aka P4 in our tests) - We will send out a separate patch soon.

We welcome any feedback and comments from the community and are looking forward to working together.

Regards,
Monica

[1] https://github.com/microsoft/openjdk-aarch64/blob/master/wkload-status-on-Win%2BArm64.md
[2] https://github.com/microsoft/openjdk-aarch64/blob/master/JTRegtests.md
[3] https://github.com/microsoft/openjdk-aarch64/blob/master/SPECJBB2015-test-matrices.md
[4] https://docs.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=vs-2019#integer-registers   


More information about the hotspot-runtime-dev mailing list