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