Baixe o app para aproveitar ainda mais
Prévia do material em texto
Conjuntos de instruções de 16 bits para processadores de 32 bits 16-bit instruction sets for 32-bit processors André Luís Macedo, Guilherme Beyer Thó, Vinícius Geraldo Felix Instituto de Computação da Universidade Estadual de Campinas – IC/UNICAMP RESUMO: Quando se trata de sistemas embarcados, o uso de memória e o consumo de energia são elementos críticos. Processadores para estes sistemas como ARM e MIPS provém um conjunto de instruções de 16-bits, além das instruções de 32-bits para endereçamento. Usando instruções de 16-bits, pode-se diminuir o tamanho do código e aumentar a economia de energia, ao custo de performance. Analisaremos então três conjuntos de instruções diferentes, ARM THUMB, MIPS16 e Motorola M-Core, procurando as soluções encontradas para resolver os problemas mencionados de modo a discutirmos novas soluções, focando em três aspectos principais: economia de energia, uso de memória e performance. ABSTRACT: In the embedded domain, memory usage and energy consumption are critical con- straints. Embedded processors such as the ARM and MIPS provide a 16-bit instruction set in addition to the 32-bit instruction set to address these concerns. Using 16-bit instruc- tions one can achieve code size reduction and I-cache energy savings at the cost of perfor- mance. We’ll analise three different sets of instructions, ARM THUMB, MIPS16 and Motoro- la M-Core, looking for the solutions found to solve the problems mentioned so that we discuss new solutions, focusing in three main aspects: energy savings, memory usage and performance 1. INTRODUÇÃO A proposta de utilização de instruções 16 bits em processadores 32 bits surge como uma alternativa para economia de custos frente a implementações restritas a 32 bits, mas apresentando ainda um ganho de desempenho devido a utilização de um processador 32 bits. Os processadores analisados neste artigo – ARM THUMB, MIPS e Motorola M-Core, são amplamente utilizados em sistemas embarcados. Sistemas deste tipo têm apresentado um grau de sofisticação crescente, o que aumenta a necessidade de processadores velozes e capazes de oferecer o nível de desempenho exgido. Isto, combinado à exigência de economia na utilização de baterias e memória nestes dispositivos compõe os requisitos que os fabricantes destes microprocessadores buscam responder utilizando instruções de 16 bits em processadores 32 bits. Esta abordagem proporciona um aumento na densidade de código, o que por conseqüência alivia requerimentos de disponibilidade de memória e permite um economia de energia já que um número menor de instruções são traduzidas. A análise de como instruções deste tipo são executadas e implementadas, e suas implicações em cada uma das arquiteturas mencionadas é o foco de estudo deste artigo. 2. MOTIVAÇÃO Muitos desconhecem este fato, mas acima de 98% de todos microprocessadores do mercado são aqueles encontrados em sistemas embarcados. Dentre estes microprocessadores, incluem-se aqueles listados como objeto de estudo deste artigo. E com a explosão Eletrônicos portáteis, como celulares, dispositivos GPS e computadores de mão, representam um novo e lucrativo mercado em explosão e engrossam a lista de exigências dos microprocessadores voltados para sistemas embarcados. O desenvolvimento destes têm caminhado para uma nova classe de dispositivos altamente portáteis - e ainda assim sofisticados. Desenvolvedores destes sistemas possuem uma constante preocupação: a duração da bateria. Por um lado, o tamanho reduzido destes dispositivos impede o uso de baterias volumosas. Por outro, a sofisticação dos equipamentos exigi uma crescente capacidade de processamento e portanto, um consumo maior de energia. Como o desempenho de baterias não tem crescido ao passo exigido pelo mercado, desenvolvedores necessitam de componentes eletrônicos que oferecem alta performance e maximizem a duração de baterias através da redução do consumo de energia. Um dos motivos para a utilização de um conjunto de instruções 16 bits em processadores 32 bits é justamente a redução do consumo de energia. Em algumas arquiteturas, isto é realizado mantendo as instruções em um tamanho fixo de 16 bits, como é o caso do Motorola M-Core. Já no caso do ARM THUMB e do MIPS16e, diferentes modos de operação são suportados para que tanto instruções 16 bits como 32 bits sejam permitidas, mas a alternância entre estes modos envolve um certo custo. i. Densidade de código Instruções de 16 bits implicam em um densidade menor de código, isto é, um número menor de bytes de código requeridos para implementar uma aplicação ou função. Uma maior densidade de código afeta o consumo de energia tanto estaticamente como dinamicamente. Um benefício imediato é a geração de um executável menor. Isto reduz as exigências de memória de uma aplicação, que por sua vez reduz o custo do sistema e o seu consumo energético. Existe no entanto um benefício adicional de uma maior densidade de código: uma redução na utilização do barramento para traduzir instruções. Uma vez que é possível executar um trecho equivalente de código com um número reduzido de instruções, o acesso ao barramento para traduzir instruções também é reduzido, resultando em uma economia de energia. ii. 16 bit vs 32 bit O interesse em combinar instruções 16 bits e arquitetura 32 bits está em obter uma maior densidade de código (e outras vantagens decorrentes disto) mas mantendo muito do ganho de performance proporcionado pela arquitetura de 32 bits. Entre os ganhos destacam-se a possibilidade de manipular inteiros de 32 bits em uma única instrução, e endereçar um longo espaço de endereçamento de forma eficiente. Nota-se que nem todo código em um programa irá processar dados de 32 bits. Utilizando o ARM THUMB é possível codificar a aplicação utilizando instruções 16 bits, mas realizando otimizações em trechos de código especialmente críticos para o desempenho da aplicação. 3. ARM THUMB O conjunto de instruções THUMB consiste nas instruções 16-bit que agem como um compacto para um subconjunto das instruções 32-bit ARM padrão Cada instrução THUMB poderia ser executada através da instrução 32-bit equivalente ARM. Entretanto, nem todas as instruções ARM estão disponíveis no subconjunto THUMB; por exemplo, não há nenhuma maneira acessar status ou registradores de coprocessadores. Também, algumas funções que podem ser realizadas em uma única instrução ARM podem somente ser simuladas com uma seqüência de instruções THUMB. Mas realmente ARM contém somente um conjunto de instruções: o de 32-bit. Quando se está operando no estado THUMB, o processador expande simplesmente as instruções menores do buscadas da memória em seus equivalentes 32-bit. A diferença entre duas instruções equivalentes encontra-se em como as instruções são buscadas e interpretadas antes da execução, não em como funcionam. Como a expansão de 16-bit à 32-bit é realizada através de hardware dedicado dentro do chip, não há retardo na execução do código. Mas as instruções 16-bit, por serem menores, oferecem vantagens da memória. O conjunto de instruções THUMB fornece a maioria das funcionalidades requeridas em uma aplicação típica. As operações aritméticas e lógicas, os movimentos de dados de load/store, e os branches condicionais e incondicionais são suportados. Baseado no conjunto de instruções disponível, qualquer código escrito em C podia ser executado com sucesso no estado THUMB. Entretanto, os drivers de dispositivo e os handlers de exceção devem freqüentemente ser escritos, ao menos em parte, no estado ARM. i. Registradores Ao operar-se no estado 16-bit THUMB, a aplicação encontra um conjunto ligeiramentediferente dos registradores. A tabela a seguir compara o modelo do programador nesse estado ao mesmo modelo no estado 32-bit ARM. ARM THUMB R0 R0 R1 R1 R2 R2 ARM THUMB R3 R3 R4 R4 R5 R5 R6 R6 R7 R7 R8 - R9 - R10 - R11 - R12 - R13(SP) SP R14(LR) LR R15(PC) PC CPSR CPSR No estado ARM, 17 registradores são visíveis na modalidade do usuário. Um registrador adicional -- uma cópia conservada do registrador de status de programa atual (Current Program Status Register - CPSR) que é chamado SPSR (Saved Program Status Register) -- é para exception mode apenas. Podemos apontar que os 12 registradores acessíveis no estado THUMB são exatamente os mesmos registradores 32-bit físicos acessíveis no estado ARM. Assim os dados podem ser passados entre o software que funcionam no estado ARM e o software que funciona no estado THUMB através dos registradores R0 a R7. Isto é feito freqüentemente em aplicações reais. A maior diferença entre os registradores envolve o registrador SP. O estado THUMB tem as mnemônicas de pilha (PUSH, POP) que não existem no estado ARM. Estas instruções supõem a existência de um ponteiro de pilha, sendo usado o registrador R13. Eles traduzem nas instruções load e store do estado ARM. O registrador de CPSR prende a modalidade do processador (user ou exception flag), bits da máscara de interrupção, códigos de condições, e o status THUMB bit. O status THUMB bit (T) indica o estado atual do processador: 0 para o estado ARM (default) ou 1 para THUMB. Embora outros bits no CPSR possam ser modificados no software, é perigoso escrever diretamente em T; os resultados de uma mudança imprópria do estado são imprevisíveis. ii. Alternando para o estado THUMB Há diversas maneiras incorporar corretamente ou deixar o estado THUMB. O método usual é através da instrução Branch and Exchange (BX) ou (ou Branch, Link, and Exchange (BLX) na versão 5 da arquitetura ARM). Durante o branch, o CPU examina o bit menos significativo (least significant bit - LSB) do endereço de destino para determinar o novo estado. Desde que todas as instruções ARM se alinharão em um limite de 32-bit ou 16-bit, o LSB do endereço não é usado no branch diretamente. Entretanto, se o LSB for 1 durante o branch de um estado ARM, o processador muda para o estado THUMB antes de começar a executar do endereço novo; se 0 durante o branch de um estado THUMB, ele retorna ao estado ARM. Código 1: Como mudar para o estado THUMB e então retornar mov R0,#5 ;O argumento da função esta em R0 add R1,PC,#1 ;Carrrega o endereço de SUB_BRANCH, seta THUMB adicionando 1 BX R1 ;R1 contem o endereço de SUB_BRANCH+1 ;Instrução especifica do Assembler para mudar para o modo THUMB SUB_BRANCH: BL thumb_sub ;Precisa estar em uma janela de +/- 4 MB add R1,#7 ;Aponta para SUB_RETURN com o bit 0 limpo BX R1 ;Instrução especifica do Assembler para mudar para o modo ARM SUB_RETURN: O Código 1 mostra um exemplo (não único) de usar a instrução de BX para ir do estado ARM ao estado THUMB e retornar logo em seguida. Este exemplo primeiro muda para estado THUMB, chama então uma sub-rotina que seja escrita em código THUMB. Em cima do retorno da sub-rotina, o sistema muda novamente para o estado ARM; embora isto supõe que R1 está preservado pela sub-rotina. O PC contem sempre o endereço da instrução que está sendo executada, mais 8 (SUB_BRANCH). A instrução BL do THUMB divide-se realmente em duas instruções, assim 8 bytes são usados entre SUB_BRANCH e SUB_RETURN. Quando uma exceção ocorre, o processador começa automaticamente a executar no estado ARM no endereço do vetor de exceção. Assim, outra maneira de mudar o estado é colocar o código 32-bit em um handler da exceção. Se o processador central estiver funcionando no estado THUMB quando essa exceção ocorre, pode-se contar que ela está no estado ARM dentro do handler. Pode-se também utilizar o handler de exceção para colocar a CPU no estado THUMB através de um branch. Uma última maneira mudar o estado é através do retorno da exceção. Ao retornar do modo de exceção do processador, o valor conservado de T no registrador de SPSR é usado restaurar o estado. Este bit pode ser usado, para o exemplo, por um sistema operacional reiniciar manualmente uma tarefa no estado THUMB -- se aquele é como este estava funcionando previamente. 4. MIPS16 A abordagem utilizada por processadores MIPS para aumentar a densidade de código é bastante semelhante a dos processadores ARM. Ela é denominada MIPS16e Application- Specific Extension (ASE) e pode ser utilizado com qualquer combinação de arquiteturas MIPS32 ou MIPS64, de 32 e 64 bits, respectivamente. O conjunto de instruções do MIPS16e inclui versões 16 bits das instruções de aritmética, lógica e controle de fluxo. Assim como no THUMB, é necessário alternar entre o modo MIPS16e e o modo padrão de operação – um processo que implica em um custo em tempo e tamanho de código. Por conta disto, só faz sentido alternar para o modo MIPS16e se for possível permanecer nele por um período significativo. O THUMB e o MIPS16e fornecem uma economia de espaço entre 20% e 30% para a maioria dos programas. Nenhuma das duas arquiteturas compactam o código de fato. Eles apenas oferecem um conjunto alternativo de opcodes para algumas operações, e a efetividade da “compressão” é determinada pela razão entre opcodes curtos e longos. Isto, por sua vez, depende da aplicação que está sendo escrita. Código de nível de sistema, como sistemas operacionais e rotinas de interrupção, não podem utilizar instruções de 16 bits e portanto não obterão nenhum benefício. Em oposição, operações aritméticas que não utilizem valores grandes, por exemplo, terão o seu código correspondente bastante reduzido. É preciso considerar, no entanto, que dados não são compactados – apenas código. Se a aplicação fizer uso extenso de estruturas de dados estáticas, a compressão do código será insignificante e não compensará a perda de desempenho decorrente da utilização de instruções 16 bits. O MIPS16e provê também através de algumas instruções o endereçamento tomando como referência o PC (program counter). Estas instruções tomam como base para o cálculo do endereço o valor do PC da própria instrução que o está referenciando ou o valor do PC da instrução precedente. Isto adiciona uma nova possibilidade para melhoria na densidade de código, assim como a instrução Extend, cujo funcionamento será detalhado em uma das subseções abaixo. i. Registradores O conjunto de registradores do MIPS16e é um subconjunto do conjunto de registradores disponível no modo 32-bits, sendo que 8 dos 32 registradores disponíveis em modo 32-bits podem ser acessados. Além destes, algumas instruções referenciam o stack pointer register (sp), o return address register (ra), o condition code register (t8) e o program counter (PC). Por fim, duas instruções permitem ainda acessar todos os 32 registradores de propósito geral. Estes registradores estão listados nas duas tabelas abaixo. A primeira indica os 8 registradores de propósito geral (0 a 7), além do sp, ra e t8. A segunda tabela lista o PC e outros registradores específicos. Codificação no MIPS16e Codificação no MIPS32 Nome Simbólico Descrição 0 16 s0 Registrador de propósito geral 1 17 s1 Registrador de propósito geral 2 2 v0 Registrador de propósito geral 3 3 v1 Registrador de propósito geral 4 4 a0 Registrador de propósito geral 5 5 a1 Registrador de propósito geral Codificação no MIPS16e Codificação no MIPS32 Nome Simbólico Descrição 6 6 a2 Registrador de propósito geral 7 7 a3 Registrador de propósito geral- 24 t8 Condition code register * - 29 sp Stack pointer register - 31 ra Return address register *: é referenciado implicitamente pelas instruções BTEQZ, BTNEZ, CMP, CMPI, SLT, SLTU, SLTI e SLTUI. Nome Simbólico Propósito PC Program counter. Instruções do tipo ADD e LOAD podem usar esse registrador como um operando HI Valor é o conteúdo correspondente à palavra mais significativa do resultado de uma multiplicação ou divisão. LO Valor é o conteúdo correspondente à palavra menos significativa do resultado de uma multiplicação ou divisão. ii. Alternando para o estado MIPS16e Na arquitetura do MIPS16e, estão definidos dois modos ISA (Instruction Set Architecture): · modo MIPS32 (instruções de 32 bits); · modo MIPS16e (instruções de 16 bits). O processador deve alternar entre estes modos de acordo com o indicado pelo valor do bit do modo ISA. Caso este bit tenha valor 0, o processador deve atuar em modo MIPS32, executando instruções de 32 bits. Caso este tenha valor 1, instruções do modo MIPS16e devem ser executadas. Quando uma exceção ocorre (incluindo uma exceção do tipo Reset), o bit do modo ISA é zerado, fazendo com que exceções sejam tratadas em código de 32 bits. O modo anterior de operação é salvo no registrador 0 do Coprocessador, no qual o endereço de reinício é armazenado. A extensão MIPS16e suporta chamada e retorno de procedimentos que alternam entre os modos MIPS32 e MIPS16e, ou que mantém o modo ISA inalterado. Para isto, as seguintes instruções são utilizadas: · JAL (Jump and Link): chamadas para o mesmo modo ISA; · JALX (Jump and Link Exchange): chamadas que alteram o modo ISA; · JALR (Jump and Link Register) e JALRC (Jump and Link Register Compact): chamadas para ambos os modos; · JR (Jump Register) e JRC (Jump Register Compact): retorno para ambos os modos. As instruções JAL, JALR, JALRC e JALX salvam o valor no bit do modo ISA no bit 0 do registrador geral que contém o endereço de retorno. O conteúdo deste registrador geral pode ser utilizado posteriormente pelas instruções JR, JRC, JALR e JALRC para retornar e restaurar o modo ISA. A instrução JALX sempre realiza a troca entre os diferentes modos, modificado o bit do modo ISA. Independente do modo ISA em execução, as instruções JR e JALR determinam o valor do bit do modo ISA a partir do bit 0 do registrador geral que contém o endereço-alvo da instrução. Note que o bit 0 do registrador geral não faz parte do endereço-alvo. O bit 0 do PC (program counter) é zerado para que exceções de endereçamento não ocorram. O mesmo comportamento visto para as instruções JR e JALR é aplicado para as instruções JRC e JALRC, com a diferença de que ele só é observado quando estas instruções são executadas em modo MIPS16e. iii. JALX, JR e JALR O comportamento de três das instruções 32-bits do MIPS – JALX, JR e JALR, difere entre processadores que implementam a extensão MIPS16e e os que não o fazem. Em processadores com suporte ao MIPS16e ASE o comportamento é o seguinte: · A instrução JALX executa um JAL e alterna o modo; · As instruções JR e JALR carregam o bit do modo ISA a partir do bit 0 do registrador fonte. O bit 0 do PC é zerado e exceções do tipo endereçamento podem ocorrer quando o bit 0 do registrador de origem for 1 (modo MIPS16e) Em processadores sem suporte ao MIPS16e ASE, estas três instruções se comportam da seguinte forma: · Instruções JALX geram uma exceção do tipo Instrução Reservada; · Instruções JR e JALR geram uma exceção de endereçamento na tradução da tradução da instrução alvo quando o bit 0 do registrador de origem for 1. iv. Extend Um outro recurso do MIPS16e é a instrução Extend. Ela permite aumentar o tamanho do imediato de qualquer instrução do MIPS16e cujo imediato seja menor que o imediato da instrução equivalente de 32 bits. A instrução Extend sempre deve preceder a instrução cujo imediato deseja-se estender. Cada instrução estendida ocupa 4 bytes: 2 bytes para Extend e 2 bytes para a instrução que está sendo estendida. A tabela abaixo demonstra a implicação prática de utilizar a instrução Extend. A coluna “Imediato – MIPS16e” indica o tamanho do imediato em algumas das instruções estensíveis do MIPS16e. A coluna “Imediato Estendido” indica o quanto cada imediato pode ser estendido quando precedido por uma instrução Extend. Mnemônico Instrução - MIPS16e Imediato MIPS16e Imediato estendido ADDIU Add Immediate Unsigned 8 16 B Branch Unconditional 11 16 Mnemônico Instrução - MIPS16e Imediato MIPS16e Imediato estendido BEQZ Branch on Equal to Zero 8 16 CMPI Compare Immediate 8 16 LB Load Byte 5 16 LI Load Immediate 8 16 SB Store Byte 5 16 SLL Shift Left Logical 3 5 SLTI Set on Less Than Immediate 8 16 SRA Shift Right Arithmetic 3 5 SRL Shift Right Logical 3 5 5. MOTOROLA M-CORE O MOTOROLA M-CORE apresenta arquitetura 32-bit LOAD/STORE RISC, de modo a comprimir e facilitar ao máximo o código, uma vez que embora a tecnologia CISC apresente competitividade me relação a densidade de código, este é muito mais complexo, muitas vezes necessitando até mesmo de hardware especial, o que se torna inviável em um sistema embarcado. Tendo isto em vista, ele utiliza instruções de tamanho fixo em 16-bit, proporcionando economia de memória além de aumento da performance. Há também um controle dinâmico de energia controlado a cada ciclo de clock, permitindo assim redução na energia disspada e, portanto, melhor aproveitamento a menor custo. i. Registradores Existem no MOTOROLA M-CORE dois modos de programação, cada qual com o seu conjunto de registradoes, o modo usuário e o modo supervisor. O modo usuário apresenta 16 resgistradores de 32-bit de propósito geral, sendo o registrador R0 utilizado como apontador da pilha (SP) e o registrador R15 utilizado como endereço do retorno de função. Os registradores R2 ao R7 são usados como argumento de funções, de R8 a R14 encontram-se os registradores para uso local. O registrador R1 pode ser usado para armazenar valores temporários. Há também outros dois registradores, o PC (Program Counter – Contador do programa) e o bit C, usado em condicionais e como carry. O modo supervisor consiste de todos os registradores presentes no modo usuário, além de outros 16 registradores de 32-bit, chamados de registradores alternativos, mais 13 registradores especiais, definidos logo a seguir. Registrador Nome Função CR0 PSR Estado do processador CR1 VBR Base do vetor de excessão Registrador Nome Função CR2 EPSR Valor da ultima excessão CR3 FPSR Valor da ultima interrupção rápida CR4 EPC PC da ultima excessao CR5 FPC PC da ultima interrupção rápida CR6 SS0 Valor temporário (scratch) CR7 SS1 Valor temporário (scratch) CR8 SS2 Valor temporário (scratch) CR9 SS3 Valor temporário (scratch) CR10 SS4 Valor temporário (scratch) CR11 GCR Registrador de controle global CR12 GSR Resgistrador de status global O modo supervisor deve ser evitado, devido ao seu grande poder, sendo utilizado apenas na implementação de funções mais sensíveis do sistema operacional, controle de entrada e saida (I/O) e operações privilegiadas. ii. Instruções Três tipo de instruções são implementadas pelo M-CORE: - Controle de fluxo de dados - Acesso a dados da memória - Operações registrador-registrador Em operações registrador-registrador, cinco modos de endereçamento estão disponíveis: - Monadic Mode: um único campo de 4 bits especifica a origem ou destino da operação; – Dyadic Mode: dois campos de 4 bits codificados na instrução especificam um registrador de origem e um registrador de origem ou destino; – Registrador e imediato de 5 bits: um campo de 4 bits codificadona instrução especifica um registrador de origem ou destino e um campo de 5 bits especifica o valor de um imediato como um segundo operando de origem; – Registrador com offset de 5 bits: um campo de 4 bits codificado na instrução especifica um registrador de origem ou destino e um campo de 5 bits especifica o valor de um imediato como um segundo operando de origem. Devido ao offset, uma codificação do imediato de 0 a 31 resulta em valores entre 1 e 32 para o imediato. – Registrador com imediato de 7 bits: um campo de 4 bits codificado na instrução especifica um registrador de destino e um campo de 7 bits especifica o valor do imediato como operando de origem. Apenas a instrução move immediate (MOVI) utiliza este formato. – Registrador de controle: um campo de 4 bits codificado na instrução especifica um registrador de propósito geral de origem ou destino e um campo de 5 bits para especificar um registrador de controle. O M-CORE suporta 4 modos de endereçamento para acesso a dados da memória como descrito abaixo: – Scaled 4-bit Immediate Addressing Mode: usado para o cálculo do endereço efetivo nas instruções Load (LD) e Store (ST). O conteúdo de um registrador de propósito geral é adicionado ao valor modificado do imediato (após receber um shift-left), formando o valor do endereço efetivo. O segundo registrador servirá como registrador de destino para instruções do tipo Load e como registrador de origem para para instruções do tipo Store; – Load/Store Register Quadrant Mode: utilizado para transferir um conjunto contíguo de ou para a memória indicada pela conteúdo de um registrador de propósito geral; – Load/Store Multiple Register Mode: utilizado para transferir u conjunto contíguo de ou para a posição de memória apontada pelo registrador de propósito geral R0. Um campo especifica o primeiro registrador a ser transferido. A transferência ocorre em ordem ascendente, a partir deste até o registrador R15; – Load Relative Word Mode: este formato é utilizado pela instrução Load Relative Word (LRW) para endereçar uma palavra de 32 bits em relação ao Program Counter (PC). O M-CORE suporta 4 modos de endereçamento para instruções do fluxo de controle. São eles: – Scaled 11-bit Displacement Mode: As instruções Branch (BR), Branch-on- condition False (BF) e Branch-to-subroutine (BSR) utilizam este modo de endereçamento para calcular o valor do endereço alvo do salto; – Register Addressing Mode: As instruções Jump (JMP) e Jump-to-subroutine (JSR) usam este modo de endereçamento para cálculo do endereço-alvo efetivo. O endereço-alvo é o valor obtido do registrador de propósito geral codificado na instrução; – Indirect Mode: As instruções Jump Indirect (JMPI) e Jump-to-subroutine Indirect (JSRI) utilizam este formato para endereçar uma palavra de 32 bits em relação ao PC. – 6. COMPARAÇÃO ENTRE 16 E 32 BITS Os processadores que lidam com conjuntos de instruções de 32-bit além dos de 16-bit aparentam apresentar uma vantagem em relação as que utilizam apenas intruções de 16- bit, mesmo que em registradores de 32-bit. Isso se deve ao fato em que há situações onde pode-se obter uma maior performance, dado o tamanho do dado com o qual se esta manipulando. Desse forma, pode-se aproveitar as vantagens de ambas as implementações, com instruções de 32 de 16-bit, uma vez que a mudança de modos, como ja mencionado quando sobre o ARM THUMB e MIPS16, são praticamente imperceptives, podendo aproveitar a performance da arquitetura de 32-bit e a densidade do código da de 16-bit. 7. CONCLUSÕES O uso de instruções 16 bits em processadores 32 bits ataca diretamente exigências do mercado de sistemas embarcados: uso reduzido de memória e energia ao mesmo tempo de fornecimento de desempenho compatível com a crescente sofisticação de dispositivos móveis. Vale lembrar que embora os ganhos na redução do uso de memória e de energia e no aumento da densidade de código sejam atraentes no caso médio, eles são dependentes da aplicação em desenvolvimento. Uma avaliação pode concluir que os ganhos em uma aplicação não compensam o impacto negativo observado no desempenho. Duas abordagens foram analisadas: na primeira, é possível alternar entre um modo de execução em que instruções de 16 bits são executadas e outro em que instruções 32 bits. É o caso do MIPS16e e do ARM THUMB. Já na abordagem do Motorola M-CORE, é possível executar instruções 32 bits apemas. 8.REFERÊNCIAS 1. Krishnaswamy, A.; Gupta, R. Instruction Coalescing for 16-bit Code. 2. Lemieux, J. - Introduction to ARM THUMB. http://www.embedded.com/showArti- cle.jhtml?articleID=15200241. September, 2003 3. MIPS Techonologies. MIPS32 Architecture for Programmmers Volume IV-a: The MIPS16e Application-Specific Extension to the MIPS32 Architecture. May 2003. 4. MOTOROLA. M-CORE Reference Manual with M210/M210S Specifications. 5. Turley, J. - Code compression under the microscope. http://www.embedded.com/showArticle.jhtml?articleID=17701289. February, 2004. 6. Tiemann, M; et ali - Evaluating Hardware/ Software Tradeoffs - Hardware extensions and the compilers that make them real. http://www.redhat.com/support/wpapers/cygnus/cygnus_evaluate/index.html 7. MOTOROLA. M-CORE Designing in low power. 8. ATMEL Corporation. Embedded RISC Microcontroller Core ARM7TDMI
Compartilhar