annotate src/cpu/x86/vm/interp_masm_x86_64.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) 2003, 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_64_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
26 #define CPU_X86_VM_INTERP_MASM_X86_64_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
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
34 class InterpreterMacroAssembler: public MacroAssembler {
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
35 #ifndef CC_INTERP
0
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(address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
39 int number_of_arguments);
a61af66fc99e Initial load
duke
parents:
diff changeset
40
a61af66fc99e Initial load
duke
parents:
diff changeset
41 virtual void call_VM_base(Register oop_result,
a61af66fc99e Initial load
duke
parents:
diff changeset
42 Register java_thread,
a61af66fc99e Initial load
duke
parents:
diff changeset
43 Register last_java_sp,
a61af66fc99e Initial load
duke
parents:
diff changeset
44 address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
45 int number_of_arguments,
a61af66fc99e Initial load
duke
parents:
diff changeset
46 bool check_exceptions);
a61af66fc99e Initial load
duke
parents:
diff changeset
47
a61af66fc99e Initial load
duke
parents:
diff changeset
48 virtual void check_and_handle_popframe(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
49 virtual void check_and_handle_earlyret(Register java_thread);
a61af66fc99e Initial load
duke
parents:
diff changeset
50
a61af66fc99e Initial load
duke
parents:
diff changeset
51 // base routine for all dispatches
a61af66fc99e Initial load
duke
parents:
diff changeset
52 void dispatch_base(TosState state, address* table, bool verifyoop = true);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
53 #endif // CC_INTERP
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 public:
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
56 InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code) {}
0
a61af66fc99e Initial load
duke
parents:
diff changeset
57
a61af66fc99e Initial load
duke
parents:
diff changeset
58 void load_earlyret_value(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
59
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
60 #ifdef CC_INTERP
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
61 void save_bcp() { /* not needed in c++ interpreter and harmless */ }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
62 void restore_bcp() { /* not needed in c++ interpreter and harmless */ }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
63
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
64 // Helpers for runtime call arguments/results
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
65 void get_method(Register reg);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
66
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
67 #else
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
68
0
a61af66fc99e Initial load
duke
parents:
diff changeset
69 // Interpreter-specific registers
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
70 void save_bcp() {
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
71 movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), r13);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
72 }
a61af66fc99e Initial load
duke
parents:
diff changeset
73
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
74 void restore_bcp() {
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
75 movptr(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
76 }
a61af66fc99e Initial load
duke
parents:
diff changeset
77
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
78 void restore_locals() {
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
79 movptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
80 }
a61af66fc99e Initial load
duke
parents:
diff changeset
81
a61af66fc99e Initial load
duke
parents:
diff changeset
82 // Helpers for runtime call arguments/results
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
83 void get_method(Register reg) {
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
84 movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
85 }
a61af66fc99e Initial load
duke
parents:
diff changeset
86
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
87 void get_constant_pool(Register reg) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
88 get_method(reg);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
89 movptr(reg, Address(reg, methodOopDesc::constants_offset()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
90 }
a61af66fc99e Initial load
duke
parents:
diff changeset
91
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
92 void get_constant_pool_cache(Register reg) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
93 get_constant_pool(reg);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
94 movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
95 }
a61af66fc99e Initial load
duke
parents:
diff changeset
96
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
97 void get_cpool_and_tags(Register cpool, Register tags) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
98 get_constant_pool(cpool);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
99 movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
100 }
a61af66fc99e Initial load
duke
parents:
diff changeset
101
a61af66fc99e Initial load
duke
parents:
diff changeset
102 void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
103 void get_cache_and_index_at_bcp(Register cache, Register index,
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
104 int bcp_offset, size_t index_size = sizeof(u2));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
105 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp,
1565
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
106 int bcp_offset, size_t index_size = sizeof(u2));
ab102d5d923e 6939207: refactor constant pool index processing
jrose
parents: 1506
diff changeset
107 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
108
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
109
0
a61af66fc99e Initial load
duke
parents:
diff changeset
110 void pop_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
111 void pop_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
112 void pop_l(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
113 void pop_f(XMMRegister r = xmm0);
a61af66fc99e Initial load
duke
parents:
diff changeset
114 void pop_d(XMMRegister r = xmm0);
a61af66fc99e Initial load
duke
parents:
diff changeset
115 void push_ptr(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
116 void push_i(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
117 void push_l(Register r = rax);
a61af66fc99e Initial load
duke
parents:
diff changeset
118 void push_f(XMMRegister r = xmm0);
a61af66fc99e Initial load
duke
parents:
diff changeset
119 void push_d(XMMRegister r = xmm0);
a61af66fc99e Initial load
duke
parents:
diff changeset
120
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
121 void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
122
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
123 void push(Register r ) { ((MacroAssembler*)this)->push(r); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
124 void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
125
0
a61af66fc99e Initial load
duke
parents:
diff changeset
126 void pop(TosState state); // transition vtos -> state
a61af66fc99e Initial load
duke
parents:
diff changeset
127 void push(TosState state); // transition state -> vtos
a61af66fc99e Initial load
duke
parents:
diff changeset
128
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
129 void empty_expression_stack() {
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
130 movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
131 // NULL last_sp until next java call
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
132 movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
133 }
a61af66fc99e Initial load
duke
parents:
diff changeset
134
1506
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
135 // Helpers for swap and dup
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
136 void load_ptr(int n, Register val);
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
137 void store_ptr(int n, Register val);
2338d41fbd81 6943304: remove tagged stack interpreter
twisti
parents: 1206
diff changeset
138
0
a61af66fc99e Initial load
duke
parents:
diff changeset
139 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls
a61af66fc99e Initial load
duke
parents:
diff changeset
140 void super_call_VM_leaf(address entry_point);
a61af66fc99e Initial load
duke
parents:
diff changeset
141 void super_call_VM_leaf(address entry_point, Register arg_1);
a61af66fc99e Initial load
duke
parents:
diff changeset
142 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
a61af66fc99e Initial load
duke
parents:
diff changeset
143 void super_call_VM_leaf(address entry_point,
a61af66fc99e Initial load
duke
parents:
diff changeset
144 Register arg_1, Register arg_2, Register arg_3);
a61af66fc99e Initial load
duke
parents:
diff changeset
145
a61af66fc99e Initial load
duke
parents:
diff changeset
146 // Generate a subtype check: branch to ok_is_subtype if sub_klass is
a61af66fc99e Initial load
duke
parents:
diff changeset
147 // a subtype of super_klass.
a61af66fc99e Initial load
duke
parents:
diff changeset
148 void gen_subtype_check( Register sub_klass, Label &ok_is_subtype );
a61af66fc99e Initial load
duke
parents:
diff changeset
149
a61af66fc99e Initial load
duke
parents:
diff changeset
150 // Dispatching
a61af66fc99e Initial load
duke
parents:
diff changeset
151 void dispatch_prolog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
152 void dispatch_epilog(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
153 // dispatch via ebx (assume ebx is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
154 void dispatch_only(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
155 // dispatch normal table via ebx (assume ebx is loaded already)
a61af66fc99e Initial load
duke
parents:
diff changeset
156 void dispatch_only_normal(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
157 void dispatch_only_noverify(TosState state);
a61af66fc99e Initial load
duke
parents:
diff changeset
158 // load ebx from [esi + step] and dispatch via ebx
a61af66fc99e Initial load
duke
parents:
diff changeset
159 void dispatch_next(TosState state, int step = 0);
a61af66fc99e Initial load
duke
parents:
diff changeset
160 // load ebx from [esi] and dispatch via ebx and table
a61af66fc99e Initial load
duke
parents:
diff changeset
161 void dispatch_via (TosState state, address* table);
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // jump to an invoked target
710
e5b0439ef4ae 6655638: dynamic languages need method handles
jrose
parents: 337
diff changeset
164 void prepare_to_jump_from_interpreted();
0
a61af66fc99e Initial load
duke
parents:
diff changeset
165 void jump_from_interpreted(Register method, Register temp);
a61af66fc99e Initial load
duke
parents:
diff changeset
166
a61af66fc99e Initial load
duke
parents:
diff changeset
167
a61af66fc99e Initial load
duke
parents:
diff changeset
168 // Returning from interpreted functions
a61af66fc99e Initial load
duke
parents:
diff changeset
169 //
a61af66fc99e Initial load
duke
parents:
diff changeset
170 // Removes the current activation (incl. unlocking of monitors)
a61af66fc99e Initial load
duke
parents:
diff changeset
171 // and sets up the return address. This code is also used for
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // exception unwindwing. In that case, we do not want to throw
a61af66fc99e Initial load
duke
parents:
diff changeset
173 // IllegalMonitorStateExceptions, since that might get us into an
a61af66fc99e Initial load
duke
parents:
diff changeset
174 // infinite rethrow exception loop.
a61af66fc99e Initial load
duke
parents:
diff changeset
175 // Additionally this code is used for popFrame and earlyReturn.
a61af66fc99e Initial load
duke
parents:
diff changeset
176 // In popFrame case we want to skip throwing an exception,
a61af66fc99e Initial load
duke
parents:
diff changeset
177 // installing an exception, and notifying jvmdi.
a61af66fc99e Initial load
duke
parents:
diff changeset
178 // In earlyReturn case we only want to skip throwing an exception
a61af66fc99e Initial load
duke
parents:
diff changeset
179 // and installing an exception.
a61af66fc99e Initial load
duke
parents:
diff changeset
180 void remove_activation(TosState state, Register ret_addr,
a61af66fc99e Initial load
duke
parents:
diff changeset
181 bool throw_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
182 bool install_monitor_exception = true,
a61af66fc99e Initial load
duke
parents:
diff changeset
183 bool notify_jvmdi = true);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
184 #endif // CC_INTERP
0
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // Object locking
a61af66fc99e Initial load
duke
parents:
diff changeset
187 void lock_object (Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
188 void unlock_object(Register lock_reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
189
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
190 #ifndef CC_INTERP
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
191
0
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // Interpreter profiling operations
a61af66fc99e Initial load
duke
parents:
diff changeset
193 void set_method_data_pointer_for_bcp();
a61af66fc99e Initial load
duke
parents:
diff changeset
194 void test_method_data_pointer(Register mdp, Label& zero_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
195 void verify_method_data_pointer();
a61af66fc99e Initial load
duke
parents:
diff changeset
196
a61af66fc99e Initial load
duke
parents:
diff changeset
197 void set_mdp_data_at(Register mdp_in, int constant, Register value);
a61af66fc99e Initial load
duke
parents:
diff changeset
198 void increment_mdp_data_at(Address data, bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
199 void increment_mdp_data_at(Register mdp_in, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
200 bool decrement = false);
a61af66fc99e Initial load
duke
parents:
diff changeset
201 void increment_mdp_data_at(Register mdp_in, Register reg, int constant,
a61af66fc99e Initial load
duke
parents:
diff changeset
202 bool decrement = false);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
203 void increment_mask_and_jump(Address counter_addr,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
204 int increment, int mask,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
205 Register scratch, bool preloaded,
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1579
diff changeset
206 Condition cond, Label* where);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
207 void set_mdp_flag_at(Register mdp_in, int flag_constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
208 void test_mdp_data_at(Register mdp_in, int offset, Register value,
a61af66fc99e Initial load
duke
parents:
diff changeset
209 Register test_value_out,
a61af66fc99e Initial load
duke
parents:
diff changeset
210 Label& not_equal_continue);
a61af66fc99e Initial load
duke
parents:
diff changeset
211
a61af66fc99e Initial load
duke
parents:
diff changeset
212 void record_klass_in_profile(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 1108
diff changeset
213 Register reg2, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
214 void record_klass_in_profile_helper(Register receiver, Register mdp,
1206
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 1108
diff changeset
215 Register reg2, int start_row,
87684f1a88b5 6614597: Performance variability in jvm2008 xml.validation
kvn
parents: 1108
diff changeset
216 Label& done, bool is_virtual_call);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
217
a61af66fc99e Initial load
duke
parents:
diff changeset
218 void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
219 void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
a61af66fc99e Initial load
duke
parents:
diff changeset
220 void update_mdp_by_constant(Register mdp_in, int constant);
a61af66fc99e Initial load
duke
parents:
diff changeset
221 void update_mdp_for_ret(Register return_bci);
a61af66fc99e Initial load
duke
parents:
diff changeset
222
a61af66fc99e Initial load
duke
parents:
diff changeset
223 void profile_taken_branch(Register mdp, Register bumped_count);
a61af66fc99e Initial load
duke
parents:
diff changeset
224 void profile_not_taken_branch(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
225 void profile_call(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
226 void profile_final_call(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
227 void profile_virtual_call(Register receiver, Register mdp,
1108
85f13cdfbc1d 6829192: JSR 292 needs to support 64-bit x86
twisti
parents: 710
diff changeset
228 Register scratch2,
85f13cdfbc1d 6829192: JSR 292 needs to support 64-bit x86
twisti
parents: 710
diff changeset
229 bool receiver_can_be_null = false);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
230 void profile_ret(Register return_bci, Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
231 void profile_null_seen(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
232 void profile_typecheck(Register mdp, Register klass, Register scratch);
a61af66fc99e Initial load
duke
parents:
diff changeset
233 void profile_typecheck_failed(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
234 void profile_switch_default(Register mdp);
a61af66fc99e Initial load
duke
parents:
diff changeset
235 void profile_switch_case(Register index_in_scratch, Register mdp,
a61af66fc99e Initial load
duke
parents:
diff changeset
236 Register scratch2);
a61af66fc99e Initial load
duke
parents:
diff changeset
237
a61af66fc99e Initial load
duke
parents:
diff changeset
238 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
239 // only if +VerifyOops && state == atos
a61af66fc99e Initial load
duke
parents:
diff changeset
240 void verify_oop(Register reg, TosState state = atos);
a61af66fc99e Initial load
duke
parents:
diff changeset
241 // only if +VerifyFPU && (state == ftos || state == dtos)
a61af66fc99e Initial load
duke
parents:
diff changeset
242 void verify_FPU(int stack_depth, TosState state = ftos);
a61af66fc99e Initial load
duke
parents:
diff changeset
243
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
244 #endif // !CC_INTERP
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
245
0
a61af66fc99e Initial load
duke
parents:
diff changeset
246 typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
a61af66fc99e Initial load
duke
parents:
diff changeset
247
a61af66fc99e Initial load
duke
parents:
diff changeset
248 // support for jvmti/dtrace
a61af66fc99e Initial load
duke
parents:
diff changeset
249 void notify_method_entry();
a61af66fc99e Initial load
duke
parents:
diff changeset
250 void notify_method_exit(TosState state, NotifyMethodExitMode mode);
a61af66fc99e Initial load
duke
parents:
diff changeset
251 };
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
252
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
253 #endif // CPU_X86_VM_INTERP_MASM_X86_64_HPP