1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2016 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 17*795d594fSAndroid Build Coastguard Worker public class Main { 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker public static boolean doThrow = false; 20*795d594fSAndroid Build Coastguard Worker $noinline$foo(int in_w1, int in_w2, int in_w3, int in_w4, int in_w5, int in_w6, int in_w7, int on_stack_int, long on_stack_long, float in_s0, float in_s1, float in_s2, float in_s3, float in_s4, float in_s5, float in_s6, float in_s7, float on_stack_float, double on_stack_double)21*795d594fSAndroid Build Coastguard Worker public void $noinline$foo(int in_w1, 22*795d594fSAndroid Build Coastguard Worker int in_w2, 23*795d594fSAndroid Build Coastguard Worker int in_w3, 24*795d594fSAndroid Build Coastguard Worker int in_w4, 25*795d594fSAndroid Build Coastguard Worker int in_w5, 26*795d594fSAndroid Build Coastguard Worker int in_w6, 27*795d594fSAndroid Build Coastguard Worker int in_w7, 28*795d594fSAndroid Build Coastguard Worker int on_stack_int, 29*795d594fSAndroid Build Coastguard Worker long on_stack_long, 30*795d594fSAndroid Build Coastguard Worker float in_s0, 31*795d594fSAndroid Build Coastguard Worker float in_s1, 32*795d594fSAndroid Build Coastguard Worker float in_s2, 33*795d594fSAndroid Build Coastguard Worker float in_s3, 34*795d594fSAndroid Build Coastguard Worker float in_s4, 35*795d594fSAndroid Build Coastguard Worker float in_s5, 36*795d594fSAndroid Build Coastguard Worker float in_s6, 37*795d594fSAndroid Build Coastguard Worker float in_s7, 38*795d594fSAndroid Build Coastguard Worker float on_stack_float, 39*795d594fSAndroid Build Coastguard Worker double on_stack_double) { 40*795d594fSAndroid Build Coastguard Worker if (doThrow) throw new Error(); 41*795d594fSAndroid Build Coastguard Worker } 42*795d594fSAndroid Build Coastguard Worker 43*795d594fSAndroid Build Coastguard Worker // We expect a parallel move that moves four times the zero constant to stack locations. 44*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.bar() register (after) 45*795d594fSAndroid Build Coastguard Worker /// CHECK: ParallelMove {{.*#0->[0-9x]+\(sp\).*#0->[0-9x]+\(sp\).*#0->[0-9x]+\(sp\).*#0->[0-9x]+\(sp\).*}} 46*795d594fSAndroid Build Coastguard Worker 47*795d594fSAndroid Build Coastguard Worker // Those four moves should generate four 'store' instructions using directly the zero register. 48*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.bar() disassembly (after) 49*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: {{(str|stur)}} wzr, [sp, #{{[0-9]+}}] 50*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: {{(str|stur)}} xzr, [sp, #{{[0-9]+}}] 51*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: {{(str|stur)}} wzr, [sp, #{{[0-9]+}}] 52*795d594fSAndroid Build Coastguard Worker /// CHECK-DAG: {{(str|stur)}} xzr, [sp, #{{[0-9]+}}] 53*795d594fSAndroid Build Coastguard Worker bar()54*795d594fSAndroid Build Coastguard Worker public void bar() { 55*795d594fSAndroid Build Coastguard Worker $noinline$foo(1, 2, 3, 4, 5, 6, 7, // Integral values in registers. 56*795d594fSAndroid Build Coastguard Worker 0, 0L, // Integral values on the stack. 57*795d594fSAndroid Build Coastguard Worker 1, 2, 3, 4, 5, 6, 7, 8, // Floating-point values in registers. 58*795d594fSAndroid Build Coastguard Worker 0.0f, 0.0); // Floating-point values on the stack. 59*795d594fSAndroid Build Coastguard Worker } 60*795d594fSAndroid Build Coastguard Worker 61*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_byte_field() disassembly (after) 62*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 63*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strb wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 64*795d594fSAndroid Build Coastguard Worker 65*795d594fSAndroid Build Coastguard Worker public static byte static_byte_field; 66*795d594fSAndroid Build Coastguard Worker store_zero_to_static_byte_field()67*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_byte_field() { 68*795d594fSAndroid Build Coastguard Worker static_byte_field = 0; 69*795d594fSAndroid Build Coastguard Worker } 70*795d594fSAndroid Build Coastguard Worker 71*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_char_field() disassembly (after) 72*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 73*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 74*795d594fSAndroid Build Coastguard Worker 75*795d594fSAndroid Build Coastguard Worker public static char static_char_field; 76*795d594fSAndroid Build Coastguard Worker store_zero_to_static_char_field()77*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_char_field() { 78*795d594fSAndroid Build Coastguard Worker static_char_field = 0; 79*795d594fSAndroid Build Coastguard Worker } 80*795d594fSAndroid Build Coastguard Worker 81*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_short_field() disassembly (after) 82*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 83*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 84*795d594fSAndroid Build Coastguard Worker 85*795d594fSAndroid Build Coastguard Worker public static short static_short_field; 86*795d594fSAndroid Build Coastguard Worker store_zero_to_static_short_field()87*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_short_field() { 88*795d594fSAndroid Build Coastguard Worker static_short_field = 0; 89*795d594fSAndroid Build Coastguard Worker } 90*795d594fSAndroid Build Coastguard Worker 91*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_int_field() disassembly (after) 92*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 93*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 94*795d594fSAndroid Build Coastguard Worker 95*795d594fSAndroid Build Coastguard Worker public static int static_int_field; 96*795d594fSAndroid Build Coastguard Worker store_zero_to_static_int_field()97*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_int_field() { 98*795d594fSAndroid Build Coastguard Worker static_int_field = 0; 99*795d594fSAndroid Build Coastguard Worker } 100*795d594fSAndroid Build Coastguard Worker 101*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_long_field() disassembly (after) 102*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 103*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 104*795d594fSAndroid Build Coastguard Worker 105*795d594fSAndroid Build Coastguard Worker public static long static_long_field; 106*795d594fSAndroid Build Coastguard Worker store_zero_to_static_long_field()107*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_long_field() { 108*795d594fSAndroid Build Coastguard Worker static_long_field = 0; 109*795d594fSAndroid Build Coastguard Worker } 110*795d594fSAndroid Build Coastguard Worker 111*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_float_field() disassembly (after) 112*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 113*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 114*795d594fSAndroid Build Coastguard Worker 115*795d594fSAndroid Build Coastguard Worker public static float static_float_field; 116*795d594fSAndroid Build Coastguard Worker store_zero_to_static_float_field()117*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_float_field() { 118*795d594fSAndroid Build Coastguard Worker static_float_field = 0.0f; 119*795d594fSAndroid Build Coastguard Worker } 120*795d594fSAndroid Build Coastguard Worker 121*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_static_double_field() disassembly (after) 122*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 123*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 124*795d594fSAndroid Build Coastguard Worker 125*795d594fSAndroid Build Coastguard Worker public static double static_double_field; 126*795d594fSAndroid Build Coastguard Worker store_zero_to_static_double_field()127*795d594fSAndroid Build Coastguard Worker public void store_zero_to_static_double_field() { 128*795d594fSAndroid Build Coastguard Worker static_double_field = 0.0; 129*795d594fSAndroid Build Coastguard Worker } 130*795d594fSAndroid Build Coastguard Worker 131*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_byte_field() disassembly (after) 132*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 133*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 134*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrb wzr, [<<temp>>] 135*795d594fSAndroid Build Coastguard Worker 136*795d594fSAndroid Build Coastguard Worker public static volatile byte volatile_static_byte_field; 137*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_byte_field()138*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_byte_field() { 139*795d594fSAndroid Build Coastguard Worker volatile_static_byte_field = 0; 140*795d594fSAndroid Build Coastguard Worker } 141*795d594fSAndroid Build Coastguard Worker 142*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_char_field() disassembly (after) 143*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 144*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 145*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrh wzr, [<<temp>>] 146*795d594fSAndroid Build Coastguard Worker 147*795d594fSAndroid Build Coastguard Worker public static volatile char volatile_static_char_field; 148*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_char_field()149*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_char_field() { 150*795d594fSAndroid Build Coastguard Worker volatile_static_char_field = 0; 151*795d594fSAndroid Build Coastguard Worker } 152*795d594fSAndroid Build Coastguard Worker 153*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_short_field() disassembly (after) 154*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 155*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 156*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrh wzr, [<<temp>>] 157*795d594fSAndroid Build Coastguard Worker 158*795d594fSAndroid Build Coastguard Worker public static volatile short volatile_static_short_field; 159*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_short_field()160*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_short_field() { 161*795d594fSAndroid Build Coastguard Worker volatile_static_short_field = 0; 162*795d594fSAndroid Build Coastguard Worker } 163*795d594fSAndroid Build Coastguard Worker 164*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_int_field() disassembly (after) 165*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 166*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 167*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr wzr, [<<temp>>] 168*795d594fSAndroid Build Coastguard Worker 169*795d594fSAndroid Build Coastguard Worker public static volatile int volatile_static_int_field; 170*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_int_field()171*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_int_field() { 172*795d594fSAndroid Build Coastguard Worker volatile_static_int_field = 0; 173*795d594fSAndroid Build Coastguard Worker } 174*795d594fSAndroid Build Coastguard Worker 175*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_long_field() disassembly (after) 176*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 177*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 178*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr xzr, [<<temp>>] 179*795d594fSAndroid Build Coastguard Worker 180*795d594fSAndroid Build Coastguard Worker public static volatile long volatile_static_long_field; 181*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_long_field()182*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_long_field() { 183*795d594fSAndroid Build Coastguard Worker volatile_static_long_field = 0; 184*795d594fSAndroid Build Coastguard Worker } 185*795d594fSAndroid Build Coastguard Worker 186*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_float_field() disassembly (after) 187*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 188*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 189*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr wzr, [<<temp>>] 190*795d594fSAndroid Build Coastguard Worker 191*795d594fSAndroid Build Coastguard Worker public static volatile float volatile_static_float_field; 192*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_float_field()193*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_float_field() { 194*795d594fSAndroid Build Coastguard Worker volatile_static_float_field = 0.0f; 195*795d594fSAndroid Build Coastguard Worker } 196*795d594fSAndroid Build Coastguard Worker 197*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_static_double_field() disassembly (after) 198*795d594fSAndroid Build Coastguard Worker /// CHECK: StaticFieldSet 199*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 200*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr xzr, [<<temp>>] 201*795d594fSAndroid Build Coastguard Worker 202*795d594fSAndroid Build Coastguard Worker public static volatile double volatile_static_double_field; 203*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_static_double_field()204*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_static_double_field() { 205*795d594fSAndroid Build Coastguard Worker volatile_static_double_field = 0.0; 206*795d594fSAndroid Build Coastguard Worker } 207*795d594fSAndroid Build Coastguard Worker 208*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_byte_field() disassembly (after) 209*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 210*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strb wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 211*795d594fSAndroid Build Coastguard Worker 212*795d594fSAndroid Build Coastguard Worker public byte instance_byte_field; 213*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_byte_field()214*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_byte_field() { 215*795d594fSAndroid Build Coastguard Worker instance_byte_field = 0; 216*795d594fSAndroid Build Coastguard Worker } 217*795d594fSAndroid Build Coastguard Worker 218*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_char_field() disassembly (after) 219*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 220*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 221*795d594fSAndroid Build Coastguard Worker 222*795d594fSAndroid Build Coastguard Worker public char instance_char_field; 223*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_char_field()224*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_char_field() { 225*795d594fSAndroid Build Coastguard Worker instance_char_field = 0; 226*795d594fSAndroid Build Coastguard Worker } 227*795d594fSAndroid Build Coastguard Worker 228*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_short_field() disassembly (after) 229*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 230*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 231*795d594fSAndroid Build Coastguard Worker 232*795d594fSAndroid Build Coastguard Worker public short instance_short_field; 233*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_short_field()234*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_short_field() { 235*795d594fSAndroid Build Coastguard Worker instance_short_field = 0; 236*795d594fSAndroid Build Coastguard Worker } 237*795d594fSAndroid Build Coastguard Worker 238*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_int_field() disassembly (after) 239*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 240*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 241*795d594fSAndroid Build Coastguard Worker 242*795d594fSAndroid Build Coastguard Worker public int instance_int_field; 243*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_int_field()244*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_int_field() { 245*795d594fSAndroid Build Coastguard Worker instance_int_field = 0; 246*795d594fSAndroid Build Coastguard Worker } 247*795d594fSAndroid Build Coastguard Worker 248*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_long_field() disassembly (after) 249*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 250*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 251*795d594fSAndroid Build Coastguard Worker 252*795d594fSAndroid Build Coastguard Worker public long instance_long_field; 253*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_long_field()254*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_long_field() { 255*795d594fSAndroid Build Coastguard Worker instance_long_field = 0; 256*795d594fSAndroid Build Coastguard Worker } 257*795d594fSAndroid Build Coastguard Worker 258*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_float_field() disassembly (after) 259*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 260*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 261*795d594fSAndroid Build Coastguard Worker 262*795d594fSAndroid Build Coastguard Worker public float instance_float_field; 263*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_float_field()264*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_float_field() { 265*795d594fSAndroid Build Coastguard Worker instance_float_field = 0.0f; 266*795d594fSAndroid Build Coastguard Worker } 267*795d594fSAndroid Build Coastguard Worker 268*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_instance_double_field() disassembly (after) 269*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 270*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 271*795d594fSAndroid Build Coastguard Worker 272*795d594fSAndroid Build Coastguard Worker public double instance_double_field; 273*795d594fSAndroid Build Coastguard Worker store_zero_to_instance_double_field()274*795d594fSAndroid Build Coastguard Worker public void store_zero_to_instance_double_field() { 275*795d594fSAndroid Build Coastguard Worker instance_double_field = 0.0; 276*795d594fSAndroid Build Coastguard Worker } 277*795d594fSAndroid Build Coastguard Worker 278*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_byte_field() disassembly (after) 279*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 280*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 281*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrb wzr, [<<temp>>] 282*795d594fSAndroid Build Coastguard Worker 283*795d594fSAndroid Build Coastguard Worker public volatile byte volatile_instance_byte_field; 284*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_byte_field()285*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_byte_field() { 286*795d594fSAndroid Build Coastguard Worker volatile_instance_byte_field = 0; 287*795d594fSAndroid Build Coastguard Worker } 288*795d594fSAndroid Build Coastguard Worker 289*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_char_field() disassembly (after) 290*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 291*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 292*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrh wzr, [<<temp>>] 293*795d594fSAndroid Build Coastguard Worker 294*795d594fSAndroid Build Coastguard Worker public volatile char volatile_instance_char_field; 295*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_char_field()296*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_char_field() { 297*795d594fSAndroid Build Coastguard Worker volatile_instance_char_field = 0; 298*795d594fSAndroid Build Coastguard Worker } 299*795d594fSAndroid Build Coastguard Worker 300*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_short_field() disassembly (after) 301*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 302*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 303*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlrh wzr, [<<temp>>] 304*795d594fSAndroid Build Coastguard Worker 305*795d594fSAndroid Build Coastguard Worker public volatile short volatile_instance_short_field; 306*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_short_field()307*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_short_field() { 308*795d594fSAndroid Build Coastguard Worker volatile_instance_short_field = 0; 309*795d594fSAndroid Build Coastguard Worker } 310*795d594fSAndroid Build Coastguard Worker 311*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_int_field() disassembly (after) 312*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 313*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 314*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr wzr, [<<temp>>] 315*795d594fSAndroid Build Coastguard Worker 316*795d594fSAndroid Build Coastguard Worker public volatile int volatile_instance_int_field; 317*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_int_field()318*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_int_field() { 319*795d594fSAndroid Build Coastguard Worker volatile_instance_int_field = 0; 320*795d594fSAndroid Build Coastguard Worker } 321*795d594fSAndroid Build Coastguard Worker 322*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_long_field() disassembly (after) 323*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 324*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 325*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr xzr, [<<temp>>] 326*795d594fSAndroid Build Coastguard Worker 327*795d594fSAndroid Build Coastguard Worker public volatile long volatile_instance_long_field; 328*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_long_field()329*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_long_field() { 330*795d594fSAndroid Build Coastguard Worker volatile_instance_long_field = 0; 331*795d594fSAndroid Build Coastguard Worker } 332*795d594fSAndroid Build Coastguard Worker 333*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_float_field() disassembly (after) 334*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 335*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 336*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr wzr, [<<temp>>] 337*795d594fSAndroid Build Coastguard Worker 338*795d594fSAndroid Build Coastguard Worker public volatile float volatile_instance_float_field; 339*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_float_field()340*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_float_field() { 341*795d594fSAndroid Build Coastguard Worker volatile_instance_float_field = 0.0f; 342*795d594fSAndroid Build Coastguard Worker } 343*795d594fSAndroid Build Coastguard Worker 344*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_volatile_instance_double_field() disassembly (after) 345*795d594fSAndroid Build Coastguard Worker /// CHECK: InstanceFieldSet 346*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: add <<temp:x[0-9]+>>, x{{[0-9]+}}, #0x{{[0-9a-fA-F]+}} 347*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: stlr xzr, [<<temp>>] 348*795d594fSAndroid Build Coastguard Worker 349*795d594fSAndroid Build Coastguard Worker public volatile double volatile_instance_double_field; 350*795d594fSAndroid Build Coastguard Worker store_zero_to_volatile_instance_double_field()351*795d594fSAndroid Build Coastguard Worker public void store_zero_to_volatile_instance_double_field() { 352*795d594fSAndroid Build Coastguard Worker volatile_instance_double_field = 0.0; 353*795d594fSAndroid Build Coastguard Worker } 354*795d594fSAndroid Build Coastguard Worker 355*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_byte() disassembly (after) 356*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 357*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strb wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 358*795d594fSAndroid Build Coastguard Worker 359*795d594fSAndroid Build Coastguard Worker byte array_byte[]; 360*795d594fSAndroid Build Coastguard Worker store_zero_to_array_byte()361*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_byte() { 362*795d594fSAndroid Build Coastguard Worker array_byte[0] = 0; 363*795d594fSAndroid Build Coastguard Worker } 364*795d594fSAndroid Build Coastguard Worker 365*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_char() disassembly (after) 366*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 367*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 368*795d594fSAndroid Build Coastguard Worker 369*795d594fSAndroid Build Coastguard Worker char array_char[]; 370*795d594fSAndroid Build Coastguard Worker store_zero_to_array_char()371*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_char() { 372*795d594fSAndroid Build Coastguard Worker array_char[0] = 0; 373*795d594fSAndroid Build Coastguard Worker } 374*795d594fSAndroid Build Coastguard Worker 375*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_short() disassembly (after) 376*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 377*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: strh wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 378*795d594fSAndroid Build Coastguard Worker 379*795d594fSAndroid Build Coastguard Worker short array_short[]; 380*795d594fSAndroid Build Coastguard Worker store_zero_to_array_short()381*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_short() { 382*795d594fSAndroid Build Coastguard Worker array_short[0] = 0; 383*795d594fSAndroid Build Coastguard Worker } 384*795d594fSAndroid Build Coastguard Worker 385*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_int() disassembly (after) 386*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 387*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 388*795d594fSAndroid Build Coastguard Worker 389*795d594fSAndroid Build Coastguard Worker int array_int[]; 390*795d594fSAndroid Build Coastguard Worker store_zero_to_array_int()391*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_int() { 392*795d594fSAndroid Build Coastguard Worker array_int[0] = 0; 393*795d594fSAndroid Build Coastguard Worker } 394*795d594fSAndroid Build Coastguard Worker 395*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_long() disassembly (after) 396*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 397*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 398*795d594fSAndroid Build Coastguard Worker 399*795d594fSAndroid Build Coastguard Worker long array_long[]; 400*795d594fSAndroid Build Coastguard Worker store_zero_to_array_long()401*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_long() { 402*795d594fSAndroid Build Coastguard Worker array_long[0] = 0; 403*795d594fSAndroid Build Coastguard Worker } 404*795d594fSAndroid Build Coastguard Worker 405*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_float() disassembly (after) 406*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 407*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str wzr, [x{{[0-9]+}}, #{{[0-9]+}}] 408*795d594fSAndroid Build Coastguard Worker 409*795d594fSAndroid Build Coastguard Worker float array_float[]; 410*795d594fSAndroid Build Coastguard Worker store_zero_to_array_float()411*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_float() { 412*795d594fSAndroid Build Coastguard Worker array_float[0] = 0.0f; 413*795d594fSAndroid Build Coastguard Worker } 414*795d594fSAndroid Build Coastguard Worker 415*795d594fSAndroid Build Coastguard Worker /// CHECK-START-ARM64: void Main.store_zero_to_array_double() disassembly (after) 416*795d594fSAndroid Build Coastguard Worker /// CHECK: ArraySet 417*795d594fSAndroid Build Coastguard Worker /// CHECK-NEXT: str xzr, [x{{[0-9]+}}, #{{[0-9]+}}] 418*795d594fSAndroid Build Coastguard Worker 419*795d594fSAndroid Build Coastguard Worker double array_double[]; 420*795d594fSAndroid Build Coastguard Worker store_zero_to_array_double()421*795d594fSAndroid Build Coastguard Worker public void store_zero_to_array_double() { 422*795d594fSAndroid Build Coastguard Worker array_double[0] = 0.0; 423*795d594fSAndroid Build Coastguard Worker } 424*795d594fSAndroid Build Coastguard Worker main(String args[])425*795d594fSAndroid Build Coastguard Worker public static void main(String args[]) { 426*795d594fSAndroid Build Coastguard Worker Main obj = new Main(); 427*795d594fSAndroid Build Coastguard Worker obj.array_byte = new byte[1]; 428*795d594fSAndroid Build Coastguard Worker obj.array_char = new char[1]; 429*795d594fSAndroid Build Coastguard Worker obj.array_short = new short[1]; 430*795d594fSAndroid Build Coastguard Worker obj.array_int = new int[1]; 431*795d594fSAndroid Build Coastguard Worker obj.array_long = new long[1]; 432*795d594fSAndroid Build Coastguard Worker obj.array_float = new float[1]; 433*795d594fSAndroid Build Coastguard Worker obj.array_double = new double[1]; 434*795d594fSAndroid Build Coastguard Worker 435*795d594fSAndroid Build Coastguard Worker obj.bar(); 436*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_byte_field(); 437*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_char_field(); 438*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_short_field(); 439*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_int_field(); 440*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_long_field(); 441*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_float_field(); 442*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_static_double_field(); 443*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_byte_field(); 444*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_char_field(); 445*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_short_field(); 446*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_int_field(); 447*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_long_field(); 448*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_float_field(); 449*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_static_double_field(); 450*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_byte_field(); 451*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_char_field(); 452*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_short_field(); 453*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_int_field(); 454*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_long_field(); 455*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_float_field(); 456*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_instance_double_field(); 457*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_byte_field(); 458*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_char_field(); 459*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_short_field(); 460*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_int_field(); 461*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_long_field(); 462*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_float_field(); 463*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_volatile_instance_double_field(); 464*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_byte(); 465*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_char(); 466*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_short(); 467*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_int(); 468*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_long(); 469*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_float(); 470*795d594fSAndroid Build Coastguard Worker obj.store_zero_to_array_double(); 471*795d594fSAndroid Build Coastguard Worker } 472*795d594fSAndroid Build Coastguard Worker } 473