xref: /aosp_15_r20/art/test/624-checker-stringops/smali/Smali.smali (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker#
2*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2017 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker#
4*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker#
8*795d594fSAndroid Build Coastguard Worker#     http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker#
10*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker# limitations under the License.
15*795d594fSAndroid Build Coastguard Worker
16*795d594fSAndroid Build Coastguard Worker.class public LSmali;
17*795d594fSAndroid Build Coastguard Worker.super Ljava/lang/Object;
18*795d594fSAndroid Build Coastguard Worker
19*795d594fSAndroid Build Coastguard Worker##  CHECK-START: int Smali.bufferLen2() builder (after)
20*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG: <<New:l\d+>>     NewInstance
21*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG: <<String1:l\d+>> LoadString
22*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>]     intrinsic:StringBufferAppend
23*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG: <<String2:l\d+>> LoadString
24*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Append1>>,<<String2>>] intrinsic:StringBufferAppend
25*795d594fSAndroid Build Coastguard Worker##  CHECK-DAG:                  InvokeVirtual [<<Append2>>]             intrinsic:StringBufferLength
26*795d594fSAndroid Build Coastguard Worker.method public static bufferLen2()I
27*795d594fSAndroid Build Coastguard Worker    .registers 3
28*795d594fSAndroid Build Coastguard Worker
29*795d594fSAndroid Build Coastguard Worker    new-instance v0, Ljava/lang/StringBuffer;
30*795d594fSAndroid Build Coastguard Worker
31*795d594fSAndroid Build Coastguard Worker    invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
32*795d594fSAndroid Build Coastguard Worker
33*795d594fSAndroid Build Coastguard Worker    const-string v1, "x"
34*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0, v1}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
35*795d594fSAndroid Build Coastguard Worker    move-result-object v1
36*795d594fSAndroid Build Coastguard Worker
37*795d594fSAndroid Build Coastguard Worker    const-string v2, "y"
38*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v1, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
39*795d594fSAndroid Build Coastguard Worker    move-result-object v1
40*795d594fSAndroid Build Coastguard Worker
41*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v1}, Ljava/lang/StringBuffer;->length()I
42*795d594fSAndroid Build Coastguard Worker    move-result v1
43*795d594fSAndroid Build Coastguard Worker
44*795d594fSAndroid Build Coastguard Worker    return v1
45*795d594fSAndroid Build Coastguard Worker.end method
46*795d594fSAndroid Build Coastguard Worker
47*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.builderLen2() instruction_simplifier (before)
48*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance
49*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString
50*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>]     intrinsic:StringBuilderAppendString
51*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString
52*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Append1>>,<<String2>>] intrinsic:StringBuilderAppendString
53*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<Append2>>]             intrinsic:StringBuilderLength
54*795d594fSAndroid Build Coastguard Worker
55*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.builderLen2() instruction_simplifier (after)
56*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance
57*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString
58*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBuilderAppendString
59*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString
60*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBuilderAppendString
61*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBuilderLength
62*795d594fSAndroid Build Coastguard Worker.method public static builderLen2()I
63*795d594fSAndroid Build Coastguard Worker    .registers 3
64*795d594fSAndroid Build Coastguard Worker
65*795d594fSAndroid Build Coastguard Worker    new-instance v0, Ljava/lang/StringBuilder;
66*795d594fSAndroid Build Coastguard Worker
67*795d594fSAndroid Build Coastguard Worker    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
68*795d594fSAndroid Build Coastguard Worker
69*795d594fSAndroid Build Coastguard Worker    const-string v1, "x"
70*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
71*795d594fSAndroid Build Coastguard Worker    move-result-object v1
72*795d594fSAndroid Build Coastguard Worker
73*795d594fSAndroid Build Coastguard Worker    const-string v2, "y"
74*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
75*795d594fSAndroid Build Coastguard Worker    move-result-object v1
76*795d594fSAndroid Build Coastguard Worker
77*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v1}, Ljava/lang/StringBuilder;->length()I
78*795d594fSAndroid Build Coastguard Worker    move-result v1
79*795d594fSAndroid Build Coastguard Worker
80*795d594fSAndroid Build Coastguard Worker    return v1
81*795d594fSAndroid Build Coastguard Worker.end method
82*795d594fSAndroid Build Coastguard Worker
83*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.bufferLoopAppender() instruction_simplifier (before)
84*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance                                                           loop:none
85*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString                                                            loop:<<Loop:B\d+>>
86*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Null1:l\d+>>   NullCheck     [<<New>>]                                               loop:<<Loop>>
87*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<Null1>>,<<String1>>]   intrinsic:StringBufferAppend  loop:<<Loop>>
88*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString                                                            loop:<<Loop>>
89*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Append1>>,<<String2>>] intrinsic:StringBufferAppend  loop:<<Loop>>
90*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String3:l\d+>> LoadString                                                            loop:<<Loop>>
91*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<Append2>>,<<String3>>] intrinsic:StringBufferAppend  loop:<<Loop>>
92*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Null4:l\d+>>   NullCheck     [<<New>>]                                               loop:none
93*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<Null4>>]               intrinsic:StringBufferLength  loop:none
94*795d594fSAndroid Build Coastguard Worker
95*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.bufferLoopAppender() instruction_simplifier (after)
96*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance                                                       loop:none
97*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString                                                        loop:<<Loop:B\d+>>
98*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBufferAppend  loop:<<Loop>>
99*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString                                                        loop:<<Loop>>
100*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBufferAppend  loop:<<Loop>>
101*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String3:l\d+>> LoadString                                                        loop:<<Loop>>
102*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<New>>,<<String3>>] intrinsic:StringBufferAppend  loop:<<Loop>>
103*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBufferLength  loop:none
104*795d594fSAndroid Build Coastguard Worker.method public static bufferLoopAppender()I
105*795d594fSAndroid Build Coastguard Worker    .registers 4
106*795d594fSAndroid Build Coastguard Worker
107*795d594fSAndroid Build Coastguard Worker    new-instance v0, Ljava/lang/StringBuffer;
108*795d594fSAndroid Build Coastguard Worker
109*795d594fSAndroid Build Coastguard Worker    invoke-direct {v0}, Ljava/lang/StringBuffer;-><init>()V
110*795d594fSAndroid Build Coastguard Worker
111*795d594fSAndroid Build Coastguard Worker    const/4 v1, 0x0
112*795d594fSAndroid Build Coastguard Worker
113*795d594fSAndroid Build Coastguard Worker    :goto_6
114*795d594fSAndroid Build Coastguard Worker    const/16 v2, 0xa
115*795d594fSAndroid Build Coastguard Worker
116*795d594fSAndroid Build Coastguard Worker    if-ge v1, v2, :cond_1e
117*795d594fSAndroid Build Coastguard Worker
118*795d594fSAndroid Build Coastguard Worker    const-string v2, "x"
119*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0, v2}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
120*795d594fSAndroid Build Coastguard Worker    move-result-object v2
121*795d594fSAndroid Build Coastguard Worker
122*795d594fSAndroid Build Coastguard Worker    const-string v3, "y"
123*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
124*795d594fSAndroid Build Coastguard Worker    move-result-object v2
125*795d594fSAndroid Build Coastguard Worker
126*795d594fSAndroid Build Coastguard Worker    const-string v3, "z"
127*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v2, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer;
128*795d594fSAndroid Build Coastguard Worker
129*795d594fSAndroid Build Coastguard Worker    add-int/lit8 v1, v1, 0x1
130*795d594fSAndroid Build Coastguard Worker    goto :goto_6
131*795d594fSAndroid Build Coastguard Worker
132*795d594fSAndroid Build Coastguard Worker    :cond_1e
133*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0}, Ljava/lang/StringBuffer;->length()I
134*795d594fSAndroid Build Coastguard Worker
135*795d594fSAndroid Build Coastguard Worker    move-result v2
136*795d594fSAndroid Build Coastguard Worker
137*795d594fSAndroid Build Coastguard Worker    return v2
138*795d594fSAndroid Build Coastguard Worker.end method
139*795d594fSAndroid Build Coastguard Worker
140*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.builderLoopAppender() instruction_simplifier (before)
141*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance                                                                 loop:none
142*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString                                                                  loop:<<Loop:B\d+>>
143*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Null1:l\d+>>   NullCheck     [<<New>>]                                                     loop:<<Loop>>
144*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<Null1>>,<<String1>>]   intrinsic:StringBuilderAppendString loop:<<Loop>>
145*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString                                                                  loop:<<Loop>>
146*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<Append1>>,<<String2>>] intrinsic:StringBuilderAppendString loop:<<Loop>>
147*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String3:l\d+>> LoadString                                                                  loop:<<Loop>>
148*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<Append2>>,<<String3>>] intrinsic:StringBuilderAppendString loop:<<Loop>>
149*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Null4:l\d+>>   NullCheck     [<<New>>]                                                     loop:none
150*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<Null4>>]               intrinsic:StringBuilderLength       loop:none
151*795d594fSAndroid Build Coastguard Worker
152*795d594fSAndroid Build Coastguard Worker## CHECK-START: int Smali.builderLoopAppender() instruction_simplifier (after)
153*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<New:l\d+>>     NewInstance                                                             loop:none
154*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String1:l\d+>> LoadString                                                              loop:<<Loop:B\d+>>
155*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append1:l\d+>> InvokeVirtual [<<New>>,<<String1>>] intrinsic:StringBuilderAppendString loop:<<Loop>>
156*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String2:l\d+>> LoadString                                                              loop:<<Loop>>
157*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append2:l\d+>> InvokeVirtual [<<New>>,<<String2>>] intrinsic:StringBuilderAppendString loop:<<Loop>>
158*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<String3:l\d+>> LoadString                                                              loop:<<Loop>>
159*795d594fSAndroid Build Coastguard Worker## CHECK-DAG: <<Append3:l\d+>> InvokeVirtual [<<New>>,<<String3>>] intrinsic:StringBuilderAppendString loop:<<Loop>>
160*795d594fSAndroid Build Coastguard Worker## CHECK-DAG:                  InvokeVirtual [<<New>>]             intrinsic:StringBuilderLength       loop:none
161*795d594fSAndroid Build Coastguard Worker.method public static builderLoopAppender()I
162*795d594fSAndroid Build Coastguard Worker    .registers 4
163*795d594fSAndroid Build Coastguard Worker
164*795d594fSAndroid Build Coastguard Worker    new-instance v0, Ljava/lang/StringBuilder;
165*795d594fSAndroid Build Coastguard Worker
166*795d594fSAndroid Build Coastguard Worker    invoke-direct {v0}, Ljava/lang/StringBuilder;-><init>()V
167*795d594fSAndroid Build Coastguard Worker
168*795d594fSAndroid Build Coastguard Worker    const/4 v1, 0x0
169*795d594fSAndroid Build Coastguard Worker
170*795d594fSAndroid Build Coastguard Worker    :goto_6
171*795d594fSAndroid Build Coastguard Worker    const/16 v2, 0xa
172*795d594fSAndroid Build Coastguard Worker
173*795d594fSAndroid Build Coastguard Worker    if-ge v1, v2, :cond_1e
174*795d594fSAndroid Build Coastguard Worker
175*795d594fSAndroid Build Coastguard Worker    const-string v2, "x"
176*795d594fSAndroid Build Coastguard Worker
177*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
178*795d594fSAndroid Build Coastguard Worker    move-result-object v2
179*795d594fSAndroid Build Coastguard Worker    const-string v3, "y"
180*795d594fSAndroid Build Coastguard Worker
181*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
182*795d594fSAndroid Build Coastguard Worker    move-result-object v2
183*795d594fSAndroid Build Coastguard Worker    const-string v3, "z"
184*795d594fSAndroid Build Coastguard Worker
185*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
186*795d594fSAndroid Build Coastguard Worker    add-int/lit8 v1, v1, 0x1
187*795d594fSAndroid Build Coastguard Worker
188*795d594fSAndroid Build Coastguard Worker    goto :goto_6
189*795d594fSAndroid Build Coastguard Worker
190*795d594fSAndroid Build Coastguard Worker    :cond_1e
191*795d594fSAndroid Build Coastguard Worker    invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I
192*795d594fSAndroid Build Coastguard Worker
193*795d594fSAndroid Build Coastguard Worker    move-result v2
194*795d594fSAndroid Build Coastguard Worker
195*795d594fSAndroid Build Coastguard Worker    return v2
196*795d594fSAndroid Build Coastguard Worker.end method
197