314 __ bind(notString); |
314 __ bind(notString); |
315 // __ ldf(FloatRegisterImpl::S, O0, O1, Ftos_f); |
315 // __ ldf(FloatRegisterImpl::S, O0, O1, Ftos_f); |
316 __ push(ftos); |
316 __ push(ftos); |
317 |
317 |
318 __ bind(exit); |
318 __ bind(exit); |
|
319 } |
|
320 |
|
321 // Fast path for caching oop constants. |
|
322 // %%% We should use this to handle Class and String constants also. |
|
323 // %%% It will simplify the ldc/primitive path considerably. |
|
324 void TemplateTable::fast_aldc(bool wide) { |
|
325 transition(vtos, atos); |
|
326 |
|
327 if (!EnableMethodHandles) { |
|
328 // We should not encounter this bytecode if !EnableMethodHandles. |
|
329 // The verifier will stop it. However, if we get past the verifier, |
|
330 // this will stop the thread in a reasonable way, without crashing the JVM. |
|
331 __ call_VM(noreg, CAST_FROM_FN_PTR(address, |
|
332 InterpreterRuntime::throw_IncompatibleClassChangeError)); |
|
333 // the call_VM checks for exception, so we should never return here. |
|
334 __ should_not_reach_here(); |
|
335 return; |
|
336 } |
|
337 |
|
338 Register Rcache = G3_scratch; |
|
339 Register Rscratch = G4_scratch; |
|
340 |
|
341 resolve_cache_and_index(f1_oop, Otos_i, Rcache, Rscratch, wide ? sizeof(u2) : sizeof(u1)); |
|
342 |
|
343 __ verify_oop(Otos_i); |
319 } |
344 } |
320 |
345 |
321 void TemplateTable::ldc2_w() { |
346 void TemplateTable::ldc2_w() { |
322 transition(vtos, vtos); |
347 transition(vtos, vtos); |
323 Label retry, resolved, Long, exit; |
348 Label retry, resolved, Long, exit; |
1992 case Bytecodes::_invokevirtual : // fall through |
2017 case Bytecodes::_invokevirtual : // fall through |
1993 case Bytecodes::_invokespecial : // fall through |
2018 case Bytecodes::_invokespecial : // fall through |
1994 case Bytecodes::_invokestatic : // fall through |
2019 case Bytecodes::_invokestatic : // fall through |
1995 case Bytecodes::_invokeinterface: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); break; |
2020 case Bytecodes::_invokeinterface: entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); break; |
1996 case Bytecodes::_invokedynamic : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; |
2021 case Bytecodes::_invokedynamic : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); break; |
|
2022 case Bytecodes::_fast_aldc : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; |
|
2023 case Bytecodes::_fast_aldc_w : entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); break; |
1997 default : ShouldNotReachHere(); break; |
2024 default : ShouldNotReachHere(); break; |
1998 } |
2025 } |
1999 // first time invocation - must resolve first |
2026 // first time invocation - must resolve first |
2000 __ call_VM(noreg, entry, O1); |
2027 __ call_VM(noreg, entry, O1); |
2001 // Update registers with resolved info |
2028 // Update registers with resolved info |