Conjunto de instrucciones ARM

Estoy tratando de ingresar al mundo de ARM y una cosa con la que me encuentro muy a menudo es que los procesadores ARM admiten el conjunto de instrucciones ARM y Thumb. Por lo tanto, significa que el compilador usará instrucciones Thumb que son de 16 bits para mejorar la densidad del código y usará instrucciones ARM solo cuando sea absolutamente necesario. ¿Tengo razón? Pero ahora hay procesadores más nuevos que admiten Thumb 2, que tiene instrucciones de 16 y 32 bits. Pero entonces, ¿qué hace que estos nuevos procesadores con Thumb 2 sean superiores a los que usan ARM y THUMB? Me refiero básicamente a que ambas familias tendrán a su disposición instrucciones de 16 bits y de 32 bits o hay algún beneficio de tener Thumb 2 en comparación con tener conjuntos de instrucciones Arm y Thumb.

Respuestas (2)

Un procesador ARM no puede ejecutar secuencias arbitrarias de instrucciones ARM y Thumb intercaladas. Tiene que cambiarse de un conjunto de instrucciones a otro, por ejemplo, a través de una instrucción de bifurcación. Entonces, la mayoría de las veces le dice al compilador que use instrucciones ARM o Thumb a lo largo de su proyecto. Probablemente, lo mejor que puede hacer el compilador es decidir, función por función, qué conjunto de instrucciones se ajusta mejor. Se supone que el conjunto de instrucciones Thumb2 combina las ventajas de ARM y Thumb sin los inconvenientes.

Editar:

La respuesta a la pregunta a la que @Kynit se vinculó básicamente también establece lo anterior.

Hay algunos tipos de código en los que el código ARM de 32 bits podría superar a las alternativas más nuevas. Las alternativas más nuevas, por ejemplo, no permiten que uno de los registros en un operando de memoria se desplace a la derecha . Además, algunos códigos que hacen un uso intensivo de condicionales podrían beneficiarse de tener el campo condicional de 4 bits presente en cada instrucción, en lugar de tener que usar una instrucción especial "si/entonces".

Thumb2 le brinda algunas instrucciones adicionales que le permiten aprovechar el conjunto de funciones ARM de maneras que Thumb no pudo. Thumb2 también admite instrucciones Thumb de 16 bits, por lo que no hay una gran desventaja en el tamaño del código con las nuevas instrucciones de 32 bits. En general, parece que tienes la idea correcta.

Consulte esta pregunta para obtener más información.