annotate src/cpu/x86/vm/interp_masm_x86_32.hpp @ 15388:769fc3629f59

Add phase FlowSensitiveReductionPhase. It is possible to remove GuardingPiNodes, CheckCastNodes, and FixedGuards during HighTier under certain conditions (control-flow sensitive conditions). The phase added in this commit (FlowSensitiveReductionPhase) does that, and in addition replaces usages with "downcasting" PiNodes when possible thus resulting in more precise object stamps (e.g., non-null). Finally, usages of floating, side-effects free, expressions are also simplified (as per control-flow sensitive conditions). The newly added phase runs only during HighTier and can be deactivated using Graal option FlowSensitiveReduction (it is active by default).
author Miguel Garcia <miguel.m.garcia@oracle.com>
date Fri, 25 Apr 2014 16:50:52 +0200
parents 5ccbab1c69f3
children d3f14809b051
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
10105
aeaca88565e6 8010862: The Method counter fields used for profiling can be allocated lazily.
jiangli
parents: 7199
diff changeset
2 * Copyright (c) 1997, 2013, 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
a61af66fc99e Initial load
duke
parents:
diff changeset
25 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
26 protected:
a61af66fc99e Initial load
duke
parents:
diff changeset
27 // Interpreter specific version of call_VM_base
a61af66fc99e Initial load
duke
parents:
diff changeset
28 virtual void call_VM_leaf_base(
a61af66fc99e Initial load
duke
parents:
diff changeset
29 address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
30 int number_of_arguments
a61af66fc99e Initial load
duke
parents:
diff changeset
31 );
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33 virtual void call_VM_base(
a61af66fc99e Initial load
duke
parents:
diff changeset
34 Register oop_result,
a61af66fc99e Initial load
duke
parents:
diff changeset
35 Register java_thread,
a61af66fc99e Initial load
duke
parents:
diff changeset
36 Register last_java_sp,
a61af66fc99e Initial load
duke
parents:
diff changeset
37 address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
38 int number_of_arguments,
a61af66fc99e Initial load
duke
parents:
diff changeset
39 bool check_exceptions
a61af66fc99e Initial load
duke
parents:
diff changeset
40 );
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 virtual void check_and_handle_popframe(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
43 virtual void check_and_handle_earlyret(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
44
a61af66fc99e Initial load
duke
parents:
diff changeset
45 // base routine for all dispatches
a61af66fc99e Initial load
duke
parents:
diff changeset
46 void dispatch_base(TosState state, address* table, bool verifyoop = true);
a61af66fc99e Initial load
duke
parents:
diff changeset
47 #endif /* CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
48
a61af66fc99e Initial load
duke
parents:
diff changeset
49 public:
12962
5ccbab1c69f3 8026251: New type profiling points: parameters to methods
roland
parents: 12882
diff changeset
50 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code), _locals_register(rdi), _bcp_register(rsi) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
51
a61af66fc99e Initial load
duke
parents:
diff changeset
52 void load_earlyret_value(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
53
a61af66fc99e Initial load
duke
parents:
diff changeset
54 // Interpreter-specific registers
a61af66fc99e Initial load
duke
parents:
diff changeset
55 #ifdef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
56 void save_bcp() { /* not needed in c++ interpreter and harmless */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
57 void restore_bcp() { /* not needed in c++ interpreter and harmless */ }
a61af66fc99e Initial load
duke
parents:
diff changeset
58
a61af66fc99e Initial load
duke
parents:
diff changeset
59 // Helpers for runtime call arguments/results
a61af66fc99e Initial load
duke
parents:
diff changeset
60 void get_method(Register reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
61
a61af66fc99e Initial load
duke
parents:
diff changeset
62 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
63
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
64 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
65 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
66 void restore_locals() { movptr(rdi, Address(rbp, frame::interpreter_frame_locals_offset * wordSize)); }
0
a61af66fc99e Initial load
duke
parents:
diff changeset
67
a61af66fc99e Initial load
duke
parents:
diff changeset
68 // Helpers for runtime call arguments/results
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
69 void get_method(Register reg) { movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize)); }
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
70 void get_const(Register reg) { get_method(reg); movptr(reg, Address(reg, Method::const_offset())); }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
71 void get_constant_pool(Register reg) { get_const(reg); movptr(reg, Address(reg, ConstMethod::constants_offset())); }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
72 void get_constant_pool_cache(Register reg) { get_constant_pool(reg); movptr(reg, Address(reg, ConstantPool::cache_offset_in_bytes())); }
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
73 void get_cpool_and_tags(Register cpool, Register tags) { get_constant_pool(cpool); movptr(tags, Address(cpool, ConstantPool::tags_offset_in_bytes()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
74 }
a61af66fc99e Initial load
duke
parents:
diff changeset
75 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
76 void get_cache_and_index_at_bcp(Register cache, Register index, int bcp_offset, size_t index_size = sizeof(u2));
3852
fdb992d83a87 7071653: JSR 292: call site change notification should be pushed not pulled
twisti
parents: 3336
diff changeset
77 void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register index, Register bytecode, int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
78 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
79 void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
10105
aeaca88565e6 8010862: The Method counter fields used for profiling can be allocated lazily.
jiangli
parents: 7199
diff changeset
80 void get_method_counters(Register method, Register mcs, Label& skip);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
81
6725
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
82 // load cpool->resolved_references(index);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
83 void load_resolved_reference_at_index(Register result, Register index);
da91efe96a93 6964458: Reimplement class meta-data storage to use native memory
coleenp
parents: 6123
diff changeset
84
0
a61af66fc99e Initial load
duke
parents:
diff changeset
85 // Expression stack
a61af66fc99e Initial load
duke
parents:
diff changeset
86 void f2ieee(); // truncate ftos to 32bits
a61af66fc99e Initial load
duke
parents:
diff changeset
87 void d2ieee(); // truncate dtos to 64bits
a61af66fc99e Initial load
duke
parents:
diff changeset
88
a61af66fc99e Initial load
duke
parents:
diff changeset
89 void pop_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
90 void pop_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
91 void pop_l(Register lo = rax, Register hi = rdx);
a61af66fc99e Initial load
duke
parents:
diff changeset
92 void pop_f();
a61af66fc99e Initial load
duke
parents:
diff changeset
93 void pop_d();
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 void push_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
96 void push_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
97 void push_l(Register lo = rax, Register hi = rdx);
a61af66fc99e Initial load
duke
parents:
diff changeset
98 void push_d(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
99 void push_f();
a61af66fc99e Initial load
duke
parents:
diff changeset
100
a61af66fc99e Initial load
duke
parents:
diff changeset
101 void pop(TosState state); // transition vtos -> state
a61af66fc99e Initial load
duke
parents:
diff changeset
102 void push(TosState state); // transition state -> vtos
a61af66fc99e Initial load
duke
parents:
diff changeset
103
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
104 void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
105
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
106 void push(Register r ) { ((MacroAssembler*)this)->push(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
107 void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
108
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
109 // These are dummies to prevent surprise implicit conversions to Register
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
110 void pop(void* v ); // Add unimplemented ambiguous method
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
111 void push(void* v ); // Add unimplemented ambiguous method
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
112
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
113 void empty_expression_stack() {
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
114 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
115 // NULL last_sp until next java call
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
116 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
117 }
a61af66fc99e Initial load
duke
parents:
diff changeset
118
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
119 // Helpers for swap and dup
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
120 void load_ptr(int n, Register val);
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
121 void store_ptr(int n, Register val);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // Generate a subtype check: branch to ok_is_subtype if sub_klass is
a61af66fc99e Initial load
duke
parents:
diff changeset
124 // a subtype of super_klass. EAX holds the super_klass. Blows ECX
a61af66fc99e Initial load
duke
parents:
diff changeset
125 // and EDI. Register sub_klass cannot be any of the above.
a61af66fc99e Initial load
duke
parents:
diff changeset
126 void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
a61af66fc99e Initial load
duke
parents:
diff changeset
127
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // Dispatching
a61af66fc99e Initial load
duke
parents:
diff changeset
129 void dispatch_prolog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
130 void dispatch_epilog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
131 void dispatch_only(TosState state); // dispatch via rbx, (assume rbx, is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
132 void dispatch_only_normal(TosState state); // dispatch normal table via rbx, (assume rbx, is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
133 void dispatch_only_noverify(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
134 void dispatch_next(TosState state, int step = 0); // load rbx, from [esi + step] and dispatch via rbx,
a61af66fc99e Initial load
duke
parents:
diff changeset
135 void dispatch_via (TosState state, address* table); // load rbx, from [esi] and dispatch via rbx, and table
a61af66fc99e Initial load
duke
parents:
diff changeset
136
a61af66fc99e Initial load
duke
parents:
diff changeset
137
a61af66fc99e Initial load
duke
parents:
diff changeset
138 // jump to an invoked target
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 579
diff changeset
139 void prepare_to_jump_from_interpreted();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
140 void jump_from_interpreted(Register method, Register temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
141
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // Returning from interpreted functions
a61af66fc99e Initial load
duke
parents:
diff changeset
143 //
a61af66fc99e Initial load
duke
parents:
diff changeset
144 // Removes the current activation (incl. unlocking of monitors)
a61af66fc99e Initial load
duke
parents:
diff changeset
145 // and sets up the return address. This code is also used for
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // exception unwindwing. In that case, we do not want to throw
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // IllegalMonitorStateExceptions, since that might get us into an
a61af66fc99e Initial load
duke
parents:
diff changeset
148 // infinite rethrow exception loop.
a61af66fc99e Initial load
duke
parents:
diff changeset
149 // Additionally this code is used for popFrame and earlyReturn.
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // In popFrame case we want to skip throwing an exception,
a61af66fc99e Initial load
duke
parents:
diff changeset
151 // installing an exception, and notifying jvmdi.
a61af66fc99e Initial load
duke
parents:
diff changeset
152 // In earlyReturn case we only want to skip throwing an exception
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // and installing an exception.
a61af66fc99e Initial load
duke
parents:
diff changeset
154 void remove_activation(TosState state, Register ret_addr,
a61af66fc99e Initial load
duke
parents:
diff changeset
155 bool throw_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
156 bool install_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
157 bool notify_jvmdi = true);
a61af66fc99e Initial load
duke
parents:
diff changeset
158 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
159
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
161 void verify_oop(Register reg, TosState state = atos); // only if +VerifyOops && state == atos
a61af66fc99e Initial load
duke
parents:
diff changeset
162 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
163 void verify_FPU(int stack_depth, TosState state = ftos); // only if +VerifyFPU && (state == ftos || state == dtos)
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167 // Object locking
a61af66fc99e Initial load
duke
parents:
diff changeset
168 void lock_object (Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
169 void unlock_object(Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 #ifndef CC_INTERP
a61af66fc99e Initial load
duke
parents:
diff changeset
172
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // Interpreter profiling operations
a61af66fc99e Initial load
duke
parents:
diff changeset
174 void set_method_data_pointer_for_bcp();
a61af66fc99e Initial load
duke
parents:
diff changeset
175 void test_method_data_pointer(Register mdp, Label& zero_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
176 void verify_method_data_pointer();
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 void set_mdp_data_at(Register mdp_in, int constant, Register value);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 void increment_mdp_data_at(Address data, bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
180 void increment_mdp_data_at(Register mdp_in, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
181 bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
182 void increment_mdp_data_at(Register mdp_in, Register reg, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
183 bool decrement = false);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
184 void increment_mask_and_jump(Address counter_addr,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
185 int increment, int mask,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
186 Register scratch, bool preloaded,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
187 Condition cond, Label* where);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
188 void set_mdp_flag_at(Register mdp_in, int flag_constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
189 void test_mdp_data_at(Register mdp_in, int offset, Register value,
a61af66fc99e Initial load
duke
parents:
diff changeset
190 Register test_value_out,
a61af66fc99e Initial load
duke
parents:
diff changeset
191 Label& not_equal_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193 void record_klass_in_profile(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
194 Register reg2, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
195 void record_klass_in_profile_helper(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
196 Register reg2, int start_row,
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 726
diff changeset
197 Label& done, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
200 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
a61af66fc99e Initial load
duke
parents:
diff changeset
201 void update_mdp_by_constant(Register mdp_in, int constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
202 void update_mdp_for_ret(Register return_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
203
a61af66fc99e Initial load
duke
parents:
diff changeset
204 void profile_taken_branch(Register mdp, Register bumped_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
205 void profile_not_taken_branch(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
206 void profile_call(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
207 void profile_final_call(Register mdp);
726
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
208 void profile_virtual_call(Register receiver, Register mdp, Register scratch2,
be93aad57795 6655646: dynamic languages need dynamically linked call sites
jrose
parents: 710
diff changeset
209 bool receiver_can_be_null = false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
210 void profile_ret(Register return_bci, Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
211 void profile_null_seen(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 void profile_typecheck(Register mdp, Register klass, Register scratch);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 void profile_typecheck_failed(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
214 void profile_switch_default(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
215 void profile_switch_case(Register index_in_scratch, Register mdp, Register scratch2);
a61af66fc99e Initial load
duke
parents:
diff changeset
216
a61af66fc99e Initial load
duke
parents:
diff changeset
217 #endif /* !CC_INTERP */
a61af66fc99e Initial load
duke
parents:
diff changeset
218
a61af66fc99e Initial load
duke
parents:
diff changeset
219 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 // support for jvmti
a61af66fc99e Initial load
duke
parents:
diff changeset
222 void notify_method_entry();
a61af66fc99e Initial load
duke
parents:
diff changeset
223 void notify_method_exit(TosState state, NotifyMethodExitMode mode);