RFR(S) 8204267 - Generate comments in -XX:+PrintInterpreter to link to source code
Ioi Lam
ioi.lam at oracle.com
Fri Jul 6 21:33:39 UTC 2018
Hi,
Since there's interest for this patch, I've finished it for the x86 port:
https://bugs.openjdk.java.net/browse/JDK-8204267
http://cr.openjdk.java.net/~iklam/jdk12/8204267-print-interpreter-comments.v001/
You can see a sample at
http://cr.openjdk.java.net/~iklam/jdk12/8204267-print-interpreter-comments.v001/sample.txt
Incorporating this to other CPU ports should be pretty straight forward.
You just
need to do something like:
-#define __ _masm->
+#define __ Disassembler::hook<MacroAssembler>(__FILE__, __LINE__, _masm)->
I'll leave it to other CPU port maintainers.
I am testing with hs_tier{1,2}.
Thanks
- Ioi
On 6/4/18 12:12 AM, Ioi Lam wrote:
> Hi Folks,
>
> I've found it very hard to understand the assembler code printed by
> -XX:+PrintInterpreter. Since the C++ source code that generates the
> interpreter is fairly well documented, it might be a good idea to
> print out the source code along with the assembler code.
>
> I've done a quick proof-of-concept by hacking the "__" macro that's
> used throughout the CPU-dependent sources.
>
> Please let me know if you think this is worth doing. If so, I will try
> to finish it up and post a real RFR.
>
> Thanks
> - Ioi
>
>
> https://bugs.openjdk.java.net/browse/JDK-8204267
> http://cr.openjdk.java.net/~iklam/misc/8204267-print-interpreter-comments.v00
>
> http://cr.openjdk.java.net/~iklam/misc/8204267-print-interpreter-comments.v00/hs_interp.S
>
>
> Here are some examples (if the mailer screws up the long lines, please
> click the above link):
>
> ifeq 153 ifeq [0x00007f830cc93da0, 0x00007f830cc941c0] 1056 bytes
>
> mov (%rsp),%eax
> add $0x8,%rsp
> test %eax,%eax ;; 2353: __ testl(rax, rax);
> jne 0x00007f830cc94177 ;; 2354: __ jcc(j_not(cc), not_taken);
> mov -0x18(%rbp),%rcx ;; 2120: __ get_method(rcx); // rcx holds
> method
> mov -0x28(%rbp),%rax ;; 2121: __ profile_taken_branch(rax,
> rbx); // rax holds updated MDP, rbx
> test %rax,%rax
> je 0x00007f830cc93dd8
> mov 0x8(%rax),%rbx
> add $0x1,%rbx
> sbb $0x0,%rbx
> mov %rbx,0x8(%rax)
> add 0x10(%rax),%rax
> mov %rax,-0x28(%rbp)
> movswl 0x1(%r13),%edx ;; 2133: __ load_signed_short(rdx,
> at_bcp(1));
> bswap %edx ;; 2135: __ bswapl(rdx);
> sar $0x10,%edx ;; 2138: __ sarl(rdx, 16);
> movslq %edx,%rdx ;; 2140: LP64_ONLY(__ movl2ptr(rdx, rdx));
> add %rdx,%r13 ;; 2164: __ addptr(rbcp, rdx);
> test %edx,%edx ;; 2179: __ testl(rdx,
> rdx); // check if forward or backward branch
> jns 0x00007f830cc93eec ;; 2180: __ jcc(Assembler::positive,
> dispatch); // count only if backward branch
> mov 0x18(%rcx),%rax ;; 2184: __ movptr(rax, Address(rcx,
> Method::method_counters_offset()));
> test %rax,%rax ;; 2185: __ testptr(rax, rax);
> jne 0x00007f830cc93ead ;; 2186: __ jcc(Assembler::notZero,
> has_counters);
> push %rdx ;; 2187: __ push(rdx);
> push %rcx ;; 2188: __ push(rcx);
> callq 0x00007f830cc93e09 ;; 2189: __ call_VM(noreg,
> CAST_FROM_FN_PTR(address, InterpreterRuntime::build_method_counters),
>
More information about the hotspot-dev
mailing list