medicina meaning ingles español deuda arm

meaning - arm processor



¿Por qué "Procedure Call Standard para ARM Architecture"(AAPCS) requiere que SP esté alineado en 8 bytes? (3)

La razón principal es que ese STRD y LDRD solo pueden funcionar en direcciones alineadas de 8 bytes. Entonces, para usarlos en variables de pila, el stackpointer debe estar alineado a 8 bytes todo el tiempo.

Para citar el sitio web de ARM :

La alineación de la pila de ocho bytes es de particular beneficio para los procesadores que soportan las instrucciones LDRD y STRD, por ejemplo, los procesadores basados ​​en la arquitectura ARM v5TE y posterior. Si la pila no está alineada en ocho bytes, el uso de LDRD y STRD podría causar un error de alineación, dependiendo del objetivo y la configuración utilizada.

ARM también lo explica en detalle en esta Nota de asesoramiento de ABI .

Dado que este es un tema recurrente, estoy planteando una pregunta al respecto.

De acuerdo con AAPCS :

5.2.1.1 Restricciones de pila universal

  • SP mod 4 = 0. La pila debe estar alineada en todo momento con un límite de palabras

5.2.1.2 Restricciones de pila en una interfaz pública

  • SP mod 8 = 0. La pila debe estar alineada con dos palabras.

¿Cuál es el alineamiento racional de 8 bytes?


Se debe a ldrd y strd.

Requieren alineaciones de doble palabra.


Hay muchas razones posibles;

  1. Las herramientas de lo requieren.
  2. ldrd/strd requiere en ciertas arquitecturas.
  3. Muchos autobuses ARM tienen 64 bits de ancho. La alineación de 8 bytes dará como resultado un acceso más rápido a la memoria.
  4. Los cachés también están alineados y generalmente son más anchos que 64 bits (128B, 1024b).
  5. La tabla de páginas y los TLB se montarán en tamaños superiores a 64 bits (1k o 4k +).
  6. Los punteros etiquetados se pueden usar en códigos de excepción (C ++, señales, etc.). La alineación de ocho bytes permite usar un bit adicional.

El único que importa, el estándar lo dice . Su compilador y sus herramientas no interactuarán si no cumple con esto. Principalmente, el elemento 1 significa que las herramientas no interactuarán. El código buscará los valores incorrectos o se lanzará una excepción de máquina. Si el código de manejo de excepciones hace uso del elemento 5, también puede romper cosas.

Principalmente, el hecho de que alguien haya hecho la elección significa que la gente puede aprovechar este hecho por el uso que quiera y aún así interactuar. Los compiladores seguirán los consejos del estándar porque necesitan interoperar con otras bibliotecas y códigos que pueden no haber sido generados por ellos.

También es importante tener en cuenta que esto se aplica a ARMv7 / A. Por ejemplo, la revisión 0 de Cortex M3 (CM3_r0) no alinea SP con un múltiplo de 8 al ingresar a las excepciones.

ABI para la Nota de Asesoramiento de ARM® Architecture - SP debe estar alineado en 8 bytes al ingresar a AAPCS - funciones conformes