Tuesday January 08, 2008
Any status on tiered compilation?
So it has been a quite a long time since I had anything to say about tiered compilation. Mostly this is because there wasn't a lot to say.
I've spent most of my working on a side issue. That issue is the lack of a 64 bit version of the client compiler. We've actually had a mostly working version of the client compiler for sparc for quite a while but there was nothing at on on the x86 side. Without a client compiler for 64 bit there was no way to have tiered work in that environment.
One of the reasons there was no 64 bit x86 version had a lot to with the way the original 64 bit port on x86 was done. The original implementation was done outside of Sun and the implementator went with a totally separate cpu directory (amd64) rather than i486 cpu directory contain both flavors much like sparc. As a result there was a lot of code duplication. Rather than expand the amount of duplication by adding a whole bunch of new c1 files I took the approach of merging the i486 and amd64 directories into a single x86 directory. Unlike sparc where 64 bit has a very similar ABI (very close anyway) and pretty much the same number of registers 64 bit x86 has more registers and a different abi for calling conventions (32 bit is purely stack based, 64 bit uses register based convention). Worse still solaris/linux have a different abi than windows. This makes merging the files into something as simple as the sparc side fairly difficult. The initial merge and creation of the x86 cpu directory happened some months ago. This resulted in the deletion of a number of files that were basically duplicates.
Once that step was complete I set about merging the two assemblers into a single assembler and adding features to the macro assembler to allow hiding the differing sizes of pointers. For example instead of saying addl or addq when adding to a pointer sized item now there is an addptr which does either a addl/addq as needed. This then allowed me to then make the changes to the client compiler cpu specific files such that almost all of the changes were pointer size agnostic.
I'm pleased to say that changes for 64 bit client jvm are now all complete. The changes just went out for internal review which given the size of them will take quite a while to process. This isn't that much of a headache at this point because of the change from using Teamware for source control to Mecurial we've not been able to putback (commit) any changes to the source base for weeks. This will hopefully end soon but as you can imagine there will likely be a tsunami of changes once the door is open. I'm not in a huge hurry to add to the confusion factor this is all likely to cause so it will still be a bit before these changes hit the OpenJDK sources.
In the meantime I should finally get around to going back to "real" work on tiered compilation. This will mean finally getting back to trying out the changes to compilation policy I've been envisioning for months. Hopefully this time things will work out better.
thumbs up, i am looking forward :-)
Posted by martin on January 11, 2008 at 02:57 AM EST #
Hi Steve, thanks for keeping us updated. We're still highly interested in 2tiered and realling looking forward to see the new implementation in work with our application. Nick.
Posted by Nicolas Michael on January 14, 2008 at 09:41 AM EST #
Comments are closed for this entry.