繁体   English   中英

将Psyco移植到64位可能存在哪些陷阱?

[英]What are the possible pitfalls in porting Psyco to 64-bit?

Psyco的文档说:

仅供参考,Psyco根本不适用于任何64位系统。 这个事实值得再次注意,现在最新的Mac OS / X 10.6“Snow Leopart”带有64位机器上64位的默认Python。 在OS / X 10.6上使用Psyco的唯一方法是在32位模式下重新编译自定义Python。

通常,当代码假定指针类型和其他类似的小(ish)问题具有特定大小时,将程序从32位移植到64位只是一个问题。 考虑到Psyco不是很多代码(大约32K行的C + ~8K系列的Python),它有多难? 有没有人试过这个并撞墙? 我还没有机会好好看看Psyco的来源,所以我真的很感激知道我是否在浪费时间研究这个......

Psyco开发商之一Christian Tismer似乎也不同意“它有多难” - 假设(引自此处 ):

需要来x86-64? 为什么! 说真的,我很乐意这样做,但这比任何人想象的要困难得多。 由于psyco的编写方式,将它从32位苦味中解脱出来真是半重写。 32位假设隐含在任何地方。 如果内存模型全部是64位,那将是直截了当的。 但没有英特尔平台那么简单。 这么久,感谢所有的鱼 - 克里斯

哼。 如果不是更多的话,至少要花3到4个月的全职工作。 我怀疑我能否获得赞助。

如果你想了解更多细节(可能需要Psyco的内部知识),我猜你总是可以尝试在其中一个psyco邮件列表上询问......

由于psyco是一个编译器,因此需要了解底层汇编语言以生成有用的代码。 这意味着它需要知道8个新寄存器,64位代码的新操作码等。

此外,为了与现有代码互操作,它需要使用与64位代码相同的调用约定。 AMD-64调用约定类似于旧的快速调用约定,因为一些参数在寄存器中传递(在64位情况下,rcx,rdx,r8,r9用于指针,Xmm0-Xmm3用于浮点),其余的是推到堆栈上的溢出空间。 与x86不同,这个额外的空间通常为所有可能的调用分配一次。 IA64约定和汇编语言有所不同。

简而言之,我认为这可能不像听起来那么简单。

Psyco假设sizeof(int)== sizeof(void *)遍布整个地方。 这比写下64位调用约定和汇编程序要困难得多。 在旁注中,pypy现在有64位的jit支持。

干杯,fijal

+ 1代表“......它有多难?”

看看这里: http//codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

所有ASM都必须被移植,并且关于底层处理器的所有地方都存在假设。

我认为公平地说,如果移植(或不太困难)是微不足道的,那就已经完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM