gpt4 book ai didi

java - 打印 Java 热点 JIT 汇编代码

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:24 25 4
gpt4 key购买 nike

我用Java写了一个很蠢的测试类:

public class Vector3 {
public double x,y,z ;

public Vector3(double x, double y, double z) {
this.x=x ; this.y=y ; this.z=z ;
}

public Vector3 subst(Vector3 v) {
return new Vector3(x-v.x,y-v.y,z-v.z) ;
}
}

然后我想查看 Java Hotspot JIT(客户端 VM build 23.7-b01)生成的代码。我使用了“-XX:+PrintAssembly”选项和来自 http://classparser.blogspot.dk/2010/03/hsdis-i386dll.html 的 hsdis-i386.dll。

这是生成代码的有趣部分(我已经跳过了新对象的初始化。编辑:subst 方法的代码)。显然,ebx 是“this”指针,edx 是指向参数的指针。

lds    edi,(bad)
sti
adc BYTE PTR [ebx+8],al ;*getfield x
mov edx,DWORD PTR [esp+56]
lds edi,(bad) ; implicit exception: dispatches to 0x02611f2d
sti
adc BYTE PTR [edx+8],cl ;*getfield x
lds edi,(bad)
sti
adc BYTE PTR [ebx+16],dl ;*getfield y
lds edi,(bad)
sti
adc BYTE PTR [edx+16],bl ;*getfield y
lds edi,(bad)
sti
adc BYTE PTR [ebx+24],ah ;*getfield z
lds edi,(bad)
sti
adc BYTE PTR [edx+24],ch ;*getfield z
lds edi,(bad)
sti
pop esp
rol ebp,0xfb
adc DWORD PTR [eax+8],eax ;*putfield x
lds ebp,(bad)
jmp 0x02611f66
rol ebp,cl
sti
adc DWORD PTR [eax+16],edx ;*putfield y
lds ebx,(bad)
fistp DWORD PTR [ebp-59]
sti
adc DWORD PTR [eax+24],esp ;*putfield z

老实说,我对 x86 汇编不是很熟悉,但是你觉得这段代码有意义吗?那些像“adc BYTE PTR [edx+8],cl”这样的奇怪指令在做什么?我本以为会有一些 FPU 指令。

最佳答案

又是我。我使用最新的 binutils 2.23 构建了 hsdis-i386.dll。多亏了 http://dropzone.nfshost.com/hsdis.htm 中的说明,这比我预期的要容易(至少对于 x86 版本。64 位版本编译但立即停止 JVM,没有任何错误消息)

输出现在看起来好多了:

vmovsd xmm0,QWORD PTR [ebx+0x8]  ;*getfield x
mov edx,DWORD PTR [esp+0x40]
vmovsd xmm1,QWORD PTR [edx+0x8] ;*getfield x
vmovsd xmm2,QWORD PTR [ebx+0x10] ;*getfield y
vmovsd xmm3,QWORD PTR [edx+0x10] ;*getfield y
vmovsd xmm4,QWORD PTR [ebx+0x18] ;*getfield z
vmovsd xmm5,QWORD PTR [edx+0x18] ;*getfield z
vsubsd xmm0,xmm0,xmm1
vmovsd QWORD PTR [eax+0x8],xmm0 ;*putfield x
vsubsd xmm2,xmm2,xmm3
vmovsd QWORD PTR [eax+0x10],xmm2 ;*putfield y
vsubsd xmm4,xmm4,xmm5
vmovsd QWORD PTR [eax+0x18],xmm4 ;*putfield z

关于java - 打印 Java 热点 JIT 汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15337492/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com