Я работаю над проектом, который требует, чтобы он работал как в Linux, так и в Windows.
Однако есть части кода, которые не работают в Linux из-за различных регистров в clang
и msvc
.
Есть ли способ сделать последовательное использование регистра или запросить clang
использование определенного регистра во время операции?Я хотел бы найти решение, которое не включает переписывание частей в сборке.Вот то, о чем я говорю, как отличающийся выходной код.
https://godbolt.org/z/DO9pQN
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ за комментарии:
Это для эмулятора, поэтому определенные регистры используются для определенных задач.Одним из основных является то, что мы используем RSI для определенной переменной, а затем Clang использует RSI в вызовах функций.Скомпилированный MSVC не страдает от той же проблемы.
РЕДАКТИРОВАТЬ 2 за комментарии:
Это для эмулятора xbox 360, Ксения.
В настоящее время мы пытаемся завершить работу над Linux.Однако мы сталкиваемся с проблемами clang, использующими те же регистры для вызовов функций, что и для хранения чего-то, называемого контекстом.
Наша идея состояла в том, чтобы просто попросить clang не использовать этот конкретный регистр, но я не смог найтиспособ сделать это, не просто написав это в сборке.Другая проблема с этим решением состоит в том, что gcc
может также иметь ту же проблему в другом регистре.В частности, мы смотрим на PPC-тесты.Приведенная выше ссылка представляет собой вывод из clang по сравнению с msvc.
Вот соответствующий код: