1*055d4590SKeyi Gui; Copyright (C) 2007 The Android Open Source Project 2*055d4590SKeyi Gui; 3*055d4590SKeyi Gui; Licensed under the Apache License, Version 2.0 (the "License"); 4*055d4590SKeyi Gui; you may not use this file except in compliance with the License. 5*055d4590SKeyi Gui; You may obtain a copy of the License at 6*055d4590SKeyi Gui; 7*055d4590SKeyi Gui; http://www.apache.org/licenses/LICENSE-2.0 8*055d4590SKeyi Gui; 9*055d4590SKeyi Gui; Unless required by applicable law or agreed to in writing, software 10*055d4590SKeyi Gui; distributed under the License is distributed on an "AS IS" BASIS, 11*055d4590SKeyi Gui; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*055d4590SKeyi Gui; See the License for the specific language governing permissions and 13*055d4590SKeyi Gui; limitations under the License. 14*055d4590SKeyi Gui 15*055d4590SKeyi Gui.class Blort 16*055d4590SKeyi Gui.super java/lang/Object 17*055d4590SKeyi Gui 18*055d4590SKeyi Gui; Methods to "consume" an int. 19*055d4590SKeyi Gui.method public static consume1(I)V 20*055d4590SKeyi Gui.limit stack 0 21*055d4590SKeyi Gui.limit locals 1 22*055d4590SKeyi Gui nop 23*055d4590SKeyi Gui return 24*055d4590SKeyi Gui.end method 25*055d4590SKeyi Gui 26*055d4590SKeyi Gui.method public static consume2(I)V 27*055d4590SKeyi Gui.limit stack 0 28*055d4590SKeyi Gui.limit locals 1 29*055d4590SKeyi Gui nop 30*055d4590SKeyi Gui return 31*055d4590SKeyi Gui.end method 32*055d4590SKeyi Gui 33*055d4590SKeyi Gui.method public static consume3(I)V 34*055d4590SKeyi Gui.limit stack 0 35*055d4590SKeyi Gui.limit locals 1 36*055d4590SKeyi Gui nop 37*055d4590SKeyi Gui return 38*055d4590SKeyi Gui.end method 39*055d4590SKeyi Gui 40*055d4590SKeyi Gui.method public static consume4(I)V 41*055d4590SKeyi Gui.limit stack 0 42*055d4590SKeyi Gui.limit locals 1 43*055d4590SKeyi Gui nop 44*055d4590SKeyi Gui return 45*055d4590SKeyi Gui.end method 46*055d4590SKeyi Gui 47*055d4590SKeyi Gui.method public static consume5(I)V 48*055d4590SKeyi Gui.limit stack 0 49*055d4590SKeyi Gui.limit locals 1 50*055d4590SKeyi Gui nop 51*055d4590SKeyi Gui return 52*055d4590SKeyi Gui.end method 53*055d4590SKeyi Gui 54*055d4590SKeyi Gui.method public static consume6(I)V 55*055d4590SKeyi Gui.limit stack 0 56*055d4590SKeyi Gui.limit locals 1 57*055d4590SKeyi Gui nop 58*055d4590SKeyi Gui return 59*055d4590SKeyi Gui.end method 60*055d4590SKeyi Gui 61*055d4590SKeyi Gui; Methods to "consume" a long. 62*055d4590SKeyi Gui.method public static consume1(J)V 63*055d4590SKeyi Gui.limit stack 0 64*055d4590SKeyi Gui.limit locals 2 65*055d4590SKeyi Gui nop 66*055d4590SKeyi Gui return 67*055d4590SKeyi Gui.end method 68*055d4590SKeyi Gui 69*055d4590SKeyi Gui.method public static consume2(J)V 70*055d4590SKeyi Gui.limit stack 0 71*055d4590SKeyi Gui.limit locals 2 72*055d4590SKeyi Gui nop 73*055d4590SKeyi Gui return 74*055d4590SKeyi Gui.end method 75*055d4590SKeyi Gui 76*055d4590SKeyi Gui.method public static consume3(J)V 77*055d4590SKeyi Gui.limit stack 0 78*055d4590SKeyi Gui.limit locals 2 79*055d4590SKeyi Gui nop 80*055d4590SKeyi Gui return 81*055d4590SKeyi Gui.end method 82*055d4590SKeyi Gui 83*055d4590SKeyi Gui.method public static consume4(J)V 84*055d4590SKeyi Gui.limit stack 0 85*055d4590SKeyi Gui.limit locals 2 86*055d4590SKeyi Gui nop 87*055d4590SKeyi Gui return 88*055d4590SKeyi Gui.end method 89*055d4590SKeyi Gui 90*055d4590SKeyi Gui; Test of "pop" opcode. This should end up causing a call to consume1(0). 91*055d4590SKeyi Gui.method public static test_pop()V 92*055d4590SKeyi Gui.limit stack 2 93*055d4590SKeyi Gui.limit locals 0 94*055d4590SKeyi Gui iconst_0 95*055d4590SKeyi Gui iconst_1 96*055d4590SKeyi Gui pop ; A1 -> (empty) 97*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 98*055d4590SKeyi Gui return 99*055d4590SKeyi Gui.end method 100*055d4590SKeyi Gui 101*055d4590SKeyi Gui; Test of "pop2" opcode, form 1. This should end up causing a call 102*055d4590SKeyi Gui; to consume1(0). 103*055d4590SKeyi Gui.method public static test_pop2_form1()V 104*055d4590SKeyi Gui.limit stack 3 105*055d4590SKeyi Gui.limit locals 0 106*055d4590SKeyi Gui iconst_0 107*055d4590SKeyi Gui iconst_1 108*055d4590SKeyi Gui iconst_2 109*055d4590SKeyi Gui pop2 ; A1 B1 -> (empty) 110*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 111*055d4590SKeyi Gui return 112*055d4590SKeyi Gui.end method 113*055d4590SKeyi Gui 114*055d4590SKeyi Gui; Test of "pop2" opcode, form 2. This should end up causing a call 115*055d4590SKeyi Gui; to consume1(0). 116*055d4590SKeyi Gui.method public static test_pop2_form2()V 117*055d4590SKeyi Gui.limit stack 3 118*055d4590SKeyi Gui.limit locals 0 119*055d4590SKeyi Gui iconst_0 120*055d4590SKeyi Gui lconst_0 121*055d4590SKeyi Gui pop2 ; A2 -> (empty) 122*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 123*055d4590SKeyi Gui return 124*055d4590SKeyi Gui.end method 125*055d4590SKeyi Gui 126*055d4590SKeyi Gui; Test of "dup" opcode. This should end up causing these calls in order: 127*055d4590SKeyi Gui; consume1(0), consume2(0). 128*055d4590SKeyi Gui.method public static test_dup()V 129*055d4590SKeyi Gui.limit stack 2 130*055d4590SKeyi Gui.limit locals 0 131*055d4590SKeyi Gui iconst_0 132*055d4590SKeyi Gui dup ; A1 -> A1 A1 133*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 134*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 135*055d4590SKeyi Gui return 136*055d4590SKeyi Gui.end method 137*055d4590SKeyi Gui 138*055d4590SKeyi Gui; Test of "dup_x1" opcode. This should end up causing these calls in order: 139*055d4590SKeyi Gui; consume1(1), consume2(0), consume3(1). 140*055d4590SKeyi Gui.method public static test_dup_x1()V 141*055d4590SKeyi Gui.limit stack 3 142*055d4590SKeyi Gui.limit locals 0 143*055d4590SKeyi Gui iconst_0 144*055d4590SKeyi Gui iconst_1 145*055d4590SKeyi Gui dup_x1 ; A1 B1 -> B1 A1 B1 146*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 147*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 148*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 149*055d4590SKeyi Gui return 150*055d4590SKeyi Gui.end method 151*055d4590SKeyi Gui 152*055d4590SKeyi Gui; Test of "dup_x2" opcode, form 1. This should end up causing these calls 153*055d4590SKeyi Gui; in order: consume1(2), consume2(1), consume3(0), consume4(2). 154*055d4590SKeyi Gui.method public static test_dup_x2_form1()V 155*055d4590SKeyi Gui.limit stack 4 156*055d4590SKeyi Gui.limit locals 0 157*055d4590SKeyi Gui iconst_0 158*055d4590SKeyi Gui iconst_1 159*055d4590SKeyi Gui iconst_2 160*055d4590SKeyi Gui dup_x2 ; A1 B1 C1 -> C1 A1 B1 C1 161*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 162*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 163*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 164*055d4590SKeyi Gui invokestatic Blort/consume4(I)V 165*055d4590SKeyi Gui return 166*055d4590SKeyi Gui.end method 167*055d4590SKeyi Gui 168*055d4590SKeyi Gui; Test of "dup_x2" opcode, form 2. This should end up causing these calls 169*055d4590SKeyi Gui; in order: consume1(1), consume2(0L), consume3(1). 170*055d4590SKeyi Gui.method public static test_dup_x2_form2()V 171*055d4590SKeyi Gui.limit stack 4 172*055d4590SKeyi Gui.limit locals 0 173*055d4590SKeyi Gui lconst_0 174*055d4590SKeyi Gui iconst_1 175*055d4590SKeyi Gui dup_x2 ; A2 B1 -> B1 A2 B1 176*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 177*055d4590SKeyi Gui invokestatic Blort/consume2(J)V 178*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 179*055d4590SKeyi Gui return 180*055d4590SKeyi Gui.end method 181*055d4590SKeyi Gui 182*055d4590SKeyi Gui; Test of "dup2" opcode, form 1. This should end up causing these calls 183*055d4590SKeyi Gui; in order: consume1(1), consume2(0), consume3(1), consume4(0). 184*055d4590SKeyi Gui.method public static test_dup2_form1()V 185*055d4590SKeyi Gui.limit stack 4 186*055d4590SKeyi Gui.limit locals 0 187*055d4590SKeyi Gui iconst_0 188*055d4590SKeyi Gui iconst_1 189*055d4590SKeyi Gui dup2 ; A1 B1 -> A1 B1 A1 B1 190*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 191*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 192*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 193*055d4590SKeyi Gui invokestatic Blort/consume4(I)V 194*055d4590SKeyi Gui return 195*055d4590SKeyi Gui.end method 196*055d4590SKeyi Gui 197*055d4590SKeyi Gui; Test of "dup2" opcode, form 2. This should end up causing these calls 198*055d4590SKeyi Gui; in order: consume1(0L), consume2(0L). 199*055d4590SKeyi Gui.method public static test_dup2_form2()V 200*055d4590SKeyi Gui.limit stack 4 201*055d4590SKeyi Gui.limit locals 0 202*055d4590SKeyi Gui lconst_0 203*055d4590SKeyi Gui dup2 ; A2 -> A2 A2 204*055d4590SKeyi Gui invokestatic Blort/consume1(J)V 205*055d4590SKeyi Gui invokestatic Blort/consume2(J)V 206*055d4590SKeyi Gui return 207*055d4590SKeyi Gui.end method 208*055d4590SKeyi Gui 209*055d4590SKeyi Gui; Test of "dup2_x1" opcode, form 1. This should end up causing these calls 210*055d4590SKeyi Gui; in order: consume1(1), consume2(2), consume3(0), consume4(1), consume5(2). 211*055d4590SKeyi Gui.method public static test_dup2_x1_form1()V 212*055d4590SKeyi Gui.limit stack 5 213*055d4590SKeyi Gui.limit locals 0 214*055d4590SKeyi Gui iconst_0 215*055d4590SKeyi Gui iconst_1 216*055d4590SKeyi Gui iconst_2 217*055d4590SKeyi Gui dup2_x1 ; A1 B1 C1 -> B1 C1 A1 B1 C1 218*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 219*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 220*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 221*055d4590SKeyi Gui invokestatic Blort/consume4(I)V 222*055d4590SKeyi Gui invokestatic Blort/consume5(I)V 223*055d4590SKeyi Gui return 224*055d4590SKeyi Gui.end method 225*055d4590SKeyi Gui 226*055d4590SKeyi Gui 227*055d4590SKeyi Gui; Test of "dup2_x1" opcode, form 2. This should end up causing these calls 228*055d4590SKeyi Gui; in order: consume1(1L), consume2(2), consume3(1L). 229*055d4590SKeyi Gui.method public static test_dup2_x1_form2()V 230*055d4590SKeyi Gui.limit stack 5 231*055d4590SKeyi Gui.limit locals 0 232*055d4590SKeyi Gui iconst_0 233*055d4590SKeyi Gui lconst_1 234*055d4590SKeyi Gui dup2_x1 ; A1 B2 -> B2 A1 B2 235*055d4590SKeyi Gui invokestatic Blort/consume1(J)V 236*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 237*055d4590SKeyi Gui invokestatic Blort/consume3(J)V 238*055d4590SKeyi Gui return 239*055d4590SKeyi Gui.end method 240*055d4590SKeyi Gui 241*055d4590SKeyi Gui; Test of "dup2_x2" opcode, form 1. This should end up causing these calls 242*055d4590SKeyi Gui; in order: consume1(3), consume2(2), consume3(1), consume4(0), consume5(3), 243*055d4590SKeyi Gui; consume6(2). 244*055d4590SKeyi Gui.method public static test_dup2_x2_form1()V 245*055d4590SKeyi Gui.limit stack 6 246*055d4590SKeyi Gui.limit locals 0 247*055d4590SKeyi Gui iconst_0 248*055d4590SKeyi Gui iconst_1 249*055d4590SKeyi Gui iconst_2 250*055d4590SKeyi Gui iconst_3 251*055d4590SKeyi Gui dup2_x2 ; A1 B1 C1 D1 -> C1 D1 A1 B1 C1 D1 252*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 253*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 254*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 255*055d4590SKeyi Gui invokestatic Blort/consume4(I)V 256*055d4590SKeyi Gui invokestatic Blort/consume5(I)V 257*055d4590SKeyi Gui invokestatic Blort/consume6(I)V 258*055d4590SKeyi Gui return 259*055d4590SKeyi Gui.end method 260*055d4590SKeyi Gui 261*055d4590SKeyi Gui; Test of "dup2_x2" opcode, form 2. This should end up causing these calls 262*055d4590SKeyi Gui; in order: consume1(2L), consume2(1), consume3(0), consume4(2L). 263*055d4590SKeyi Gui.method public static test_dup2_x2_form2()V 264*055d4590SKeyi Gui.limit stack 6 265*055d4590SKeyi Gui.limit locals 0 266*055d4590SKeyi Gui iconst_0 267*055d4590SKeyi Gui iconst_1 268*055d4590SKeyi Gui ldc2_w 2 269*055d4590SKeyi Gui dup2_x2 ; A1 B1 C2 -> C2 A1 B1 C2 270*055d4590SKeyi Gui invokestatic Blort/consume1(J)V 271*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 272*055d4590SKeyi Gui invokestatic Blort/consume3(I)V 273*055d4590SKeyi Gui invokestatic Blort/consume4(J)V 274*055d4590SKeyi Gui return 275*055d4590SKeyi Gui.end method 276*055d4590SKeyi Gui 277*055d4590SKeyi Gui; Test of "dup2_x2" opcode, form 3. This should end up causing these calls 278*055d4590SKeyi Gui; in order: consume1(2), consume2(1), consume3(0L), consume4(2), consume5(1). 279*055d4590SKeyi Gui.method public static test_dup2_x2_form3()V 280*055d4590SKeyi Gui.limit stack 6 281*055d4590SKeyi Gui.limit locals 0 282*055d4590SKeyi Gui lconst_0 283*055d4590SKeyi Gui iconst_1 284*055d4590SKeyi Gui iconst_2 285*055d4590SKeyi Gui dup2_x2 ; A2 B1 C1 -> B1 C1 A2 B1 C1 286*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 287*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 288*055d4590SKeyi Gui invokestatic Blort/consume3(J)V 289*055d4590SKeyi Gui invokestatic Blort/consume4(I)V 290*055d4590SKeyi Gui invokestatic Blort/consume5(I)V 291*055d4590SKeyi Gui return 292*055d4590SKeyi Gui.end method 293*055d4590SKeyi Gui 294*055d4590SKeyi Gui; Test of "dup2_x2" opcode, form 4. This should end up causing these calls 295*055d4590SKeyi Gui; in order: consume1(1L), consume2(0L), consume3(1L). 296*055d4590SKeyi Gui.method public static test_dup2_x2_form4()V 297*055d4590SKeyi Gui.limit stack 6 298*055d4590SKeyi Gui.limit locals 0 299*055d4590SKeyi Gui lconst_0 300*055d4590SKeyi Gui lconst_1 301*055d4590SKeyi Gui dup2_x2 ; A2 B2 -> B2 A2 B2 302*055d4590SKeyi Gui invokestatic Blort/consume1(J)V 303*055d4590SKeyi Gui invokestatic Blort/consume2(J)V 304*055d4590SKeyi Gui invokestatic Blort/consume3(J)V 305*055d4590SKeyi Gui return 306*055d4590SKeyi Gui.end method 307*055d4590SKeyi Gui 308*055d4590SKeyi Gui; Test of "swap" opcode. This should end up causing these calls 309*055d4590SKeyi Gui; in order: consume1(0), consume2(1). 310*055d4590SKeyi Gui.method public static test_swap()V 311*055d4590SKeyi Gui.limit stack 2 312*055d4590SKeyi Gui.limit locals 0 313*055d4590SKeyi Gui iconst_0 314*055d4590SKeyi Gui iconst_1 315*055d4590SKeyi Gui swap ; A1 B1 -> B1 A1 316*055d4590SKeyi Gui invokestatic Blort/consume1(I)V 317*055d4590SKeyi Gui invokestatic Blort/consume2(I)V 318*055d4590SKeyi Gui return 319*055d4590SKeyi Gui.end method 320