Кто-нибудь знает, как использовать встроенные функции Neon uint8x8_t vclt_s8 (int8x8_t, int8x8_t)

Я хочу сравнить 2 int8x8_t, из http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html мы можем получить описание для vclt_s8, но оно не дает нам подробных сведений.

`uint8x8_t vclt_s8 (int8x8_t, int8x8_t)`

Форма ожидаемой инструкции (й): vcgt.s8 d0, d0, d0

возвращаемое значение uint8x8_t, это сбивает меня с толку, потому что я не могу использовать if(vclt_s8(a, b)), чтобы решить, что первое меньше.

Тогда предположим, что у нас есть два int8x8_t: int8x8_t a и int8x8_t b, как мы узнаем, меньше ли a?


person BonderWu    schedule 05.12.2013    source источник


Ответы (2)


Дополнительную информацию можно найти в официальной документации ARM для NEON < / а>.

Общее описание для всех функций сравнения гласит:

Если сравнение верно для полосы, то все биты в этой полосе будут установлены в единицу. Если сравнение неверно для дорожки, все биты устанавливаются в ноль. Тип возвращаемого значения - беззнаковый целочисленный тип.

Предположим, у вас есть: (это псевдокод, [] означает 8 значений каждого вектора)

 int8x8_t a = [-1, -1, -1, -1,  1,  1,  1,  1];
 int8x8_t b = [ 0,  0,  0,  0,  0,  0,  0,  0];
uint8x8_t c = vclt_s8(a, b);

Ты получишь:

c = [255, 255, 255, 255, 0, 0, 0, 0];

Четыре первых значения a меньше, чем 4 первых значения b: все биты первых 4 значений c устанавливаются в 1, что делает их 255.

Таким же образом все 4 последних значения больше: все биты 4 последних значений c устанавливаются в 0, что делает их 0.

Надеюсь это поможет!

person mbrenon    schedule 05.12.2013
comment
Тогда, если мне нужно сделать следующее: if (a ›b + c) {a = b + c; } else if (a ‹b - c) {a = b - c; } Как можно преобразовать его в внутреннюю неоновую подсветку. Похоже, что в таком случае мы не сможем выполнить 8-операторную параллельную работу. - person BonderWu; 09.12.2013

vclt_s8 - Сравнение векторов меньше чем с каждым векторным типом данных со знаком char. vclt.datatype dest, reg1, reg2. reg1 - вектор со знаком char, несущий 8 элементов этого типа данных. reg2 - должен иметь тот же тип данных, что и указанный выше.

сравнить элемент за элементом reg1 с reg2. помещает все биты как единицу в соответствующий вектор в dest, если условие истинно, иначе помещает все биты как нули.

person user3085898    schedule 10.12.2013