xref: /aosp_15_r20/art/test/615-checker-arm64-store-zero/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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