Hi,

I have been going over the internals of Kaffe's execution code,
specifically the way the interpreter's internal stack operates.  What
I understand so far, Kaffe is a stack based interpreter.  The stack is
a stack of 'slots' (defined in slots.h).  A slot is big enough to
store the largest data type in Java.  We push and pop this data
to/from the stack.  Easy enough, what I don't understand is why we
treat doubles and longs differently.

Extract from kaffe.def
define_insn_alias(LCONST_1)
{
        /*
         * ... -> ..., 0, [0 .. 1]
         */
        trace_jcode ("lconst %d\n", getopcode() - LCONST_0);    

        push(2);
        move_long_const(stack_long(0), getopcode() - LCONST_0);
}

The push(2) allocates 2 slots on the stack, and then we move the local
constant to the top of the stack.  Easy enough.  What I don't
understand is since a slot is big enough to hold the long, why are we
allocating 2 slots?  Since we only operate on a slot and not 2
concatenated slots, this would imply that we are putting a hole in the
stack when ever we have a long or double operand.  Is there something
that I am missing on this?

Thanks

Michael

_______________________________________________
kaffe mailing list
[email protected]
http://kaffe.org/cgi-bin/mailman/listinfo/kaffe

Reply via email to