У меня есть следующая программа для загрузки вектора в векторный регистр.
char *buf = (char *)malloc(10);
vector unsigned char t = vec_perm( vec_ld( 0, (unsigned char *)buf),
vec_ld( 15, (unsigned char *)buf),
vec_lvsl( 0, (unsigned char *)buf)
);
Если буфер заканчивается до конца страницы, например, давайте возьмем страницу с адресом от 0 до 4000, а буфер начинается с 3990. Второй vec_ld
выровняет адрес по адресу меньше (3990 + 15), который будет равно 4000.
Если страница, начинающаяся с адреса 4000, не сопоставлена, вышеуказанная программа завершится сбоем.
Как избежать ошибки сегментации?
Все, о чем я могу думать, это использовать memcpy
для копирования данных из буфера в векторный регистр, когда размер меньше 16 байт.