miniatura|AMD Opteron, a primeira CPU en introducir as extensións x86-64 en abril de 2003 dereita|miniatura|O conxunto de cinco volumes do Architecture Programmer's Manual x86-64, tal e como foi publicado e distribuído por AMD en 2002 x86-64 (tamén coñecido como x64, x86_64, AMD64, ou Intel 64) é unha extensión de 64 bits do conxunto de instrucións x86. Foi anunciado en 1999 e dispoñible na familia AMD Opteron no 2003. Presenta dous novos modos operativos: o modo de 64 bits e modo de compatibilidade, xunto cun novo mecanismo de paxinado en catro-niveis.

No modo de 64 bits, x86-64 soporta bastante máis cantidade de memoria virtual e de memoria física en comparación cos seus predecesores de 32 bits, permitindo que os programas utilicen máis memoria para o almacenamento de datos. A arquitectura expande o número de rexistros de propósito xeral de 8 a 16, todos de propósito plenamente xeral, e amplían a súa anchura a 64 bits.

A aritmética de punto flotante é compatible a través de instrucións SSE2 obrigatorias en modo de 64 bits. Aínda que os rexistros FPU e MMX x87 aínda aínda están dispoñibles, son xeralmente substituídos por un conxunto de dezaseis rexistros vectoriais de 128 bits (rexistros de XMM). Cada un destes rexistros vectoriais poden almacenar un ou dous números de punto flotante de doble precisión, ata catro números de punto flotante de precisión simple ou varios formatos enteiros.

En modo de 64 bits, as instrucións son modificadas para soportar operandos e modos de direccionamento de 64 bits.

A arquitectura x86-64 define un modo de compatibilidade que permite que as aplicacións de usuario de 16 e de 32 bits se executen sen ser modificadas xunto coas aplicacións de 64 bits, sempre que o sistema operativo de 64 bits as soporte. Dado que os conxuntos de instrucións x86-32 completos seguen implementados no hardware sen necesidade de emulación, estes executábeis máis antigos poden executarse con pouca ou ningunha penalización de rendemento, mentres que as aplicacións máis novas ou modificadas poden aproveitarse das novas características do deseño do procesador para lograr melloras de rendemento. Ademais, os procesadores compatibles con x86-64 seguen acendéndose en modo real para manter a retrocompatibilidade con versións anteriores do procesador 8086 orixinal, como ocorreu cos procesadores x86 desde a introdución do modo protexido co 80286.

A especificación orixinal, creada por AMD e publicada en 2000, foi implementada por AMD, Intel, e VIA. A microarquitectura AMD K8, nos procesadores Opteron e Athlon 64, foi a primeira en aplicala. Esta foi a primeira aportación á arquitectura x86 deseñada por unha compañía que non fora Intel. Intel viuse obrigada a seguir o exemplo e presentou unha familia NetBurst modificada, que era compatible por software coas especificacións de AMD. VIA Technologies introduciu x86-64 na súa arquitectura VIA Isaiah co VIA Nano.

A arquitectura x86-64 foi rapidamente adoptada por ordenadores de sobremesa e portátiles personais e por servidores, os cales eran xeralmente configurados para 16 GiB (gibibytes) de memoria ou máis. Reemplazou eficazmente a descontinuada arquitectura Itanium (anteriormente IA-64), a cal pretendía, orixinalmente, substituír a arquitectura x86. x86-64 e Itanium non son compatibles no nivel do conxunto de instrucións nativo e os sistemas operativos e as aplicacións compiladas para unha arquitectura non se poden executar na outra de forma nativa.

AMD64 miniatura|Logo de AMD64

Historia AMD64 (tamén referida por AMD na súa literatura e documentación como "tecnoloxía AMD de 64 bits" e "arquitectura AMD x86-64") foi creado como unha alternativa radicalmente diferente á arquitectura IA-64 deseñada por Intel e Hewlett-Packard, que era incompatible con versións anteriores do IA-32, a versión de 32 bits da arquitectura x86. AMD anunciou AMD64 orixinalmente en 1999, cunha especificación completa dispoñible en agosto do 2000. Como AMD nunca foi convidada a contribuír á arquitectura IA-64 e calquera tipo de licenza parecía improbable, AMD situou dende o principio a arquitectura AMD64 como unha forma evolutiva de engadir capacidades de computación de 64 bits á arquitectura x86 existente, ao mesmo tempo que soportaba o código x86 de 32 bits herdado, en oposición ao enfoque de Intel de crear unha arquitectura de 64 bits completamente nova e incompatible con x86 con IA-64.

O primeiro procesador baseado en AMD64, o Opteron, foi lanzado en abril do 2003.

Implementacións Os procesadores de AMD que implementan a arquitectura AMD64 inclúen Opteron, Athlon 64, Athlon 64 X2, Athlon 64 FX, Athlon II (seguido de "X2", "X3", ou "X4" para indicar o número de núcleos e os modelos XLT), Turion 64, Turion 64 X2, Sempron (modelos "Palermo" E6 stepping e todos os modelos "Manila"), Phenom (seguido de "X3" ou "X4" para indicar o número de núcleos), Phenom II (seguido de "X2", "X3", "X4" ou "X6" para indicar o número de núcleos), FX, Fusion/APU e Ryzen/Epyc.

Características da arquitectura A característica principal que define AMD64 é a dispoñibilidade de rexistros de propósito xeral de 64 bits 64 (por exemplo, ), aritmética de enteiros e operacións lóxicas de 64 bits, e enderezos virtuais de 64 bits. Os deseñadores tomaron a oportunidade de facer tamén outras melloras.

Os cambios notábeis nas extensións de 64 bits inclúen:

Capacidade de enteiros de 64-bit Todos os rexistros de propósito xeral (GPR) expandíronse de 32 bits a 64 bits, e todas as operacións aritméticas e lóxicas, as operacións de memoria a rexistro e de rexistro a memoria, etc., poden operar directamente en enteiros de 64 bits. As insercións e extraccións na pila teñen un tamaño predeterminado de 8 bytes, e os punteiros ocupan 8 bytes.

Rexistros adicionais Ademais de aumentar o tamaño dos rexistros de propósito xeral, o número de rexistros de propósito xeral nomeados aumenta en oito (por exemplo , , , , , , , ) eb x86 a 16 (por exemplo , , , , , , , , , , , , , , , ). Polo tanto, é posible manter máis variables locais nos rexistros en lugar de na pila e permitir que os rexistros conteñan constantes ás que se accede con frecuencia; os argumentos para subrutinas pequenas e rápidas tamén se poden pasar nos rexistros en maior medida. Aínda así, AMD64 ten menos rexistros que a maioría de conxuntos de instrucións RISC (por exemplo Power ISA ten 32 GPR; os ARM de 64 bits, o RISC-V I, o SPARC, o Alpha, o MIPS, e o PA-RISC teñen 31) ou máquinas de tipo VLIW como o IA-64 (que ten 128). Non obstante, unha implementación de AMD64 pode ter moitos máis rexistros internos que o número de rexistros arquitectónicos expostos polo conxunto de instrucións (renombrado de rexistros) (Por exemplo, os núcleos AMD Zen teñen 168 rexistros internos físicos de coma flotante de 64 bits e 160 rexistros internos físicos de coma flotante de 128 bits.)

Rexistros XMM (SSE) adicionais Do mesmo xeito, o número de rexistros XMM de 128 bits (usados para instrucións SIMD de transmisión) tamén se incrementou de 8 a 16. A pila de rexistros FPU x87 tradicional non está incluída na extensión do tamaño do ficheiro de rexistros no modo de 64 bits, en comparación cos rexistros XMM usados ​​por SSE2, que si se ampliaron. A pila de rexistros x87 non é un simple ficheiro de rexistros, aínda que permite o acceso directo a rexistros individuais mediante operacións de intercambio de baixo custo.

Espazo de enderezos virtuais máis grande A arquitectura AMD64 define un formato de enderezos virtuais de 64 bits, dos cales os 48 bits de orde inferior úsanse nas implementacións actuais. Isto permite ata 256 TiB (248 bytes) de espazo de enderezos virtuais. A definición da arquitectura permite que este límite se aumente en futuras implementacións ata os 64 bits completos, ampliando o espazo de enderezos virtuais a 16 EiB (264 bytes). Isto compárase con có 4GiB (232 bytes) para o x86. Isto significa que se pode operar con ficheiros moi grandes mapeando todo o ficheiro no espazo de enderezos do proceso (o que adoita ser moito máis rápido que traballar con chamadas de lectura/escritura de ficheiros), en lugar de ter que mapear rexións do ficheiro dentro e fóra do espazo de enderezos.

Maior espazo de enderezos físicos A implementación orixinal da arquitectura AMD64 implementaba enderezos físicos de 40 bits e, polo tanto, podía direccionar ata 1 TiB (240 bytes) de RAM. As implementacións actuais da arquitectura AMD64 (a partir da microarquitectura AMD 10h) amplíano a enderezos físicos de 48 bits e, polo tanto, poden direccionar ata 256 TiBs (248 bytes) de RAM. A arquitectura permite estender isto a 52 bits no futuro (limitado polo formato de entrada da táboa de páxinas); isto permitiría o direccionamento de ata 4 PiB de RAM. En comparación, os procesadores x86 de 32 bits están limitados a 64 GiB de RAM no modo de extensión de enderezos físicos (PAE) ou 4 GiB de RAM sen o modo PAE.

Maior espazo de enderezos físicos no modo herdado Cando funciona no modo herdado a arquitectura AMD64 admite o modo de extensión de enderezos físicos (PAE), do mesmo xeito que a maioría dos procesadores x86 actuais, pero AMD64 estende o PAE de 36 bits a un límite arquitectónico de 52 bits de enderezo físico. Polo tanto, calquera implementación permite o mesmo límite de enderezos físicos que no modo longo.

Acceso relativo a datos do punteiro de instrución Agora as instrucións poden facer referencia a datos relativos ao punteiro de instrución (rexistro RIP). Isto fai que o código independente da posición, como o que se usa miúdo en bibliotecas compartidas e no código cargado en tempo de execución, sexa máis eficiente.

Instrucións SSE A arquitectura orixinal de AMD64 adoptou as instrucións SSE e SSE2 de Intel como principais. Estes conxuntos de instrucións proporcionan un suplemento vectorial á FPU escalar x87, para os tipos de datos de precisión simple e dobre. SSE2 tamén ofrece operacións vectoriais enteiras, para tipos de datos que van dende os 8 bits ata os 64 bits de precisión. Isto fai que as capacidades vectoriais da arquitectura estean á par das dos procesadores x86 máis avanzados da súa época. Estas instrucións tamén se poden usar en modo de 32 bits. A proliferación de procesadores de 64 bits fixo que estas capacidades vectoriais sexan omnipresentes nos ordenadores domésticos, o que permite a mellora dos estándares das aplicacións de 32 bits. A edición de 32 bits de Windows 8, por exemplo, require a presenza de instrucións SSE2. As instrucións SSE3 e os conxuntos de instrucións posteriores de Streaming SIMD Extensions non son características estándar da arquitectura.

Bit de non execución O bit de non execución ou bit NX (bit 63 of the page table entry) permite que o sistema operativo especifique que páxinas do espazo de enderezos virtuais poden conter código executable e cales non. AUn intento de executar código dunha páxina etiquetada como "sen execución" resultará nunha violación de acceso á memoria, similar a un intento de escribir nunha páxina de só lectura. Isto debería dificultar que o código malicioso tome o control do sistema mediante ataques de "sobrecarga do búfer" ou "búfer non comprobado". Unha característica similar está dispoñible nos procesadores x86 desde o 80286 como atributo dos descritores de segmento; non obstante, isto só funciona nun segmento enteiro á vez. O direccionamento segmentado considerouse durante moito tempo un modo de operación obsoleto e todos os sistemas operativos de PC actuais o ignoran, configurando todos os segmentos nun enderezo base de cero e (na súa implementación de 32 bits) un tamaño de 4 GiB. AMD foi o primeiro provedor da familia x86 en implementar a non execución no modo de direccionamento lineal. A funcionalidade tamén está dispoñible no modo herdado en procesadores AMD64 e en procesadores Intel x86 recentes cando se usa PAE.

Eliminación de funcionalidades antigas