When I started to work on monitorenter and monitorexit, I thought it would be quite easy. Get the reference, call the lock/unlock function, done. But, soon after beginning, I was chanting "nothing-is-what-it-seems" mantra.
For monitorenter and monitorexit, it is necessary to provide support for goto and athrow bytecode instructions. Here is why.
Providing support for athrow instruction was easy. As Jato still does not support exception handling, actually nothing but function for bytecode consuming and dummy instruction selection rule was necessary.
But, for goto, I ran into a bug in control flow analyzer. So, after few hours of debugging, did fix that bug. And every thing was easy there after.
Then sent flood of patches! YAY !
( I made some nasty formatting horrors, which were fixed by Pekka. Thanks Pekka. )
Showing posts with label Jato. Show all posts
Showing posts with label Jato. Show all posts
Tuesday, August 12, 2008
Friday, July 25, 2008
Update On Jato
Well , everything seems little scattered.
<*>store and <*>load is almost done , but cant check whether it actually works or not because of its dependency on register allocation.
instanceof is done but a little code re-structuring is needed.
For monitorenter and monitorexit , parsing and code generation is done, but need to handle athrow as well.
Haven't looked into checkcast yet.
And the deadline is August 18. Gotta run !.
<*>store and <*>load is almost done , but cant check whether it actually works or not because of its dependency on register allocation.
instanceof is done but a little code re-structuring is needed.
For monitorenter and monitorexit , parsing and code generation is done, but need to handle athrow as well.
Haven't looked into checkcast yet.
And the deadline is August 18. Gotta run !.
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 :
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 !
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 !
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
then applying usual gdb command ,i.e.,
will launch it in debug mode. You can additionally pass any other command line option ( -Xint , -Xtrace:jit ... ) also.
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.
Tuesday, April 8, 2008
Jato , The First Look
Usually looking into any OpenSource project is rather intimidating. But ,Jato, at the first look, did not seem that scary to me. The code base is not that large and I was somehow familiar with the field (at least I thought that !). And particularly the project owner was very nice to work with.
So , armed with git , I downloaded the source code , and started to hack on it (Who wants to go to the beach in a sunny day , when you can code ;) ) So far I have submitted patch for anewarray .
Initially ,it took times to grasp the idea . But thanks to Pekka Enberg , with his help , the ride so far is fun.
So , armed with git , I downloaded the source code , and started to hack on it (Who wants to go to the beach in a sunny day , when you can code ;) ) So far I have submitted patch for anewarray .
Initially ,it took times to grasp the idea . But thanks to Pekka Enberg , with his help , the ride so far is fun.
Subscribe to:
Posts (Atom)