146 #else
147 ShouldNotReachHere();
148 return NULL;
149 #endif
150 }
151 #undef __
152
153 // Size of java_to_interp stub, this doesn't need to be accurate but it must
154 // be larger or equal to the real size of the stub.
155 // Used for optimization in Compile::Shorten_branches.
156 int CompiledStaticCall::to_interp_stub_size() {
157 return 12 * BytesPerInstWord;
158 }
159
160 // Relocation entries for call stub, compiled java to interpreter.
161 // Used for optimization in Compile::Shorten_branches.
162 int CompiledStaticCall::reloc_to_interp_stub() {
163 return 5;
164 }
165
166 void CompiledDirectStaticCall::set_to_interpreted(methodHandle callee, address entry) {
167 address stub = find_stub(/*is_aot*/ false);
168 guarantee(stub != NULL, "stub not found");
169
170 if (TraceICs) {
171 ResourceMark rm;
172 tty->print_cr("CompiledDirectStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
173 p2i(instruction_address()),
174 callee->name_and_sig_as_C_string());
175 }
176
177 // Creation also verifies the object.
178 NativeMovConstReg* method_holder = nativeMovConstReg_at(stub + IC_pos_in_java_to_interp_stub);
179 NativeJump* jump = nativeJump_at(method_holder->next_instruction_address());
180
181 #ifdef ASSERT
182 // read the value once
183 volatile intptr_t data = method_holder->data();
184 volatile address destination = jump->jump_destination();
185 assert(data == 0 || data == (intptr_t)callee(),
186 "a) MT-unsafe modification of inline cache");
|
146 #else
147 ShouldNotReachHere();
148 return NULL;
149 #endif
150 }
151 #undef __
152
153 // Size of java_to_interp stub, this doesn't need to be accurate but it must
154 // be larger or equal to the real size of the stub.
155 // Used for optimization in Compile::Shorten_branches.
156 int CompiledStaticCall::to_interp_stub_size() {
157 return 12 * BytesPerInstWord;
158 }
159
160 // Relocation entries for call stub, compiled java to interpreter.
161 // Used for optimization in Compile::Shorten_branches.
162 int CompiledStaticCall::reloc_to_interp_stub() {
163 return 5;
164 }
165
166 void CompiledDirectStaticCall::set_to_interpreted(const methodHandle& callee, address entry) {
167 address stub = find_stub(/*is_aot*/ false);
168 guarantee(stub != NULL, "stub not found");
169
170 if (TraceICs) {
171 ResourceMark rm;
172 tty->print_cr("CompiledDirectStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
173 p2i(instruction_address()),
174 callee->name_and_sig_as_C_string());
175 }
176
177 // Creation also verifies the object.
178 NativeMovConstReg* method_holder = nativeMovConstReg_at(stub + IC_pos_in_java_to_interp_stub);
179 NativeJump* jump = nativeJump_at(method_holder->next_instruction_address());
180
181 #ifdef ASSERT
182 // read the value once
183 volatile intptr_t data = method_holder->data();
184 volatile address destination = jump->jump_destination();
185 assert(data == 0 || data == (intptr_t)callee(),
186 "a) MT-unsafe modification of inline cache");
|