Каковы возможные ловушки при портировании Psyco на 64-битный?

Документы Psyco говорят:

Только для справки, Psyco не работайте над любыми 64-битными системами вообще. Этот факт заслуживает внимания, теперь, когда последняя версия Mac OS/X 10.6 "Snow Leopart" поставляется с по умолчанию Python, который является 64-битным на 64-битном машины. Единственный способ использовать Psyco on OS/X 10.6 - путем перекомпиляции пользовательского Python в 32-битном режиме.

В общем, портирование программ с 32 до 64 бит - это действительно проблема, когда код предполагает определенный размер для типа указателя и других аналогичных небольших (иш) проблем. Учитывая, что Psyco - это не очень много кода (~ 32K строк C + ~ 8K строк Python), насколько это сложно? Кто-нибудь пробовал это и ударил стену? У меня пока не было возможности хорошо взглянуть на источники Psyco, поэтому я бы очень признателен, зная, что я трачу свое время на изучение этого...

Ответ 1

Поскольку psyco является компилятором, ему нужно будет знать базовый язык ассемблера для генерации полезного кода. Это означало бы, что ему нужно знать о 8 новых регистрах, новых кодах операций для 64-битного кода и т.д.

Кроме того, чтобы взаимодействовать с существующим кодом, ему нужно будет использовать те же соглашения о вызовах, что и 64-битный код. Соглашение о вызове AMD-64 аналогично старым соглашениям быстрого вызова в том, что некоторые параметры передаются в регистры (в 64-битном случае rcx, rdx, r8, r9 для указателей и Xmm0-Xmm3 для плавающей запятой), а остальные нажал на место разлива в стеке. В отличие от x86, это дополнительное пространство обычно выделяется один раз для всех возможных вызовов. Соглашения IA64 и язык ассемблера различны.

Короче говоря, я думаю, что это, вероятно, не так просто, как кажется.

Ответ 2

Кристиан Тисмер, один из разработчиков Psyco, также, по-видимому, не согласен с тем, "насколько это сложно" - предположение (цитируется здесь):

Нужно прийти к x86-64? Почему так! Серьезно, я бы с удовольствием это сделал, но это было бы намного сложнее, чем любой мог ожидать. Из-за пути psyco написано, это было бы действительно наполовину переписать, чтобы освободить его от 32-Горечь. 32-битное предположение неявно всюду. Это было бы прямо, если модель памяти было все 64 бит. Но ни одна платформа Intel это просто. так долго, и спасибо для всех рыб - chris

и

гул. Это будет стоить, по крайней мере, 3 или 4 месяца полной занятости, если это не так. Я сомневаюсь, что могу получить спонсорство для этого.

Если вы хотите получить более подробную информацию (возможно, требуется знание внутренней инфраструктуры Psyco), я думаю, вы всегда можете попытаться задать один из списков рассылки psyco...

Ответ 3

Psyco предполагает, что sizeof (int) == sizeof (void *) немного повсюду. Это намного сложнее, чем просто записать 64-битные вызовы и ассемблер. В sidenote, pypy поддерживает 64-битную поддержку jit в эти дни.

Cheers, fijal

Ответ 4

+1 для "... насколько это сложно?".

Посмотрите здесь: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

Все, что ASM нужно будет портировать, и есть предположения повсюду о базовом процессоре.

Я думаю, справедливо сказать, что если бы это было тривиально для порта (или не слишком сложного), это уже было бы сделано.