Загрузка векторов через указатели, приведения и разыменования?

Руководство по OpenPower | Типы векторных данных запрещают загружать элементы вручную и использовать приведения векторов:

Предпочтительный способ доступа к векторам по определенному приложением адресу — использование указателей на вектор и оператора разыменования C/C++ *. Подобно другим типам данных C/C++, оператор ссылки на массив [ ] может использоваться для доступа к векторным объектам с помощью указателя на вектор с обычным определением для доступа к n-му элементу вектора из указателя на вектор. Использование встроенных векторных функций, таких как vec_xl и vec_xst, не рекомендуется, за исключением языков, в которых нет доступных операторов разыменования.

vector char vca;
vector char vcb;
vector int via;
int a[4];
void *vp;

via = *(vector int *) &a[0];
vca = (vector char) via;
vcb = vca;
vca = *(vector char *)vp;
*(vector char *)&a[0] = vca;

Я нахожусь на ранних стадиях тестирования этой техники, но, похоже, приведенный выше код компилируется. Тестировались компиляторы GCC 4.0.1 (старый PowerMac G5) и GCC 4.8.5 (сервер Power 730).

Мой первый вопрос: правильно ли этот метод обрабатывает массивы невыровненных байтов?

Мой второй вопрос: выполняет ли этот метод автоматически преобразования с прямым порядком байтов в системах с прямым порядком байтов?

Мой третий вопрос: должны ли мы использовать эту технику на практике? Такое ощущение, что техника должна давать неопределенное поведение или каламбурные нарушения.


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


Ответы (1)


Мой первый вопрос: правильно ли этот метод обрабатывает массивы невыровненных байтов?

Нет, он не обрабатывает невыровненные массивы должным образом. Адреса памяти и смещения усекаются до эффективных адресов путем маскирования 4 младших битов.

Мой второй вопрос: выполняет ли этот метод автоматически преобразования с прямым порядком байтов в системах с прямым порядком байтов?

ДА.

Мой третий вопрос: должны ли мы использовать эту технику на практике?

НЕТ, не используйте его.

person jww    schedule 19.02.2018