neon: умножать и накапливать для 64 бит как IP и OP

Есть ли способ реализовать логику ниже в neon . Поскольку я не нашел инструкции умножения и накопления для 64-битного входного и выходного значения.

int64x2_t result;
int64x2_t num1;
int64x2_t num2;

>> result + = num1*num2  <<

person user3476225    schedule 22.05.2015    source источник


Ответы (1)


Технически два 64-битных значения могут дать 128-битный результат. Вот почему существуют следующие функции int64*int32+int32, но не та, которая принимает два 64-битных входных значения.

int64x2_t vmlal_s32 (int64x2_t, int32x2_t, int32x2_t);
int64x2_t vqdmlal_s32 (int64x2_t, int32x2_t, int32x2_t);

Если это не работает для вас, вам нужно будет использовать скалярные операции 64 * 64, за которыми следует vaddq_s64.

Примечание. Visual Studio реализует _mul128, __umul128, _mulh и __umulh для всех архитектур, включая ARM, для обработки полного сценария 64*64 = 128 бит.

person Chuck Walbourn    schedule 22.05.2015