Terminologia de tipos

Alguns nomes de tipos serão usados nesta seção. Estes tipos não nescessáriamente tem um padrão de tamanho entre arquiteturas distintas, então serão definidos alguns tamanhos aqui baseados nos valores mais comuns encontrados na linguagem C de arquiteturas modernas.

  • float => single-precision (32 bit)
  • double => double-precision (64 bit)
  • byte => Inteiro 8 bit
  • short => Inteiro 16 bit
  • int => Inteiro 32 bit
  • long => Inteiro 64 bit

Registradores de uso geral (de 64 bit até 8 bit)

Largura Acumulador Base Contador Dados Stack Pointer Stack Base Pointer Origem Destino
64 bit RAX RBX RCX RDX RSP RBP RSI RDI
32 bit EAX EBX ECX EDX ESP EBP ESI EDI
16 bit AX BX CX DX SP BP SI DI
8 bit AH AL BH BL CH CL DH DL SPL BPL SIL DIL

Todos tamanhos de registradores de tamanho inferior a arquitetura são acessíveis. Eles apenas são nomes alternativos para pedaços de suas versões maiores. Abaixo segue um diagrama da faixa de bits que cada nome representa, onde x representa o nome base do registrador (A,B,C,D etc…)

Bits Nome
Bit N 63 0
64 RxX
32 ExX
16 xX
8 xH xL

Adicionamente em arquiteturas 64 bit, os registradores R8, R9, R10, R11, R12, R13, R14, R15 estão disponíveis, todos em 64 bit sem equivalentes menores.

Registradores MMX (64 bits) [Intel]

A extensão MMX “introduz” 8 registradores novos denominados MMx. Cada um dos registradores podem ser usados como um número de 64 bits ou

Sub-divisão

Dado Arquitetura
1 long MMX
2 int MMX
4 short MMX
8 byte MMX
Compartilhamento de valores

Na extensão MMX, os registradores são compartilhados com a unidade de ponto flutuante (FPU) x87 dos processadores x86, onde os 64 bits do registrador são usados como parte de uma mantissa de 80 bits da FPU x87. Por isso, operações da FPU podem alterar os valores dos registradores MM assim como instruções MMX podem alterar valores da FPU.

Registradores 3DNow (64 bits) [AMD]

A arquitetura 3DNow foi uma melhoria (versão alternativa) da extensão MMX da Intel, onde além da compatibilidade com as mesmas operações, também adicionava instruções de ponto flutuante usando os mesmos registradores. Desta maneira, caso softwares que usavam a FPU x87 fossem reescritos para o uso de 3DNow, um ganho de performance de até 4x era possível.

Sub-divisão

Dado Arquitetura
1 long MMX / 3DNow
2 int MMX / 3DNow
4 short MMX / 3DNow
8 byte MMX / 3DNow
2 float 3DNow
Compartilhamento de valores

Assim como na extensão MMX, os valores eram compartilhados com a FPU x87

Registradores de Media (128 bits) [AMD/Intel]

Nas arquiteturas 64 bit existem 16 registradores de 128 bits nomeados XMMx. Esses registradores são geralmente usados para passagem de parâmetros de ponto flutuante float (32 bit) e double (64 bit). Nas arquiteturas 32 bit apenas os 8 primeiros estão disponíveis.

Foram adicionadas com a extensão SSE nos processadores 32 bit e é usado em operações SIMD (Single-instruction Multiple-data) e podem representar vários tipos de dados:

Sub-divisão

Dado Arquitetura
4 float SSE
2 double SSE2
2 long SSE2
4 int SSE2
8 short SSE2
16 byte SSE2

Registradores AVX (256 bits) [AMD/Intel]

Nos processadores com a extensão AVX os registradores XMM foram expandidos para 256 bits e renomeados para YMM. As suas alternativas SSE ainda são acessíveis (bits 0 a 127). Usando a mesma terminologia da seção anterior, as sub-divisões são:

Dado Arquitetura
8 float AVX
4 double AVX
4 long AVX2
8 int AVX2
16 short AVX2
32 byte AVX2

Registradores AVX-512 (512 bits) [Intel]

Em alguns processadores como Xeon-Phi, Core-X, Skylake-X e Xeon-D a Intel implementou uma extensão dos registradores YMM para 512 bits desta vez renomeado para ZMM. Além disso foram adicionados mais 16 registradores para a série, totalizando 32 registradores. Todos os 32 registradores podem ser usados no modo EVEX do AVX-512 nos modos 128, 256 e 512 bits

** TODO **