Mercurial > hg > release > icedtea7-forest-2.4 > hotspot
changeset 5026:7c433abda0ff
ARM: JIT-compilation of ldc methodHandle
author | aph |
---|---|
date | Fri, 30 Mar 2012 13:34:30 -0400 |
parents | aa1f60fceb35 |
children | aad627c854be |
files | src/cpu/zero/vm/thumb2.cpp |
diffstat | 1 files changed, 18 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/cpu/zero/vm/thumb2.cpp Fri Mar 30 11:53:01 2012 -0400 +++ b/src/cpu/zero/vm/thumb2.cpp Fri Mar 30 13:34:30 2012 -0400 @@ -6584,10 +6584,27 @@ } case opc_invokedynamic: + { + Thumb2_Exit(jinfo, H_EXIT_TO_INTERPRETER, bci, stackdepth); + break; + } + case opc_fast_aldc_w: case opc_fast_aldc: { - Thumb2_Exit(jinfo, H_EXIT_TO_INTERPRETER, bci, stackdepth); + unsigned index = (opcode == (unsigned)opc_fast_aldc) ? + code_base[bci+1] : GET_NATIVE_U2(code_base+bci+1); + constantPoolOop constants = jinfo->method->constants(); + ConstantPoolCacheEntry* cpce = constants->cache()->entry_at(index); + if (! cpce->is_f1_null()) { + Thumb2_Spill(jinfo, 1, 0); + int r = JSTACK_REG(jstack); + PUSH(jstack, r); + ldr_imm(jinfo->codebuf, r, Ristate, ISTATE_CONSTANTS, 1, 0); + ldr_imm(jinfo->codebuf, r, r, CP_OFFSET + (index << 4) + 4, 1, 0); // offset to cache->f1() + } else { + Thumb2_Exit(jinfo, H_EXIT_TO_INTERPRETER, bci, stackdepth); + } break; }