1*055d4590SKeyi Gui 2*055d4590SKeyi Gui class Blort { 3*055d4590SKeyi Gui methodThatNeedsInvokeRange(int a, int b, int c, int d, int e, int f)4*055d4590SKeyi Gui static void methodThatNeedsInvokeRange 5*055d4590SKeyi Gui (int a, int b, int c, int d, int e, int f) { 6*055d4590SKeyi Gui } 7*055d4590SKeyi Gui testNoLocals()8*055d4590SKeyi Gui void testNoLocals() { 9*055d4590SKeyi Gui methodThatNeedsInvokeRange(5, 0, 5, 0, 5, 0); 10*055d4590SKeyi Gui } 11*055d4590SKeyi Gui testMixedLocals()12*055d4590SKeyi Gui void testMixedLocals() { 13*055d4590SKeyi Gui int src = 6; 14*055d4590SKeyi Gui int dest = 7; 15*055d4590SKeyi Gui 16*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0); 17*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0); 18*055d4590SKeyi Gui } 19*055d4590SKeyi Gui 20*055d4590SKeyi Gui // here the current algorithm partial-overlapping will stumble a bit 21*055d4590SKeyi Gui // The register containing "zero" will be marked as "reserved for locals" 22*055d4590SKeyi Gui // Then the subsequent arraycopy will need a whole new set of 5 registers testMixedWorseCase()23*055d4590SKeyi Gui void testMixedWorseCase() { 24*055d4590SKeyi Gui int src = 6; 25*055d4590SKeyi Gui int dest = 7; 26*055d4590SKeyi Gui int zero = 0; 27*055d4590SKeyi Gui 28*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, zero, dest, 1, 5, 0); 29*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0); 30*055d4590SKeyi Gui } 31*055d4590SKeyi Gui testAllParams(int a, int b, int c, int d, int e, int f)32*055d4590SKeyi Gui void testAllParams(int a, int b, int c, int d, int e, int f) { 33*055d4590SKeyi Gui methodThatNeedsInvokeRange(a, b, c, d, e, f); 34*055d4590SKeyi Gui } 35*055d4590SKeyi Gui 36*055d4590SKeyi Gui // this could try to make use of param positions, but doesn't testTailParams(int destPos, int length)37*055d4590SKeyi Gui static void testTailParams(int destPos, int length) { 38*055d4590SKeyi Gui int src = 6; 39*055d4590SKeyi Gui int dest = 7; 40*055d4590SKeyi Gui 41*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, 0, destPos, length); 42*055d4590SKeyi Gui } 43*055d4590SKeyi Gui 44*055d4590SKeyi Gui 45*055d4590SKeyi Gui // This presently requires a whole N new registers testFlip()46*055d4590SKeyi Gui void testFlip() { 47*055d4590SKeyi Gui int src = 6; 48*055d4590SKeyi Gui int dest = 7; 49*055d4590SKeyi Gui 50*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, 1, 5, 0); 51*055d4590SKeyi Gui methodThatNeedsInvokeRange(dest, 0, src, 1, 5, 0); 52*055d4590SKeyi Gui } 53*055d4590SKeyi Gui 54*055d4590SKeyi Gui // ensure that an attempt to combine registers for a local 55*055d4590SKeyi Gui // with a differing category doesn't mess us up. testMixedCategory(boolean foo)56*055d4590SKeyi Gui long testMixedCategory(boolean foo) { 57*055d4590SKeyi Gui if (foo) { 58*055d4590SKeyi Gui int offset = 1; 59*055d4590SKeyi Gui int src = 6; 60*055d4590SKeyi Gui int dest = 7; 61*055d4590SKeyi Gui 62*055d4590SKeyi Gui methodThatNeedsInvokeRange(src, 0, dest, offset, 5, 0); 63*055d4590SKeyi Gui return offset; 64*055d4590SKeyi Gui } else { 65*055d4590SKeyi Gui long offset = System.currentTimeMillis();; 66*055d4590SKeyi Gui return offset; 67*055d4590SKeyi Gui } 68*055d4590SKeyi Gui } 69*055d4590SKeyi Gui } 70