Articulo de referencia

Enlace de registro

Un registro de enlace (LR, por sus siglas en inglés) almacena la dirección a la que se debe regresar al finalizar una llamada a una subrutina . Esto resulta más eficiente que el...

Un registro de enlace (LR, por sus siglas en inglés) almacena la dirección a la que se debe regresar al finalizar una llamada a una subrutina . Esto resulta más eficiente que el método tradicional de almacenar las direcciones de retorno en una pila de llamadas , también conocida como pila de máquina. El registro de enlace no requiere las operaciones de lectura y escritura en la memoria que contiene la pila, lo que permite ahorrar un porcentaje considerable del tiempo de ejecución en llamadas repetidas a subrutinas pequeñas.

La arquitectura IBM POWER , y sus sucesoras PowerPC y Power ISA , cuentan con un registro de enlace de propósito especial, en el que las instrucciones de llamada a subrutinas colocan la dirección de retorno.

En otros conjuntos de instrucciones, como las arquitecturas ARM , SPARC y OpenRISC , las instrucciones de llamada a subrutinas colocan la dirección de retorno en un registro de propósito general específico , de modo que dicho registro es designado por la arquitectura del conjunto de instrucciones como el registro de enlace. La arquitectura ARMv7 utiliza el registro de propósito general R14 como registro de enlace, [ 1 ] [ 2 ] OpenRISC utiliza el registro r9, [ 3 ] y SPARC utiliza el "registro de salida 7" u o7 . [ 4 ]

En otros sistemas, como PA-RISC , RISC-V y el IBM System/360 y sus sucesores, incluyendo z/Architecture , la instrucción de llamada a la subrutina puede almacenar la dirección de retorno en cualquier registro de propósito general; por convención, se suele elegir un registro específico para usarlo como registro de enlace.

Algunas arquitecturas cuentan con dos registros de enlace: un registro de enlace de bifurcación estándar para la mayoría de las llamadas a subrutinas y un registro de enlace de interrupción especial para las interrupciones. Un ejemplo de ello es ARCv2 ( procesadores ARC que utilizan la versión 2 de la arquitectura ARCompact), que emplea los registros de propósito general r29 para el registro de enlace de interrupción y r31 para el registro de enlace de bifurcación. [ 5 ] [ 6 ] En dichas plataformas, las referencias al "registro de enlace" se referirán al registro de enlace de bifurcación.

Los procesadores ARC anteriores, basados ​​en las arquitecturas ARCompact y ARCtangent, tenían tres registros de enlace: dos registros de enlace de interrupción (ILINK) y un registro de enlace de bifurcación (BLINK). [ 5 ] [ 7 ] [ 8 ] [ 9 ] Los dos registros de enlace de interrupción eran ILINK1 (para interrupciones enmascarables de nivel 1 (baja prioridad)) e ILINK2 (para interrupciones enmascarables de nivel 2 (prioridad media)). En estas arquitecturas, r29 se usaba como registro de enlace de interrupción de nivel 1, r30 como registro de enlace de interrupción de nivel 2 y r31 como registro de enlace de bifurcación. ILINK1 e ILINK2 no eran accesibles en modo usuario en los procesadores ARC 700. [ 7 ]

El uso de un registro de enlace, ya sea un registro dedicado o de propósito general, permite llamadas más rápidas a subrutinas hoja . Cuando la subrutina no es hoja, pasar la dirección de retorno en un registro puede generar código más eficiente para thunks , por ejemplo, para una subrutina cuyo único propósito es llamar a otra subrutina con argumentos reorganizados de alguna manera. Otras subrutinas pueden beneficiarse del uso del registro de enlace porque se puede guardar en lote con otros registros utilizados por la llamada; por ejemplo, una subrutina ARM guarda los registros 4-7 junto con el registro de enlace, LR, mediante la STMDB SP!, {R4-R7, LR}segmentación de instrucciones para todas las escrituras de memoria necesarias.

Referencias

  1. "Manual de referencia de la arquitectura ARMv7-M" . ARM . Consultado el 24 de agosto de 2022 .
  2. "Manual de referencia de la arquitectura ARMv7-A y ARMv7-R; Arm Holdings" . arm.com . Consultado el 24 de agosto de 2022 .
  3. "Usando como, sección 9.33.1.2 (Características dependientes de OPENRISC/Nombres de registro)" . Consultado el 25 de agosto de 2022 .
  4. "Suplemento de aplicaciones RTEMS SPARC" (PDF) . Mayo de 2000. Archivado del original (PDF) el 8 de enero de 2019. Consultado el 19 de abril de 2013 .
  5. 1 2 "Usando como, sección 9.3.2.2 (Características dependientes de ARC/Sintaxis/Nombres de registro)" . Recuperado el 25 de agosto de 2022 .
  6. "ARC Synopsys DesignWare ARCv2 System V ABI Supplement" (PDF) . Archivado (PDF) del original el 25 de agosto de 2022. Recuperado el 25 de agosto de 2022 .
  7. 1 2 "ARCompact Instruction Set Architecture Programmer's Reference" (PDF) . Abril de 2008. Archivado (PDF) del original el 9 de junio de 2022. Recuperado el 25 de agosto de 2022 .
  8. "Referencia del programador de ARCtangent-A4" (PDF) . Agosto de 2002. Archivado (PDF) del original el 8 de marzo de 2022. Consultado el 25 de agosto de 2022 .
  9. "Lauterbach" . Archivado del original el 1 de mayo de 2016. Consultado el 25 de agosto de 2022 .