xref: /aosp_15_r20/dalvik/dx/tests/093-ssa-invoke-range/Blort.java (revision 055d459012065f78d96b68be8421640240ddf631)
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