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

时间:2010-03-03 19:18:09

标签: python c 64-bit porting psyco

Psyco医生说:

  

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

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

4 个答案:

答案 0 :(得分:4)

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

  

需要来x86-64?为什么!   说真的,我很乐意这样做,   但这会比这更难   任何人都会期待。由于方式   psyco写的,它会是真的   重写一半,以便从中重新分配   32苦味。 32位假设   无处不在。这将是   直截了当,如果是记忆模型   全是64位。但没有英特尔平台   就这么简单。这么久,谢谢   对于所有的鱼 - 克里斯

  

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

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:3)

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

干杯, fijal

答案 3 :(得分:1)

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

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

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

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