Использование объединения (инкапсулированного в структуру) для обхода преобразований для неоновых типов данных

Я сделал свой первый подход с векторизацией SSE, где в основном только один тип данных__m128i, Переходя на Neon, я обнаружил, что типы данных и прототипы функций гораздо более специфичны, например,uint8x16_t (вектор 16unsigned char),uint8x8x2_t (2 вектора с 8unsigned char каждый),uint32x4_t (вектор с 4uint32_t) так далее.

Сначала я был полон энтузиазма (гораздо проще найти точную функцию, работающую с нужным типом данных), затем я увидел, что это за беспорядок, когда я хотел обрабатывать данные по-разному. С помощьюконкретные операторы кастинга взял бы меня навсегда. Проблема также решенаВот, Затем я предложил идею объединения, заключенного в структуру, и некоторые операторы приведения и присваивания.

struct uint_128bit_t { union {
        uint8x16_t uint8x16;
        uint16x8_t uint16x8;
        uint32x4_t uint32x4;
        uint8x8x2_t uint8x8x2;
        uint8_t uint8_array[16] __attribute__ ((aligned (16) ));
        uint16_t uint16_array[8] __attribute__ ((aligned (16) ));
        uint32_t uint32_array[4] __attribute__ ((aligned (16) ));
    };

    operator uint8x16_t& () {return uint8x16;}
    operator uint16x8_t& () {return uint16x8;}
    operator uint32x4_t& () {return uint32x4;}
    operator uint8x8x2_t& () {return uint8x8x2;}
    uint8x16_t& operator =(const uint8x16_t& in) {uint8x16 = in; return uint8x16;}
    uint8x8x2_t& operator =(const uint8x8x2_t& in) {uint8x8x2 = in; return uint8x8x2;}

};

Этот подход работает для меня: я могу использовать переменную типаuint_128bit_t как аргумент и вывод с различными неоновыми характеристиками, например,vshlq_n_u32, vuzp_u8, vget_low_u8 (в этом случае просто как вход). И я могу расширить его с большим количеством типов данных, если мне нужно. Примечание. Массивы предназначены для простой печати содержимого переменной.

Это правильный путь?
Есть ли скрытый недостаток?
Я заново изобрел колесо?
(Нужен ли выровненный атрибут?)

Ответы на вопрос(0)

Ваш ответ на вопрос