RFR: 8301995: Move invokedynamic resolution information out of ConstantPoolCacheEntry

Coleen Phillimore coleenp at openjdk.org
Thu Mar 9 16:03:53 UTC 2023


On Tue, 7 Mar 2023 15:04:29 GMT, Richard Reingruber <rrich at openjdk.org> wrote:

>> src/hotspot/cpu/ppc/templateTable_ppc_64.cpp line 53:
>> 
>>> 51: 
>>> 52: #undef __
>>> 53: #define __ Disassembler::hook<InterpreterMacroAssembler>(__FILE__, __LINE__, _masm)->
>> 
>> What is this?  Is this something useful for debugging the template interpreter?  Probably doesn't belong with this change but might be nice to have (?) @reinrich
>
> Yes this is really useful when debugging the template interpreter. It annotates the disassembly with the generator source code. It helped tracking down a bug in the ppc part oft this pr. Other platforms have it too.
> 
> Example:
> 
> invokedynamic  186 invokedynamic  [0x00003fff80075a00, 0x00003fff80075dc8]  968 bytes
> 
> --------------------------------------------------------------------------------
>   0x00003fff80075a00:   std     r17,0(r15)                  ;;@FILE: src/hotspot/cpu/ppc/templateInterpreterGenerator_ppc.cpp
>                                                             ;; 2185:   aep = __ pc();  __ push_ptr();  __ b(L);
>   0x00003fff80075a04:   addi    r15,r15,-8
>   0x00003fff80075a08:   b       0x00003fff80075a40          ;; 2185:   aep = __ pc();  __ push_ptr();  __ b(L);
>   0x00003fff80075a0c:   stfs    f15,0(r15)                  ;; 2186:   fep = __ pc();  __ push_f();    __ b(L);
>   0x00003fff80075a10:   addi    r15,r15,-8
>   0x00003fff80075a14:   b       0x00003fff80075a40          ;; 2186:   fep = __ pc();  __ push_f();    __ b(L);
>   0x00003fff80075a18:   stfd    f15,-8(r15)                 ;; 2187:   dep = __ pc();  __ push_d();    __ b(L);
>   0x00003fff80075a1c:   addi    r15,r15,-16
>   0x00003fff80075a20:   b       0x00003fff80075a40          ;; 2187:   dep = __ pc();  __ push_d();    __ b(L);
>   0x00003fff80075a24:   li      r0,0                        ;; 2188:   lep = __ pc();  __ push_l();    __ b(L);
>   0x00003fff80075a28:   std     r0,0(r15)
>   0x00003fff80075a2c:   std     r17,-8(r15)
>   0x00003fff80075a30:   addi    r15,r15,-16
>   0x00003fff80075a34:   b       0x00003fff80075a40          ;; 2188:   lep = __ pc();  __ push_l();    __ b(L);
>   0x00003fff80075a38:   stw     r17,0(r15)                  ;; 2189:   __ align(32, 12, 24); // align L
>                                                             ;; 2191:   iep = __ pc();  __ push_i();
>   0x00003fff80075a3c:   addi    r15,r15,-8
>   0x00003fff80075a40:   li      r21,1                       ;; 2192:   vep = __ pc();
>                                                             ;; 2193:   __ bind(L);
>                                                             ;;@FILE: src/hotspot/share/interpreter/templateInterpreterGenerator.cpp
>                                                             ;;  366:   __ verify_FPU(1, t->tos_in());
>                                                             ;;@FILE: src/hotspot/cpu/ppc/templateTable_ppc_64.cpp
>                                                             ;; 2293:   __ load_resolved_indy_entry(cache, index);
>   0x00003fff80075a44:   lwax    r21,r14,r21
>   0x00003fff80075a48:   nand    r21,r21,r21
>   0x00003fff80075a4c:   ld      r31,40(r27)
>   0x00003fff80075a50:   rldicr  r21,r21,4,59
>   0x00003fff80075a54:   addi    r21,r21,8
>   0x00003fff80075a58:   add     r31,r31,r21
>   0x00003fff80075a5c:   ld      r22,0(r31)                  ;; 2294:   __ ld_ptr(method, in_bytes(ResolvedIndyEntry::method_offset()), cache);
>   0x00003fff80075a60:   cmpdi   r22,0                       ;; 2297:   __ cmpdi(CCR0, method, 0);
>   0x00003fff80075a64:   bne-    0x00003fff80075b94          ;; 2298:   __ bne(CCR0, resolved);,bo=0b00100[no_hint]
>   0x00003fff80075a68:   li      r4,186                      ;; 2304:   __ li(R4_ARG2, code);
>   0x00003fff80075a6c:   ld      r11,0(r1)                   ;; 2305:   __ call_VM(noreg, entry, R4_ARG2, true);

This change should be in a further RFE though (and you can explain it there so we can maybe use it in the other platforms too).  Does it affect performance when generating the template interpreter?  Do you need to have hsdis in the LD_LIBRARY_PATH environment variable to use this?  I see it's already used by default in one place.

-------------

PR: https://git.openjdk.org/jdk/pull/12778


More information about the serviceability-dev mailing list