• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
2# for details. All rights reserved. Use of this source code is governed by a
3# BSD-style license that can be found in the LICENSE file.
4
5.class public LTest;
6
7.super Ljava/lang/Object;
8
9# This method is not called by the test, and is only for reference of dex code failing on
10# art from Android 5.1.1 with mixed int/float constants.
11# When run dex2oat prints the warning:
12#
13# dex2oat W  7568  7571 art/compiler/dex/vreg_analysis.cc:367]
14# void Test.intAndFloatZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses for
15# same def.
16.method static intAndFloatZeroConstantsNotWorking()V
17    .locals 8
18
19    const-string        v6, "START"
20    sget-object         v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
21    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
22
23    const/high16        v0, 0x3f800000  # 1.0
24    const/4             v1, 0x00  # 0 / 0.0
25    const/4             v3, 2
26    move                v4, v1
27
28  :label_a
29    invoke-virtual      {v7, v4}, Ljava/io/PrintStream;->println(I)V
30    invoke-virtual      {v7, v3}, Ljava/io/PrintStream;->println(I)V
31    if-ge               v4, v3, :label_b
32    const-string        v6, "LOOP"
33    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
34    add-int/lit8        v4, v4, 0x01  # 1
35    goto                :label_a
36
37  :label_b
38    const/4             v5, 0x01
39    new-array           v5, v5, [F
40    const/4             v3, 0x00
41    aget                v4, v5, v3
42    cmpl-float          v1, v4, v1
43    if-nez              v1, :label_c
44    cmpl-float          v0, v4, v0
45    if-eqz              v0, :label_c
46    const-string        v0, "DONE"
47    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
48    goto                :label_d
49
50  :label_c
51    const-string        v0, "FLOAT COMPARISON FAILED"
52    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
53
54  :label_d
55    return-void
56.end method
57
58.method static intAndFloatZeroConstants()V
59    .locals 8
60
61    const-string        v6, "START"
62    sget-object         v7, Ljava/lang/System;->out:Ljava/io/PrintStream;
63    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
64
65    const/high16        v0, 0x3f800000  # 1.0
66    const/4             v1, 0x00  # 0
67    const/4             v2, 0x00  # 0.0
68    const/4             v3, 2
69    move                v4, v1
70
71  :label_a
72    invoke-virtual      {v7, v4}, Ljava/io/PrintStream;->println(I)V
73    invoke-virtual      {v7, v3}, Ljava/io/PrintStream;->println(I)V
74    if-ge               v4, v3, :label_b
75    const-string        v6, "LOOP"
76    invoke-virtual      {v7, v6}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
77    add-int/lit8        v4, v4, 0x01  # 1
78    goto                :label_a
79
80  :label_b
81    const/4             v5, 0x01
82    new-array           v5, v5, [F
83    const/4             v3, 0x00
84    aget                v4, v5, v3
85    cmpl-float          v1, v4, v2
86    if-nez              v1, :label_c
87    cmpl-float          v0, v4, v0
88    if-eqz              v0, :label_c
89    const-string        v0, "DONE"
90    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
91    goto                :label_d
92
93  :label_c
94    const-string        v0, "FLOAT COMPARISON FAILED"
95    invoke-virtual      {v7, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
96
97  :label_d
98    return-void
99.end method
100
101# This method is not called by the test, and is only for reference of dex code failing on
102# art from Android 5.1.1 with mixed long/double constants.
103# This code does actually work, but dex2oat still prints the warning:
104#
105# dex2oat W  7568  7571 art/compiler/dex/vreg_analysis.cc:367]
106# void Test.longAndDoubleZeroConstantsNotWorking() op at block 6 has both fp and core/ref uses
107#for same def.
108.method static longAndDoubleZeroConstantsNotWorking()V
109    .locals 14
110
111    const-string        v12, "START"
112    sget-object         v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
113    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
114
115    const-wide/high16   v0, 0x3f80000000000000L  # 1.0 0->0 1->2 2->4 3->6 4->8 5->10+11 6->12 7->13
116    const-wide/16       v2, 0x00L  # 0 / 0.0
117    const-wide/16       v6, 2
118    move-wide           v8, v2
119
120  :label_a
121    invoke-virtual      {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
122    invoke-virtual      {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
123    cmp-long            v12, v8, v6
124    if-gez              v12, :label_b
125    const-string        v12, "LOOP"
126    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
127    const-wide/16       v10, 0x01
128    add-long            v8, v8, v10
129    goto                :label_a
130
131  :label_b
132    const/4             v10, 0x01
133    new-array           v10, v10, [D
134    const/4             v6, 0x00
135    aget-wide           v8, v10, v6
136    cmpl-double         v2, v8, v2
137    if-nez              v2, :label_c
138    cmpl-double         v0, v8, v0
139    if-eqz              v0, :label_c
140    const-string        v0, "DONE"
141    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
142    goto                :label_d
143
144  :label_c
145    const-string        v0, "FLOAT COMPARISON FAILED"
146    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
147
148  :label_d
149    return-void
150.end method
151
152.method static longAndDoubleZeroConstants()V
153    .locals 14
154
155    const-string        v12, "START"
156    sget-object         v13, Ljava/lang/System;->out:Ljava/io/PrintStream;
157    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
158
159    const-wide/high16   v0, 0x3f80000000000000L
160    const-wide/16       v2, 0x00L  # 0
161    const-wide/16       v4, 0x00L  # 0.0
162    const-wide/16       v6, 2
163    move-wide           v8, v2
164
165  :label_a
166    invoke-virtual      {v13, v8, v9}, Ljava/io/PrintStream;->println(J)V
167    invoke-virtual      {v13, v6, v7}, Ljava/io/PrintStream;->println(J)V
168    cmp-long            v12, v8, v6
169    if-gez              v12, :label_b
170    const-string        v12, "LOOP"
171    invoke-virtual      {v13, v12}, Ljava/io/PrintStream;->println(Ljava/lang/Object;)V
172    const-wide/16       v10, 0x01
173    add-long            v8, v8, v10
174    goto                :label_a
175
176  :label_b
177    const/4             v10, 0x01
178    new-array           v10, v10, [D
179    const/4             v6, 0x00
180    aget-wide           v8, v10, v6
181    cmpl-double         v2, v8, v4
182    if-nez              v2, :label_c
183    cmpl-double         v0, v8, v0
184    if-eqz              v0, :label_c
185    const-string        v0, "DONE"
186    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
187    goto                :label_d
188
189  :label_c
190    const-string        v0, "DOUBLE COMPARISON FAILED"
191    invoke-virtual      {v13, v0}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
192
193  :label_d
194    return-void
195.end method
196
197.method public static main([Ljava/lang/String;)V
198    .locals 0
199
200    invoke-static {}, LTest;->intAndFloatZeroConstants()V
201    invoke-static {}, LTest;->longAndDoubleZeroConstants()V
202
203    return-void
204.end method
205