Как проверить msr.le во время выполнения с помощью встроенных модулей?

Этот вопрос возник в патче встроенного шифрования Power8. Патч обеспечивает AES с использованием встроенных функций Power8. При загрузке регистра VSX нам необходимо выполнить 128-битный обратный порядок байтов при работе на машине с прямым порядком байтов, чтобы убедиться, что регистр VSX загружает правильное значение.

Во время компиляции мы можем проверять такие макросы, как __BYTE_ORDER__. Однако я считаю, что мы должны проверять регистр состояния машины во время выполнения. Если msr.le=1, то выполняем endian swap. Также см. Руководство по среде программирования AltiVec, раздел 3.1.4. , п. 3-5.

Как проверить регистр состояния машины во время выполнения с помощью встроенных функций?


person jww    schedule 12.09.2017    source источник


Ответы (1)


Вам не нужно - это известно во время компиляции. Ваши инструкции будут закодированы совершенно неправильно, если вы работаете с противоположным порядком байтов вашего скомпилированного кода. Таким образом, ваша ОС гарантирует, что ваша программа работает с правильной настройкой MSR[LE] для порядка байтов исполняемого файла.

По сути: бит MSR[LE] управляет инструкциями, а также загрузкой/сохранением данных.

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

person Jeremy Kerr    schedule 12.09.2017
comment
Спасибо @Джереми. Итак, я ясно: нам нужно проверять только во время компиляции. Нам не нужно проверять во время выполнения. Это правильно? - person jww; 12.09.2017
comment
Да, точно. Просто используйте __BYTE_ORDER__, как вы уже нашли. Если бит LE установлен для противоположного порядка следования байтов, вы все равно не сможете запустить какой-либо код для проверки порядка следования байтов :) - person Jeremy Kerr; 12.09.2017
comment
Акк, спасибо. Я не знал, что msr[le] применяется и к инструкциям. Если бы я это знал, то, наверное, вообще не задавал бы этот вопрос :o - person jww; 12.09.2017
comment
Все хорошо! Приятно, что вопрос задан независимо, так что он для будущих пользователей... - person Jeremy Kerr; 12.09.2017