I always plan to write about what I’ve been doing at the end of the day, but I never quite get round to it. Usually my head is too full of code, or something. So I end up with a piece of paper with scribble all over it to write about in the morning. Here’s yesterday’s notes.
- There are two VMs, client and server. When you build the C++ interpreter it’s the server JIT it gets built into.
- The templater that makes the stubs has some magic to support multi-model architectures. It works like this. To generate the stubs for ppc and ppc64 you run the templater like this:
python porter/generate.py ppc
Whether a ppc64-specific file is generated depends on a template’s filename. If it has CPU in it, you get ppc only; if it has CPUS you get ppc and ppc64. So from the template:
porter/hotspot/src/cpu/CPU/vm/assembler_CPU.cpp
you get:
hotspot/src/cpu/ppc/vm/assembler_ppc.hpp
but from the template:
porter/hotspot/build/linux/makefiles/CPUS.make
you get:
hotspot/build/linux/makefiles/ppc.make hotspot/build/linux/makefiles/ppc64.make
It’s clunky but it works.
- This is possibly obvious, but sneaky too. Everything in a CPU template is evaluated once, for the main cpu (the one you specify on the command line). A consequence of this is that the templater function is64bit(cpu) will always return False if it’s in a CPU template. You need to use other methods to conditionalize this, #ifdef _LP64 for example.
- My bootstrap environment is… interesting. XSLT with IcedTea’s gij/ecj combo produces mangled jvmti headers on ppc, but the IBM JDK from RHEL5 doesn’t understand version 50 class files. So I’m using the IBM JDK with IcedTea’s javac wrapper.
Post a Comment