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