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