Mercurial > hg > graal-compiler
annotate src/share/vm/interpreter/bytecodes.hpp @ 3992:d1bdeef3e3e2
7098282: G1: assert(interval >= 0) failed: Sanity check, referencePolicy.cpp: 76
Summary: There is a race between one thread successfully forwarding and copying the klass mirror for the SoftReference class (including the static master clock) and another thread attempting to use the master clock while attempting to discover a soft reference object. Maintain a shadow copy of the soft reference master clock and use the shadow during reference discovery and reference processing.
Reviewed-by: tonyp, brutisso, ysr
author | johnc |
---|---|
date | Wed, 12 Oct 2011 10:25:51 -0700 |
parents | de847cac9235 |
children | 1d7922586cf6 |
rev | line source |
---|---|
0 | 1 /* |
2142 | 2 * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. |
0 | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | |
5 * This code is free software; you can redistribute it and/or modify it | |
6 * under the terms of the GNU General Public License version 2 only, as | |
7 * published by the Free Software Foundation. | |
8 * | |
9 * This code is distributed in the hope that it will be useful, but WITHOUT | |
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
12 * version 2 for more details (a copy is included in the LICENSE file that | |
13 * accompanied this code). | |
14 * | |
15 * You should have received a copy of the GNU General Public License version | |
16 * 2 along with this work; if not, write to the Free Software Foundation, | |
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | |
18 * | |
1552
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
844
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
844
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
c18cbe5936b8
6941466: Oracle rebranding changes for Hotspot repositories
trims
parents:
844
diff
changeset
|
21 * questions. |
0 | 22 * |
23 */ | |
24 | |
1972 | 25 #ifndef SHARE_VM_INTERPRETER_BYTECODES_HPP |
26 #define SHARE_VM_INTERPRETER_BYTECODES_HPP | |
27 | |
28 #include "memory/allocation.hpp" | |
29 #include "utilities/top.hpp" | |
30 | |
0 | 31 // Bytecodes specifies all bytecodes used in the VM and |
32 // provides utility functions to get bytecode attributes. | |
33 | |
34 // NOTE: replicated in SA in vm/agent/sun/jvm/hotspot/interpreter/Bytecodes.java | |
35 class Bytecodes: AllStatic { | |
36 public: | |
37 enum Code { | |
38 _illegal = -1, | |
39 | |
40 // Java bytecodes | |
41 _nop = 0, // 0x00 | |
42 _aconst_null = 1, // 0x01 | |
43 _iconst_m1 = 2, // 0x02 | |
44 _iconst_0 = 3, // 0x03 | |
45 _iconst_1 = 4, // 0x04 | |
46 _iconst_2 = 5, // 0x05 | |
47 _iconst_3 = 6, // 0x06 | |
48 _iconst_4 = 7, // 0x07 | |
49 _iconst_5 = 8, // 0x08 | |
50 _lconst_0 = 9, // 0x09 | |
51 _lconst_1 = 10, // 0x0a | |
52 _fconst_0 = 11, // 0x0b | |
53 _fconst_1 = 12, // 0x0c | |
54 _fconst_2 = 13, // 0x0d | |
55 _dconst_0 = 14, // 0x0e | |
56 _dconst_1 = 15, // 0x0f | |
57 _bipush = 16, // 0x10 | |
58 _sipush = 17, // 0x11 | |
59 _ldc = 18, // 0x12 | |
60 _ldc_w = 19, // 0x13 | |
61 _ldc2_w = 20, // 0x14 | |
62 _iload = 21, // 0x15 | |
63 _lload = 22, // 0x16 | |
64 _fload = 23, // 0x17 | |
65 _dload = 24, // 0x18 | |
66 _aload = 25, // 0x19 | |
67 _iload_0 = 26, // 0x1a | |
68 _iload_1 = 27, // 0x1b | |
69 _iload_2 = 28, // 0x1c | |
70 _iload_3 = 29, // 0x1d | |
71 _lload_0 = 30, // 0x1e | |
72 _lload_1 = 31, // 0x1f | |
73 _lload_2 = 32, // 0x20 | |
74 _lload_3 = 33, // 0x21 | |
75 _fload_0 = 34, // 0x22 | |
76 _fload_1 = 35, // 0x23 | |
77 _fload_2 = 36, // 0x24 | |
78 _fload_3 = 37, // 0x25 | |
79 _dload_0 = 38, // 0x26 | |
80 _dload_1 = 39, // 0x27 | |
81 _dload_2 = 40, // 0x28 | |
82 _dload_3 = 41, // 0x29 | |
83 _aload_0 = 42, // 0x2a | |
84 _aload_1 = 43, // 0x2b | |
85 _aload_2 = 44, // 0x2c | |
86 _aload_3 = 45, // 0x2d | |
87 _iaload = 46, // 0x2e | |
88 _laload = 47, // 0x2f | |
89 _faload = 48, // 0x30 | |
90 _daload = 49, // 0x31 | |
91 _aaload = 50, // 0x32 | |
92 _baload = 51, // 0x33 | |
93 _caload = 52, // 0x34 | |
94 _saload = 53, // 0x35 | |
95 _istore = 54, // 0x36 | |
96 _lstore = 55, // 0x37 | |
97 _fstore = 56, // 0x38 | |
98 _dstore = 57, // 0x39 | |
99 _astore = 58, // 0x3a | |
100 _istore_0 = 59, // 0x3b | |
101 _istore_1 = 60, // 0x3c | |
102 _istore_2 = 61, // 0x3d | |
103 _istore_3 = 62, // 0x3e | |
104 _lstore_0 = 63, // 0x3f | |
105 _lstore_1 = 64, // 0x40 | |
106 _lstore_2 = 65, // 0x41 | |
107 _lstore_3 = 66, // 0x42 | |
108 _fstore_0 = 67, // 0x43 | |
109 _fstore_1 = 68, // 0x44 | |
110 _fstore_2 = 69, // 0x45 | |
111 _fstore_3 = 70, // 0x46 | |
112 _dstore_0 = 71, // 0x47 | |
113 _dstore_1 = 72, // 0x48 | |
114 _dstore_2 = 73, // 0x49 | |
115 _dstore_3 = 74, // 0x4a | |
116 _astore_0 = 75, // 0x4b | |
117 _astore_1 = 76, // 0x4c | |
118 _astore_2 = 77, // 0x4d | |
119 _astore_3 = 78, // 0x4e | |
120 _iastore = 79, // 0x4f | |
121 _lastore = 80, // 0x50 | |
122 _fastore = 81, // 0x51 | |
123 _dastore = 82, // 0x52 | |
124 _aastore = 83, // 0x53 | |
125 _bastore = 84, // 0x54 | |
126 _castore = 85, // 0x55 | |
127 _sastore = 86, // 0x56 | |
128 _pop = 87, // 0x57 | |
129 _pop2 = 88, // 0x58 | |
130 _dup = 89, // 0x59 | |
131 _dup_x1 = 90, // 0x5a | |
132 _dup_x2 = 91, // 0x5b | |
133 _dup2 = 92, // 0x5c | |
134 _dup2_x1 = 93, // 0x5d | |
135 _dup2_x2 = 94, // 0x5e | |
136 _swap = 95, // 0x5f | |
137 _iadd = 96, // 0x60 | |
138 _ladd = 97, // 0x61 | |
139 _fadd = 98, // 0x62 | |
140 _dadd = 99, // 0x63 | |
141 _isub = 100, // 0x64 | |
142 _lsub = 101, // 0x65 | |
143 _fsub = 102, // 0x66 | |
144 _dsub = 103, // 0x67 | |
145 _imul = 104, // 0x68 | |
146 _lmul = 105, // 0x69 | |
147 _fmul = 106, // 0x6a | |
148 _dmul = 107, // 0x6b | |
149 _idiv = 108, // 0x6c | |
150 _ldiv = 109, // 0x6d | |
151 _fdiv = 110, // 0x6e | |
152 _ddiv = 111, // 0x6f | |
153 _irem = 112, // 0x70 | |
154 _lrem = 113, // 0x71 | |
155 _frem = 114, // 0x72 | |
156 _drem = 115, // 0x73 | |
157 _ineg = 116, // 0x74 | |
158 _lneg = 117, // 0x75 | |
159 _fneg = 118, // 0x76 | |
160 _dneg = 119, // 0x77 | |
161 _ishl = 120, // 0x78 | |
162 _lshl = 121, // 0x79 | |
163 _ishr = 122, // 0x7a | |
164 _lshr = 123, // 0x7b | |
165 _iushr = 124, // 0x7c | |
166 _lushr = 125, // 0x7d | |
167 _iand = 126, // 0x7e | |
168 _land = 127, // 0x7f | |
169 _ior = 128, // 0x80 | |
170 _lor = 129, // 0x81 | |
171 _ixor = 130, // 0x82 | |
172 _lxor = 131, // 0x83 | |
173 _iinc = 132, // 0x84 | |
174 _i2l = 133, // 0x85 | |
175 _i2f = 134, // 0x86 | |
176 _i2d = 135, // 0x87 | |
177 _l2i = 136, // 0x88 | |
178 _l2f = 137, // 0x89 | |
179 _l2d = 138, // 0x8a | |
180 _f2i = 139, // 0x8b | |
181 _f2l = 140, // 0x8c | |
182 _f2d = 141, // 0x8d | |
183 _d2i = 142, // 0x8e | |
184 _d2l = 143, // 0x8f | |
185 _d2f = 144, // 0x90 | |
186 _i2b = 145, // 0x91 | |
187 _i2c = 146, // 0x92 | |
188 _i2s = 147, // 0x93 | |
189 _lcmp = 148, // 0x94 | |
190 _fcmpl = 149, // 0x95 | |
191 _fcmpg = 150, // 0x96 | |
192 _dcmpl = 151, // 0x97 | |
193 _dcmpg = 152, // 0x98 | |
194 _ifeq = 153, // 0x99 | |
195 _ifne = 154, // 0x9a | |
196 _iflt = 155, // 0x9b | |
197 _ifge = 156, // 0x9c | |
198 _ifgt = 157, // 0x9d | |
199 _ifle = 158, // 0x9e | |
200 _if_icmpeq = 159, // 0x9f | |
201 _if_icmpne = 160, // 0xa0 | |
202 _if_icmplt = 161, // 0xa1 | |
203 _if_icmpge = 162, // 0xa2 | |
204 _if_icmpgt = 163, // 0xa3 | |
205 _if_icmple = 164, // 0xa4 | |
206 _if_acmpeq = 165, // 0xa5 | |
207 _if_acmpne = 166, // 0xa6 | |
208 _goto = 167, // 0xa7 | |
209 _jsr = 168, // 0xa8 | |
210 _ret = 169, // 0xa9 | |
211 _tableswitch = 170, // 0xaa | |
212 _lookupswitch = 171, // 0xab | |
213 _ireturn = 172, // 0xac | |
214 _lreturn = 173, // 0xad | |
215 _freturn = 174, // 0xae | |
216 _dreturn = 175, // 0xaf | |
217 _areturn = 176, // 0xb0 | |
218 _return = 177, // 0xb1 | |
219 _getstatic = 178, // 0xb2 | |
220 _putstatic = 179, // 0xb3 | |
221 _getfield = 180, // 0xb4 | |
222 _putfield = 181, // 0xb5 | |
223 _invokevirtual = 182, // 0xb6 | |
224 _invokespecial = 183, // 0xb7 | |
225 _invokestatic = 184, // 0xb8 | |
226 _invokeinterface = 185, // 0xb9 | |
726
be93aad57795
6655646: dynamic languages need dynamically linked call sites
jrose
parents:
470
diff
changeset
|
227 _invokedynamic = 186, // 0xba // if EnableInvokeDynamic |
0 | 228 _new = 187, // 0xbb |
229 _newarray = 188, // 0xbc | |
230 _anewarray = 189, // 0xbd | |
231 _arraylength = 190, // 0xbe | |
232 _athrow = 191, // 0xbf | |
233 _checkcast = 192, // 0xc0 | |
234 _instanceof = 193, // 0xc1 | |
235 _monitorenter = 194, // 0xc2 | |
236 _monitorexit = 195, // 0xc3 | |
237 _wide = 196, // 0xc4 | |
238 _multianewarray = 197, // 0xc5 | |
239 _ifnull = 198, // 0xc6 | |
240 _ifnonnull = 199, // 0xc7 | |
241 _goto_w = 200, // 0xc8 | |
242 _jsr_w = 201, // 0xc9 | |
243 _breakpoint = 202, // 0xca | |
244 | |
245 number_of_java_codes, | |
246 | |
247 // JVM bytecodes | |
248 _fast_agetfield = number_of_java_codes, | |
249 _fast_bgetfield , | |
250 _fast_cgetfield , | |
251 _fast_dgetfield , | |
252 _fast_fgetfield , | |
253 _fast_igetfield , | |
254 _fast_lgetfield , | |
255 _fast_sgetfield , | |
256 | |
257 _fast_aputfield , | |
258 _fast_bputfield , | |
259 _fast_cputfield , | |
260 _fast_dputfield , | |
261 _fast_fputfield , | |
262 _fast_iputfield , | |
263 _fast_lputfield , | |
264 _fast_sputfield , | |
265 | |
266 _fast_aload_0 , | |
267 _fast_iaccess_0 , | |
268 _fast_aaccess_0 , | |
269 _fast_faccess_0 , | |
270 | |
271 _fast_iload , | |
272 _fast_iload2 , | |
273 _fast_icaload , | |
274 | |
275 _fast_invokevfinal , | |
276 _fast_linearswitch , | |
277 _fast_binaryswitch , | |
278 | |
1602 | 279 // special handling of oop constants: |
280 _fast_aldc , | |
281 _fast_aldc_w , | |
282 | |
0 | 283 _return_register_finalizer , |
284 | |
285 _shouldnotreachhere, // For debugging | |
286 | |
287 // Platform specific JVM bytecodes | |
1972 | 288 #ifdef TARGET_ARCH_x86 |
289 # include "bytecodes_x86.hpp" | |
290 #endif | |
291 #ifdef TARGET_ARCH_sparc | |
292 # include "bytecodes_sparc.hpp" | |
293 #endif | |
294 #ifdef TARGET_ARCH_zero | |
295 # include "bytecodes_zero.hpp" | |
296 #endif | |
2192
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
297 #ifdef TARGET_ARCH_arm |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
298 # include "bytecodes_arm.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
299 #endif |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
300 #ifdef TARGET_ARCH_ppc |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
301 # include "bytecodes_ppc.hpp" |
b92c45f2bc75
7016023: Enable building ARM and PPC from src/closed repository
bobv
parents:
2142
diff
changeset
|
302 #endif |
1972 | 303 |
0 | 304 |
305 number_of_codes | |
306 }; | |
307 | |
1565 | 308 // Flag bits derived from format strings, can_trap, can_rewrite, etc.: |
309 enum Flags { | |
310 // semantic flags: | |
311 _bc_can_trap = 1<<0, // bytecode execution can trap or block | |
312 _bc_can_rewrite = 1<<1, // bytecode execution has an alternate form | |
313 | |
314 // format bits (determined only by the format string): | |
315 _fmt_has_c = 1<<2, // constant, such as sipush "bcc" | |
316 _fmt_has_j = 1<<3, // constant pool cache index, such as getfield "bjj" | |
317 _fmt_has_k = 1<<4, // constant pool index, such as ldc "bk" | |
318 _fmt_has_i = 1<<5, // local index, such as iload | |
319 _fmt_has_o = 1<<6, // offset, such as ifeq | |
320 _fmt_has_nbo = 1<<7, // contains native-order field(s) | |
321 _fmt_has_u2 = 1<<8, // contains double-byte field(s) | |
322 _fmt_has_u4 = 1<<9, // contains quad-byte field | |
323 _fmt_not_variable = 1<<10, // not of variable length (simple or wide) | |
324 _fmt_not_simple = 1<<11, // either wide or variable length | |
325 _all_fmt_bits = (_fmt_not_simple*2 - _fmt_has_c), | |
326 | |
327 // Example derived format syndromes: | |
328 _fmt_b = _fmt_not_variable, | |
329 _fmt_bc = _fmt_b | _fmt_has_c, | |
330 _fmt_bi = _fmt_b | _fmt_has_i, | |
331 _fmt_bkk = _fmt_b | _fmt_has_k | _fmt_has_u2, | |
332 _fmt_bJJ = _fmt_b | _fmt_has_j | _fmt_has_u2 | _fmt_has_nbo, | |
333 _fmt_bo2 = _fmt_b | _fmt_has_o | _fmt_has_u2, | |
334 _fmt_bo4 = _fmt_b | _fmt_has_o | _fmt_has_u4 | |
335 }; | |
336 | |
0 | 337 private: |
338 static bool _is_initialized; | |
339 static const char* _name [number_of_codes]; | |
340 static BasicType _result_type [number_of_codes]; | |
341 static s_char _depth [number_of_codes]; | |
1565 | 342 static u_char _lengths [number_of_codes]; |
0 | 343 static Code _java_code [number_of_codes]; |
1565 | 344 static jchar _flags [(1<<BitsPerByte)*2]; // all second page for wide formats |
0 | 345 |
346 static void def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap); | |
347 static void def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap, Code java_code); | |
348 static void pd_initialize(); // platform specific initialization | |
349 static Code pd_base_code_for(Code code); // platform specific base_code_for implementation | |
350 | |
2142 | 351 // Verify that bcp points into method |
352 #ifdef ASSERT | |
353 static bool check_method(const methodOopDesc* method, address bcp); | |
354 #endif | |
355 static bool check_must_rewrite(Bytecodes::Code bc); | |
356 | |
0 | 357 public: |
358 // Conversion | |
359 static void check (Code code) { assert(is_defined(code), "illegal code"); } | |
360 static void wide_check (Code code) { assert(wide_is_defined(code), "illegal code"); } | |
361 static Code cast (int code) { return (Code)code; } | |
362 | |
363 | |
2142 | 364 // Fetch a bytecode, hiding breakpoints as necessary. The method |
365 // argument is used for conversion of breakpoints into the original | |
366 // bytecode. The CI uses these methods but guarantees that | |
367 // breakpoints are hidden so the method argument should be passed as | |
368 // NULL since in that case the bcp and methodOop are unrelated | |
369 // memory. | |
370 static Code code_at(const methodOopDesc* method, address bcp) { | |
371 assert(method == NULL || check_method(method, bcp), "bcp must point into method"); | |
372 Code code = cast(*bcp); | |
373 assert(code != _breakpoint || method != NULL, "need methodOop to decode breakpoint"); | |
374 return (code != _breakpoint) ? code : non_breakpoint_code_at(method, bcp); | |
375 } | |
376 static Code java_code_at(const methodOopDesc* method, address bcp) { | |
377 return java_code(code_at(method, bcp)); | |
378 } | |
0 | 379 |
2142 | 380 // Fetch a bytecode or a breakpoint: |
381 static Code code_or_bp_at(address bcp) { return (Code)cast(*bcp); } | |
0 | 382 |
2142 | 383 static Code code_at(methodOop method, int bci); |
384 static bool is_active_breakpoint_at(address bcp) { return (Code)*bcp == _breakpoint; } | |
0 | 385 |
2142 | 386 // find a bytecode, behind a breakpoint if necessary: |
387 static Code non_breakpoint_code_at(const methodOopDesc* method, address bcp); | |
0 | 388 |
389 // Bytecode attributes | |
1565 | 390 static bool is_defined (int code) { return 0 <= code && code < number_of_codes && flags(code, false) != 0; } |
391 static bool wide_is_defined(int code) { return is_defined(code) && flags(code, true) != 0; } | |
0 | 392 static const char* name (Code code) { check(code); return _name [code]; } |
393 static BasicType result_type (Code code) { check(code); return _result_type [code]; } | |
394 static int depth (Code code) { check(code); return _depth [code]; } | |
1570 | 395 // Note: Length functions must return <=0 for invalid bytecodes. |
396 // Calling check(code) in length functions would throw an unwanted assert. | |
397 static int length_for (Code code) { /*no check*/ return _lengths [code] & 0xF; } | |
398 static int wide_length_for(Code code) { /*no check*/ return _lengths [code] >> 4; } | |
1565 | 399 static bool can_trap (Code code) { check(code); return has_all_flags(code, _bc_can_trap, false); } |
0 | 400 static Code java_code (Code code) { check(code); return _java_code [code]; } |
1565 | 401 static bool can_rewrite (Code code) { check(code); return has_all_flags(code, _bc_can_rewrite, false); } |
2142 | 402 static bool must_rewrite(Bytecodes::Code code) { return can_rewrite(code) && check_must_rewrite(code); } |
1565 | 403 static bool native_byte_order(Code code) { check(code); return has_all_flags(code, _fmt_has_nbo, false); } |
404 static bool uses_cp_cache (Code code) { check(code); return has_all_flags(code, _fmt_has_j, false); } | |
413
c7ec737733a6
6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents:
0
diff
changeset
|
405 // if 'end' is provided, it indicates the end of the code buffer which |
c7ec737733a6
6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents:
0
diff
changeset
|
406 // should not be read past when parsing. |
2142 | 407 static int special_length_at(Bytecodes::Code code, address bcp, address end = NULL); |
408 static int special_length_at(methodOop method, address bcp, address end = NULL) { return special_length_at(code_at(method, bcp), bcp, end); } | |
413
c7ec737733a6
6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents:
0
diff
changeset
|
409 static int raw_special_length_at(address bcp, address end = NULL); |
2142 | 410 static int length_for_code_at(Bytecodes::Code code, address bcp) { int l = length_for(code); return l > 0 ? l : special_length_at(code, bcp); } |
411 static int length_at (methodOop method, address bcp) { return length_for_code_at(code_at(method, bcp), bcp); } | |
412 static int java_length_at (methodOop method, address bcp) { return length_for_code_at(java_code_at(method, bcp), bcp); } | |
0 | 413 static bool is_java_code (Code code) { return 0 <= code && code < number_of_java_codes; } |
414 | |
415 static bool is_aload (Code code) { return (code == _aload || code == _aload_0 || code == _aload_1 | |
416 || code == _aload_2 || code == _aload_3); } | |
417 static bool is_astore (Code code) { return (code == _astore || code == _astore_0 || code == _astore_1 | |
418 || code == _astore_2 || code == _astore_3); } | |
419 | |
420 static bool is_zero_const (Code code) { return (code == _aconst_null || code == _iconst_0 | |
421 || code == _fconst_0 || code == _dconst_0); } | |
3897
de847cac9235
7078382: JSR 292: don't count method handle adapters against inlining budgets
twisti
parents:
2192
diff
changeset
|
422 static bool is_invoke (Code code) { return (_invokevirtual <= code && code <= _invokedynamic); } |
de847cac9235
7078382: JSR 292: don't count method handle adapters against inlining budgets
twisti
parents:
2192
diff
changeset
|
423 |
1565 | 424 static int compute_flags (const char* format, int more_flags = 0); // compute the flags |
425 static int flags (int code, bool is_wide) { | |
426 assert(code == (u_char)code, "must be a byte"); | |
427 return _flags[code + (is_wide ? (1<<BitsPerByte) : 0)]; | |
428 } | |
429 static int format_bits (Code code, bool is_wide) { return flags(code, is_wide) & _all_fmt_bits; } | |
430 static bool has_all_flags (Code code, int test_flags, bool is_wide) { | |
431 return (flags(code, is_wide) & test_flags) == test_flags; | |
432 } | |
433 | |
0 | 434 // Initialization |
435 static void initialize (); | |
436 }; | |
1972 | 437 |
438 #endif // SHARE_VM_INTERPRETER_BYTECODES_HPP |