2013-12-05 4 views
0

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

`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 меньше?

ответ

5

Вы можете найти более подробную информацию в официальном ARM documentation for NEON.

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

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

Предположим, у вас есть: (это псевдо-код, [] означая 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]; 

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

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

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

+0

Это ясно. Я не могу получить такие данные из http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html Большое спасибо. – BonderWu

+0

Тогда, если мне нужно сделать следующее: if (a> b + c) { a = b + c; } else if (a BonderWu

0

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

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