es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

aarch64 xtn2 clearing lower half translates to: aarch64 xtn2 borrando la mitad inferior

¿Existe una operación similar a xtn2 pero que realmente borre la mitad inferior en lugar de dejarla tal como está? Tengo un vector de 128 bits llamado v0, cuya vista como 4s es {a,x,b,y} con x e y irrelevantes. Quiero obtener {0,0,a,b}. Si hago

xtn2 v0.4s, v0.2d
mov v0.d[0], xzr

Obtengo el resultado que quiero. ¿Hay alguna manera de hacer esto con una sola instrucción o de una manera más eficiente?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    No hay una sola instrucción que pueda lograr el resultado deseado de eliminar la mitad inferior de un vector de 128 bits mientras se mantiene intacta la mitad superior. Sin embargo, hay una forma más eficiente de hacerlo que el enfoque actual de utilizar xtn2 y luego mov.

    Un método posible es utilizar la instrucción zip1 junto con un vector de ceros:

    mov     v1.2d, #0
    zip1    v0.4s, v1.4s, v0.4s
    

    La instrucción zip1 intercala la primera mitad del primer vector fuente (v1) con la primera mitad del segundo vector fuente (v0) para producir la primera mitad del vector destino (v0). Dado que v1 contiene todos ceros, la primera mitad resultante de v0 también contendrá todos ceros. La segunda mitad de v0 permanece sin cambios.

    Este método elimina la necesidad de las instrucciones xtn2 y mov, lo que resulta en una solución más eficiente.

Comments are closed.