无用的测试说明?
2022-09-01 08:52:09
我得到了下面的程序集列表作为我的java程序的JIT编译的结果。
mov 0x14(%rsp),%r10d
inc %r10d
mov 0x1c(%rsp),%r8d
inc %r8d
test %eax,(%r11) ; <--- this instruction
mov (%rsp),%r9
mov 0x40(%rsp),%r14d
mov 0x18(%rsp),%r11d
mov %ebp,%r13d
mov 0x8(%rsp),%rbx
mov 0x20(%rsp),%rbp
mov 0x10(%rsp),%ecx
mov 0x28(%rsp),%rax
movzbl 0x18(%r9),%edi
movslq %r8d,%rsi
cmp 0x30(%rsp),%rsi
jge 0x00007fd3d27c4f17
我的理解是,指令在这里是无用的,因为测试的主要思想是test
标记 SF、ZF、PF 被修改,而 AND 的结果将被丢弃。
在这里,我们不使用这些结果标志。
是JIT中的一个错误还是我错过了什么?如果是,报告它的最佳位置在哪里?谢谢!