Я думаю, что это глупая проблема, но я попытался на день решить это, не повезло, так вот.
У меня есть регистр из четырех векторов (float32x4), и я хочу сделать некоторый процесс для некоторых из них, а другой я хочу установить его на 0.
Например, эта проблема в c:
for (int i=1; i<=4; i++)
{
float b = 4/i;
if(b<=3)
result += process(b);
}
поэтому первый не будет обрабатываться, но другой будет, поэтому мне нужен регистр, в котором первая строка имеет 0, а другая - результат.
Но я не знаю, как это сделать на неон.
Я знаю, что есть vcltq_f32, но я попытался с этим, но без результата.
Как это:
const float32x4_t vector_3 = vdupq_n_f32(3.0f);
uint32x4_t mask = vcleq_f32(vector_b, vector_3);
vector_b = (float32x4_t)vandq_u32((uint32x4_t)vector_b, mask);
Я мало знаю о Neon, но в большинстве SIMD-архитектур вы должны это делать, сравнивая и маскируя (побитовое И). Вы используете команду сравнения, которая затем генерирует маску, которую вы обычно можете использовать для этого.