Inventos patentados en España.

Inventos patentados en España.

Inventos patentados en España en los últimos 80 años. Clasificación Internacional de Patentes CIP 2013.

PROCEDIMIENTO Y APARATO PARA RECONOCER UNA LLAMADA A UNA SUBRUTINA.

Patente Internacional (Tratado de Cooperación de Patentes). Resumen:

Un procedimiento (500) de reconocimiento de una llamada a una subrutina, que comprende: la detección

(510) de un cambio no secuencial en el flujo de un programa; la recuperación (520) de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa; la comparación (530) de la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual que el contenido del registro de enlaces, se empuja (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como una dirección de retorno.

Solicitante: QUALCOMM INCORPORATED.

Nacionalidad solicitante: Estados Unidos de América.

Dirección: ATTN: INTERNATIONAL IP ADMINISTRATION 5775 MOREHOUSE DRIVE SAN DIEGO, CALIFORNIA 92121 ESTADOS UNIDOS DE AMERICA.

Inventor/es: MORROW,MICHEAL WILLIAM.

Fecha de Publicación de la Concesión: 11 de Febrero de 2011.

Fecha Solicitud PCT: 27 de Noviembre de 2007.

Fecha Concesión Europea: 13 de Octubre de 2010.

Clasificación Internacional de Patentes: G06F9/38F2B, G06F9/32B2.

Clasificación PCT: G06F9/38 (...Ejecución simultánea de instrucciones, p. ej. segmentación, anticipación [3]).

Países PCT: Austria, Bélgica, Suiza, Alemania, Dinamarca, España, Francia, Reino Unido, Grecia, Italia, Liechtensein, Luxemburgo, Países Bajos, Suecia, Mónaco, Portugal, Irlanda, Eslovenia, Finlandia, Rumania, Chipre, Lituania, Letonia.

Volver al resumen de la patente.

PROCEDIMIENTO Y APARATO PARA RECONOCER UNA LLAMADA A UNA SUBRUTINA.
Descripción:

Campo de la invención

La presente invención se refiere generalmente al campo de los procesadores canalizados y, en particular, a un procedimiento de reconocimiento de una llamada a una subrutina para reducir la energía y aumentar la utilización del procesador canalizado.

Antecedentes

Los microprocesadores realizan tareas computacionales en una amplia variedad de aplicaciones. Casi siempre es deseable un rendimiento mejorado del procesador, para permitir un funcionamiento más rápido y/o una mayor funcionalidad a través de los cambios en el software. En muchas aplicaciones incrustadas, tales como los dispositivos electrónicos portátiles, la conservación de la energía es también un objetivo importante en el diseño e implementación del procesador.

Muchos procesadores de módem emplean una arquitectura canalizada, en la que las instrucciones secuenciales se superponen durante la ejecución para aumentar el rendimiento total del procesador. Con el mantenimiento de una ejecución nivelada a través de ayudas canalizadas se logra un alto rendimiento. La mayoría de los procesadores de módem utilizan también una memoria jerárquica con memorias rápidas de caché en chip que almacenan copias locales de los datos e instrucciones recientemente accedidos.

Los programas del mundo real incluyen instrucciones de bifurcación indirecta, cuyo comportamiento de bifurcación real no se conoce hasta que la instrucción se evalúa en profundidad en la pipeline de ejecución. La mayoría de los procesadores de módem emplean alguna forma de predicción de bifurcación, en la que el comportamiento de bifurcación de instrucciones de bifurcación indirecta se predice anticipadamente en la pipeline, tal como durante una etapa de tubería de búsqueda y carga o de descodificación. Utilizando una técnica de predicción de bifurcación, el procesador de forma especulativa busca y carga la diana de la instrucción de bifurcación indirecta y redirige la pipeline para iniciar el procesamiento de las instrucciones especulativamente cargadas. Cuando se determina la diana de bifurcación real en una etapa de tubería posterior, tal como una etapa de tubería de ejecución, si la bifurcación se predijo erróneamente, las instrucciones especulativamente cargadas deben de eliminarse de la pipeline y cargarse nuevas instrucciones de la dirección de la diana correcta. Las instrucciones de precarga en respuesta a una predicción de diana de bifurcación errónea impactan de forma adversa en el rendimiento del procesador y en el consumo de energía.

Un ejemplo de instrucciones de bifurcación indirecta incluye las instrucciones de bifurcación utilizadas para volver de una subrutina. Por ejemplo, una llamada de retorno desde una subrutina puede incluir una instrucción de bifurcación cuya dirección de retorno esté definida por el contexto de un registro. Una dirección de retorno define la siguiente instrucción a cargar después de que se complete la subrutina y es habitualmente la instrucción después de una instrucción de bifurcación desde la cual se llamó originalmente a la subrutina. Muchas arquitecturas de alto rendimiento designan un registro de propósito general particular para su uso en los retornos de subrutinas, habitualmente denominado registro de enlaces.

Para mayor facilidad, una llamada de retorno también puede denominarse instrucción de retorno de bifurcación. Para que un procesador canalizado utilice predicción de bifurcación para una instrucción de retorno de bifurcación, el software convencional incluye una llamada a subrutina explícita tal como una bifurcación y una instrucción de enlace para grabar la dirección de retorno dentro del registro de enlaces. Muchas implementaciones de alto rendimiento incluyen una estructura de pila de enlaces en la etapa de descodificación del procesamiento de la instrucción de bifurcación y enlace. Los valores de retorno de enlace son empujados dentro de esta pila, para permitir una predicción de bifurcación exacta cuando retornan las subrutinas correspondientes. Las estructuras convencionales de pila de enlaces contienen una lista de direcciones de retorno para soportar múltiples llamadas a subrutinas que fluyen a través de una pipeline y para soportar el anidamiento de múltiples niveles de llamadas a subrutinas. Subsiguientemente, cuando la instrucción de retorno de bifurcación dentro de la subrutina está siendo descodificada, se lee la dirección de retorno de la estructura de pila de enlaces para ser utilizada en la predicción para predecir la dirección diana si otro hardware de predicción de bifurcación dicta que el procesador debe redirigir la pipeline. Si el resultado predicho indica el redireccionamiento de la pipeline, la pipeline inicia la carga de instrucciones de la dirección de retorno que se leyó de la estructura de la pila de enlaces.

Sin embargo, existen muchos compiladores y código heredado que no generan o incorporan

instrucciones convencionales de bifurcación y enlace cuando llaman a una subrutina. Por lo tanto, en esas situaciones, no se utiliza la estructura de la pila de enlaces dando como resultado que la integridad de la estructura de la pila de enlaces quede comprometida. Por ejemplo, la canalización convencional de una dirección de retorno de una estructura de pila 5 de enlaces puede que no esté correlacionada con la instrucción de retorno que estimuló el despliegue de la dirección de retorno en primer lugar. Un efecto de una estructura de pila de enlaces comprometida incluye mayores predicciones erróneas en las instrucciones de retorno. Además, en aquellas situaciones en las que no se reconoce una llamada a una subrutina en un segmento de programa, el problema se acrecienta ya que el hardware de predicción de bifurcación no puede utilizarse para poblar las instrucciones de la pila de enlaces en las subsiguientes llamadas a subrutinas no reconocibles. A modo de ejemplo, remítase a la siguiente tabla que contiene un segmento de código que podría ejecutarse sobre un procesador compatible ARM Ltd.:

0x00899808 LDR LR, 0X00899818

0X008998C ADD

0X0089981 0 SUB

0X0089981 4 BR 0X00990000

0X0089981 8 INSTRA

0X0089981 C INSTRB

0X00990000 ADD

0X00990004 SUB

0X00990008 MOV

0X0099000C BX LR

15 El flujo del programa del segmento de código de la tabla 1 incluye el procesamiento de las instrucciones en orden secuencial empezando en la dirección 0x00899808 y hasta la dirección 0x00899814, En la dirección 0x00899814, una instrucción de bifurcación cambia el flujo del programa de forma que la siguiente instrucción procesada se sitúa en la dirección 0x00990000, el inicio de una subrutina.

La combinación de la configuración del registro de enlaces (es decir, LDR LR 0x00899818) y de la instrucción de bifurcación (es decir BR) prepara al procesador para una bifurcación subsiguiente hacia una subrutina. En este ejemplo, la subrutina real a la cual se efectúa la llamada empieza en la dirección 0x00990000 y termina en la dirección 0x009900. La instrucción LDR LR, 0x00899818 indica que la dirección 0x00899818 debe copiarse dentro del registro de enlaces (LR) dando como resultado el almacenamiento de la dirección de retorno, la dirección 0x00899818, dentro del registro de enlaces. Al final de la subrutina, se recupera la dirección de retorno del registro de enlaces. Más específicamente, la dirección de retorno se recupera cuando se ejecuta BX LR, la instrucción de retorno de bifurcación. Existen otros segmentos de código que implican una llamada a una subrutina e incluyen instrucciones que modifican el registro de enlaces tal como la combinación secuencial de las instrucciones MOV LR, PC BR[A] donde [A] es la dirección el inicio de una subrutina.

RESUMEN

La presente invención reconoce la omnipresencia de dicho software heredado, compiladores que producen segmentos de código que tienen dos o más instrucciones que se corresponden con una llamada a una subrutina, así como el coste implicado en la reescritura del software heredado para utilizar instrucciones de bifurcación y enlace convencionales cuando se llama a una subrutina. Además, la presente invención reconoce la necesidad de que los microprocesadores desarrollados hoy en día reconozcan las secuencias de instrucciones que implican una llamada a una subrutina para utilizar una estructura de pila de enlaces y predecir de forma efectiva la dirección de retorno cuando se ejecuta una instrucción de retorno de bifurcación.

De acuerdo con una realización, se suministra un procedimiento para reconocer una llamada a una subrutina. El procedimiento incluye la detección de un cambio no secuencial en el flujo del programa, la recuperación de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa y la comparación de la siguiente dirección secuencial con los contenidos del registro para determinar si el cambio no secuencial es una llamada a una subrutina.

Otra realización se refiere a un aparato para reconocer una llamada a una subrutina. El aparato incluye un circuito que tiene tres entradas. La primera entrada está configurada para recibir el contenido de un registro, la segunda entrada está configurada para recibir un cambio no secuencial en el flujo del programa. La tercera entrada está configurada para recibir la siguiente dirección secuencial después del cambio no secuencial en el flujo del programa. El circuito está configurado para comparar la siguiente dirección secuencial y el contenido del registro para determinar si el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

De acuerdo con otra realización adicional, se presenta otro aparato. El aparato comprende un procesador canalizado para procesar instrucciones y un circuito acoplado a la misma. El circuito está configurado para recibir el contenido de un registro, una indicación de un cambio no secuencial en el flujo del programa y la siguiente dirección secuencial después de la indicación del cambio no secuencial en el flujo del programa. El circuito está configurado también para comparar el contenido del registro de enlaces con la siguiente dirección secuencial para determinar si la indicación del cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Se entiende que otras realizaciones de la presente invención serán fácilmente evidentes para aquellos expertos en la materia a partir de la siguiente descripción detallada, en la que se muestran y se describen diferentes realizaciones de la invención a modo de ilustración. Según se desarrollará posteriormente, la invención es capaz de otras realizaciones diferentes y sus diferentes detalles son capaces de ser modificados en diferentes aspectos, todo ello sin apartarse de la presente invención. Consecuentemente, los dibujos y la descripción detallada deben considerarse de naturaleza ilustrativa y no descriptiva.

BREVE DESCRIPCIÓN DE LOS DIBUJOS

La figura 1 es un diagrama de bloques funcionales de un procesador.

La figura 2 es un diagrama de sincronización que sigue un flujo ejemplar de instrucciones a través de la pipeline ilustrada en la figura 1.

La figura 3 es una parte ejemplar de un caché de direcciones diana de bifurcación (BTAC).

La figuras 4A y 4B (colectivamente figura 4) son realizaciones ejemplares del circuito lógico IsCall ilustrado en la figura 1.

La figura 5 es un diagrama de flujo que ilustra un procedimiento que reconoce una llamada a una subrutina.

DESCRIPCIÓN DETALLADA

La figura 1 representa un diagrama de bloques funcionales de un procesador 100 en el cual pueden emplearse aspectos de la presente invención. El procesador 100 incluye un caché 110 de instrucciones (I-caché) para almacenar las instrucciones recientemente procesadas y una interfaz 136 de memoria para acceder a la memoria 138 cuando no se encuentra una instrucción en el I-caché 110. La memoria 138 puede situarse dentro o fuera del procesador 100 y puede comprender un componente de memoria de capa 2 (L2).

El procesador 100 también incluye una pipeline 105 de instrucciones para procesar instrucciones y un circuito 132 de predicción de bifurcación para predecir una dirección diana para una instrucción de bifurcación indirecta y predecir cuándo redirigir la pipeline 105 de instrucciones para procesar la dirección diana. Si el circuito 132 de predicción de bifurcación predice el redireccionamiento de la pipeline 105 de instrucciones, la instrucción de bifurcación indirecta se dice que ha sido «tomada predicha». Si la instrucción de bifurcación indirecta ha sido «tomada predicha», el circuito 132 de predicción de bifurcación predice una dirección diana de la instrucción de bifurcación indirecta y redirige la pipeline 105 de instrucciones para iniciar las instrucciones de carga en la dirección diana.

El procesador 100 procesa instrucciones en una pipeline 105 de instrucciones de acuerdo con un circuito 122 de lógica de control. En algunas realizaciones, la pipeline 105 puede ser un diseño superescalar que tiene dos o más pipelines paralelas. La pipeline 105 incluye varias etapas de tubería: una etapa 102 de unidad de carga de instrucciones (IFU), una etapa 106 de descodificación (DCD), una etapa 108 de cola de instrucciones (IQ), una etapa 112 de acceso al registro (RACC) y una etapa 120 de ejecución (EXE). En algunas realizaciones, una etapa de tubería puede procesar una sola instrucción a la vez. En otra realización, una etapa de tubería puede procesar concurrentemente dos o más instrucciones a la vez. Debe observarse que las etapas de tubería pueden añadirse o substraerse de la pipeline 105 sin limitar el ámbito de la presente invención. El procesador 100 incluye también un archivo 118 de registros de propósito general (GPR) que incluye registros que, a través de una convención micro arquitectural, son accesibles por las etapas de tubería 112 y 120.

La etapa 102 de la unidad de carga de instrucciones (IFU) intenta recuperar una instrucción del I-caché 110. Si no se encuentra una dirección de instrucción en el I-caché 110, la etapa 102 de la unidad de carga de instrucciones (IFU) inicia una solicitud para recuperar la instrucción correspondiente de la memoria 138. La etapa 106 de descodificación descodifica completamente una instrucción. Además, aparte de las funciones convencionales realizadas en una etapa de descodificación, la etapa 106 de descodificación reconoce instrucciones convencionales de llamada a subrutinas tales como la instrucción de bifurcación y enlace del ARM Inc. y escribe una dirección de retorno dentro de la estructura 134 de la pila de enlaces. La estructura 134 de la pila de enlaces puede ser un conjunto de registros gestionados como un búfer circular. La dirección de retorno es una dirección de una instrucción hacia la cual debe redirigirse la pipeline 105 en la finalización de una subrutina. En una instrucción de bifurcación indirecta, la etapa 106 de descodificación puede invocar al circuito 132 de predicción de bifurcación para determinar cuándo comenzar la carga de instrucciones en la pipeline 105 a partir de una diana especulativa de la instrucción de bifurcación.

La etapa 108 de cola de instrucciones almacena temporalmente una o más instrucciones para permitir la carga especulativa para continuar durante los atascos, si los hubiera, de la pipeline de ejecución. La etapa 112 de acceso al registro recupera uno o más operandos del registro 118 de propósito general según sean necesarios para una instrucción. La etapa 120 de ejecución (EXE), incluye componentes conocidos tales como unidades aritmético-lógicas y similares para ejecutar las instrucciones. Los resultados producidos por la etapa 120 de ejecución se describen en el archivo GPR 118. Durante la etapa 120 de ejecución, tiene lugar la resolución real de la bifurcación para determinar si es correcta la predicción de bifurcación hecha durante la etapa 106 de descodificación. Si la resolución real de la bifurcación difiere del destino predicho, se dice que una bifurcación se ha predicho erróneamente.

La etapa 120 de ejecución también invoca al circuito lógico IsCall 114 para determinar si una instrucción de bifurcación se corresponde con una llamada a subrutina implícita. El circuito lógico IsCall 114 graba este resultado en el circuito 132 de predicción de bifurcación (BP) para la subsiguiente ejecución de la instrucción de bifurcación a ser interpretada como una llamada a subrutina implícita durante una etapa temprana de tubería tal como DCD 106

o IFU 102. En una realización, el resultado grabado es un marcador que se almacena en el circuito 132 BP y se asocia con la instrucción de bifurcación. Si la instrucción de bifurcación es una llamada a subrutina implícita, el circuito lógico IsCall 114 actualiza la estructura 134 de la pila de enlaces con la dirección de la instrucción que sigue a la instrucción de bifurcación. El circuito lógico IsCall 114 se describirá con más detalle en relación con el análisis de la figura 4.

Aunque la figura 1 describe la etapa 120 de ejecución acoplándose con el circuito lógico IsCall 114, el circuito lógico IsCall 114 puede acoplarse alternativamente con una etapa anterior en la pipeline 105. En una realización alternativa la etapa 106 de descodificación (DCD) puede acoplarse con el circuito lógico IsCall 114. En esta realización, la etapa 106 de descodificación (DCD) invoca al circuito lógico IsCall 114 una vez que se determine que una instrucción BR ha sido descodificada.

Aquellos expertos en la materia reconocerán que son posibles numerosas variaciones del procesador 100. Por ejemplo, procesador 100 puede incluir un caché de segundo nivel (L2) para el I-caché 110. Además, en una realización particular pueden omitirse uno o más bloques funcionales descritos en el procesador 100. Otros bloques funcionales que pueden residir en el procesador 100, tales como un búfer de traducción lateral, un caché de datos y similares, no guardan relación con una descripción de la presente invención, y se omiten para mayor claridad.

La figura 2 es una diagrama 200 de sincronización que sigue un flujo de instrucciones a través de la pipeline 105 ilustrada en la figura 1. En particular, el flujo de instrucciones dibujado en el diagrama 200 de sincronización es el segmento de código que se ilustra en la tabla 1. Para el propósito de la presente invención, el término «llamada a subrutina implícita» se refiere a una combinación de dos o más instrucciones cuya función combinada es configurar registros que preparan una llamada a subrutina y llamar a una subrutina. Por ejemplo, con referencia a la tabla 1, las dos instrucciones, LDR LR, 0x00899818 y BR 0x00990000 definen una llamada a subrutina implícita. En este caso, la instrucción LDR define el inicio de la llamada a subrutina implícita y la instrucción BR define el final de la llamada a subrutina implícita.

Las columnas 210A – 210E del diagrama 200 de sincronización se corresponden con las etapas de la pipeline 105. Las filas 1 -11 se corresponden con ciclos de sincronización secuenciales. Para propósitos explicativos, cada etapa de tubería procesa una instrucción por ciclo. Sin embargo, cualquier experto en la materia reconocerá que las enseñanzas de la presente invención se aplican tanto a etapas de tuberías de ciclos múltiples como a etapas de tubería que sean capaces de procesar múltiples instrucciones por ciclo.

La columna 210F del diagrama 200 de sincronización se corresponde con los contenidos de un marcador denominado IsCallFlag que indica si una instrucción de bifurcación indirecta da como resultado una llamada a una subrutina. La columna 210G se corresponde con los contenidos del registro de enlaces (LR). La columna 210H se corresponde con los contenidos de una estructura de pila de enlaces tal como la estructura 134 de pila de enlaces como resultado del circuito lógico IsCall 134. En general, las instrucciones entran en la etapa 210A de IFU y se propagan a la siguiente etapa en el siguiente ciclo. En el ciclo 1, la instrucción LDR LR, 0x00899818 está en la etapa 210A de IFU. Las instrucciones ADD, SUB, BR, y la instrucción genérica, INSTRA, son cargadas secuencialmente desde la etapa 210A de la tubería de IFU. En el ciclo 5, en el momento 215, la etapa 210D de descodificación descodifica la instrucción BR e invoca a una predicción de bifurcación, tal como el circuito 132 de predicción de bifurcación. La predicción de bifurcación predice que se tomará la instrucción BR y, de esta forma la pipeline 105 se redirige para cargar secuencialmente las instrucciones de la subrutina ADD, SUB, MOV y BX. La subrutina comprende todas las instrucciones que comienzan con la instrucción ADD y finalizan con la instrucción BX según se muestra en la tabla 1. Antes de redirigir la pipeline 105, INSTRA se saca de la pipeline 105 ya que se cargó antes de la predicción de bifurcación. El ciclo vacío que sigue a la instrucción BR describe la posición que podría haber tomado la instrucción INSTRA en la pipeline 105 si no hubiese sido eliminada.

A partir de los ciclos 1 -5, la instrucción LDR se propaga a través de las etapas 210B 210E de la tubería. En el ciclo 5, en el momento 205, la etapa 210E de ejecución ejecuta la instrucción LDR para cargar la dirección de retorno 0x00899818 dentro del registro de enlaces (LR). En el momento 220, la dirección de retorno (RA) 0x00899818 está disponible en el registro de enlaces. La dirección de retorno se refiere a INSTRA en la tabla 1 que significa que al final de la ejecución de la subrutina que empieza en la dirección 0x00990000, el flujo de ejecución de instrucciones debería volver a la dirección 0x00899818.

En el momento 225, la etapa 210E de ejecución ejecuta la instrucción BR. La etapa 210E de ejecución valida si debería haberse tomado la instrucción BR. La etapa 210E de ejecución también invoca al circuito lógico IsCall 114 para determinar si la instrucción BR es una bifurcación a una subrutina. La frase «bifurcación a una subrutina» también se refiere como llamada a subrutina. El circuito lógico IsCall 114 utiliza la siguiente dirección que sigue a la instrucción BR que es la dirección de INSTRA aunque INSTRA se eliminase previamente de la pipeline 105. Ya que la dirección de la siguiente instrucción es igual a la dirección de retorno almacenada en el registro de enlaces (LR), el circuito lógico IsCall 114 fija la IsCallFlag 210F asociada con la instrucción BR y la almacena con la dirección de la instrucción BR en el circuito 132 de predicción de bifurcación. Un elemento de almacenamiento ejemplar de predicción de bifurcación se describirá con relación a la figura

3. También, el circuito lógico IsCall 114 copia la dirección de retorno en la estructura 210H de estado de enlaces en el momento 230.

La instrucción final de la subrutina BX se descodifica en el ciclo 10, momento 235. La etapa 210B de descodificación reconoce la instrucción BX como una llamada de retorno y, de esta forma, la predicción 132 de bifurcación predice el flujo del programa sacando la dirección de retorno (RA) de la estructura 210H de estado de enlaces. La etapa 210B de descodificación redirige la pipeline 105 para que empiece la descarga desde INSTRA cuya dirección es la misma que la dirección de retorno (RA). Observe el punto de referencia 240. También en el ciclo 11, ya que se disparó la RA (es decir, se leyó y se eliminó de la estructura de estado de enlaces), la estructura 210H de estado de enlaces ya no contiene la dirección de retorno. Utilizando el procesador de la figura 1 tal como se ilustra en el diagrama 200 de sincronización, la llamada a subrutina implícita definida por las instrucciones combinadas LDR y BR permitió que la estructura de estado de enlaces almacenase la dirección de retorno.

La próxima vez que una instrucción BR sea procesada por la pipeline 105, el circuito 132 de predicción de bifurcación puede utilizar la IsCallFlag fijada asociada con la dirección de la instrucción BR almacenada en la misma para poblar la estructura de estado de enlaces antes de que la instrucción BR sea procesada por la pipeline 105 por primera vez.

En el ciclo de reloj n, la misma instrucción BR entra en la pipeline 105 en la etapa 210A de IFU. En el ciclo de reloj n + 1, INSTRA entra en la etapa 210A de IFU y la instrucción BR es descodificada por la etapa 210B de DCD. Durante la etapa 210B de DCD, el circuito 132 de predicción de bifurcación busca la dirección de la instrucción BR y encuentra que tiene un correspondiente conjunto IsCallFlag que indica que la instrucción BR es una llamada a una subrutina. Consecuentemente, la etapa 210B de DCD empuja la siguiente dirección, la dirección para INSTRA en la estructura 210H de estado de enlaces según se muestra en la referencia 245.

La figura 3 es una parte ejemplar de un caché 300 de dirección de diana de bifurcación (BTAC). El BTAC 300 es empleado de forma adecuada por el circuito 132 de predicción de bifurcación. El BTAC 300 incluye al menos tres columnas, columnas 310A, 310B y 310N. La columna 310A contiene direcciones de instrucciones de bifurcación. La columna 310B contiene direcciones de diana de bifurcación, la última dirección a la cual se bifurcó la instrucción de bifurcación correspondiente. La columna 310N contiene el valor de IsCallFlag. IsCallFlag, cuando está configurada, indica que la instrucción de bifurcación asociada se corresponde con una llamada a una subrutina. La fila 305 se corresponde con la instrucción BR en la tabla 1, donde su dirección es 0x00899814, su dirección diana es 0x00990000 que se corresponde con la instrucción ADD y su IsCallFlag está configurada.

Las figuras 4A y 4B ilustran diferentes realizaciones de un circuito lógico IsCall. Estas realizaciones pueden acoplarse para ejecutar la etapa 120 de tubería según se muestra en la figura 1 o cualquier tubería anterior a la etapa de tubería. La figura 4A es una realización ejemplar del circuito lógico IsCall 400 que puede emplearse de forma adecuada en la figura

1. El circuito lógico IsCall 400 incluye un comparador 440, una puerta OR 445 de dos puertos y dos puertas AND 450 de dos puertos. El comparador 440 recibe dos entradas; una entrada que contiene el valor del registro 405 de enlaces (LR) y una entrada que contiene la siguiente dirección 410. Según se describe en la figura 2, la siguiente dirección es la siguiente dirección secuencialmente cargada después de una instrucción BR. La salida del comparador 440 se acopla con un puerto de los dos puertos de la puerta OR 445. El otro puerto se acopla con una señal 415 que indica si la instrucción actual en la etapa de tubería acoplada con el circuito lógico IsCall 400 es una instrucción de bifurcación y enlace. La puerta OR 445 es opcional y se usa para soportar instrucciones de bifurcación y enlace de la misma forma que las subrutinas implícitas. La salida de la puerta OR 445 se acopla con un puerto de los dos puertos de la puerta AND 450. El otro puerto se acopla con una señal IsTakenBranch 420 generada por el circuito 132 de predicción de bifurcación. El circuito 132 de predicción de bifurcación genera la señal IsTakenBranch 420 a partir de la instrucción BR que invocó el circuito lógico IsCall 400. En una realización no especulativa, la etapa EXE 120 puede generar alternativamente la señal IsTakenBranch 420. Cuando la salida 425 del circuito lógico IsCall 400 es verdadera, la salida 425 se utiliza para configurar IsCallFlag en el circuito 132 de predicción de bifurcación y para copiar la dirección de retorno en la estructura de estado de enlaces. Aquellos expertos en la materia reconocerán que pueden utilizarse otros circuitos lógicos en el circuito lógico IsCall 400 para controlar cuándo indicar que una instrucción de bifurcación indirecta se corresponde con una llamada a una subrutina y, si es así, actualizar la estructura de estado de enlaces con la siguiente dirección.

La figura 4B es una segunda realización del circuito lógico IsCall 401 que puede emplearse de manera adecuada en la figura 1. El comparador 440 y sus entradas y la salida del circuito lógico IsCall 401 son iguales que aquellas representadas en la figura 4A. La salida del comparador 440 alimenta, como entrada, a la puerta AND 555. La puerta AND 555 recibe también como entrada la señal IsBranch 430. La señal IsBranch 430 está activa cuando la instrucción actual que está siendo procesada por la etapa de tubería acoplada con el circuito lógico IsCall 401 es una instrucción de bifurcación. Durante su funcionamiento, si la instrucción actual es una instrucción de bifurcación y la siguiente dirección después de la instrucción de bifurcación es igual a la dirección contenida en el registro de enlaces, la señal 425 de salida se utiliza para asociar un marcador de llamada con esta instrucción de bifurcación en el circuito 132 de predicción de bifurcación y la estructura 134 de estado de enlaces se actualiza con la siguiente dirección. Esta segunda realización permite que la instrucción de bifurcación y enlace sea procesada de forma convencional fuera del circuito lógico IsCall 401.

La figura 5 es una lista de flujos que ilustra un proceso 500 de reconocimiento de una subrutina. En el bloque 510 se detecta un cambio no secuencial en el flujo del programa, por ejemplo, una instrucción de bifurcación. Más específicamente, se detecta una instrucción de bifurcación que no es una instrucción de bifurcación y enlace. Esta detección puede llevarse a cabo mediante técnicas de decodificación conocidas. En el bloque 515, el procedimiento 500 determina si el cambio no secuencial en el flujo del programa detectado ya ha sido indicado como una llamada a una subrutina. A modo de ejemplo, si la instrucción de bifurcación ya ha sido procesada por pipelina 105, se generará un marcador de llamada en la instrucción de bifurcación del circuito 132 indicando que se ha señalado o marcado la actual instrucción de bifurcación como una llamada a una subrutina. El procedimiento 500 habrá procesado este cambio no secuencial en el flujo de programa antes y, de esta manera procede a bloquear 550. Si el cambio no secuencial detectado en el flujo del programa no se ha señalado previamente como una llamada a una subrutina, el procedimiento 500 avanza hasta el bloque 520. En el bloque 520, se recupera la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa. Por ejemplo, la siguiente dirección después de la instrucción de bifurcación. La dirección siguiente puede ser suministrada por diferentes medios incluyendo una etapa de tubería precedente, un circuito de generación de un contador del programa (PC) siguiente en la etapa 102 de IFU o similares. En el bloque 530, la siguiente dirección secuencial se compara con el contenido de un registro de enlaces. Tal como se analizó previamente con relación a la figura 2, al registro de enlaces (LR) se le asigna la dirección de retorno antes de una llamada a una subrutina. Si se encuentra que la siguiente dirección secuencial es igual que el contenido del registro de enlaces, el procedimiento avanza hasta el bloque 540. En el bloque 540, el cambio no secuencial detectado en el flujo del programa se señala como una llamada a una subrutina. Por ejemplo, un marcador asociado con una instrucción de bifurcación puede configurarse y almacenarse en el circuito 132 de predicción de bifurcación. Entonces el procedimiento 500 avanza hasta el bloque 550.

En el bloque 550, el contenido del registro de enlaces es empujado hasta una estructura de pila de enlaces. Por ejemplo, cuando se ejecuta una instrucción de bifurcación según se ilustra en la figura 2, el registro de enlaces se copia en la estructura de pila de enlaces. Igualmente, la siguiente dirección secuencial puede ser alternativamente empujada hasta la estructura de pila de enlaces. Aunque no se ilustra, el cambio no secuencial en el flujo del programa provoca que una subrutina sea procesada por la pipeline. En el bloque 560, el procedimiento 500 espera una llamada de retorno que indique el final de la subrutina. Una vez que se reconoce la llamada de retorno, el procedimiento 500 avanza hasta el bloque 570 donde se despliega la siguiente dirección secuencial de la estructura de pila de enlaces. El bloque 570 permite que un procesador redirija el procesamiento de una pipeline para empezar el procesamiento de las instrucciones en la dirección de la llamada de retorno.

El procedimiento 500 avanza hasta el bloque 580 de espera que espera el próximo cambio no secuencial en el flujo del programa. Una vez que el siguiente cambio no secuencial en el flujo del programa llega en una pipeline, el procedimiento 500 avanza hasta el bloque 510 y luego hasta el bloque 515. Si el siguiente cambio no secuencial en el flujo del programa ha sido previamente detectado, el cambio no secuencial en el flujo del programa ya habrá sido indicado, así, el bloque 515 avanza hasta el bloque 550.

Los diferentes bloques lógicos, módulos, circuitos, elementos y/o componentes descritos en relación con las realizaciones aquí descritas pueden implementarse o realizarse con un procesador de propósito general, un procesador de señales digitales (DSP), un circuito integrado específico para la aplicación (ASIC), una matriz de puertas programable por campo (FPGA) u otro componente lógico programable, lógica discreta de puertas o de transistores, componentes discretos de hardware o cualquiera de sus combinaciones diseñadas para realizar las funciones aquí descritas. Un procesador de propósito general puede ser un microprocesador, pero alternativamente, el procesador puede ser cualquier procesador, controlador, microcontrolador o máquina de estado convencional. También puede implementarse un procesador como una combinación de componentes informáticos, por ejemplo, una combinación de un DSP y un microprocesador, una pluralidad de microprocesadores, uno o más microprocesadores en conjunción con un núcleo de DSP o cualquier otra de tales configuraciones.

Características, aspectos y realizaciones alternativas de la invención se proporcionan a continuación en las siguientes cláusulas:

Cláusula 1. Un procedimiento de reconocimiento de una llamada a una subrutina, que comprende:

la detección de un cambio no secuencial en el flujo de un programa; la recuperación de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa y la comparación de la siguiente dirección secuencial con el contendido de un registro para determinar si el cambio no secuencial es una llamada a una subrutina.

Cláusula 2. El procedimiento de la cláusula 1, en el que el cambio no secuencial en flujo del programa en una instrucción de bifurcación.

Cláusula 3. El procedimiento de la cláusula 1, en el que el registro es un registro de enlaces.

Cláusula 4. El procedimiento de la cláusula 1, que comprende además:

empujar la siguiente dirección secuencial después del cambio no secuencial en el flujo del programa hasta una estructura de pila de enlaces.

Cláusula 5. El procedimiento de la cláusula 1, que comprende además:

la indicación de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Cláusula 6. El procedimiento de la cláusula 5, en el que la indicación de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina comprende:

el almacenamiento de un marcador en un circuito de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

Cláusula 7. Un aparato en un procesador para reconocer una llamada a una subrutina que comprende:

un circuito que comprende: una primera entrada para recibir el contenido de un registro; una segunda entrada para recibir un cambio no secuencial en el flujo del programa; una tercera entrada para recibir la siguiente dirección secuencial después del cambio no secuencial en el flujo del programa en el que el circuito está configurado para comparar la siguiente dirección secuencial y el contenido del registro para determinar si el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Cláusula 8. El aparato de la cláusula 7, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

Cláusula 9. El aparato de la cláusula 7, en el que el registro es un registro de enlaces.

Cláusula 10. El aparato de la cláusula 7, que comprende además:

una estructura de pila de enlaces en la que el aparato está configurado para empujar la siguiente dirección secuencial después del cambio no secuencial en el flujo del programa hasta la estructura de pila de enlaces.

Cláusula 11. El aparato de la cláusula 7, que comprende además:

un circuito de predicción de bifurcación para almacenar una indicación de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Cláusula 12. Un aparato para reconocer una llamada a una subrutina que comprende:

medios para detectar un cambio no secuencial en el flujo de un programa; medios para recuperar la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa y medios para comparar la siguiente dirección secuencial con el contenido de un registro para determinar si el cambio no secuencial es una llamada a una subrutina.

Cláusula 13. El aparato de la cláusula 12, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

Cláusula 14. El aparato de la cláusula 12, en el que el registro es un registro de enlaces.

Cláusula 15. El aparato de la cláusula 12, que comprende además:

medios para empujar la siguiente dirección secuencial después del cambio no secuencial en el flujo del programa hasta una estructura de pila de enlaces.

Cláusula 16. El aparato de la cláusula 12, que comprende además:

medios para indicar que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Cláusula 17. El aparato de la cláusula 12, en el que el medio para indicar que el cambio no secuencial en el flujo del programa es una llamada a una subrutina comprende: medios para almacenar un marcador en un circuito de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

Cláusula 18. Un aparato para reconocer una llamada a una subrutina, que comprende:

un procesador canalizado para procesar instrucciones y un circuito acoplado con el procesador canalizado, el circuito está configurado para recibir el contenido de un registro, una indicación de un cambio no secuencial en el flujo de un programa y la siguiente dirección secuencial después de la indicación del cambio no secuencial en el flujo del programa, el circuito está configurado para comparar el contenido del registro de enlaces con la siguiente dirección secuencial para determinar si la indicación de un cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Cláusula 19. El aparato de la cláusula 18, que comprende además: una estructura de pila de enlaces en la que el circuito está configurado para empujar el contenido del registro de enlaces hasta la estructura de pila de enlaces.

Cláusula 20. El aparato de la cláusula 18, que comprende además:

un circuito de predicción de bifurcación, en el que el circuito está configurado para almacenar una indicación de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

Los procedimientos descritos con relación a las realizaciones aquí presentadas pueden implementarse directamente en hardware, en un módulo de software ejecutado por un procesador o una combinación de los dos. Un módulo de software puede residir en memoria RAM, memoria ROM, memoria EPROM, memoria EEPROM, registros, discos duros, discos desmontables, un CD-ROM o cualquier otra forma conocida en la técnica de medio de almacenamiento. Un medio de almacenamiento puede acoplarse al procesador de manera que el procesador pueda leer información y escribir información en el medio de almacenamiento. Alternativamente, el medio de almacenamiento puede ser integral con respecto al procesador.

Aunque la invención se presenta en el contexto de algunas realizaciones, se reconocerá que las personas con un conocimiento común de la material pueden emplear una amplia variedad de implementaciones coherentes con el anterior análisis y con las reivindicaciones que siguen a continuación.




Reivindicaciones:

1. Un procedimiento (500) de reconocimiento de una llamada a una subrutina, que comprende:

la detección (510) de un cambio no secuencial en el flujo de un programa; la recuperación (520) de la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa; la comparación (530) de la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual que el contenido del registro de enlaces, se empuja (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como una dirección de retorno.

2. El procedimiento de la reivindicación 1, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

3. El procedimiento de la reivindicación 1, que comprende además:

la indicación (540) de que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

4. El procedimiento de la reivindicación 3, en el que la indicación (540) de que el cambio no secuencial en el flujo del programa es una subrutina comprende:

el almacenamiento de un marcador en un circuito (132) de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

5. Un aparato (114) para reconocer una llamada a una subrutina que comprende:

medios para detectar (510) un cambio no secuencial en el flujo de un programa; medios para recuperar (520) la siguiente dirección secuencial después del cambio no secuencial detectado en el flujo del programa y medios para comparar(530) la siguiente dirección secuencial con el contenido de un registro de enlaces para determinar si el cambio no secuencial es una llamada a una subrutina y si se encuentra que la siguiente dirección secuencial es igual al contenido del registro de enlaces, medios para empujar (550) la siguiente dirección secuencial o el contenido del registro de enlaces hasta una estructura (134) de pila de enlaces como la dirección de retorno.

6. El aparato de la reivindicación 5, en el que el cambio no secuencial en el flujo del programa es una instrucción de bifurcación.

7. El aparato de la reivindicación 5, que comprende además:

medios para indicar (540) que el cambio no secuencial en el flujo del programa es una llamada a una subrutina.

8. El aparato de la reivindicación 5, en el que los medios para indicar (540) que el cambio no secuencial en el flujo del programa es una subrutina comprenden:

medios para almacenar un marcador en un circuito de predicción de bifurcación asociado con el cambio no secuencial en el flujo del programa.

9. Un aparato para reconocer una llamada a una subrutina, que comprende:

un procesador canalizado para procesar instrucciones y un aparato como el reivindicado en cualquiera de las reivindicaciones 5, 7 y 8.






Acerca de · Contacto · Patentados.com desde 2007 hasta 2014 // Última actualización: 22/08/2014.