Now that the zero-assembler port is committed I’ve been thinking about dropping the ppc-specific one. The plan is to use zero for our other platforms (s390, s390x, ia64 and arm) and there’s no obvious reason to maintain a separate port for ppc and ppc64. This past two days aph and I ported zero to amd64 and I’ve been thinking of ways to integrate zero into the build system so that you can choose to use it on any platform with minimal effort. This will be easier and clearer without a load of ppc-specific stuff knocking around in there. There are a couple of bugs in the ppc-specific port too, bugs I noticed while writing zero, and I just can’t be bothered to fix them.

I did some simple speed tests, the time in seconds taken by jar cf tools.jar:

  ppc zero
32-bit 67.6 70.3
64-bit 67.9 69.7

Not bad. A look at the call graph shows most of the method calls are interpreted methods, so I’m not sure it’s entirely representative — I’d expect programs doing a lot of native calls to be hit harder — but I like it. I’m interested to know why 64-bit zero is faster than 32 too — that’s not what you’d expect on ppc — but that can wait until I get round to some profiling. I want to get it running on the other platforms first.

16 thoughts on “

  1. Thanks! The code is in IcedTea but there’s nothing in the build system to build it. I’ll be doing that over the next couple of days, so if you let me know what your uname -m is I’ll make sure to add it and let you know when I’m done.

  2. Hmmm, I’ve seen armv5tel too. This mishmash of different names is going to make hacking the build scripts painful. What do all the letters mean anyway?

  3. the different name addon letters specifies the additional instructionset capabilities of the cpu.

    t = supports thumb instruction set
    j = supports jazelle java bytecode execution (used in many smartphones to speed up java)
    e = supports DSP enhancement instructions
    etc..

    i have no clue what the “l” stands for.

  4. The newer arms have armv6l and armv7l. don’t ask why :)

    Other available debian developer machines gave:

    archicture uname -m
    alpha alpha
    powerpc ppc
    mips mips
    ia64 ia64
    hppa parisc64
    s390 s390 or s390x
    sparc sparc64

    so mostly logical, only arm is funny.

  5. I guess I’ll need to make it work with arm*. It’s a pain because most of the build scripts use switch-case things with exact matches for most archs and the default case being ix86, so the wildcard case has already been hogged :)

  6. Gary,

    Just found out about your work to make icedtea not dependent on asm stuff today. Very glad to hear it! I am working on getting Fedora running on ia64 and icedtea was one of the packages that looked like it would be a lot of work. Do you know when you expect to have your latest stuff into rawhide? I will try to get this built on ia64 soon.

    thanks,

    – Doug

  7. Hi Doug,

    The main thing preventing it being in Fedora is the lack of a libffi package (bug 431633) but if you wanted to make a start you could build and install the rpms from that bug and grab the IcedTea sources from Mercurial (hg clone http://icedtea.classpath.org/hg/icedtea) and build those. I committed the extra build system files for ia64 (and arm, s390, s390x) for you this morning so it’s basically a matter of patching the openjdk Makefiles. If you look in patches/icedtea-ports.patch you’ll see where I had to add things for ppc and ppc64, but note that Sun had an ia64 port at one stage so the build system already has some ia64 stuff present. What I’d recommend is, for every ppc/ppc64 thing I did in openjdk/hotspot, find the corresponding ia64 bit and change it if necessary (eg, wherever a ppc bit sets an ARCH variable to zero, make ia64 do that too). You shouldn’t have to do much (if anything) in the openjdk/jdk and openjdk/corba directories because the ia64 code in there should Just Work™.

    Ok, I think that’s enough for starters :) Let me know if you have problems, I can probably help…

    Gary

  8. ARM machines can be found in both big and little endian. At the end of the uname -m on a arm machine the l or b stands for little or big endian

    l = little endian
    b = big endian

    thus my armv5tejl system should compile with -mlittle-endian

  9. I have not yet been able to compile hotspot, my last build error included below, the build system still thinks im on a i586 system by default and im currently hacking makefiles to support my arm system.

    g++ -DLINUX -D_GNU_SOURCE -DIA32 -DASSERT -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/asm -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/c1 -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/ci -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/classfile -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/code -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/compiler -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_implementation -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_implementation/parallelScavenge -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_implementation/parNew -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_implementation/shared -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/gc_interface -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/interpreter -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/libadt -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/memory -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/oops -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/opto -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/prims -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/runtime -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/services -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/utilities -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/cpu/x86/vm -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/os/linux/vm -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/os_cpu/linux_x86/vm -I/mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/adlc -I../generated -DCOMPILER2 -DCOMPILER1 -fno-rtti -fno-exceptions -D_REENTRANT -fcheck-new -g -m32 -march=i586 -pipe -w -c -o ../generated/adfiles/adlparse.o /mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/adlc/adlparse.cpp
    Assembler messages:
    Error: unknown architecture `i586′

    Error: unrecognized option -march=i586
    cc1plus: error: unrecognized command line option “-m32”
    /mnt/usbdisk/openjdk-3b9a53e0ec3c/hotspot/src/share/vm/adlc/adlparse.cpp:1: error: bad value (i586) for -march= switch
    make[6]: *** [../generated/adfiles/adlparse.o] Error 1
    make[6]: Leaving directory `/usr/src/icedtea-armv5tejl-build/linux-armv5tejl/hotspot/outputdir/linux_i486_compiler2/product’
    make[5]: *** [ad_stuff] Error 2

  10. the reason why i cant simply edit the icedtea patchfiles do a make clean and recompile is that it takes about 60h for my machine to make the bootstrap files then comes another 12h digging through openjdk before reaching the hotspot :) So i figured i better fix the openjdk makefiles by hand untill it compiles and then make the changes to the icedtea codebase, by doing this i have only to wait about 30min before reaching hotspot again ;)

  11. I’d expect enieythrvg to go on for a while, anyway. On the Kaffe/Classpath/gcj/cacao/IKVM/JamVM/* side the future development will happen with a chance of strongly collaborating with Sun on shared code.On Harmony’s side, probably not so much, though enieythrvg is possible there in the future. Nothing, except current policies, prohibits ASF from working with/on GPLd code. And policies are always up for debate.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.