annotate src/share/vm/interpreter/bytecodes.cpp @ 1145:e018e6884bd8

6631166: CMS: better heuristics when combatting fragmentation Summary: Autonomic per-worker free block cache sizing, tunable coalition policies, fixes to per-size block statistics, retuned gain and bandwidth of some feedback loop filters to allow quicker reactivity to abrupt changes in ambient demand, and other heuristics to reduce fragmentation of the CMS old gen. Also tightened some assertions, including those related to locking. Reviewed-by: jmasa
author ysr
date Wed, 23 Dec 2009 09:23:54 -0800
parents bd02caa94611
children e66fd840cb6b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
844
bd02caa94611 6862919: Update copyright year
xdono
parents: 726
diff changeset
2 * Copyright 1997-2009 Sun Microsystems, Inc. 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 *
a61af66fc99e Initial load
duke
parents:
diff changeset
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
a61af66fc99e Initial load
duke
parents:
diff changeset
20 * CA 95054 USA or visit www.sun.com if you need additional information or
a61af66fc99e Initial load
duke
parents:
diff changeset
21 * have any questions.
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
a61af66fc99e Initial load
duke
parents:
diff changeset
25 #include "incls/_precompiled.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
26 #include "incls/_bytecodes.cpp.incl"
a61af66fc99e Initial load
duke
parents:
diff changeset
27
a61af66fc99e Initial load
duke
parents:
diff changeset
28
a61af66fc99e Initial load
duke
parents:
diff changeset
29 // Windows AMD64 Compiler Hangs compiling this file
a61af66fc99e Initial load
duke
parents:
diff changeset
30 // unless optimization is off
a61af66fc99e Initial load
duke
parents:
diff changeset
31 #ifdef _M_AMD64
a61af66fc99e Initial load
duke
parents:
diff changeset
32 #pragma optimize ("", off)
a61af66fc99e Initial load
duke
parents:
diff changeset
33 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
34
a61af66fc99e Initial load
duke
parents:
diff changeset
35
a61af66fc99e Initial load
duke
parents:
diff changeset
36 bool Bytecodes::_is_initialized = false;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 const char* Bytecodes::_name [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
38 const char* Bytecodes::_format [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
39 const char* Bytecodes::_wide_format [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
40 BasicType Bytecodes::_result_type [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
41 s_char Bytecodes::_depth [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
42 u_char Bytecodes::_length [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
43 bool Bytecodes::_can_trap [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
44 Bytecodes::Code Bytecodes::_java_code [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
45 bool Bytecodes::_can_rewrite [Bytecodes::number_of_codes];
a61af66fc99e Initial load
duke
parents:
diff changeset
46
a61af66fc99e Initial load
duke
parents:
diff changeset
47
a61af66fc99e Initial load
duke
parents:
diff changeset
48 Bytecodes::Code Bytecodes::code_at(methodOop method, int bci) {
a61af66fc99e Initial load
duke
parents:
diff changeset
49 return code_at(method->bcp_from(bci), method);
a61af66fc99e Initial load
duke
parents:
diff changeset
50 }
a61af66fc99e Initial load
duke
parents:
diff changeset
51
a61af66fc99e Initial load
duke
parents:
diff changeset
52 Bytecodes::Code Bytecodes::non_breakpoint_code_at(address bcp, methodOop method) {
a61af66fc99e Initial load
duke
parents:
diff changeset
53 if (method == NULL) method = methodOopDesc::method_from_bcp(bcp);
a61af66fc99e Initial load
duke
parents:
diff changeset
54 return method->orig_bytecode_at(method->bci_from(bcp));
a61af66fc99e Initial load
duke
parents:
diff changeset
55 }
a61af66fc99e Initial load
duke
parents:
diff changeset
56
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
57 int Bytecodes::special_length_at(address bcp, address end) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
58 Code code = code_at(bcp);
a61af66fc99e Initial load
duke
parents:
diff changeset
59 switch (code) {
a61af66fc99e Initial load
duke
parents:
diff changeset
60 case _wide:
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
61 if (end != NULL && bcp + 1 >= end) {
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
62 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
63 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
64 return wide_length_for(cast(*(bcp + 1)));
a61af66fc99e Initial load
duke
parents:
diff changeset
65 case _tableswitch:
a61af66fc99e Initial load
duke
parents:
diff changeset
66 { 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
67 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
68 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
69 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
70 jlong lo = (jint)Bytes::get_Java_u4(aligned_bcp + 1*jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
71 jlong hi = (jint)Bytes::get_Java_u4(aligned_bcp + 2*jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
72 jlong len = (aligned_bcp - bcp) + (3 + hi - lo + 1)*jintSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
73 // only return len if it can be represented as a positive int;
a61af66fc99e Initial load
duke
parents:
diff changeset
74 // return -1 otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
75 return (len > 0 && len == (int)len) ? len : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
76 }
a61af66fc99e Initial load
duke
parents:
diff changeset
77
a61af66fc99e Initial load
duke
parents:
diff changeset
78 case _lookupswitch: // fall through
a61af66fc99e Initial load
duke
parents:
diff changeset
79 case _fast_binaryswitch: // fall through
a61af66fc99e Initial load
duke
parents:
diff changeset
80 case _fast_linearswitch:
a61af66fc99e Initial load
duke
parents:
diff changeset
81 { 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
82 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
83 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
84 }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
85 jlong npairs = (jint)Bytes::get_Java_u4(aligned_bcp + jintSize);
a61af66fc99e Initial load
duke
parents:
diff changeset
86 jlong len = (aligned_bcp - bcp) + (2 + 2*npairs)*jintSize;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 // only return len if it can be represented as a positive int;
a61af66fc99e Initial load
duke
parents:
diff changeset
88 // return -1 otherwise
a61af66fc99e Initial load
duke
parents:
diff changeset
89 return (len > 0 && len == (int)len) ? len : -1;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 }
a61af66fc99e Initial load
duke
parents:
diff changeset
91 }
a61af66fc99e Initial load
duke
parents:
diff changeset
92 return 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
93 }
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 // At a breakpoint instruction, this returns the breakpoint's length,
a61af66fc99e Initial load
duke
parents:
diff changeset
96 // otherwise, it's the same as special_length_at(). This is used by
a61af66fc99e Initial load
duke
parents:
diff changeset
97 // the RawByteCodeStream, which wants to see the actual bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
98 // values (including breakpoint). RawByteCodeStream is used by the
a61af66fc99e Initial load
duke
parents:
diff changeset
99 // verifier when reading in bytecode to verify. Other mechanisms that
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // run at runtime (such as generateOopMaps) need to iterate over the code
a61af66fc99e Initial load
duke
parents:
diff changeset
101 // 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
102 // which was replaced so that they can get the correct length and find
0
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // the next bytecode.
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
104 //
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
105 // '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
106 // past.
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
107 int Bytecodes::raw_special_length_at(address bcp, address end) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
108 Code code = code_or_bp_at(bcp);
a61af66fc99e Initial load
duke
parents:
diff changeset
109 if (code == _breakpoint) {
a61af66fc99e Initial load
duke
parents:
diff changeset
110 return 1;
a61af66fc99e Initial load
duke
parents:
diff changeset
111 } else {
413
c7ec737733a6 6756528: Bytecodes::special_length_at reads past end of code buffer
kamg
parents: 0
diff changeset
112 return special_length_at(bcp, end);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
113 }
a61af66fc99e Initial load
duke
parents:
diff changeset
114 }
a61af66fc99e Initial load
duke
parents:
diff changeset
115
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117
a61af66fc99e Initial load
duke
parents:
diff changeset
118 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
119 def(code, name, format, wide_format, result_type, depth, can_trap, code);
a61af66fc99e Initial load
duke
parents:
diff changeset
120 }
a61af66fc99e Initial load
duke
parents:
diff changeset
121
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 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
124 assert(wide_format == NULL || format != NULL, "short form must exist if there's a wide form");
a61af66fc99e Initial load
duke
parents:
diff changeset
125 _name [code] = name;
a61af66fc99e Initial load
duke
parents:
diff changeset
126 _format [code] = format;
a61af66fc99e Initial load
duke
parents:
diff changeset
127 _wide_format [code] = wide_format;
a61af66fc99e Initial load
duke
parents:
diff changeset
128 _result_type [code] = result_type;
a61af66fc99e Initial load
duke
parents:
diff changeset
129 _depth [code] = depth;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 _can_trap [code] = can_trap;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 _length [code] = format != NULL ? (u_char)strlen(format) : 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 _java_code [code] = java_code;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 if (java_code != code) _can_rewrite[java_code] = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 }
a61af66fc99e Initial load
duke
parents:
diff changeset
135
a61af66fc99e Initial load
duke
parents:
diff changeset
136
a61af66fc99e Initial load
duke
parents:
diff changeset
137 // Format strings interpretation:
a61af66fc99e Initial load
duke
parents:
diff changeset
138 //
a61af66fc99e Initial load
duke
parents:
diff changeset
139 // b: bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
140 // c: signed constant, Java byte-ordering
a61af66fc99e Initial load
duke
parents:
diff changeset
141 // i: unsigned index , Java byte-ordering
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // j: unsigned index , native byte-ordering
a61af66fc99e Initial load
duke
parents:
diff changeset
143 // o: branch offset , Java byte-ordering
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // _: unused/ignored
a61af66fc99e Initial load
duke
parents:
diff changeset
145 // w: wide bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
146 //
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // Note: Right now the format strings are used for 2 purposes:
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // 1. to specify the length of the bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // (= number of characters in format string)
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // 2. to specify the bytecode attributes
a61af66fc99e Initial load
duke
parents:
diff changeset
151 //
a61af66fc99e Initial load
duke
parents:
diff changeset
152 // The bytecode attributes are currently used only for bytecode tracing
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // (see BytecodeTracer); thus if more specific format information is
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // used, one would also have to adjust the bytecode tracer.
a61af66fc99e Initial load
duke
parents:
diff changeset
155 //
a61af66fc99e Initial load
duke
parents:
diff changeset
156 // Note: For bytecodes with variable length, the format string is the empty string.
a61af66fc99e Initial load
duke
parents:
diff changeset
157
a61af66fc99e Initial load
duke
parents:
diff changeset
158 void Bytecodes::initialize() {
a61af66fc99e Initial load
duke
parents:
diff changeset
159 if (_is_initialized) return;
a61af66fc99e Initial load
duke
parents:
diff changeset
160 assert(number_of_codes <= 256, "too many bytecodes");
a61af66fc99e Initial load
duke
parents:
diff changeset
161
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // initialize bytecode tables - didn't use static array initializers
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // (such as {}) so we can do additional consistency checks and init-
a61af66fc99e Initial load
duke
parents:
diff changeset
164 // code is independent of actual bytecode numbering.
a61af66fc99e Initial load
duke
parents:
diff changeset
165 //
a61af66fc99e Initial load
duke
parents:
diff changeset
166 // Note 1: NULL for the format string means the bytecode doesn't exist
a61af66fc99e Initial load
duke
parents:
diff changeset
167 // in that form.
a61af66fc99e Initial load
duke
parents:
diff changeset
168 //
a61af66fc99e Initial load
duke
parents:
diff changeset
169 // Note 2: The result type is T_ILLEGAL for bytecodes where the top of stack
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // type after execution is not only determined by the bytecode itself.
a61af66fc99e Initial load
duke
parents:
diff changeset
171
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Java bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // bytecode bytecode name format wide f. result tp stk traps
a61af66fc99e Initial load
duke
parents:
diff changeset
174 def(_nop , "nop" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
175 def(_aconst_null , "aconst_null" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
176 def(_iconst_m1 , "iconst_m1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
177 def(_iconst_0 , "iconst_0" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
178 def(_iconst_1 , "iconst_1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 def(_iconst_2 , "iconst_2" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
180 def(_iconst_3 , "iconst_3" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
181 def(_iconst_4 , "iconst_4" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
182 def(_iconst_5 , "iconst_5" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
183 def(_lconst_0 , "lconst_0" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
184 def(_lconst_1 , "lconst_1" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
185 def(_fconst_0 , "fconst_0" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
186 def(_fconst_1 , "fconst_1" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
187 def(_fconst_2 , "fconst_2" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
188 def(_dconst_0 , "dconst_0" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
189 def(_dconst_1 , "dconst_1" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
190 def(_bipush , "bipush" , "bc" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
191 def(_sipush , "sipush" , "bcc" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
192 def(_ldc , "ldc" , "bi" , NULL , T_ILLEGAL, 1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
193 def(_ldc_w , "ldc_w" , "bii" , NULL , T_ILLEGAL, 1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
194 def(_ldc2_w , "ldc2_w" , "bii" , NULL , T_ILLEGAL, 2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
195 def(_iload , "iload" , "bi" , "wbii" , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
196 def(_lload , "lload" , "bi" , "wbii" , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
197 def(_fload , "fload" , "bi" , "wbii" , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
198 def(_dload , "dload" , "bi" , "wbii" , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
199 def(_aload , "aload" , "bi" , "wbii" , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 def(_iload_0 , "iload_0" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
201 def(_iload_1 , "iload_1" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
202 def(_iload_2 , "iload_2" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
203 def(_iload_3 , "iload_3" , "b" , NULL , T_INT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 def(_lload_0 , "lload_0" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
205 def(_lload_1 , "lload_1" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
206 def(_lload_2 , "lload_2" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
207 def(_lload_3 , "lload_3" , "b" , NULL , T_LONG , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
208 def(_fload_0 , "fload_0" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
209 def(_fload_1 , "fload_1" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
210 def(_fload_2 , "fload_2" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 def(_fload_3 , "fload_3" , "b" , NULL , T_FLOAT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 def(_dload_0 , "dload_0" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 def(_dload_1 , "dload_1" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
214 def(_dload_2 , "dload_2" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
215 def(_dload_3 , "dload_3" , "b" , NULL , T_DOUBLE , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
216 def(_aload_0 , "aload_0" , "b" , NULL , T_OBJECT , 1, true ); // rewriting in interpreter
a61af66fc99e Initial load
duke
parents:
diff changeset
217 def(_aload_1 , "aload_1" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
218 def(_aload_2 , "aload_2" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
219 def(_aload_3 , "aload_3" , "b" , NULL , T_OBJECT , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
220 def(_iaload , "iaload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
221 def(_laload , "laload" , "b" , NULL , T_LONG , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
222 def(_faload , "faload" , "b" , NULL , T_FLOAT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
223 def(_daload , "daload" , "b" , NULL , T_DOUBLE , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
224 def(_aaload , "aaload" , "b" , NULL , T_OBJECT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
225 def(_baload , "baload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
226 def(_caload , "caload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
227 def(_saload , "saload" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
228 def(_istore , "istore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
229 def(_lstore , "lstore" , "bi" , "wbii" , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
230 def(_fstore , "fstore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
231 def(_dstore , "dstore" , "bi" , "wbii" , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
232 def(_astore , "astore" , "bi" , "wbii" , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
233 def(_istore_0 , "istore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
234 def(_istore_1 , "istore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
235 def(_istore_2 , "istore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
236 def(_istore_3 , "istore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
237 def(_lstore_0 , "lstore_0" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
238 def(_lstore_1 , "lstore_1" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
239 def(_lstore_2 , "lstore_2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
240 def(_lstore_3 , "lstore_3" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
241 def(_fstore_0 , "fstore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
242 def(_fstore_1 , "fstore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
243 def(_fstore_2 , "fstore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
244 def(_fstore_3 , "fstore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
245 def(_dstore_0 , "dstore_0" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
246 def(_dstore_1 , "dstore_1" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
247 def(_dstore_2 , "dstore_2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
248 def(_dstore_3 , "dstore_3" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
249 def(_astore_0 , "astore_0" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
250 def(_astore_1 , "astore_1" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
251 def(_astore_2 , "astore_2" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
252 def(_astore_3 , "astore_3" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
253 def(_iastore , "iastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
254 def(_lastore , "lastore" , "b" , NULL , T_VOID , -4, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
255 def(_fastore , "fastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
256 def(_dastore , "dastore" , "b" , NULL , T_VOID , -4, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
257 def(_aastore , "aastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
258 def(_bastore , "bastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
259 def(_castore , "castore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
260 def(_sastore , "sastore" , "b" , NULL , T_VOID , -3, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
261 def(_pop , "pop" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
262 def(_pop2 , "pop2" , "b" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
263 def(_dup , "dup" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
264 def(_dup_x1 , "dup_x1" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
265 def(_dup_x2 , "dup_x2" , "b" , NULL , T_VOID , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
266 def(_dup2 , "dup2" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
267 def(_dup2_x1 , "dup2_x1" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
268 def(_dup2_x2 , "dup2_x2" , "b" , NULL , T_VOID , 2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
269 def(_swap , "swap" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
270 def(_iadd , "iadd" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
271 def(_ladd , "ladd" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
272 def(_fadd , "fadd" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
273 def(_dadd , "dadd" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
274 def(_isub , "isub" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
275 def(_lsub , "lsub" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
276 def(_fsub , "fsub" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
277 def(_dsub , "dsub" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
278 def(_imul , "imul" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
279 def(_lmul , "lmul" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
280 def(_fmul , "fmul" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
281 def(_dmul , "dmul" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
282 def(_idiv , "idiv" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
283 def(_ldiv , "ldiv" , "b" , NULL , T_LONG , -2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
284 def(_fdiv , "fdiv" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
285 def(_ddiv , "ddiv" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
286 def(_irem , "irem" , "b" , NULL , T_INT , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
287 def(_lrem , "lrem" , "b" , NULL , T_LONG , -2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
288 def(_frem , "frem" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
289 def(_drem , "drem" , "b" , NULL , T_DOUBLE , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
290 def(_ineg , "ineg" , "b" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
291 def(_lneg , "lneg" , "b" , NULL , T_LONG , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
292 def(_fneg , "fneg" , "b" , NULL , T_FLOAT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
293 def(_dneg , "dneg" , "b" , NULL , T_DOUBLE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
294 def(_ishl , "ishl" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
295 def(_lshl , "lshl" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
296 def(_ishr , "ishr" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
297 def(_lshr , "lshr" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
298 def(_iushr , "iushr" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
299 def(_lushr , "lushr" , "b" , NULL , T_LONG , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
300 def(_iand , "iand" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
301 def(_land , "land" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
302 def(_ior , "ior" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
303 def(_lor , "lor" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
304 def(_ixor , "ixor" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
305 def(_lxor , "lxor" , "b" , NULL , T_LONG , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
306 def(_iinc , "iinc" , "bic" , "wbiicc", T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
307 def(_i2l , "i2l" , "b" , NULL , T_LONG , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
308 def(_i2f , "i2f" , "b" , NULL , T_FLOAT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
309 def(_i2d , "i2d" , "b" , NULL , T_DOUBLE , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
310 def(_l2i , "l2i" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
311 def(_l2f , "l2f" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
312 def(_l2d , "l2d" , "b" , NULL , T_DOUBLE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
313 def(_f2i , "f2i" , "b" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
314 def(_f2l , "f2l" , "b" , NULL , T_LONG , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
315 def(_f2d , "f2d" , "b" , NULL , T_DOUBLE , 1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
316 def(_d2i , "d2i" , "b" , NULL , T_INT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
317 def(_d2l , "d2l" , "b" , NULL , T_LONG , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
318 def(_d2f , "d2f" , "b" , NULL , T_FLOAT , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
319 def(_i2b , "i2b" , "b" , NULL , T_BYTE , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
320 def(_i2c , "i2c" , "b" , NULL , T_CHAR , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
321 def(_i2s , "i2s" , "b" , NULL , T_SHORT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
322 def(_lcmp , "lcmp" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
323 def(_fcmpl , "fcmpl" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
324 def(_fcmpg , "fcmpg" , "b" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
325 def(_dcmpl , "dcmpl" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
326 def(_dcmpg , "dcmpg" , "b" , NULL , T_VOID , -3, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
327 def(_ifeq , "ifeq" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
328 def(_ifne , "ifne" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
329 def(_iflt , "iflt" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 def(_ifge , "ifge" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
331 def(_ifgt , "ifgt" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
332 def(_ifle , "ifle" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
333 def(_if_icmpeq , "if_icmpeq" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
334 def(_if_icmpne , "if_icmpne" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
335 def(_if_icmplt , "if_icmplt" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
336 def(_if_icmpge , "if_icmpge" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
337 def(_if_icmpgt , "if_icmpgt" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
338 def(_if_icmple , "if_icmple" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
339 def(_if_acmpeq , "if_acmpeq" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
340 def(_if_acmpne , "if_acmpne" , "boo" , NULL , T_VOID , -2, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
341 def(_goto , "goto" , "boo" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
342 def(_jsr , "jsr" , "boo" , NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
343 def(_ret , "ret" , "bi" , "wbii" , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
344 def(_tableswitch , "tableswitch" , "" , NULL , T_VOID , -1, false); // may have backward branches
a61af66fc99e Initial load
duke
parents:
diff changeset
345 def(_lookupswitch , "lookupswitch" , "" , NULL , T_VOID , -1, false); // rewriting in interpreter
a61af66fc99e Initial load
duke
parents:
diff changeset
346 def(_ireturn , "ireturn" , "b" , NULL , T_INT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
347 def(_lreturn , "lreturn" , "b" , NULL , T_LONG , -2, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
348 def(_freturn , "freturn" , "b" , NULL , T_FLOAT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
349 def(_dreturn , "dreturn" , "b" , NULL , T_DOUBLE , -2, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
350 def(_areturn , "areturn" , "b" , NULL , T_OBJECT , -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
351 def(_return , "return" , "b" , NULL , T_VOID , 0, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
352 def(_getstatic , "getstatic" , "bjj" , NULL , T_ILLEGAL, 1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
353 def(_putstatic , "putstatic" , "bjj" , NULL , T_ILLEGAL, -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
354 def(_getfield , "getfield" , "bjj" , NULL , T_ILLEGAL, 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
355 def(_putfield , "putfield" , "bjj" , NULL , T_ILLEGAL, -2, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
356 def(_invokevirtual , "invokevirtual" , "bjj" , NULL , T_ILLEGAL, -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
357 def(_invokespecial , "invokespecial" , "bjj" , NULL , T_ILLEGAL, -1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
358 def(_invokestatic , "invokestatic" , "bjj" , NULL , T_ILLEGAL, 0, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
359 def(_invokeinterface , "invokeinterface" , "bjj__", NULL , T_ILLEGAL, -1, true);
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 470
diff changeset
360 def(_invokedynamic , "invokedynamic" , "bjjjj", NULL , T_ILLEGAL, -1, true );
0
a61af66fc99e Initial load
duke
parents:
diff changeset
361 def(_new , "new" , "bii" , NULL , T_OBJECT , 1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
362 def(_newarray , "newarray" , "bc" , NULL , T_OBJECT , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
363 def(_anewarray , "anewarray" , "bii" , NULL , T_OBJECT , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
364 def(_arraylength , "arraylength" , "b" , NULL , T_VOID , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
365 def(_athrow , "athrow" , "b" , NULL , T_VOID , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
366 def(_checkcast , "checkcast" , "bii" , NULL , T_OBJECT , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
367 def(_instanceof , "instanceof" , "bii" , NULL , T_INT , 0, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
368 def(_monitorenter , "monitorenter" , "b" , NULL , T_VOID , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
369 def(_monitorexit , "monitorexit" , "b" , NULL , T_VOID , -1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
370 def(_wide , "wide" , "" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
371 def(_multianewarray , "multianewarray" , "biic" , NULL , T_OBJECT , 1, true );
a61af66fc99e Initial load
duke
parents:
diff changeset
372 def(_ifnull , "ifnull" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
373 def(_ifnonnull , "ifnonnull" , "boo" , NULL , T_VOID , -1, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
374 def(_goto_w , "goto_w" , "boooo", NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
375 def(_jsr_w , "jsr_w" , "boooo", NULL , T_INT , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
376 def(_breakpoint , "breakpoint" , "" , NULL , T_VOID , 0, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
377
a61af66fc99e Initial load
duke
parents:
diff changeset
378 // JVM bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
379 // bytecode bytecode name format wide f. result tp stk traps std code
a61af66fc99e Initial load
duke
parents:
diff changeset
380
a61af66fc99e Initial load
duke
parents:
diff changeset
381 def(_fast_agetfield , "fast_agetfield" , "bjj" , NULL , T_OBJECT , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
382 def(_fast_bgetfield , "fast_bgetfield" , "bjj" , NULL , T_INT , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
383 def(_fast_cgetfield , "fast_cgetfield" , "bjj" , NULL , T_CHAR , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
384 def(_fast_dgetfield , "fast_dgetfield" , "bjj" , NULL , T_DOUBLE , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
385 def(_fast_fgetfield , "fast_fgetfield" , "bjj" , NULL , T_FLOAT , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
386 def(_fast_igetfield , "fast_igetfield" , "bjj" , NULL , T_INT , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
387 def(_fast_lgetfield , "fast_lgetfield" , "bjj" , NULL , T_LONG , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
388 def(_fast_sgetfield , "fast_sgetfield" , "bjj" , NULL , T_SHORT , 0, true , _getfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
389
a61af66fc99e Initial load
duke
parents:
diff changeset
390 def(_fast_aputfield , "fast_aputfield" , "bjj" , NULL , T_OBJECT , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
391 def(_fast_bputfield , "fast_bputfield" , "bjj" , NULL , T_INT , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
392 def(_fast_cputfield , "fast_cputfield" , "bjj" , NULL , T_CHAR , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
393 def(_fast_dputfield , "fast_dputfield" , "bjj" , NULL , T_DOUBLE , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
394 def(_fast_fputfield , "fast_fputfield" , "bjj" , NULL , T_FLOAT , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
395 def(_fast_iputfield , "fast_iputfield" , "bjj" , NULL , T_INT , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
396 def(_fast_lputfield , "fast_lputfield" , "bjj" , NULL , T_LONG , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
397 def(_fast_sputfield , "fast_sputfield" , "bjj" , NULL , T_SHORT , 0, true , _putfield );
a61af66fc99e Initial load
duke
parents:
diff changeset
398
a61af66fc99e Initial load
duke
parents:
diff changeset
399 def(_fast_aload_0 , "fast_aload_0" , "b" , NULL , T_OBJECT , 1, true , _aload_0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
400 def(_fast_iaccess_0 , "fast_iaccess_0" , "b_jj" , NULL , T_INT , 1, true , _aload_0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
401 def(_fast_aaccess_0 , "fast_aaccess_0" , "b_jj" , NULL , T_OBJECT , 1, true , _aload_0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
402 def(_fast_faccess_0 , "fast_faccess_0" , "b_jj" , NULL , T_OBJECT , 1, true , _aload_0 );
a61af66fc99e Initial load
duke
parents:
diff changeset
403
a61af66fc99e Initial load
duke
parents:
diff changeset
404 def(_fast_iload , "fast_iload" , "bi" , NULL , T_INT , 1, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
405 def(_fast_iload2 , "fast_iload2" , "bi_i" , NULL , T_INT , 2, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
406 def(_fast_icaload , "fast_icaload" , "bi_" , NULL , T_INT , 0, false, _iload);
a61af66fc99e Initial load
duke
parents:
diff changeset
407
a61af66fc99e Initial load
duke
parents:
diff changeset
408 // Faster method invocation.
a61af66fc99e Initial load
duke
parents:
diff changeset
409 def(_fast_invokevfinal , "fast_invokevfinal" , "bjj" , NULL , T_ILLEGAL, -1, true, _invokevirtual );
a61af66fc99e Initial load
duke
parents:
diff changeset
410
a61af66fc99e Initial load
duke
parents:
diff changeset
411 def(_fast_linearswitch , "fast_linearswitch" , "" , NULL , T_VOID , -1, false, _lookupswitch );
a61af66fc99e Initial load
duke
parents:
diff changeset
412 def(_fast_binaryswitch , "fast_binaryswitch" , "" , NULL , T_VOID , -1, false, _lookupswitch );
a61af66fc99e Initial load
duke
parents:
diff changeset
413
a61af66fc99e Initial load
duke
parents:
diff changeset
414 def(_return_register_finalizer , "return_register_finalizer" , "b" , NULL , T_VOID , 0, true, _return);
a61af66fc99e Initial load
duke
parents:
diff changeset
415
a61af66fc99e Initial load
duke
parents:
diff changeset
416 def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , NULL , T_VOID , 0, false);
a61af66fc99e Initial load
duke
parents:
diff changeset
417
a61af66fc99e Initial load
duke
parents:
diff changeset
418 // platform specific JVM bytecodes
a61af66fc99e Initial load
duke
parents:
diff changeset
419 pd_initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
420
a61af66fc99e Initial load
duke
parents:
diff changeset
421 // compare can_trap information for each bytecode with the
a61af66fc99e Initial load
duke
parents:
diff changeset
422 // can_trap information for the corresponding base bytecode
a61af66fc99e Initial load
duke
parents:
diff changeset
423 // (if a rewritten bytecode can trap, so must the base bytecode)
a61af66fc99e Initial load
duke
parents:
diff changeset
424 #ifdef ASSERT
a61af66fc99e Initial load
duke
parents:
diff changeset
425 { for (int i = 0; i < number_of_codes; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
426 if (is_defined(i)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
427 Code code = cast(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
428 Code java = java_code(code);
a61af66fc99e Initial load
duke
parents:
diff changeset
429 if (can_trap(code) && !can_trap(java)) fatal2("%s can trap => %s can trap, too", name(code), name(java));
a61af66fc99e Initial load
duke
parents:
diff changeset
430 }
a61af66fc99e Initial load
duke
parents:
diff changeset
431 }
a61af66fc99e Initial load
duke
parents:
diff changeset
432 }
a61af66fc99e Initial load
duke
parents:
diff changeset
433 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
434
a61af66fc99e Initial load
duke
parents:
diff changeset
435 // initialization successful
a61af66fc99e Initial load
duke
parents:
diff changeset
436 _is_initialized = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
437 }
a61af66fc99e Initial load
duke
parents:
diff changeset
438
a61af66fc99e Initial load
duke
parents:
diff changeset
439
a61af66fc99e Initial load
duke
parents:
diff changeset
440 void bytecodes_init() {
a61af66fc99e Initial load
duke
parents:
diff changeset
441 Bytecodes::initialize();
a61af66fc99e Initial load
duke
parents:
diff changeset
442 }
a61af66fc99e Initial load
duke
parents:
diff changeset
443
a61af66fc99e Initial load
duke
parents:
diff changeset
444 // Restore optimization
a61af66fc99e Initial load
duke
parents:
diff changeset
445 #ifdef _M_AMD64
a61af66fc99e Initial load
duke
parents:
diff changeset
446 #pragma optimize ("", on)
a61af66fc99e Initial load
duke
parents:
diff changeset
447 #endif