class Blort {
static void methodThatNeedsInvokeRange
(int a, int b, int c, int d, int e, int f) {
}
void testNoLocals() {
methodThatNeedsInvokeRange(5, 0, 5, 0, 5, 0);
}
void testMixedLocals() {
int src = 6;
int dest = 7;
methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
}
// here the current algorithm partial-overlapping will stumble a bit
// The register containing "zero" will be marked as "reserved for locals"
// Then the subsequent arraycopy will need a whole new set of 5 registers
void testMixedWorseCase() {
int src = 6;
int dest = 7;
int zero = 0;
methodThatNeedsInvokeRange(src, zero, dest, 1, 5, 0);
methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
}
void testAllParams(int a, int b, int c, int d, int e, int f) {
methodThatNeedsInvokeRange(a, b, c, d, e, f);
}
// this could try to make use of param positions, but doesn't
static void testTailParams(int destPos, int length) {
int src = 6;
int dest = 7;
methodThatNeedsInvokeRange(src, 0, dest, 0, destPos, length);
}
// This presently requires a whole N new registers
void testFlip() {
int src = 6;
int dest = 7;
methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0);
methodThatNeedsInvokeRange(dest, 0, src, 1, 5, 0);
}
// ensure that an attempt to combine registers for a local
// with a differing category doesn't mess us up.
long testMixedCategory(boolean foo) {
if (foo) {
int offset = 1;
int src = 6;
int dest = 7;
methodThatNeedsInvokeRange(src, 0, dest, offset, 5, 0);
return offset;
} else {
long offset = System.currentTimeMillis();;
return offset;
}
}
}