-
Notifications
You must be signed in to change notification settings - Fork 729
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use NASM assembler on x86-64 Linux #3293
Conversation
@0xdaryl fyi |
@0xdaryl , while this PR is labelled as WIP, the only reason for that is that CMakefiles need to be updated so that the Travis CI builds pass. Currently, they will not pass because |
99c2778
to
1aeb25d
Compare
Changes are needed to both omr and open j9 to get the cmake part of this working. OMR part: eclipse-omr/omr#3124 Polishing off the openj9 part now |
Cmake patches ready |
@0xdaryl ready for review as eclipse-omr/omr#3124 has been merged |
@nbhuiyan once the omr changes get promoted, you can rebase and push, which should re-trigger the travis build |
Jenkins test sanity xlinux,win jdk8,jdk11 |
cda1d9f
to
36ef459
Compare
@0xdaryl Your review comments have been addressed. Ready for review. |
Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
This new variable will make it simpler to specify the platforms that should be using NASM files. This will not be needed once all x86 OSes use NASM. Currently, NASM is set up to be used on OSX and x86-64 Linux. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
Applies to OSes that use NASM. DECLARE_PUBLIC/EXTERN would handle the extern and global label naming differences between macOS and Linux. Single-line macros _rax, _rbx, etc would be used for handling the differences in register mapping when sharing code between 32 and 64 bit hosts, getting rid of the file X86RegisterMap.inc. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
X86-64 Linux (along with Mac OSX) now uses consistent format to declare assembly procedure names in C++ code. Eventually, this format will be used throughout x86. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
By making use of those macros, which are generated by jilgen, we no longer have to worry about handling the OS differences when writing assembly code to work across operating systems. This removes the need to prepend underscores to global and extern symbol names. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
Signed-off-by: Devin Nakamura <[email protected]>
NASM v2.14 errors out when entryFallback and methodEntryFallback are set to equate to extern symbols. EQU is documented as being meant to define symbols to constant values. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
x86 platforms that use the NASM assembly files should not use leading underscores in the JIT helper names. NASM_ASSEMBLER is defined in asmprotos.h for platforms making use of the NASM assembly files, and simplifies the preprocessor checks done to use the correct version of the helper names. Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
Signed-off-by: Nazim Uddin Bhuiyan <[email protected]>
Jenkins test sanity xlinux,win jdk8,jdk11 |
Jenkins test sanity xlinux,win,win32 jdk8 |
Jenkins test sanity xlinux,win jdk11 |
Jenkins test sanity win32 jdk8 |
I completed some IBM-internal testing of this PR on Linux x86-32 and the builds and test succeeded. Merging now. |
Changes so far include:
DECLARE_EXTERN
andDECLARE_PUBLIC
Depends on: #3352 , eclipse-omr/omr#3124
Issue: #3148