Wednesday, June 25, 2008

multianewarray byte instruction in Jato

I think, multianewarray instruction was the most tough one that I have confronted so far while working on Jato. But with the help of Pekka Enberg, finally I was able to creep out of the abyss.

Initially , I assumed (very naively) that the counts for multianewarray instruction would be pushed in expression stack as EXPR_VALUE expressions. But then, Pekka pointed out that it does not work for every situation. For example, it will break in the following code :
   public int[][] newArray(int x, int y) {
return new int[x][y];
}

The better way would be, as Pekka suggested, to 'abuse' the EXPR_ARG. That is , converting each count expression to argument expression, so that instruction selector can automatically push appropriate values on the stack.

So in multianewarrray byte code handler, what I do is, after popping dimension values from the expression stack, wrap each expression into EXPR_ARGS. Then, in instruction selection and code emission phase, as all the count values are already pushed on stack, all I need to do is, make a call to array allocation function in jamvm.

Easy as pie , when you are in right track !

Monday, June 16, 2008

SynchMaster 920nw in My Fedora

Just got a SyncMaster 920nw 19" wide screen . A very nice monitor to have , bright clear distinct view all the times. But after plugging it to my computer , it shows a black area on my left ,as if it starts rendering from some (x,0) pixel.

So , I started to look into X configuration , and after a lot of head scratching , when I set the refresh rate to 75
Hz , it started to work perfectly . Weird !

Thursday, June 5, 2008

Debugging Jato

In last few weeks , while working on arraylength bytecode instruction , I had to debug Jato . But instruction provided in readme file is rather obsolete . So I had to go through the run-suite.sh and ''reinvent the wheel" .

To debug , you have to point gnu.classpath.boot.library.path to <gnu_classpath_root>/lib/classpath and bootclasspath should contain <gnu_classpath_root>/share/classpath/glibj.zip and <jato_root>/lib/classes.zip.

The easiest way to do so is , setting the following values



GNU_CLASSPATH_ROOT=`<JATO_ROOT>/tools/classpath-config`

GLIBJ=$GNU_CLASSPATH_ROOT/share/classpath/glibj.zip

BOOTCLASSPATH=<JATO_ROOT>/lib/classes.zip:$GLIBJ


then applying usual gdb command ,i.e.,



gdb --args <JATO_ROOT>/java \
-Dgnu.classpath.boot.library.path=:$GNU_CLASSPATH_ROOT/lib/classpath \
-Xbootclasspath:$BOOTCLASSPATH -cp <JATO_ROOT>/regression class_file_name_to_debug



will launch it in debug mode. You can additionally pass any other command line option ( -Xint , -Xtrace:jit ... ) also.