On 2012-09-12, at 6:18 PM, Mark Roos <[email protected]> wrote:
> Nice to see progress.
>
> I was just thinking about the use model for these in my app and found
> three obvious uses:
> To hold the temps on the stack frame ( TaggedArray of TaggedArrays +
> primitives )
Or a tagged array for the stack, passing an index for each of SP (and FP.) It
would also be possible to trampoline stacks to allow for dynamic growth.
> To hold the instance vars of a class
Yes.
> To collect arguments for a method send ( and probably use one as a
> return as well)
Not necessary if you use a tagged array stack.
> At the extreme each of my objects would be represented as a TaggedArray where
> the
> first location could be the Class identifier.
>
> It seems that these will add at least one level on indirection for every
> access
> along with whatever overhead the access adds. The hope is that Hotspot sees
> the
> primitives within a method and across a dynamic send so I end up with
> primitive
> performance. At least eliminating the performance hit of boxed ints. I am
> still not
> sure how to use this to reduce the number of Integers generated.
The builtin tagged array (TaggedArrayNativeImpl) has no levels of indirection,
the simple and optimized forms are fall backs. So the performance is similar
to Java arrays. And yes the code that Rickard submitted here is for native
performance.
One would assume your math operations would assume tagged integers. So there
so there should only be ints and BigIntegers (rare).
Naive Ex:
TaggedArray stack = TaggedArrays.allocate(512 * 1024);
int SP = 0;
SP = add(stack, SP);
int add(TaggedArray stack, int SP) {
try {
long x = stack.getValue(SP--); // simple array indexing
with tag detection
long y = stack.getValue(SP--); // simple array indexing
with tag detection
long z = x + y - 1; // simple integer addition,
accounting for the tag bit
isOverflow(z); // Throws exception for overflow
stack.setValue(++SP); // simple array indexing with tag
detection
return SP;
} catch ( ) {
// slow case for arithmetic overflow, BigIntegers and
stack overflow exceptions.
}
So most of the time you will be using straight ints. Tag detection is a bit
test and branch.
> Are my thoughts following a reasonable path? As is this the intent of
> TaggedArrays?
Yes.
>
> Thanks
> mark
>
> _______________________________________________
> mlvm-dev mailing list
> [email protected]
> http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
_______________________________________________
mlvm-dev mailing list
[email protected]
http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev