annotate src/share/vm/interpreter/bytecodes.cpp @ 6862:8a5ea0a9ccc4

7127708: G1: change task num types from int to uint in concurrent mark Summary: Change the type of various task num fields, parameters etc to unsigned and rename them to be more consistent with the other collectors. Code changes were also reviewed by Vitaly Davidovich. Reviewed-by: johnc Contributed-by: Kaushik Srenevasan <kaushik@twitter.com>
author johnc
date Sat, 06 Oct 2012 01:17:44 -0700
parents da91efe96a93
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1527
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1527
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: 1527
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
26 #include "interpreter/bytecodes.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
27 #include "memory/resourceArea.hpp"
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
28 #include "oops/method.hpp"
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
29 #ifdef TARGET_ARCH_x86
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
30 # include "bytes_x86.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
31 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
32 #ifdef TARGET_ARCH_sparc
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
33 # include "bytes_sparc.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
34 #endif
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
35 #ifdef TARGET_ARCH_zero
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
36 # include "bytes_zero.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1602
diff changeset
37 #endif
2192
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
38 #ifdef TARGET_ARCH_arm
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
39 # include "bytes_arm.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
40 #endif
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
41 #ifdef TARGET_ARCH_ppc
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
42 # include "bytes_ppc.hpp"
b92c45f2bc75 7016023: Enable building ARM and PPC from src/closed repository
bobv
parents: 2142
diff changeset
43 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45
1526
daf617c34be6 6953588: hotspot\src\share\vm\interpreter\bytecodes.cpp doesn't compile with VS2010 on AMD64
prr
parents: 1135
diff changeset
46 #if defined(WIN32) && (defined(_MSC_VER) && (_MSC_VER < 1600))
0
a61af66fc99e Initial load
duke
parents:
diff changeset
47 // Windows AMD64 Compiler Hangs compiling this file
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // unless optimization is off
a61af66fc99e Initial load
duke
parents:
diff changeset
49 #ifdef _M_AMD64
a61af66fc99e Initial load
duke
parents:
diff changeset
50 #pragma optimize ("", off)
a61af66fc99e Initial load
duke
parents:
diff changeset
51 #endif
1526
daf617c34be6 6953588: hotspot\src\share\vm\interpreter\bytecodes.cpp doesn't compile with VS2010 on AMD64
prr
parents: 1135
diff changeset
52 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
53
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 bool Bytecodes::_is_initialized = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
56 const char* Bytecodes::_name [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
57 BasicType Bytecodes::_result_type [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
58 s_char Bytecodes::_depth [Bytecodes::number_of_codes];
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
59 u_char Bytecodes::_lengths [Bytecodes::number_of_codes];
0
a61af66fc99e Initial load
duke
parents:
diff changeset
60 Bytecodes::Code Bytecodes::_java_code [Bytecodes::number_of_codes];
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
61 u_short Bytecodes::_flags [(1<<BitsPerByte)*2];
0
a61af66fc99e Initial load
duke
parents:
diff changeset
62
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
63 #ifdef ASSERT
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
64 bool Bytecodes::check_method(const Method* method, address bcp) {
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
65 return method->contains(bcp);
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
66 }
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
67 #endif
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
68
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
69 bool Bytecodes::check_must_rewrite(Bytecodes::Code code) {
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
70 assert(can_rewrite(code), "post-check only");
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
71
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
72 // Some codes are conditionally rewriting. Look closely at them.
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
73 switch (code) {
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
74 case Bytecodes::_aload_0:
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
75 // Even if RewriteFrequentPairs is turned on,
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
76 // the _aload_0 code might delay its rewrite until
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
77 // a following _getfield rewrites itself.
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
78 return false;
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
79
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
80 case Bytecodes::_lookupswitch:
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
81 return false; // the rewrite is not done by the interpreter
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
82
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
83 case Bytecodes::_new:
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
84 // (Could actually look at the class here, but the profit would be small.)
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
85 return false; // the rewrite is not always done
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
86 }
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
87
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
88 // No other special cases.
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
89 return true;
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
90 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
91
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
92 Bytecodes::Code Bytecodes::code_at(Method* method, int bci) {
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
93 return code_at(method, method->bcp_from(bci));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94 }
a61af66fc99e Initial load
duke
parents:
diff changeset
95
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6266
diff changeset
96 Bytecodes::Code Bytecodes::non_breakpoint_code_at(const Method* method, address bcp) {
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
97 assert(method != NULL, "must have the method for breakpoint conversion");
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
98 assert(method->contains(bcp), "must be valid bcp in method");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
99 return method->orig_bytecode_at(method->bci_from(bcp));
a61af66fc99e Initial load
duke
parents:
diff changeset
100 }
a61af66fc99e Initial load
duke
parents:
diff changeset
101
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
102 int Bytecodes::special_length_at(Bytecodes::Code code, address bcp, address end) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
103 switch (code) {
a61af66fc99e Initial load
duke
parents:
diff changeset
104 case _wide:
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
105 if (end != NULL && bcp + 1 >= end) {
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
106 return -1; // don't read past end of code buffer
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
107 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
108 return wide_length_for(cast(*(bcp + 1)));
a61af66fc99e Initial load
duke
parents:
diff changeset
109 case _tableswitch:
a61af66fc99e Initial load
duke
parents:
diff changeset
110 { address aligned_bcp = (address)round_to((intptr_t)bcp + 1, jintSize);
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
111 if (end != NULL && aligned_bcp + 3*jintSize >= end) {
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
112 return -1; // don't read past end of code buffer
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
113 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
114 jlong lo = (jint)Bytes::get_Java_u4(aligned_bcp + 1*jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
115 jlong hi = (jint)Bytes::get_Java_u4(aligned_bcp + 2*jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
116 jlong len = (aligned_bcp - bcp) + (3 + hi - lo + 1)*jintSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
117 // only return len if it can be represented as a positive int;
a61af66fc99e Initial load
duke
parents:
diff changeset
118 // return -1 otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
119 return (len > 0 && len == (int)len) ? len : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
120 }
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122 case _lookupswitch: // fall through
a61af66fc99e Initial load
duke
parents:
diff changeset
123 case _fast_binaryswitch: // fall through
a61af66fc99e Initial load
duke
parents:
diff changeset
124 case _fast_linearswitch:
a61af66fc99e Initial load
duke
parents:
diff changeset
125 { address aligned_bcp = (address)round_to((intptr_t)bcp + 1, jintSize);
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
126 if (end != NULL && aligned_bcp + 2*jintSize >= end) {
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
127 return -1; // don't read past end of code buffer
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
128 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
129 jlong npairs = (jint)Bytes::get_Java_u4(aligned_bcp + jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
130 jlong len = (aligned_bcp - bcp) + (2 + 2*npairs)*jintSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 // only return len if it can be represented as a positive int;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 // return -1 otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
133 return (len > 0 && len == (int)len) ? len : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
135 }
1570
de91a2f25c7e 6956164: nightly regressions from 6939207
jrose
parents: 1565
diff changeset
136 // Note: Length functions must return <=0 for invalid bytecodes.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
137 return 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
138 }
a61af66fc99e Initial load
duke
parents:
diff changeset
139
a61af66fc99e Initial load
duke
parents:
diff changeset
140 // At a breakpoint instruction, this returns the breakpoint's length,
a61af66fc99e Initial load
duke
parents:
diff changeset
141 // otherwise, it's the same as special_length_at(). This is used by
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // the RawByteCodeStream, which wants to see the actual bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
143 // values (including breakpoint). RawByteCodeStream is used by the
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // verifier when reading in bytecode to verify. Other mechanisms that
a61af66fc99e Initial load
duke
parents:
diff changeset
145 // run at runtime (such as generateOopMaps) need to iterate over the code
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // and don't expect to see breakpoints: they want to see the instruction
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
147 // which was replaced so that they can get the correct length and find
0
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // the next bytecode.
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
149 //
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
150 // 'end' indicates the end of the code buffer, which we should not try to read
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
151 // past.
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
152 int Bytecodes::raw_special_length_at(address bcp, address end) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
153 Code code = code_or_bp_at(bcp);
a61af66fc99e Initial load
duke
parents:
diff changeset
154 if (code == _breakpoint) {
a61af66fc99e Initial load
duke
parents:
diff changeset
155 return 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
156 } else {
2142
8012aa3ccede 4926272: methodOopDesc::method_from_bcp is unsafe
never
parents: 1972
diff changeset
157 return special_length_at(code, bcp, end);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
158 }
a61af66fc99e Initial load
duke
parents:
diff changeset
159 }
a61af66fc99e Initial load
duke
parents:
diff changeset
160
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 void Bytecodes::def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap) {
a61af66fc99e Initial load
duke
parents:
diff changeset
164 def(code, name, format, wide_format, result_type, depth, can_trap, code);
a61af66fc99e Initial load
duke
parents:
diff changeset
165 }
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 void Bytecodes::def(Code code, const char* name, const char* format, const char* wide_format, BasicType result_type, int depth, bool can_trap, Code java_code) {
a61af66fc99e Initial load
duke
parents:
diff changeset
169 assert(wide_format == NULL || format != NULL, "short form must exist if there's a wide form");
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
170 int len = (format != NULL ? (int) strlen(format) : 0);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
171 int wlen = (wide_format != NULL ? (int) strlen(wide_format) : 0);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
172 _name [code] = name;
a61af66fc99e Initial load
duke
parents:
diff changeset
173 _result_type [code] = result_type;
a61af66fc99e Initial load
duke
parents:
diff changeset
174 _depth [code] = depth;
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
175 _lengths [code] = (wlen << 4) | (len & 0xF);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
176 _java_code [code] = java_code;
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
177 int bc_flags = 0;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
178 if (can_trap) bc_flags |= _bc_can_trap;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
179 if (java_code != code) bc_flags |= _bc_can_rewrite;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
180 _flags[(u1)code+0*(1<<BitsPerByte)] = compute_flags(format, bc_flags);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
181 _flags[(u1)code+1*(1<<BitsPerByte)] = compute_flags(wide_format, bc_flags);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
182 assert(is_defined(code) == (format != NULL), "");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
183 assert(wide_is_defined(code) == (wide_format != NULL), "");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
184 assert(length_for(code) == len, "");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
185 assert(wide_length_for(code) == wlen, "");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
186 }
a61af66fc99e Initial load
duke
parents:
diff changeset
187
a61af66fc99e Initial load
duke
parents:
diff changeset
188
a61af66fc99e Initial load
duke
parents:
diff changeset
189 // Format strings interpretation:
a61af66fc99e Initial load
duke
parents:
diff changeset
190 //
a61af66fc99e Initial load
duke
parents:
diff changeset
191 // b: bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // c: signed constant, Java byte-ordering
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
193 // i: unsigned local index, Java byte-ordering (I = native byte ordering)
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
194 // j: unsigned CP cache index, Java byte-ordering (J = native byte ordering)
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
195 // k: unsigned CP index, Java byte-ordering
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
196 // o: branch offset, Java byte-ordering
0
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // _: unused/ignored
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // w: wide bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
199 //
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
200 // Note: The format strings are used for 2 purposes:
0
a61af66fc99e Initial load
duke
parents:
diff changeset
201 // 1. to specify the length of the bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
202 // (= number of characters in format string)
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
203 // 2. to derive bytecode format flags (_fmt_has_k, etc.)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
204 //
a61af66fc99e Initial load
duke
parents:
diff changeset
205 // Note: For bytecodes with variable length, the format string is the empty string.
a61af66fc99e Initial load
duke
parents:
diff changeset
206
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
207 int Bytecodes::compute_flags(const char* format, int more_flags) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
208 if (format == NULL) return 0; // not even more_flags
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
209 int flags = more_flags;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
210 const char* fp = format;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
211 switch (*fp) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
212 case '\0':
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
213 flags |= _fmt_not_simple; // but variable
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
214 break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
215 case 'b':
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
216 flags |= _fmt_not_variable; // but simple
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
217 ++fp; // skip 'b'
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
218 break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
219 case 'w':
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
220 flags |= _fmt_not_variable | _fmt_not_simple;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
221 ++fp; // skip 'w'
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
222 guarantee(*fp == 'b', "wide format must start with 'wb'");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
223 ++fp; // skip 'b'
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
224 break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
225 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
226
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
227 int has_nbo = 0, has_jbo = 0, has_size = 0;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
228 for (;;) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
229 int this_flag = 0;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
230 char fc = *fp++;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
231 switch (fc) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
232 case '\0': // end of string
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
233 assert(flags == (jchar)flags, "change _format_flags");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
234 return flags;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
235
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
236 case '_': continue; // ignore these
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
237
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
238 case 'j': this_flag = _fmt_has_j; has_jbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
239 case 'k': this_flag = _fmt_has_k; has_jbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
240 case 'i': this_flag = _fmt_has_i; has_jbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
241 case 'c': this_flag = _fmt_has_c; has_jbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
242 case 'o': this_flag = _fmt_has_o; has_jbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
243
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
244 // uppercase versions mark native byte order (from Rewriter)
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
245 // actually, only the 'J' case happens currently
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
246 case 'J': this_flag = _fmt_has_j; has_nbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
247 case 'K': this_flag = _fmt_has_k; has_nbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
248 case 'I': this_flag = _fmt_has_i; has_nbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
249 case 'C': this_flag = _fmt_has_c; has_nbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
250 case 'O': this_flag = _fmt_has_o; has_nbo = 1; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
251 default: guarantee(false, "bad char in format");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
252 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
253
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
254 flags |= this_flag;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
255
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
256 guarantee(!(has_jbo && has_nbo), "mixed byte orders in format");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
257 if (has_nbo)
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
258 flags |= _fmt_has_nbo;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
259
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
260 int this_size = 1;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
261 if (*fp == fc) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
262 // advance beyond run of the same characters
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
263 this_size = 2;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
264 while (*++fp == fc) this_size++;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
265 switch (this_size) {
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
266 case 2: flags |= _fmt_has_u2; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
267 case 4: flags |= _fmt_has_u4; break;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
268 default: guarantee(false, "bad rep count in format");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
269 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
270 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
271 guarantee(has_size == 0 || // no field yet
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
272 this_size == has_size || // same size
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
273 this_size < has_size && *fp == '\0', // last field can be short
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
274 "mixed field sizes in format");
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
275 has_size = this_size;
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
276 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
277 }
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
278
0
a61af66fc99e Initial load
duke
parents:
diff changeset
279 void Bytecodes::initialize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
280 if (_is_initialized) return;
a61af66fc99e Initial load
duke
parents:
diff changeset
281 assert(number_of_codes <= 256, "too many bytecodes");
a61af66fc99e Initial load
duke
parents:
diff changeset
282
a61af66fc99e Initial load
duke
parents:
diff changeset
283 // initialize bytecode tables - didn't use static array initializers
a61af66fc99e Initial load
duke
parents:
diff changeset
284 // (such as {}) so we can do additional consistency checks and init-
a61af66fc99e Initial load
duke
parents:
diff changeset
285 // code is independent of actual bytecode numbering.
a61af66fc99e Initial load
duke
parents:
diff changeset
286 //
a61af66fc99e Initial load
duke
parents:
diff changeset
287 // Note 1: NULL for the format string means the bytecode doesn't exist
a61af66fc99e Initial load
duke
parents:
diff changeset
288 // in that form.
a61af66fc99e Initial load
duke
parents:
diff changeset
289 //
a61af66fc99e Initial load
duke
parents:
diff changeset
290 // Note 2: The result type is T_ILLEGAL for bytecodes where the top of stack
a61af66fc99e Initial load
duke
parents:
diff changeset
291 // type after execution is not only determined by the bytecode itself.
a61af66fc99e Initial load
duke
parents:
diff changeset
292
a61af66fc99e Initial load
duke
parents:
diff changeset
293 // Java bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
294 // bytecode bytecode name format wide f. result tp stk traps
a61af66fc99e Initial load
duke
parents:
diff changeset
295 def(_nop , "nop" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
296 def(_aconst_null , "aconst_null" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
297 def(_iconst_m1 , "iconst_m1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
298 def(_iconst_0 , "iconst_0" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
299 def(_iconst_1 , "iconst_1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
300 def(_iconst_2 , "iconst_2" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
301 def(_iconst_3 , "iconst_3" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
302 def(_iconst_4 , "iconst_4" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
303 def(_iconst_5 , "iconst_5" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
304 def(_lconst_0 , "lconst_0" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
305 def(_lconst_1 , "lconst_1" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
306 def(_fconst_0 , "fconst_0" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
307 def(_fconst_1 , "fconst_1" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
308 def(_fconst_2 , "fconst_2" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
309 def(_dconst_0 , "dconst_0" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
310 def(_dconst_1 , "dconst_1" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
311 def(_bipush , "bipush" , "bc" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
312 def(_sipush , "sipush" , "bcc" , NULL , T_INT , 1, false);
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
313 def(_ldc , "ldc" , "bk" , NULL , T_ILLEGAL, 1, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
314 def(_ldc_w , "ldc_w" , "bkk" , NULL , T_ILLEGAL, 1, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
315 def(_ldc2_w , "ldc2_w" , "bkk" , NULL , T_ILLEGAL, 2, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
316 def(_iload , "iload" , "bi" , "wbii" , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
317 def(_lload , "lload" , "bi" , "wbii" , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
318 def(_fload , "fload" , "bi" , "wbii" , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
319 def(_dload , "dload" , "bi" , "wbii" , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
320 def(_aload , "aload" , "bi" , "wbii" , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
321 def(_iload_0 , "iload_0" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
322 def(_iload_1 , "iload_1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
323 def(_iload_2 , "iload_2" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
324 def(_iload_3 , "iload_3" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
325 def(_lload_0 , "lload_0" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
326 def(_lload_1 , "lload_1" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
327 def(_lload_2 , "lload_2" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
328 def(_lload_3 , "lload_3" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
329 def(_fload_0 , "fload_0" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 def(_fload_1 , "fload_1" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
331 def(_fload_2 , "fload_2" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
332 def(_fload_3 , "fload_3" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
333 def(_dload_0 , "dload_0" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
334 def(_dload_1 , "dload_1" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
335 def(_dload_2 , "dload_2" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
336 def(_dload_3 , "dload_3" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
337 def(_aload_0 , "aload_0" , "b" , NULL , T_OBJECT , 1, true ); // rewriting in interpreter
a61af66fc99e Initial load
duke
parents:
diff changeset
338 def(_aload_1 , "aload_1" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
339 def(_aload_2 , "aload_2" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
340 def(_aload_3 , "aload_3" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
341 def(_iaload , "iaload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
342 def(_laload , "laload" , "b" , NULL , T_LONG , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
343 def(_faload , "faload" , "b" , NULL , T_FLOAT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
344 def(_daload , "daload" , "b" , NULL , T_DOUBLE , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
345 def(_aaload , "aaload" , "b" , NULL , T_OBJECT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
346 def(_baload , "baload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
347 def(_caload , "caload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
348 def(_saload , "saload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
349 def(_istore , "istore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
350 def(_lstore , "lstore" , "bi" , "wbii" , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
351 def(_fstore , "fstore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
352 def(_dstore , "dstore" , "bi" , "wbii" , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
353 def(_astore , "astore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
354 def(_istore_0 , "istore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
355 def(_istore_1 , "istore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
356 def(_istore_2 , "istore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
357 def(_istore_3 , "istore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
358 def(_lstore_0 , "lstore_0" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
359 def(_lstore_1 , "lstore_1" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
360 def(_lstore_2 , "lstore_2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
361 def(_lstore_3 , "lstore_3" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
362 def(_fstore_0 , "fstore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
363 def(_fstore_1 , "fstore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
364 def(_fstore_2 , "fstore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
365 def(_fstore_3 , "fstore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
366 def(_dstore_0 , "dstore_0" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
367 def(_dstore_1 , "dstore_1" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
368 def(_dstore_2 , "dstore_2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
369 def(_dstore_3 , "dstore_3" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
370 def(_astore_0 , "astore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
371 def(_astore_1 , "astore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
372 def(_astore_2 , "astore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
373 def(_astore_3 , "astore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
374 def(_iastore , "iastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
375 def(_lastore , "lastore" , "b" , NULL , T_VOID , -4, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
376 def(_fastore , "fastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
377 def(_dastore , "dastore" , "b" , NULL , T_VOID , -4, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
378 def(_aastore , "aastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
379 def(_bastore , "bastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
380 def(_castore , "castore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
381 def(_sastore , "sastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
382 def(_pop , "pop" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
383 def(_pop2 , "pop2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
384 def(_dup , "dup" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
385 def(_dup_x1 , "dup_x1" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
386 def(_dup_x2 , "dup_x2" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
387 def(_dup2 , "dup2" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
388 def(_dup2_x1 , "dup2_x1" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
389 def(_dup2_x2 , "dup2_x2" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
390 def(_swap , "swap" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
391 def(_iadd , "iadd" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
392 def(_ladd , "ladd" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
393 def(_fadd , "fadd" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
394 def(_dadd , "dadd" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
395 def(_isub , "isub" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
396 def(_lsub , "lsub" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
397 def(_fsub , "fsub" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
398 def(_dsub , "dsub" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
399 def(_imul , "imul" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
400 def(_lmul , "lmul" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
401 def(_fmul , "fmul" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
402 def(_dmul , "dmul" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
403 def(_idiv , "idiv" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
404 def(_ldiv , "ldiv" , "b" , NULL , T_LONG , -2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
405 def(_fdiv , "fdiv" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
406 def(_ddiv , "ddiv" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
407 def(_irem , "irem" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
408 def(_lrem , "lrem" , "b" , NULL , T_LONG , -2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
409 def(_frem , "frem" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
410 def(_drem , "drem" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
411 def(_ineg , "ineg" , "b" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
412 def(_lneg , "lneg" , "b" , NULL , T_LONG , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
413 def(_fneg , "fneg" , "b" , NULL , T_FLOAT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
414 def(_dneg , "dneg" , "b" , NULL , T_DOUBLE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
415 def(_ishl , "ishl" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
416 def(_lshl , "lshl" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
417 def(_ishr , "ishr" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
418 def(_lshr , "lshr" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
419 def(_iushr , "iushr" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
420 def(_lushr , "lushr" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
421 def(_iand , "iand" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
422 def(_land , "land" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
423 def(_ior , "ior" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
424 def(_lor , "lor" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
425 def(_ixor , "ixor" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
426 def(_lxor , "lxor" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
427 def(_iinc , "iinc" , "bic" , "wbiicc", T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
428 def(_i2l , "i2l" , "b" , NULL , T_LONG , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
429 def(_i2f , "i2f" , "b" , NULL , T_FLOAT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
430 def(_i2d , "i2d" , "b" , NULL , T_DOUBLE , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
431 def(_l2i , "l2i" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
432 def(_l2f , "l2f" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
433 def(_l2d , "l2d" , "b" , NULL , T_DOUBLE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
434 def(_f2i , "f2i" , "b" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
435 def(_f2l , "f2l" , "b" , NULL , T_LONG , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
436 def(_f2d , "f2d" , "b" , NULL , T_DOUBLE , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
437 def(_d2i , "d2i" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
438 def(_d2l , "d2l" , "b" , NULL , T_LONG , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
439 def(_d2f , "d2f" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
440 def(_i2b , "i2b" , "b" , NULL , T_BYTE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
441 def(_i2c , "i2c" , "b" , NULL , T_CHAR , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
442 def(_i2s , "i2s" , "b" , NULL , T_SHORT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
443 def(_lcmp , "lcmp" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
444 def(_fcmpl , "fcmpl" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
445 def(_fcmpg , "fcmpg" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
446 def(_dcmpl , "dcmpl" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
447 def(_dcmpg , "dcmpg" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
448 def(_ifeq , "ifeq" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
449 def(_ifne , "ifne" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
450 def(_iflt , "iflt" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
451 def(_ifge , "ifge" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
452 def(_ifgt , "ifgt" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
453 def(_ifle , "ifle" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
454 def(_if_icmpeq , "if_icmpeq" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
455 def(_if_icmpne , "if_icmpne" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
456 def(_if_icmplt , "if_icmplt" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
457 def(_if_icmpge , "if_icmpge" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
458 def(_if_icmpgt , "if_icmpgt" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
459 def(_if_icmple , "if_icmple" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
460 def(_if_acmpeq , "if_acmpeq" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
461 def(_if_acmpne , "if_acmpne" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
462 def(_goto , "goto" , "boo" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
463 def(_jsr , "jsr" , "boo" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
464 def(_ret , "ret" , "bi" , "wbii" , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
465 def(_tableswitch , "tableswitch" , "" , NULL , T_VOID , -1, false); // may have backward branches
a61af66fc99e Initial load
duke
parents:
diff changeset
466 def(_lookupswitch , "lookupswitch" , "" , NULL , T_VOID , -1, false); // rewriting in interpreter
a61af66fc99e Initial load
duke
parents:
diff changeset
467 def(_ireturn , "ireturn" , "b" , NULL , T_INT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
468 def(_lreturn , "lreturn" , "b" , NULL , T_LONG , -2, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
469 def(_freturn , "freturn" , "b" , NULL , T_FLOAT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
470 def(_dreturn , "dreturn" , "b" , NULL , T_DOUBLE , -2, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
471 def(_areturn , "areturn" , "b" , NULL , T_OBJECT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
472 def(_return , "return" , "b" , NULL , T_VOID , 0, true);
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
473 def(_getstatic , "getstatic" , "bJJ" , NULL , T_ILLEGAL, 1, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
474 def(_putstatic , "putstatic" , "bJJ" , NULL , T_ILLEGAL, -1, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
475 def(_getfield , "getfield" , "bJJ" , NULL , T_ILLEGAL, 0, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
476 def(_putfield , "putfield" , "bJJ" , NULL , T_ILLEGAL, -2, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
477 def(_invokevirtual , "invokevirtual" , "bJJ" , NULL , T_ILLEGAL, -1, true);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
478 def(_invokespecial , "invokespecial" , "bJJ" , NULL , T_ILLEGAL, -1, true);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
479 def(_invokestatic , "invokestatic" , "bJJ" , NULL , T_ILLEGAL, 0, true);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
480 def(_invokeinterface , "invokeinterface" , "bJJ__", NULL , T_ILLEGAL, -1, true);
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
481 def(_invokedynamic , "invokedynamic" , "bJJJJ", NULL , T_ILLEGAL, 0, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
482 def(_new , "new" , "bkk" , NULL , T_OBJECT , 1, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
483 def(_newarray , "newarray" , "bc" , NULL , T_OBJECT , 0, true );
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
484 def(_anewarray , "anewarray" , "bkk" , NULL , T_OBJECT , 0, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
485 def(_arraylength , "arraylength" , "b" , NULL , T_VOID , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
486 def(_athrow , "athrow" , "b" , NULL , T_VOID , -1, true );
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
487 def(_checkcast , "checkcast" , "bkk" , NULL , T_OBJECT , 0, true );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
488 def(_instanceof , "instanceof" , "bkk" , NULL , T_INT , 0, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
489 def(_monitorenter , "monitorenter" , "b" , NULL , T_VOID , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
490 def(_monitorexit , "monitorexit" , "b" , NULL , T_VOID , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
491 def(_wide , "wide" , "" , NULL , T_VOID , 0, false);
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
492 def(_multianewarray , "multianewarray" , "bkkc" , NULL , T_OBJECT , 1, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
493 def(_ifnull , "ifnull" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
494 def(_ifnonnull , "ifnonnull" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
495 def(_goto_w , "goto_w" , "boooo", NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
496 def(_jsr_w , "jsr_w" , "boooo", NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
497 def(_breakpoint , "breakpoint" , "" , NULL , T_VOID , 0, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
498
a61af66fc99e Initial load
duke
parents:
diff changeset
499 // JVM bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
500 // bytecode bytecode name format wide f. result tp stk traps std code
a61af66fc99e Initial load
duke
parents:
diff changeset
501
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
502 def(_fast_agetfield , "fast_agetfield" , "bJJ" , NULL , T_OBJECT , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
503 def(_fast_bgetfield , "fast_bgetfield" , "bJJ" , NULL , T_INT , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
504 def(_fast_cgetfield , "fast_cgetfield" , "bJJ" , NULL , T_CHAR , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
505 def(_fast_dgetfield , "fast_dgetfield" , "bJJ" , NULL , T_DOUBLE , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
506 def(_fast_fgetfield , "fast_fgetfield" , "bJJ" , NULL , T_FLOAT , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
507 def(_fast_igetfield , "fast_igetfield" , "bJJ" , NULL , T_INT , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
508 def(_fast_lgetfield , "fast_lgetfield" , "bJJ" , NULL , T_LONG , 0, true , _getfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
509 def(_fast_sgetfield , "fast_sgetfield" , "bJJ" , NULL , T_SHORT , 0, true , _getfield );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
510
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
511 def(_fast_aputfield , "fast_aputfield" , "bJJ" , NULL , T_OBJECT , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
512 def(_fast_bputfield , "fast_bputfield" , "bJJ" , NULL , T_INT , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
513 def(_fast_cputfield , "fast_cputfield" , "bJJ" , NULL , T_CHAR , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
514 def(_fast_dputfield , "fast_dputfield" , "bJJ" , NULL , T_DOUBLE , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
515 def(_fast_fputfield , "fast_fputfield" , "bJJ" , NULL , T_FLOAT , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
516 def(_fast_iputfield , "fast_iputfield" , "bJJ" , NULL , T_INT , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
517 def(_fast_lputfield , "fast_lputfield" , "bJJ" , NULL , T_LONG , 0, true , _putfield );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
518 def(_fast_sputfield , "fast_sputfield" , "bJJ" , NULL , T_SHORT , 0, true , _putfield );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
519
a61af66fc99e Initial load
duke
parents:
diff changeset
520 def(_fast_aload_0 , "fast_aload_0" , "b" , NULL , T_OBJECT , 1, true , _aload_0 );
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
521 def(_fast_iaccess_0 , "fast_iaccess_0" , "b_JJ" , NULL , T_INT , 1, true , _aload_0 );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
522 def(_fast_aaccess_0 , "fast_aaccess_0" , "b_JJ" , NULL , T_OBJECT , 1, true , _aload_0 );
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
523 def(_fast_faccess_0 , "fast_faccess_0" , "b_JJ" , NULL , T_OBJECT , 1, true , _aload_0 );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
524
a61af66fc99e Initial load
duke
parents:
diff changeset
525 def(_fast_iload , "fast_iload" , "bi" , NULL , T_INT , 1, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
526 def(_fast_iload2 , "fast_iload2" , "bi_i" , NULL , T_INT , 2, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
527 def(_fast_icaload , "fast_icaload" , "bi_" , NULL , T_INT , 0, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
528
a61af66fc99e Initial load
duke
parents:
diff changeset
529 // Faster method invocation.
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1490
diff changeset
530 def(_fast_invokevfinal , "fast_invokevfinal" , "bJJ" , NULL , T_ILLEGAL, -1, true, _invokevirtual );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
531
a61af66fc99e Initial load
duke
parents:
diff changeset
532 def(_fast_linearswitch , "fast_linearswitch" , "" , NULL , T_VOID , -1, false, _lookupswitch );
a61af66fc99e Initial load
duke
parents:
diff changeset
533 def(_fast_binaryswitch , "fast_binaryswitch" , "" , NULL , T_VOID , -1, false, _lookupswitch );
a61af66fc99e Initial load
duke
parents:
diff changeset
534
a61af66fc99e Initial load
duke
parents:
diff changeset
535 def(_return_register_finalizer , "return_register_finalizer" , "b" , NULL , T_VOID , 0, true, _return);
a61af66fc99e Initial load
duke
parents:
diff changeset
536
6266
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 2192
diff changeset
537 def(_invokehandle , "invokehandle" , "bJJ" , NULL , T_ILLEGAL, -1, true, _invokevirtual );
1d7922586cf6 7023639: JSR 292 method handle invocation needs a fast path for compiled code
twisti
parents: 2192
diff changeset
538
1602
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
539 def(_fast_aldc , "fast_aldc" , "bj" , NULL , T_OBJECT, 1, true, _ldc );
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
540 def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , NULL , T_OBJECT, 1, true, _ldc_w );
136b78722a08 6939203: JSR 292 needs method handle constants
jrose
parents: 1579
diff changeset
541
0
a61af66fc99e Initial load
duke
parents:
diff changeset
542 def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
543
a61af66fc99e Initial load
duke
parents:
diff changeset
544 // platform specific JVM bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
545 pd_initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
546
a61af66fc99e Initial load
duke
parents:
diff changeset
547 // compare can_trap information for each bytecode with the
a61af66fc99e Initial load
duke
parents:
diff changeset
548 // can_trap information for the corresponding base bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
549 // (if a rewritten bytecode can trap, so must the base bytecode)
a61af66fc99e Initial load
duke
parents:
diff changeset
550 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
551 { for (int i = 0; i < number_of_codes; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
552 if (is_defined(i)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
553 Code code = cast(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
554 Code java = java_code(code);
1490
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1135
diff changeset
555 if (can_trap(code) && !can_trap(java))
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1135
diff changeset
556 fatal(err_msg("%s can trap => %s can trap, too", name(code),
f03d0a26bf83 6888954: argument formatting for assert() and friends
jcoomes
parents: 1135
diff changeset
557 name(java)));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
558 }
a61af66fc99e Initial load
duke
parents:
diff changeset
559 }
a61af66fc99e Initial load
duke
parents:
diff changeset
560 }
a61af66fc99e Initial load
duke
parents:
diff changeset
561 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
562
a61af66fc99e Initial load
duke
parents:
diff changeset
563 // initialization successful
a61af66fc99e Initial load
duke
parents:
diff changeset
564 _is_initialized = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
565 }
a61af66fc99e Initial load
duke
parents:
diff changeset
566
a61af66fc99e Initial load
duke
parents:
diff changeset
567
a61af66fc99e Initial load
duke
parents:
diff changeset
568 void bytecodes_init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
569 Bytecodes::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
570 }
a61af66fc99e Initial load
duke
parents:
diff changeset
571
a61af66fc99e Initial load
duke
parents:
diff changeset
572 // Restore optimization
a61af66fc99e Initial load
duke
parents:
diff changeset
573 #ifdef _M_AMD64
a61af66fc99e Initial load
duke
parents:
diff changeset
574 #pragma optimize ("", on)
a61af66fc99e Initial load
duke
parents:
diff changeset
575 #endif