J'ai un résultat de comparaison de comparaison de deux opérandes à virgule flottante comme suit; Ce que je dois faire est basée sur le résultat de la comparaison doivent effectuer les opérations suivantes: i.e.:NEON pack vector compare résultat en bitmap
neon_gt_res = vcgtq_f32(temp1, temp2);
if(neon_gt_res[0]) array[0] |= (unsigned char)0x01;
if(neon_gt_res[1]) array[0] |= (unsigned char)0x02;
if(neon_gt_res[2]) array[0] |= (unsigned char)0x04;
if(neon_gt_res[3]) array[0] |= (unsigned char)0x08;
Mais l'écriture comme celui-ci est à nouveau équivalent à la comparaison multiple. Comment puis-je l'écrire de manière optimale dans les néons C intrinsèques.
Sur x86, ce serait array[0] |= _mm_movemask_ps(cmp_gt_res);
De quel type est le tableau ' [] '? Je suppose que c'est un tableau d'octets, mais que votre type C implique. Vous voudriez un vecteur de '1 2 4 8' que vous masquez avec le résultat de la comparaison. Mais alors vous auriez besoin d'un shuffle pour empaqueter ce résultat dans les 4 octets bas d'un registre NEON, je pense. Je ne connais pas très bien NEON, mais probablement si vous pouvez le faire, vous voudrez alors faire un chargement de 32 bits de la matrice, faire un OU emballé, et stocker. –
array [] est de type unsigned char. Le résultat de la comparaison est de type int32x4_t, donc je ne peux pas utiliser ce masque. Existe-t-il un autre moyen de m'aider avec ce – Lakshmi
Mais NEON at-il pas d'instructions de byte-shuffle que vous pouvez utiliser pour empaqueter 1 octet de chaque élément du résultat de la comparaison? –