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

В документах Psyco говорится:

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

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

10
задан Chinmay Kanchi 3 March 2010 в 19:18
поделиться

3 ответа

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

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

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

3
ответ дан 4 December 2019 в 01:00
поделиться

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

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

и

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

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

4
ответ дан 4 December 2019 в 01:00
поделиться

+1 за «... как это может быть сложно?».

Взгляните сюда: http://codespeak.net/svn/psyco/dist/c/i386/iprocessor.c

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

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

1
ответ дан 4 December 2019 в 01:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: