annotate src/cpu/x86/vm/interp_masm_x86_32.hpp @ 3096:8073f5ad1d87

IdealGraphVisualizer: Rename predecessors to "Nodes Above" and successors to "Nodes Below" and actions "Expand Predecessors" and "Expand Successors" to "Expand Above" and "Expand Below" to avoid ambiguity with the Graal concept of successors and predecessors
author Peter Hofer <peter.hofer@jku.at>
date Wed, 29 Jun 2011 18:27:14 +0200
parents f95d63e2154a
children 2e038ad0c1d0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1506
diff changeset
2 * Copyright (c) 1997, 2010, 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: 1506
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1506
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: 1506
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: 1783
diff changeset
25 #ifndef CPU_X86_VM_INTERP_MASM_X86_32_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
26 #define CPU_X86_VM_INTERP_MASM_X86_32_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
28 #include "assembler_x86.inline.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
29 #include "interpreter/invocationCounter.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
30
0
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // This file specializes the assember with interpreter-specific macros
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34 class InterpreterMacroAssembler: public MacroAssembler {
a61af66fc99e Initial load
duke
parents:
diff changeset
35 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
36 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
37 // Interpreter specific version of call_VM_base
a61af66fc99e Initial load
duke
parents:
diff changeset
38 virtual void call_VM_leaf_base(
a61af66fc99e Initial load
duke
parents:
diff changeset
39 address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
40 int number_of_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
41 );
a61af66fc99e Initial load
duke
parents:
diff changeset
42
a61af66fc99e Initial load
duke
parents:
diff changeset
43 virtual void call_VM_base(
a61af66fc99e Initial load
duke
parents:
diff changeset
44 Register oop_result,
a61af66fc99e Initial load
duke
parents:
diff changeset
45 Register java_thread,
a61af66fc99e Initial load
duke
parents:
diff changeset
46 Register last_java_sp,
a61af66fc99e Initial load
duke
parents:
diff changeset
47 address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
48 int number_of_arguments,
a61af66fc99e Initial load
duke
parents:
diff changeset
49 bool check_exceptions
a61af66fc99e Initial load
duke
parents:
diff changeset
50 );
a61af66fc99e Initial load
duke
parents:
diff changeset
51
a61af66fc99e Initial load
duke
parents:
diff changeset
52 virtual void check_and_handle_popframe(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
53 virtual void check_and_handle_earlyret(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 // base routine for all dispatches
a61af66fc99e Initial load
duke
parents:
diff changeset
56 void dispatch_base(TosState state, address* table, bool verifyoop = true);
a61af66fc99e Initial load
duke
parents:
diff changeset
57 #endif /* CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
58
a61af66fc99e Initial load
duke
parents:
diff changeset
59 public:
a61af66fc99e Initial load
duke
parents:
diff changeset
60 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code) {}
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 void load_earlyret_value(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 // Interpreter-specific registers
a61af66fc99e Initial load
duke
parents:
diff changeset
65 #ifdef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
66 void save_bcp() { /* not needed in c++ interpreter and harmless */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
67 void restore_bcp() { /* not needed in c++ interpreter and harmless */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
68
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // Helpers for runtime call arguments/results
a61af66fc99e Initial load
duke
parents:
diff changeset
70 void get_method(Register reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
71
a61af66fc99e Initial load
duke
parents:
diff changeset
72 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
73
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
74 void save_bcp() { movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), rsi); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
75 void restore_bcp() { movptr(rsi, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize)); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
76 void restore_locals() { movptr(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
77
a61af66fc99e Initial load
duke
parents:
diff changeset
78 // Helpers for runtime call arguments/results
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
79 void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
80 void get_constant_pool(Register reg) { get_method(reg); movptr(reg, Address(reg, methodOopDesc::constants_offset())); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
81 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes())); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
82 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 }
a61af66fc99e Initial load
duke
parents:
diff changeset
84 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
85 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size = sizeof(u2));
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
86 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
87 void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 // Expression stack
a61af66fc99e Initial load
duke
parents:
diff changeset
90 void f2ieee(); // truncate ftos to 32bits
a61af66fc99e Initial load
duke
parents:
diff changeset
91 void d2ieee(); // truncate dtos to 64bits
a61af66fc99e Initial load
duke
parents:
diff changeset
92
a61af66fc99e Initial load
duke
parents:
diff changeset
93 void pop_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
94 void pop_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
95 void pop_l(Register lo = rax, Register hi = rdx);
a61af66fc99e Initial load
duke
parents:
diff changeset
96 void pop_f();
a61af66fc99e Initial load
duke
parents:
diff changeset
97 void pop_d();
a61af66fc99e Initial load
duke
parents:
diff changeset
98
a61af66fc99e Initial load
duke
parents:
diff changeset
99 void push_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
100 void push_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
101 void push_l(Register lo = rax, Register hi = rdx);
a61af66fc99e Initial load
duke
parents:
diff changeset
102 void push_d(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
103 void push_f();
a61af66fc99e Initial load
duke
parents:
diff changeset
104
a61af66fc99e Initial load
duke
parents:
diff changeset
105 void pop(TosState state); // transition vtos -> state
a61af66fc99e Initial load
duke
parents:
diff changeset
106 void push(TosState state); // transition state -> vtos
a61af66fc99e Initial load
duke
parents:
diff changeset
107
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
108 void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
109
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
110 void push(Register r ) { ((MacroAssembler*)this)->push(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
111 void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
112
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
113 // These are dummies to prevent surprise implicit conversions to Register
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
114 void pop(void* v ); // Add unimplemented ambiguous method
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
115 void push(void* v ); // Add unimplemented ambiguous method
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
116
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
117 void empty_expression_stack() {
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
118 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
119 // NULL last_sp until next java call
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
120 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
121 }
a61af66fc99e Initial load
duke
parents:
diff changeset
122
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
123 // Helpers for swap and dup
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
124 void load_ptr(int n, Register val);
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
125 void store_ptr(int n, Register val);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
126
a61af66fc99e Initial load
duke
parents:
diff changeset
127 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls
a61af66fc99e Initial load
duke
parents:
diff changeset
128 void super_call_VM_leaf(address entry_point);
a61af66fc99e Initial load
duke
parents:
diff changeset
129 void super_call_VM_leaf(address entry_point, Register arg_1);
a61af66fc99e Initial load
duke
parents:
diff changeset
130 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
a61af66fc99e Initial load
duke
parents:
diff changeset
131 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2, Register arg_3);
a61af66fc99e Initial load
duke
parents:
diff changeset
132
a61af66fc99e Initial load
duke
parents:
diff changeset
133 // Generate a subtype check: branch to ok_is_subtype if sub_klass is
a61af66fc99e Initial load
duke
parents:
diff changeset
134 // a subtype of super_klass. EAX holds the super_klass. Blows ECX
a61af66fc99e Initial load
duke
parents:
diff changeset
135 // and EDI. Register sub_klass cannot be any of the above.
a61af66fc99e Initial load
duke
parents:
diff changeset
136 void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
a61af66fc99e Initial load
duke
parents:
diff changeset
137
a61af66fc99e Initial load
duke
parents:
diff changeset
138 // Dispatching
a61af66fc99e Initial load
duke
parents:
diff changeset
139 void dispatch_prolog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
140 void dispatch_epilog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
141 void dispatch_only(TosState state); // dispatch via rbx, (assume rbx, is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
142 void dispatch_only_normal(TosState state); // dispatch normal table via rbx, (assume rbx, is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
143 void dispatch_only_noverify(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
144 void dispatch_next(TosState state, int step = 0); // load rbx, from [esi + step] and dispatch via rbx,
a61af66fc99e Initial load
duke
parents:
diff changeset
145 void dispatch_via (TosState state, address* table); // load rbx, from [esi] and dispatch via rbx, and table
a61af66fc99e Initial load
duke
parents:
diff changeset
146
a61af66fc99e Initial load
duke
parents:
diff changeset
147
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // jump to an invoked target
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 579
diff changeset
149 void prepare_to_jump_from_interpreted();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
150 void jump_from_interpreted(Register method, Register temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
151
a61af66fc99e Initial load
duke
parents:
diff changeset
152 // Returning from interpreted functions
a61af66fc99e Initial load
duke
parents:
diff changeset
153 //
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // Removes the current activation (incl. unlocking of monitors)
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // and sets up the return address. This code is also used for
a61af66fc99e Initial load
duke
parents:
diff changeset
156 // exception unwindwing. In that case, we do not want to throw
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // IllegalMonitorStateExceptions, since that might get us into an
a61af66fc99e Initial load
duke
parents:
diff changeset
158 // infinite rethrow exception loop.
a61af66fc99e Initial load
duke
parents:
diff changeset
159 // Additionally this code is used for popFrame and earlyReturn.
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // In popFrame case we want to skip throwing an exception,
a61af66fc99e Initial load
duke
parents:
diff changeset
161 // installing an exception, and notifying jvmdi.
a61af66fc99e Initial load
duke
parents:
diff changeset
162 // In earlyReturn case we only want to skip throwing an exception
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // and installing an exception.
a61af66fc99e Initial load
duke
parents:
diff changeset
164 void remove_activation(TosState state, Register ret_addr,
a61af66fc99e Initial load
duke
parents:
diff changeset
165 bool throw_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
166 bool install_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
167 bool notify_jvmdi = true);
a61af66fc99e Initial load
duke
parents:
diff changeset
168 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
169
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
171 void verify_oop(Register reg, TosState state = atos); // only if +VerifyOops && state == atos
a61af66fc99e Initial load
duke
parents:
diff changeset
172 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
173 void verify_FPU(int stack_depth, TosState state = ftos); // only if +VerifyFPU && (state == ftos || state == dtos)
a61af66fc99e Initial load
duke
parents:
diff changeset
174
a61af66fc99e Initial load
duke
parents:
diff changeset
175 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
176
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // Object locking
a61af66fc99e Initial load
duke
parents:
diff changeset
178 void lock_object (Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 void unlock_object(Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
180
a61af66fc99e Initial load
duke
parents:
diff changeset
181 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
182
a61af66fc99e Initial load
duke
parents:
diff changeset
183 // Interpreter profiling operations
a61af66fc99e Initial load
duke
parents:
diff changeset
184 void set_method_data_pointer_for_bcp();
a61af66fc99e Initial load
duke
parents:
diff changeset
185 void test_method_data_pointer(Register mdp, Label& zero_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
186 void verify_method_data_pointer();
a61af66fc99e Initial load
duke
parents:
diff changeset
187
a61af66fc99e Initial load
duke
parents:
diff changeset
188 void set_mdp_data_at(Register mdp_in, int constant, Register value);
a61af66fc99e Initial load
duke
parents:
diff changeset
189 void increment_mdp_data_at(Address data, bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
190 void increment_mdp_data_at(Register mdp_in, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
191 bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
192 void increment_mdp_data_at(Register mdp_in, Register reg, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
193 bool decrement = false);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
194 void increment_mask_and_jump(Address counter_addr,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
195 int increment, int mask,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
196 Register scratch, bool preloaded,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
197 Condition cond, Label* where);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198 void set_mdp_flag_at(Register mdp_in, int flag_constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
199 void test_mdp_data_at(Register mdp_in, int offset, Register value,
a61af66fc99e Initial load
duke
parents:
diff changeset
200 Register test_value_out,
a61af66fc99e Initial load
duke
parents:
diff changeset
201 Label& not_equal_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
202
a61af66fc99e Initial load
duke
parents:
diff changeset
203 void record_klass_in_profile(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
204 Register reg2, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
205 void record_klass_in_profile_helper(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
206 Register reg2, int start_row,
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
207 Label& done, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
208
a61af66fc99e Initial load
duke
parents:
diff changeset
209 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
210 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 void update_mdp_by_constant(Register mdp_in, int constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 void update_mdp_for_ret(Register return_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
213
a61af66fc99e Initial load
duke
parents:
diff changeset
214 void profile_taken_branch(Register mdp, Register bumped_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
215 void profile_not_taken_branch(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
216 void profile_call(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
217 void profile_final_call(Register mdp);
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
218 void profile_virtual_call(Register receiver, Register mdp, Register scratch2,
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
219 bool receiver_can_be_null = false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
220 void profile_ret(Register return_bci, Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
221 void profile_null_seen(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
222 void profile_typecheck(Register mdp, Register klass, Register scratch);
a61af66fc99e Initial load
duke
parents:
diff changeset
223 void profile_typecheck_failed(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
224 void profile_switch_default(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
225 void profile_switch_case(Register index_in_scratch, Register mdp, Register scratch2);
a61af66fc99e Initial load
duke
parents:
diff changeset
226
a61af66fc99e Initial load
duke
parents:
diff changeset
227 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
228
a61af66fc99e Initial load
duke
parents:
diff changeset
229 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
a61af66fc99e Initial load
duke
parents:
diff changeset
230
a61af66fc99e Initial load
duke
parents:
diff changeset
231 // support for jvmti
a61af66fc99e Initial load
duke
parents:
diff changeset
232 void notify_method_entry();
a61af66fc99e Initial load
duke
parents:
diff changeset
233 void notify_method_exit(TosState state, NotifyMethodExitMode mode);
a61af66fc99e Initial load
duke
parents:
diff changeset
234
a61af66fc99e Initial load
duke
parents:
diff changeset
235 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
236
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
237 #endif // CPU_X86_VM_INTERP_MASM_X86_32_HPP