Выровненная загрузка/хранение с встроенными функциями NEON в GCC

69

Как вы можете заставить GCC генерировать инструкции по загрузке/хранению для согласованного доступа?

Если у нас есть что-то вроде:

uint8_t* p;
uint8x8x4_t r = vld4_u8(p);

Как вы можете заставить GCC генерировать команду загрузки, которая требует 32 байтов выравнивания?

спросил(а) 2015-06-05T15:57:00+03:00 5 лет, 4 месяца назад
1
Решение
70

Я думаю, вы можете использовать __builtin_assume_aligned (ptr, size);

например

#include <arm_neon.h>

void blend4(uint8_t *src, uint8_t *dst)
{
uint8_t *aligned_src = __builtin_assume_aligned(src, 16);
uint8_t *aligned_dst = __builtin_assume_aligned(dst, 16);
uint8x8x4_t temp = vld4_u8(aligned_src);
vst4_u8(aligned_dst, temp);
}

Формирует:

vld4.8  {d16-d19}, [r0:128]
vst4.8 {d16-d19}, [r1:128]

ответил(а) 2015-12-06T17:44:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема