Useless test instruction?

后端 未结 1 847
被撕碎了的回忆
被撕碎了的回忆 2021-02-05 02:06

I got the below assembly list as result for JIT compilation for my java program.

mov    0x14(%rsp),%r10d
inc    %r10d              

mov    0x1c(%rsp),%r8d
inc          


        
1条回答
  •  后悔当初
    2021-02-05 02:24

    That must be the thread-local handshake poll. Look where %r11 is read from. If it is read from some offset off the %r15 (thread-local storage), that's the guy. See the example here:

      0.31%  ↗  ...70: movzbl 0x94(%r9),%r10d    
      0.19%  │  ...78: mov    0x108(%r15),%r11  ; read the thread-local page addr
     25.62%  │  ...7f: add    $0x1,%rbp          
     35.10%  │  ...83: test   %eax,(%r11)       ; thread-local handshake poll
     34.91%  │  ...86: test   %r10d,%r10d
             ╰  ...89: je     ...70
    

    It is not useless, it would cause SEGV once the guard page is marked non-readable, and that would transfer control to JVM's SEGV handler. This is part of JVM's mechanics to safepoint Java threads, e.g. for GC.

    UPD: Hopefully, more details here.

    0 讨论(0)
提交回复
热议问题