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