¿La forma más rápida de probar un registro NEON de 128 bits para un valor de 0 usando intrínsecos?

Estoy buscando la forma más rápida de probar si un registro 128 de NEON contiene todos los ceros, usando los intrínsecos de NEON. Actualmente estoy usando 3 operaciones OR y 2 MOVs:

uint32x4_t vr = vorrq_u32(vcmp0, vcmp1);

uint64x2_t v0 = vreinterpretq_u64_u32(vr);
uint64x1_t v0or = vorr_u64(vget_high_u64(v0), vget_low_u64(v0));

uint32x2_t v1 = vreinterpret_u32_u64 (v0or);
uint32_t r = vget_lane_u32(v1, 0) | vget_lane_u32(v1, 1);

if (r == 0) { // do stuff }

Esto se traduce por gcc al siguiente código de ensamblaje:

VORR     q9, q9, q10
VORR     d16, d18, d19
VMOV.32  r3, d16[0]
VMOV.32  r2, d16[1]
VORRS    r2, r2, r3
BEQ      ...

¿Alguien tiene una idea de una manera más rápida?

Respuestas a la pregunta(4)

Su respuesta a la pregunta