xref: /aosp_15_r20/dalvik/dx/tests/071-dex-java-stack-ops/blort.j (revision 055d459012065f78d96b68be8421640240ddf631)
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