Home | History | Annotate | Download | only in smali
      1 # Copyright (C) 2017 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 .class public LSmali;
     15 .super Ljava/lang/Object;
     16 
     17 ##  CHECK-START: void Smali.test3Order1(boolean, int, int, int, int, int) register (after)
     18 ##  CHECK:       name "B0"
     19 ##  CHECK-NOT:     ParallelMove
     20 ##  CHECK:       name "B1"
     21 ##  CHECK-NOT:   end_block
     22 ##  CHECK:         If
     23 ##  CHECK-NOT:     ParallelMove
     24 ##  CHECK:       name "B6"
     25 ##  CHECK-NOT:   end_block
     26 ##  CHECK:         InstanceFieldSet
     27 #    We could check here that there is a parallel move, but it's only valid
     28 #    for some architectures (for example x86), as other architectures may
     29 #    not do move at all.
     30 ##  CHECK:       end_block
     31 ##  CHECK-NOT:     ParallelMove
     32 .method public static test3Order1(ZIIIII)V
     33     .registers 14
     34 
     35     sget v0, LMain;->live1:I
     36     sget v1, LMain;->live2:I
     37     sget v2, LMain;->live3:I
     38     sget v5, LMain;->live0:I
     39     if-eqz p0, :cond_13
     40 
     41     sput v0, LMain;->live1:I
     42 
     43     :goto_c
     44     add-int v6, v0, v1
     45     add-int/2addr v6, v2
     46     add-int/2addr v6, v5
     47     sput v6, LMain;->live1:I
     48 
     49     return-void
     50 
     51     :cond_13
     52     sget-boolean v6, LMain;->y:Z
     53 
     54     if-eqz v6, :cond_1a
     55     sput v0, LMain;->live1:I
     56     goto :goto_c
     57 
     58     :cond_1a
     59     sget v3, LMain;->live4:I
     60 
     61     sget v4, LMain;->live5:I
     62     sget-object v6, LMain;->foo:LMain$Foo;
     63     add-int v7, v0, v4
     64     add-int/2addr v7, v3
     65     iput v7, v6, LMain$Foo;->field2:I
     66     sget-object v6, LMain;->foo:LMain$Foo;
     67     add-int v7, v1, v4
     68     add-int/2addr v7, v3
     69     iput v7, v6, LMain$Foo;->field3:I
     70     sget-object v6, LMain;->foo:LMain$Foo;
     71     add-int v7, v2, v4
     72     add-int/2addr v7, v3
     73     iput v7, v6, LMain$Foo;->field4:I
     74     sget-object v6, LMain;->foo:LMain$Foo;
     75     iput v3, v6, LMain$Foo;->field0:I
     76     sget-object v6, LMain;->foo:LMain$Foo;
     77     add-int v7, v4, v3
     78     iput v7, v6, LMain$Foo;->field1:I
     79     goto :goto_c
     80 .end method
     81 
     82 ##  CHECK-START: void Smali.test3Order2(boolean, int, int, int, int, int) register (after)
     83 ##  CHECK:       name "B0"
     84 ##  CHECK-NOT:     ParallelMove
     85 ##  CHECK:       name "B1"
     86 ##  CHECK-NOT:   end_block
     87 ##  CHECK:         If
     88 ##  CHECK-NOT:     ParallelMove
     89 ##  CHECK:       name "B5"
     90 ##  CHECK-NOT:   end_block
     91 ##  CHECK:         InstanceFieldSet
     92 #    We could check here that there is a parallel move, but it's only valid
     93 #    for some architectures (for example x86), as other architectures may
     94 #    not do move at all.
     95 ##  CHECK:       end_block
     96 ##  CHECK-NOT:     ParallelMove
     97 .method public static test3Order2(ZIIIII)V
     98     .registers 14
     99 
    100     sget v0, LMain;->live1:I
    101     sget v1, LMain;->live2:I
    102     sget v2, LMain;->live3:I
    103     sget v3, LMain;->live0:I
    104     if-eqz p0, :cond_d
    105 
    106     sput v0, LMain;->live1:I
    107     goto :goto_37
    108 
    109     :cond_d
    110     sget-boolean v4, LMain;->y:Z
    111     if-eqz v4, :cond_14
    112 
    113     sput v0, LMain;->live1:I
    114     goto :goto_37
    115 
    116     :cond_14
    117     sget v4, LMain;->live4:I
    118     sget v5, LMain;->live5:I
    119     sget-object v6, LMain;->foo:LMain$Foo;
    120     add-int v7, v0, v5
    121     add-int/2addr v7, v4
    122     iput v7, v6, LMain$Foo;->field2:I
    123     sget-object v6, LMain;->foo:LMain$Foo;
    124     add-int v7, v1, v5
    125     add-int/2addr v7, v4
    126     iput v7, v6, LMain$Foo;->field3:I
    127     sget-object v6, LMain;->foo:LMain$Foo;
    128     add-int v7, v2, v5
    129     add-int/2addr v7, v4
    130     iput v7, v6, LMain$Foo;->field4:I
    131     sget-object v6, LMain;->foo:LMain$Foo;
    132     iput v4, v6, LMain$Foo;->field0:I
    133     sget-object v6, LMain;->foo:LMain$Foo;
    134     add-int v7, v5, v4
    135     iput v7, v6, LMain$Foo;->field1:I
    136     :goto_37
    137 
    138     add-int v4, v0, v1
    139     add-int/2addr v4, v2
    140     add-int/2addr v4, v3
    141     sput v4, LMain;->live1:I
    142     return-void
    143 .end method
    144