Mercurial > hg > truffle
comparison src/cpu/x86/vm/templateTable_x86_64.cpp @ 1602:136b78722a08
6939203: JSR 292 needs method handle constants
Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode.
Reviewed-by: twisti, never
author | jrose |
---|---|
date | Wed, 09 Jun 2010 18:50:45 -0700 |
parents | e9ff18c4ace7 |
children | 126ea7725993 |
comparison
equal
deleted
inserted
replaced
1585:49fac4acd688 | 1602:136b78722a08 |
---|---|
385 if (VerifyOops) { | 385 if (VerifyOops) { |
386 __ verify_oop(rax); | 386 __ verify_oop(rax); |
387 } | 387 } |
388 | 388 |
389 __ bind(Done); | 389 __ bind(Done); |
390 } | |
391 | |
392 // Fast path for caching oop constants. | |
393 // %%% We should use this to handle Class and String constants also. | |
394 // %%% It will simplify the ldc/primitive path considerably. | |
395 void TemplateTable::fast_aldc(bool wide) { | |
396 transition(vtos, atos); | |
397 | |
398 if (!EnableMethodHandles) { | |
399 // We should not encounter this bytecode if !EnableMethodHandles. | |
400 // The verifier will stop it. However, if we get past the verifier, | |
401 // this will stop the thread in a reasonable way, without crashing the JVM. | |
402 __ call_VM(noreg, CAST_FROM_FN_PTR(address, | |
403 InterpreterRuntime::throw_IncompatibleClassChangeError)); | |
404 // the call_VM checks for exception, so we should never return here. | |
405 __ should_not_reach_here(); | |
406 return; | |
407 } | |
408 | |
409 const Register cache = rcx; | |
410 const Register index = rdx; | |
411 | |
412 resolve_cache_and_index(f1_oop, rax, cache, index, wide ? sizeof(u2) : sizeof(u1)); | |
413 if (VerifyOops) { | |
414 __ verify_oop(rax); | |
415 } | |
390 } | 416 } |
391 | 417 |
392 void TemplateTable::ldc2_w() { | 418 void TemplateTable::ldc2_w() { |
393 transition(vtos, vtos); | 419 transition(vtos, vtos); |
394 Label Long, Done; | 420 Label Long, Done; |
2061 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); | 2087 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invoke); |
2062 break; | 2088 break; |
2063 case Bytecodes::_invokedynamic: | 2089 case Bytecodes::_invokedynamic: |
2064 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); | 2090 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_invokedynamic); |
2065 break; | 2091 break; |
2092 case Bytecodes::_fast_aldc: | |
2093 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); | |
2094 break; | |
2095 case Bytecodes::_fast_aldc_w: | |
2096 entry = CAST_FROM_FN_PTR(address, InterpreterRuntime::resolve_ldc); | |
2097 break; | |
2066 default: | 2098 default: |
2067 ShouldNotReachHere(); | 2099 ShouldNotReachHere(); |
2068 break; | 2100 break; |
2069 } | 2101 } |
2070 __ movl(temp, (int) bytecode()); | 2102 __ movl(temp, (int) bytecode()); |