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?
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 luegomov
.Un método posible es utilizar la instrucción
zip1
junto con un vector de ceros: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 quev1
contiene todos ceros, la primera mitad resultante dev0
también contendrá todos ceros. La segunda mitad dev0
permanece sin cambios.Este método elimina la necesidad de las instrucciones
xtn2
ymov
, lo que resulta en una solución más eficiente.