BRPI0719371A2 - Métodos e equipamento para reconhecimento de uma chamada de sub-rotina - Google Patents

Métodos e equipamento para reconhecimento de uma chamada de sub-rotina Download PDF

Info

Publication number
BRPI0719371A2
BRPI0719371A2 BRPI0719371-8A BRPI0719371A BRPI0719371A2 BR PI0719371 A2 BRPI0719371 A2 BR PI0719371A2 BR PI0719371 A BRPI0719371 A BR PI0719371A BR PI0719371 A2 BRPI0719371 A2 BR PI0719371A2
Authority
BR
Brazil
Prior art keywords
sequential
address
sequential change
program flow
instruction
Prior art date
Application number
BRPI0719371-8A
Other languages
English (en)
Inventor
Micheal William Morrow
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Publication of BRPI0719371A2 publication Critical patent/BRPI0719371A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)
  • Communication Control (AREA)

Description

MÉTODOS E EQUIPAMENTO PARA RECONHECIMENTO DE UMA CHAMADA DE SUB-ROTINA Campo da Invenção
A presente invenção está de um modo geral relacionada ao campo de processadores em linha e em particular a um método para reconhecer uma chamada de sub- rotina de modo a reduzir a potência ou energia e aumentar a utilização do processador em linha.
Embasamento
Os microprocessadores efetuam tarefas de computação em uma ampla gama de aplicativos. Um melhor desempenho do processador é quase sempre desejável, de modo a permitir operação mais rápida e/ou maior funcionalidade através de mudanças de software. Em muitos aplicativos embutidos, tais como em dispositivos eletrônicos portáteis, a economia de energia constitui também uma meta importante no projeto e implementação do processador.
Vários processadores modernos empregam uma estrutura em linha ou "pipeline", em que instruções em seqüência se sobrepõem na execução para aumentar a capacidade de processamento total do processador. A manutenção de uma execução uniforme através da linha auxilia à obtenção de desempenho elevado. A maioria dos processadores modernos também utiliza uma memória hierárquica, com memórias cache "on-chip" rápidas armazenando cópias locais de dados e instruções recentemente acessados.
Na prática, os programas incluem instruções indiretas em ramificações, das quais não é conhecido o real comportamento de ramificação até que a instrução seja avaliada de fato profundamente na linha de execução. A maioria dos processadores modernos emprega alguma forma de previsão de ramificação, pelo que o comportamento de ramificação de instruções indiretas de ramificação é previsto precocemente na linha, por exemplo durante um estágio de linha de recuperação ou decodificação. Pela utilização de uma técnica de previsão de ramificação, o processador recupera especulativamente o alvo da instrução indireta de ramificação e redireciona a linha para iniciar o processamento das instruções especulativamente recuperadas. Quando o alvo ou meta real da ramificação é determinado em um estágio posterior da linha, tal como um estágio de linha de execução, caso a ramificação tenha sido mal prevista as instruções recuperadas de forma especulativa devem ser descartadas da linha e novas instruções recuperadas a partir do endereço alvo correto. Pré-recuperação de instruções em resposta a uma previsão de ramificação meta errônea impacta negativamente o desempenho do processador e o consumo de energia.
Um exemplo de instruções indiretas de ramificação inclui instruções de ramificação utilizadas para voltar de uma sub-rotina. Como exemplo, uma chamada de resposta / retorno a partir de uma sub-rotina pode incluir uma 20 instrução de ramificação cujo endereço de retorno é definido pelo conteúdo de um registro / registrador. Um endereço de retorno define a próxima instrução a ser recuperada após a sub-rotina se completar, sendo comumente a instrução após uma instrução de ramificação a partir da 25 qual a sub-rotina foi originalmente invocada. Várias estruturas de alto desempenho designam um registro especifico de uso geral para uso em retornos de sub- rotinas, comumente designado como um registro / registrador de link.
Por conveniência, uma chamada de retorno pode
também ser designada como uma instrução de retorno de ramificação. Para que uma linha de processador utilize a previsão de ramificação para uma instrução de retorno de ramificação, o software convencional inclui uma chamada de sub-rotina explicita, tal como uma instrução de ramificação e link para registrar / gravar o endereço de retorno no registro de link. Várias implementações de alto desempenho incluem uma estrutura de pilha de link no estágio de decodificaçao do processamento da instrução de ramificação 5 e link. Os valores de retorno de link são "empurrados" ou carregados para tal pilha de modo a permitir previsão de ramificação acurada quando as sub-rotinas retornam. As estruturas de pilha de link convencionais contêm uma lista de endereços de retorno de modo a dar suporte a múltiplas 10 chamadas de sub-rotina passando através de uma linha e para dar suporte ao alojamento ou "nesting" de múltiplos níveis de chamadas de sub-rotina. Subseqüentemente, quando a instrução de retorno de ramificação dentro da sub-rotina está sendo decodificada, o endereço de retorno é lido a 15 partir da estrutura de pilha de link a ser utilizada na previsão de ramificação para prever o endereço alvo caso outros hardware de previsão de ramificação determinem que o processador deve redirecionar a linha. Caso o resultado previsto indique o redirecionamento da linha, a linha 20 começa a recuperar instruções a partir do endereço de retorno que foi lido a partir da estrutura de pilha de link.
No entanto, existem vários compiladores e códigos legados que não geram ou incorporam instruções de link e ramificação convencionais quando invocando uma sub-rotina. Portanto, em tais casos, a estrutura de pilha de link não é utilizada, resultando no comprometimento da integridade da estrutura de pilha de link. Como exemplo, a extração de um endereço de retorno a partir da estrutura de pilha de link pode não se correlacionar com a instrução de retorno que estimulou a extração do endereço de retorno em primeiro lugar. Um efeito de uma estrutura de pilha de link comprometida inclui um maior número de previsões errôneas nas instruções de retorno. Ademais, nos casos em que uma chamada de sub-rotina não é reconhecida em um segmento de programa, o problema se agrava pois os hardware de previsão de ramificação podem não ser utilizados para preencher a estrutura de pilha de link em chamadas de sub-rotina irreconhecíveis subseqüentes. Como exemplo, é feita 5 referência à tabela que se segue, contendo um segmento de código que rodará em um processador compatível da ARM Ltd.:
'0x00899808 LDR LR, 0x008998Ϊ8 ——— .................
0x0089980C ADD 0x00899810 SUB 0x00899814 BR 0x00990000 0x00899818 INSTRa 0x008998 IC INSTRb
0x00990000 ADD 0x00990004 SIJB 0x00990008 MOV OX0099000C BX LR
Tabela 1 - Segmento de Código
O fluxo de programa do segmento de código na 10 Tabela 1 inclui o processamento das instruções em ordem seqüencial, iniciando no endereço 0x00899808 e indo até o endereço 0x00899814. No endereço 0x00899814, uma instrução de ramificação muda o fluxo do programa de forma a que a próxima instrução processada está localizada no endereço 15 0x00990000, o início de uma sub-rotina.
A combinação do ajuste de registro de link (isto é, Idr Ir, 0x00899818) com a instrução de ramificação (isto é, br) prepara o processador para uma ramificação subseqüente para uma sub-rotina. Neste exemplo, a sub- rotina real para a qual a chamada é efetuada se inicia no endereço 0x00990000 e termina no endereço 0x0099000C. A instrução Idr Ir, 0x00899818, indica que o endereço 0x00899818 deve ser copiado para um registro de link (Ir) resultando no armazenamento do endereço de retorno, o 5 endereço 0x00899818, no registro de link. Ao final da sub- rotina, o endereço de retorno é recuperado a partir do registro de link. Mais especificamente, o endereço de retorno é recuperado quando da execução de bx Ir, a instrução de retorno de ramificação. Existem outros 10 segmentos de código que implicam em uma chamada de sub- rotina e incluem instruções que modificam o registro de link, tais como a combinação seqüencial de instruções mov Ir, pc br[a], em que [a] é o endereço do início de uma sub- rotina .
Resumo
A presente invenção reconhece a universalidade de tais compiladores de software legados que produzem segmentos de código possuindo duas ou mais instruções que correspondem a uma chamada de sub-rotina, bem como o custo 20 envolvido na re-composição de software legados para a utilização de instruções convencionais de link e ramificação quando da invocação de uma sub-rotina. Além disso, a presente invenção reconhece uma demanda por microprocessadores desenvolvidos atualmente para o 25 reconhecimento de seqüências de instruções que impliquem em uma invocação de sub-rotina de modo a utilizar uma estrutura de pilha de link e efetivamente prever o endereço de retorno quando de uma instrução de retorno de ramificação.
De acordo com uma modalidade é provido um método
para reconhecer uma chamada de sub-rotina compreendendo: detectar uma mudança não seqüencial no fluxo de programa; recuperar um próximo endereço seqüencial após a mudança não seqüencial detectada no fluxo de programa; e comparar o próximo endereço seqüencial com o conteúdo de um registro para determinar se a mudança não seqüencial é uma chamada de sub-rotina.
Outra modalidade está relacionada a um equipamento para reconhecer uma chamada de sub-rotina, compreendendo: um circuito que inclui três alimentações compreendendo: uma primeira alimentação configurada para recepção do conteúdo de um registro; uma segunda alimentação configurada para recepção de uma mudança não seqüencial no fluxo de programa; uma terceira alimentação configurada para recepção do próximo endereço seqüencial após a mudança não seqüencial no fluxo de programa; em que o circuito está configurado para comparar o próximo endereço seqüencial com o conteúdo do registro para determinar se a mudança não seqüencial no fluxo de programa é uma chamada ou invocação de sub-rotina.
De acordo com outra modalidade é provido um equipamento compreendendo: uma linha de processador para processamento de instruções e um circuito acoplado à mesma, 20 o circuito estando configurado para receber o conteúdo de um registrador, uma indicação de uma mudança não seqüencial no fluxo de programa e o próximo endereço seqüencial após a indicação da mudança não seqüencial no fluxo de programa; o circuito estando também configurado para comparar o 25 conteúdo do registro de link com o próximo endereço seqüencial para determinar se a indicação de uma mudança não seqüencial no fluxo de programa é uma chamada de sub- rotina .
Deve ser notado que outras modalidades da 30 presente invenção ficarão claras para os técnicos na área através da descrição que se segue, em que várias modalidades da invenção são apresentadas e descritas como ilustração. Como será notado, a invenção possui outras modalidades e seus diversos detalhes podem ser modificados 35 com relação a vários outros aspectos, sempre sem constituir um afastamento da presente invenção. Assim sendo, os desenhos e a descrição detalhada devem ser considerados como de natureza ilustrativa e não restritiva.
Breve Descrição dos Desenhos
A Figura 1 é um diagrama de blocos funcional de
um processador.
A Figura 2 é um diagrama de timing / temporização que segue um fluxo de instruções exemplar.
A Figura 3 é uma parte exemplar de um cache de endereço alvo de ramificação (btac).
As Figuras 4a e 4b (ou coletivamente a Figura 4) constituem modalidades exemplares do circuito lógico iscall ilustrado na Figura 1.
A Figura 5 é um fluxograma ilustrando um método para reconhecimento de uma chamada de sub-rotina.
Descrição Detalhada
A Figura 1 apresenta um diagrama de blocos funcional de um processador 100 em que podem ser empregados certos aspectos da presente invenção. O processador 100 20 inclui um cache de instruções (i-cache) 110 para armazenar em cache instruções recentemente processadas e uma interface de memória 136 para acessar a memória 138 quando uma instrução não for encontrada no i-cache HO. A memória 138 pode estar localizada interna ou externamente ao 25 processador 100 e pode compreender um componente de memória de camada 2 (12).
O processador 100 compreende também uma linha / pipeline de instruções 105 para processamento de instruções e um circuito de previsão de ramificação 132 para prever um 30 endereço alvo / meta para uma instrução indireta de ramificação e previsão sobre se deve ser redirecionada a linha de instruções 105 para processar o endereço alvo. Caso o circuito de previsão de ramificação 132 preveja o redirecionamento da linha de instruções 105, a instrução de ramificação indireta é descrita como tendo sido "tomada como previsto". Caso a instrução de ramificação indireta tenha sido "tomada como previsto", o circuito de previsão de ramificação 132 prevê um endereço alvo da instrução 5 indireta de ramificação e redireciona a linha de instruções
105 para que comece a recuperar instruções no endereço alvo.
O processador 100 processa as instruções em uma linha de instruções 105 de acordo com o circuito lógico de controle 122. Em algumas modalidades, a linha 105 pode ser um esquema superescalar possuindo duas ou mais linhas em paralelo. A linha 105 inclui vários estágios de linha: um estágio de unidade de recuperação de instruções (ifu) 102, um estágio de decodificação (dcd) 106, um estágio de fila de instruções (iq) 108, um estágio de acesso de registro (racc) 112 e um estágio de execução (exe) 120. Em algumas modalidades, um estágio de linha pode processar uma única instrução de cada vez. Em outra modalidade, um estágio de linha pode processar concomitantemente duas ou mais instruções de cada vez. Deve ser notado que podem ser adicionados ou retirados estágios de linha na linha 105 sem limitação ao escopo da presente invenção. O processador 100 compreende também um arquivo de registro de uso geral (GPR) 118 que inclui registros que, por convenção micro- estrutural, podem ser acessados pelos estágios de linha 112 e 120.
O estágio de unidade de recuperação de instruções (ifu) 102 tenta recuperar uma instrução a partir do i-cache HO. Caso um endereço de instrução não seja encontrado no 30 i-cache 110, o estágio de unidade de recuperação de instruções (ifu) 102 inicia uma requisição para recuperação da instrução correspondente a partir da memória 138. O estágio de decodificação 106 decodifica completamente uma instrução. Além disso, adicionalmente às funções 35 convencionais efetuadas no estágio de decodificação, o estágio de decodificação 106 reconhece instruções de chamada de sub-rotina convencionais, tais como a instrução de link e ramificação da ARM Inc., e grava um endereço de retorno em uma estrutura de pilha de link 134. A estrutura 5 de pilha de link 134 pode consistir de um conjunto de registros gerenciados como um buffer circular. O endereço de retorno é um endereço de uma instrução para a qual a linha 105 deve ser redirecionada ao finalizar uma sub- rotina. Em uma instrução de ramificação indireta, o estágio 10 de decodificação 106 pode invocar o circuito de previsão de ramificação 132 de modo a determinar se deve começar a recuperar instruções para a linha 105 a partir de um alvo especulativo da instrução de ramificação.
O estágio de fila de instruções 108 acumula uma 15 ou mais instruções de modo a permitir que a recuperação especulativa continue durante as paradas, caso ocorram, da linha de execução. 0 estágio de acesso a registro 112 recupera um ou mais operantes a partir do registro de uso geral 118 conforme a necessidade de uma instrução. 0 20 estágio de execução (exe) 120 inclui componentes conhecidos, tais como unidades lógicas aritméticas e similares de modo a executar as instruções. Os resultados produzidos provenientes do estágio de execução 120 são gravados no arquivo GPR 118. Durante o estágio de execução 25 120, ocorre a resolução de ramificação real para determinar se a previsão de ramificação efetuada durante o estágio de decodificação 106 está correta. Caso a resolução de ramificação real seja diferente do destino previsto, é dito que uma ramificação foi prevista erroneamente.
0 estágio de execução 120 invoca também o
circuito lógico iscall 114 para determinar se uma instrução de ramificação corresponde a uma chamada de sub-rotina implícita. O circuito lógico iscall 114 registra tal resultado no circuito de previsão de ramificação (br) 132 de modo a que a execução subseqüente da instrução de ramificação seja interpretada como uma chamada de sub- rotina implícita durante um estágio de linha anterior, tal como o dcd 106 ou o ifu 102. Em uma modalidade, o resultado registrado consiste de um sinalizador ou "flag" que é armazenado no circuito bp 132 e é associado à instrução de ramificação. Caso a instrução de ramificação seja uma chamada de sub-rotina implícita, o circuito lógico iscall 114 atualiza a estrutura de pilha de link 134 com o endereço da instrução que se segue à instrução de ramificação. O circuito lógico iscall 114 será descrito em maiores detalhes com referência à descrição da Figura 4.
Apesar de a Figura 1 apresentar o estágio de execução (exe) 120 como acoplado a circuito lógico iscall 114, o circuito lógico iscall 114 pode alternativamente estar acoplado a um estágio anterior na linha 105. Em uma modalidade alternativa, o estágio de decodificação (dcd)
106 pode se acoplar ao circuito lógico iscall 114. Em tal modalidade, o estágio de decodificação (dcd) 106 invoca o circuito lógico iscall 114 uma vez que ele determine que uma instrução br foi decodificada.
Os técnicos na área notarão que são possíveis diversas variações do processador 100. Como exemplo, o processador 100 pode incluir um cache de segundo nível (12) para o i-cache 110. Além disso, um ou mais dos blocos funcionais representados no processador 100 podem ser omitidos de uma modalidade específica. Outros blocos funcionais que possam residir no processador 100, tais como um buffer de translação de consulta lateral / "lookaside", um cache de dados e similares não são essenciais para uma descrição da presente invenção, sendo omitidos para maior clareza.
A Figura 2 é um. diagrama de timing 200 que segue um fluxo de instruções através da linha 105 ilustrada na Figura 1. Especificamente, o fluxo de instruções traçado no diagrama de timing 200 constitui o segmento de código tal como ilustrado na Tabela I. Para os propósitos da presente invenção, o termo "chamada / invocação de sub-rotina implícita" se refere a uma combinação de duas ou mais instruções cuja função combinada é a de ajustar registros 5 em preparação para uma chamada de sub-rotina e para chamar uma sub-rotina. Como exemplo, fazendo referência à Tabela 1, as duas instruções, Idr Ir, 0x0089908 e br 0x00990000, definem uma chamada de sub-rotina implícita. Neste caso, a instrução Idr define o início da chamada de sub-rotina 10 implícita e a instrução br define o final da chamada de sub-rotina implícita.
As colunas 210a a 210e do diagrama de timing 200 correspondem aos estágios da linha 105. As filas I a 11 correspondem a ciclos de timing seqüenciais. Para 15 propósitos de explanação, cada estágio de linha processa uma instrução por ciclo. No entanto, será notado pelos técnicos na área que os ensinamentos da presente descrição se aplicam tanto a estágios de linha de múltiplos ciclos e a estágios de linha que são capazes de processar múltiplas 20 instruções por ciclo.
A coluna 210f do diagrama de timing 200 corresponde ao conteúdo de um flag denominado iscallflag, que indica se uma instrução de ramificação indireta resulta em uma chamada de sub-rotina. A coluna 210g corresponde ao 25 conteúdo do registro de link (Ir) . A coluna 210h corresponde ao conteúdo de uma estrutura de pilha de link, tal como a estrutura de pilha de link 134 como resultado do circuito lógico iscall 114.
De um modo geral, as instruções entram no estágio 30 ifu 210a e se propagam para o próximo estágio no próximo ciclo. No ciclo 1, a instrução Idr Ir, 0x00899818 está no estágio ifu 210a. As instruções add, sub, br, e a instrução genérica INSTRa, são seqüencialmente recuperadas a partir do estágio de linha ifu 210a. No ciclo 5, no ponto no tempo 35 215, o estágio de decodificação 210b decodifica a instrução br e invoca a previsão de ramificação, tal como o circuito de previsão de ramificação 132. A previsão de ramificação prevê que a instrução br será seguida e que, portanto, a linha 105 será redirecionada para recuperar seqüencialmente 5 as instruções de sub-rotina add, sub, mov e bx. A sub- rotina compreende todas as instruções iniciando com a instrução add e terminando com a instrução bx, tal como mostrado na Tabela I. Antes de redirecionar a linha 105, INSTRa é descartada da linha 105 dado que ela foi 10 recuperada antes da previsão de ramificação. O ciclo em branco que se segue à instrução br apresenta a posição que a instrução INSTRa teria assumido na linha 105 caso ela não fosse descartada.
A partir dos ciclos 1 a 5, a instrução Idr se 15 propaga pelos estágios de linha 210b a 210e. No ciclo 5, no ponto no tempo 205, o estágio de execução 210e executa a instrução Idr para carregar o endereço de retorno 0x00899818 para o registro de link (Ir). No ponto no tempo 220, o endereço de retorno (ra) 0x00899818 está disponível 20 no registro de link. O endereço de retorno se refere à INSTRa na Tabela 1, o que significa que ao final da execução da sub-rotina que se inicia no endereço 0x00990000, o fluxo de execução de instrução deve retornar ao endereço 0x00899818.
No ponto no tempo 225, o estágio de execução 210e
executa a instrução br. O estágio de execução 210e valida se a instrução br deveria ter sido seguida. O estágio de execução 210e também invoca o circuito lógico iscall 114 para determinar se a instrução br é uma ramificação para 30 uma sub-rotina. A expressão "ramificação para uma sub- rotina" é também designada como uma chamada de sub-rotina. O circuito lógico iscall 114 utiliza o próximo endereço seguindo a instrução br, que é o endereço de INSTRa apesar de INSTRa ter sido previamente descartada da linha 105. 35 Dado que o endereço da próxima instrução é igual ao endereço de retorno armazenado no registro de link (Ir), o circuito lógico iscall 114 ajusta iscallflag 210f associado à instrução br e o armazena junto ao endereço da instrução br no circuito de previsão de ramificação 132. Um elemento 5 de armazenamento de previsão de ramificação exemplar será descrito com referência à Figura 3. Além disso, o circuito lógico iscall 114 copia o endereço de retorno para a estrutura de estado de link 210h no ponto no tempo 230.
A instrução final da sub-rotina, bx, é decodificada no ciclo 10, no ponto no tempo 235. O estágio de decodificação 210b reconhece a instrução bx como uma chamada de retorno e, portanto, a previsão de ramificação 132 prevê o fluxo de programa recuperando o endereço de retorno (ra) a partir da estrutura de estado de link 210h. O estágio de decodificação 210b redireciona a linha 105 para começar a recuperar a partir de INSTRa cujo endereço é o mesmo que o endereço de retorno (ra) . Ver o ponto de referência 240. Além disso, no ciclo 11, dado que o ra foi recuperado (isto é, lido e retirado da estrutura de estado de link), a estrutura de estado de link 210 não mais contém o endereço de retorno. Utilizando o processador da Figura
1, tal como ilustrado no diagrama de timing 200, a chamada de sub-rotina implícita definida pelas instruções combinadas Idr e br permitiram à estrutura de estado de link armazenar o endereço de retorno.
Na próxima vez que uma instrução br seja processada pela linha 105, o circuito de previsão de ramificação 132 pode utilizar o conjunto iscallflag associado ao endereço da instrução br ali armazenado para 30 popular a estrutura de estado de link antes de a instrução br ter sido processada pela linha 105.
No ciclo de clock n, a mesma instrução br entra na linha 105 no estágio ifu 210a. No ciclo de clock n+1, INSTRa entra no estágio ifu 210a e a instrução br é decodificada pelo estágio dcd 210b. Durante o estágio dcd 210b, o circuito de previsão de ramificação 132 consulta o endereço da instrução br e constata que ela possui um correspondente iscallflag acionado indicando que a instrução br é uma chamada de sub-rotina. Conseqüentemente, 5 o estágio dcd 210b empurra o próximo endereço, o endereço para INSTRa, para a estrutura de estado de link 210h, tal como assinalado na referência 245.
A Figura 3 é uma parte exemplar de um cache de endereço alvo de ramificação (btac) 300. O btac 300 é adequadamente empregado pelo circuito de previsão de ramificação 132. O btac 300 inclui pelo menos três colunas, as colunas 310a, 310b e 310n. A coluna 310a contém endereços de instruções de ramificação. A coluna 310b contém endereços alvo de ramificação, o último endereço para o qual a instrução de ramificação correspondente se ramificou. A coluna 310n contém o valor do iscallflag. 0 iscallflag, quando acionado, indica que a instrução de ramificação associada corresponde a uma chamada de sub- rotina. A fila 305 corresponde à instrução br na Tabela 1, em que seu endereço é 0x00899814, seu endereço alvo é 0x00990000 correspondendo à instrução add, e seu iscallflag está acionado.
As Figuras 4a e 4b ilustram várias modalidades de um circuito lógico iscall. Tais modalidades podem estar acopladas ao estágio de linha de execução 120 tal como mostrado na Figura 1, ou qualquer estágio de linha anterior. A Figura 4a consiste de uma modalidade exemplar do circuito lógico iscall 400, que pode ser adequadamente empregado na Figura I. 0 circuito lógico iscall 400 inclui um comparador 440, uma porta OR de duas passagens 445 e uma porta AND de duas passagens 450. O comparador 440 recebe duas alimentações / entradas: uma alimentação contendo o valor do registro de link (Ir) 405 e uma alimentação contendo o próximo endereço 410. Tal como descrito na Figura 2, o próximo endereço é o próximo endereço seqüencialmente recuperado após uma instrução br. A saída do comparador 440 está acoplada a uma passagem da porta OR de duas passagens 445. A outra passagem está acoplada a um sinal 415 indicando se a instrução atual no estágio de 5 linha acoplado ao circuito lógico iscall 400 é uma instrução de link e ramificação. A porta OR 445 é opcional e é usada para dar suporte a instruções de link e ramificação da mesma maneira que sub-rotinas implícitas. A saída da porta OR 445 está acoplada a uma passagem da porta 10 AND de duas passagens 425. A outra passagem está acoplada a um sinal istakenbranch 420 gerado pelo circuito de previsão de ramificação 132. 0 circuito de previsão de ramificação 132 gera o sinal istakenbranch 420 a partir da instrução br que invocou o circuito lógico iscall 400. Em uma modalidade 15 não especulativa, o estágio exe 120 pode alternativamente gerar o sinal istakenbranch 420. Quando a saída 425 do circuito lógico iscall 400 for TRUE / verdadeiro, a saída 425 é utilizada para acionar o iscallflag no circuito de previsão de ramificação 132 e para copiar o endereço de 20 retorno para a estrutura de estado de link. Será notado pelos técnicos na área que outros circuitos lógicos podem ser utilizados no circuito lógico iscall 400 para controlar se deve ser indicado que uma instrução de ramificação indireta corresponde a uma chamada de sub-rotina e, caso 25 positivo, atualizar a estrutura de estado de link com o próximo endereço.
A Figura 4b é uma segunda modalidade do circuito lógico iscall 401 que pode ser adequadamente empregada na Figura 1. o comparador 440 e suas alimentações e a saída do 30 circuito lógico iscall 401 são iguais àquelas apresentadas na Figura 4a. A saída do comparador 440 alimenta, como entrada, a porta AND 455. A porta AND 455 também recebe como alimentação o sinal isbranch 430. O sinal isbranch 430 está ativo quando a instrução corrente sendo processada 35 pelo estágio de linha acoplado ao circuito lógico iscall 401 for uma instrução de ramificação. Em operação, caso a instrução corrente seja uma instrução de ramificação e o próximo endereço após a instrução de ramificação seja igual ao endereço contido no registro de link, o sinal de saída 5 425 é utilizado para associar um iscallflag com tal instrução de ramificação no circuito de previsão de ramificação 132 e a estrutura de estado de link é atualizada com o próximo endereço. Está segunda modalidade permite que a instrução de link e ramificação seja 10 processada de maneira convencional fora do circuito lógico iscall 401.
A Figura 5 é um fluxograma ilustrando um método 500 para reconhecimento de uma sub-rotina. No bloco 510 é detectada uma mudança não seqüencial no fluxo do programa, 15 por exemplo uma instrução de ramificação. Mais especificamente, é detectada uma instrução de ramificação que não é uma instrução de link e ramificação. Tal detecção pode ser efetuada por técnicas de decodificação conhecidas. No bloco 515 o método 500 determina se a mudança não 20 seqüencial no fluxo de programa já foi indicada como uma chamada de sub-rotina. Como exemplo, caso a instrução de ramificação já tenha sido processada pela linha 105, um iscallflag seria acionado no circuito de previsão de ramificação 132 indicando que a instrução de ramificação 25 sendo processada foi indicada ou marcada como uma chamada de sub-rotina. Caso positivo, o método 500 já processou tal mudança não següencial no fluxo de programa antes e, portanto, passa ao bloco 550.
Caso a mudança não seqüencial no fluxo de 30 programa não foi previamente indicada como uma chamada de sub-rotina, o método 500 passa ao bloco 520. No bloco 520 é recuperado o próximo endereço seqüencial após a mudança não seqüencial detectada no fluxo de programa. Como exemplo, o próximo endereço após a instrução de ramificação. O próximo 35 endereço pode ser provido por vários meios, incluindo um estágio de linha anterior, um circuito de geração de contador de próximo programa (pc) no estágio ifu 102, ou similares. No bloco 530, o próximo endereço seqüencial é comparado com o conteúdo de um registro de link. Como foi 5 acima descrito em conexão com a Figura 2, o registro de link (Ir) recebe o endereço de retorno em antecipação a uma chamada de sub-rotina. No bloco 540 a mudança não seqüencial detectada no fluxo de programa é indicada como uma chamada de sub-rotina. Como exemplo, um flag associado 10 a uma instrução de ramificação pode ser acionado e armazenado no circuito de previsão de ramificação 132. O método 500 a seguir passa ao bloco 550.
No bloco 550 o conteúdo do registro de link é empurrado para uma estrutura de pilha de link. Como 15 exemplo, quando uma instrução de ramificação é executada tal como ilustrado na Figura 2, o registro de link é copiado para a estrutura de pilha de link. De forma equivalente, o próximo endereço seqüencial pode alternativamente ser empurrado para a estrutura de pilha de 20 link. Apesar de não estar ilustrado, a mudança não seqüencial no fluxo de programa leva uma sub-rotina a ser processada pela linha. No bloco 560 o método aguarda por uma chamada de retorno indicando o final da sub-rotina. Uma vez reconhecida uma chamada de retorno, o método 500 passa 25 ao bloco 570 em que é extraído o próximo endereço seqüencial a partir da estrutura de pilha de link. 0 bloco 570 permite a um processador redirecionar o processamento de uma linha para começar o processamento das instruções no endereço da chamada de retorno.
0 método 500 para o bloco de espera 580 onde
aguarda pela próxima mudança não seqüencial no fluxo do programa. Uma vez que a próxima mudança não seqüencial no fluxo de programa chega em uma linha, o método passa ao bloco 510 e a seguir ao bloco 515. Caso a próxima mudança não seqüencial no fluxo de programa tenha sido previamente detectada, a mudança não seqüência no fluxo de programa já terá sido indicada e o fluxo passa do bloco 515 para o bloco 550.
Os vários exemplos de blocos lógicos, módulos, circuitos, elementos e/ou componentes descritos em conexão com as modalidades aqui descritas podem ser implementados ou efetuados por meio de um processador de uso geral, um processador de sinais digitais (DSP), um circuito integrado específico para aplicação (ASIC), arranjos de porta programáveis no campo (FPGA), ou outro componente lógico programável, porta / gate individual ou lógica de transistores, componentes individuais de hardware, ou quaisquer combinações de tais projetadas para efetuar as funções aqui descritas. Um processador de uso geral pode ser um microprocessador, porém, como alternativa, o processador pode ser qualquer processador, controlador, micro controlador, ou máquina de estado convencionais. Um processador pode também ser implementado na forma de uma combinação de componentes de computação, por exemplo uma combinação de um DSP e um microprocessador, uma pluralidade de microprocessadores, um ou mais microprocessadores em conjunto com um núcleo DSP, ou qualquer outra configuração similar.
Os métodos descritos em conexão com as modalidades aqui descritas podem ser incorporados diretamente em hardware, em um módulo de software executado por um processador, ou em uma combinação de tais. Um módulo de software pode residir em memória RAM, memória flash, memória ROM, memória EPROM, memória EEPROM, registradores, disco rígido, um disco removível, um CD-ROM, ou qualquer outra forma de meio de armazenamento conhecido pelos técnicos na área. Um meio de armazenamento pode estar acoplado ao processador de tal forma que o processador possa Ier informações a partir do, e gravar informações no, meio de armazenamento. Como alternativa o meio de armazenamento pode estar integrado ao processador.
Apesar de a invenção ter sido descrita no contexto de modalidades, será notado que uma ampla variedade de implementações pode ser empregada pelos técnicos na área consistentes com a descrição acima e com as reivindicações que se seguem.

Claims (20)

1. Um método para reconhecer uma chamada de sub-rotina, compreendendo: detectar uma mudança não seqüencial no fluxo de programa; recuperar um próximo endereço seqüencial após a mudança não seqüencial detectada no fluxo de programa; e comparar o próximo endereço seqüencial com o conteúdo de um registro para determinar se a mudança não seqüencial é uma chamada de sub-rotina.
2. 0 método, de acordo com a reivindicação 1, no qual a mudança não seqüencial no fluxo de programa é uma instrução de ramificação.
3. 0 método, de acordo com a reivindicação 1, no qual o registro é um registro de link.
4. 0 método, de acordo com a reivindicação 1, compreendendo também: empurrar o próximo endereço seqüencial após a mudança não seqüencial no fluxo de programa para uma estrutura de pilha de link.
5. 0 método, de acordo com a reivindicação 1, compreendendo também: indicar que a mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina.
6. 0 método, de acordo com a reivindicação 5, no qual o indicar que a mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina compreende: armazenar um flag em um circuito de previsão de ramificação associado à mudança não seqüencial no fluxo de programa.
7. Um equipamento em um processador para reconhecer uma chamada de sub-rotina, compreendendo: um circuito que compreende: uma primeira alimentação para recepção do conteúdo de um registro; uma segunda alimentação para recepção de uma mudança não seqüencial no fluxo de programa; uma terceira alimentação para recepção do próximo endereço seqüencial após a mudança não seqüencial no fluxo de programa, em que o circuito está configurado para comparar o próximo endereço seqüencial com o conteúdo do registro para determinar se a mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina.
8. 0 equipamento, de acordo com a reivindicação 7, no qual a mudança não seqüencial no fluxo de programa é uma instrução de ramificação.
9. O equipamento, de acordo com a reivindicação 7, no qual o registro é um registro de link.
10. O equipamento, de acordo com a reivindicação 7, compreendendo também: uma estrutura de pilha de link em que o equipamento está configurado para empurrar o próximo endereço seqüencial após a mudança não seqüencial no fluxo de programa para a estrutura de pilha de link.
11. O equipamento, de acordo com a reivindicação 7, compreendendo também: um circuito de previsão de ramificação configurado para armazenar uma indicação de que a mudança não seqüencial no fluxo de programa é uma chamada de sub- rotina.
12. Um equipamento para reconhecer uma chamada de sub-rotina, compreendendo: dispositivos para detectar uma mudança não seqüencial no fluxo de programa; dispositivos para recuperar um próximo endereço seqüencial após a mudança não seqüencial detectada no fluxo de programa; e dispositivos para comparar o próximo endereço seqüencial com o conteúdo de um registro para determinar se a mudança não seqüencial é uma chamada de sub-rotina.
13.O equipamento, de acordo com a reivindicação 12, no qual a mudança não seqüencial no fluxo de programa é uma instrução de ramificação.
14. 0 equipamento, de acordo com a reivindicação 12, no qual o registro é um registro de link.
15.0 equipamento, de acordo com a reivindicação 12, compreendendo também: dispositivos para empurrar o próximo endereço seqüencial após a mudança não seqüencial no fluxo de programa para uma estrutura de pilha de link.
16.0 equipamento, de acordo com a reivindicação 12, compreendendo também: dispositivos para indicar que a mudança não seqüencial no fluxo de programa é uma chamada de sub- rotina.
17. O equipamento, de acordo com a reivindicação 12, no qual os dispositivos para indicar que a mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina compreendem: dispositivos para armazenar um flag em um circuito de previsão de ramificação associado à mudança não seqüencial no fluxo de programa.
18. Um equipamento para reconhecer uma chamada de sub-rotina, compreendendo: uma linha de processador para processamento de instruções; e um circuito acoplado à linha de processador, o circuito estando configurado para receber o conteúdo de um registrador, uma indicação de uma mudança não seqüencial no fluxo de programa e o próximo endereço seqüencial após a indicação da mudança não seqüencial no fluxo de programa, o circuito estando configurado para comparar conteúdo do registro de link com o próximo endereço seqüencial para determinar se a indicação de uma mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina.
19. O equipamento, de acordo com a reivindicação 18, compreendendo também: uma estrutura de pilha de link, em que o circuito está configurado para empurrar o conteúdo do registro de link para a estrutura de pilha de link.
20. O equipamento, de acordo com a reivindicação 18, compreendendo também: um circuito de previsão de ramificação, em que o circuito está configurado para armazenar uma indicação de que a mudança não seqüencial no fluxo de programa é uma chamada de sub-rotina.
BRPI0719371-8A 2006-11-28 2007-11-27 Métodos e equipamento para reconhecimento de uma chamada de sub-rotina BRPI0719371A2 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/563,943 US7444501B2 (en) 2006-11-28 2006-11-28 Methods and apparatus for recognizing a subroutine call
US1/563,943 2006-11-28
PCT/US2007/085574 WO2008067277A2 (en) 2006-11-28 2007-11-27 Methods and apparatus for recognizing a subroutine call

Publications (1)

Publication Number Publication Date
BRPI0719371A2 true BRPI0719371A2 (pt) 2014-02-11

Family

ID=39465182

Family Applications (1)

Application Number Title Priority Date Filing Date
BRPI0719371-8A BRPI0719371A2 (pt) 2006-11-28 2007-11-27 Métodos e equipamento para reconhecimento de uma chamada de sub-rotina

Country Status (13)

Country Link
US (1) US7444501B2 (pt)
EP (1) EP2087420B1 (pt)
JP (1) JP2010511251A (pt)
KR (1) KR20090094335A (pt)
CN (1) CN101535951A (pt)
AT (1) ATE484795T1 (pt)
BR (1) BRPI0719371A2 (pt)
CA (1) CA2668584A1 (pt)
DE (1) DE602007009861D1 (pt)
ES (1) ES2351894T3 (pt)
MX (1) MX2009005584A (pt)
RU (1) RU2009124438A (pt)
WO (1) WO2008067277A2 (pt)

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4836903B2 (ja) * 2007-09-13 2011-12-14 株式会社東芝 マイクロプロセッサ制御装置並びにその方法およびプログラム
WO2010134330A1 (ja) * 2009-05-19 2010-11-25 パナソニック株式会社 分岐予測装置、その分岐予測方法、コンパイラ、そのコンパイル方法及び分岐予測プログラム記録媒体
US20140025894A1 (en) * 2012-07-18 2014-01-23 Electronics And Telecommunications Research Institute Processor using branch instruction execution cache and method of operating the same
CN103795738A (zh) * 2012-10-26 2014-05-14 苏州工业园区新宏博通讯科技有限公司 一种采集终端及应用该采集终端的远程监控系统
US10209992B2 (en) * 2014-04-25 2019-02-19 Avago Technologies International Sales Pte. Limited System and method for branch prediction using two branch history tables and presetting a global branch history register
US10908902B2 (en) * 2016-05-26 2021-02-02 International Business Machines Corporation Distance based branch prediction and detection of potential call and potential return instructions
GB2563384B (en) * 2017-06-07 2019-12-25 Advanced Risc Mach Ltd Programmable instruction buffering
US10620955B2 (en) * 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US11061575B2 (en) 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
CN109960607B (zh) * 2017-12-22 2021-04-20 龙芯中科技术股份有限公司 预测栈的错误恢复方法、装置及存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4831517A (en) * 1986-10-10 1989-05-16 International Business Machines Corporation Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US5974543A (en) * 1998-01-23 1999-10-26 International Business Machines Corporation Apparatus and method for performing subroutine call and return operations
JP3513038B2 (ja) * 1998-12-10 2004-03-31 富士通株式会社 命令フェッチ制御装置
JP3723019B2 (ja) * 1999-09-29 2005-12-07 富士通株式会社 サブルーチンリターン相当の命令の分岐予測を行う装置および方法
US6910124B1 (en) * 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
US6973563B1 (en) * 2002-01-04 2005-12-06 Advanced Micro Devices, Inc. Microprocessor including return prediction unit configured to determine whether a stored return address corresponds to more than one call instruction
JP2007041837A (ja) * 2005-08-03 2007-02-15 Nec Electronics Corp 命令プリフェッチ装置及び命令プリフェッチ方法
US7478228B2 (en) * 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls

Also Published As

Publication number Publication date
WO2008067277A2 (en) 2008-06-05
DE602007009861D1 (de) 2010-11-25
US20080126770A1 (en) 2008-05-29
WO2008067277A3 (en) 2008-09-25
KR20090094335A (ko) 2009-09-04
US7444501B2 (en) 2008-10-28
ATE484795T1 (de) 2010-10-15
CA2668584A1 (en) 2008-06-05
ES2351894T3 (es) 2011-02-11
EP2087420B1 (en) 2010-10-13
MX2009005584A (es) 2009-06-15
EP2087420A2 (en) 2009-08-12
RU2009124438A (ru) 2011-01-10
JP2010511251A (ja) 2010-04-08
CN101535951A (zh) 2009-09-16

Similar Documents

Publication Publication Date Title
BRPI0719371A2 (pt) Métodos e equipamento para reconhecimento de uma chamada de sub-rotina
JP5089186B2 (ja) データ・キャッシュ・ミス予測およびスケジューリング
JP5137948B2 (ja) ローカル及びグローバル分岐予測情報の格納
US7987343B2 (en) Processor and method for synchronous load multiple fetching sequence and pipeline stage result tracking to facilitate early address generation interlock bypass
US7676656B2 (en) Minimizing unscheduled D-cache miss pipeline stalls in a cascaded delayed execution pipeline
US8627047B2 (en) Store data forwarding with no memory model restrictions
US9250912B2 (en) Fast index tree for accelerated branch prediction
BRPI0716010A2 (pt) mÉtodos e equipamento para emular o comportamento de prediÇço de desvio de uma chamada de sub-rotina explÍcita
US7650485B1 (en) Structure and method for achieving very large lookahead instruction window via non-sequential instruction fetch and issue
US10338923B2 (en) Branch prediction path wrong guess instruction
TWI397816B (zh) 減少在分支目標位址快取記憶體搜尋的方法與裝置
WO2012107800A1 (en) Integrated circuit devices and methods for scheduling and executing a restricted load operation
US10185561B2 (en) Processor with efficient memory access
US9575897B2 (en) Processor with efficient processing of recurring load instructions from nearby memory addresses
US7600102B2 (en) Condition bits for controlling branch processing
US9250909B2 (en) Fast index tree for accelerated branch prediction
US20160335089A1 (en) Eliminating redundancy in a branch target instruction cache by establishing entries using the target address of a subroutine
WO2019200618A1 (zh) 一种指令执行方法及装置
US20230297381A1 (en) Load Dependent Branch Prediction
US9047199B2 (en) Reducing penalties for cache accessing operations

Legal Events

Date Code Title Description
B11A Dismissal acc. art.33 of ipl - examination not requested within 36 months of filing
B11Y Definitive dismissal - extension of time limit for request of examination expired [chapter 11.1.1 patent gazette]