Почему точка входа LLVM, созданная JIT, настолько многословна в 64-битной Windows? - PullRequest
1 голос
/ 15 марта 2011

Я играю с LLVM под Windows, просто пытаюсь понять это немного лучше, создав несколько примеров программ.В настоящее время я смотрю на HowToUseJIT.Я заметил, что когда я запускаю 64-битную версию, я получаю точку входа с довольно сумасшедшим кодом.Это сохраняет rsi, rdi и xmm6-xmm15 в стеке;затем устанавливает rax и rcx;затем восстанавливает все ранее сохраненные значения перед окончательным вызовом следующей функции в цепочке вызовов.

Есть ли для этого веская причина?Или это говорит о том, что LLVM в Windows x64 не совсем готов к прайм-тайм?

РЕДАКТИРОВАТЬ: Это было с LLVM 2.8.Я только что загрузил то, что в настоящее время находится в ветке 2.9, и оно не показывает то же самое поведение.

1 Ответ

2 голосов
/ 15 марта 2011

Это зависит. Все сохранения регистров происходят из-за Win64 ABI, когда они сохраняются вызываемыми и, следовательно, должны быть должным образом сохранены / восстановлены.

Причина, по которой они не исключают загрузки / сохранения, может быть связана с быстрым переключателем команд, используемым по умолчанию для JIT. Это даст вам бинарный код очень быстро, но жертвуя качеством.

Попробуйте переключиться на обычный кодовый код, чтобы проверить, сохраняется ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...