# Power ISA

Power ISA es una arquitectura de conjunto de instrucciones (ISA) reducido (RISC) actualmente desarrollada por la Fundación OpenPOWER, dirigida por IBM. Originalmente fue desarrollado por IBM y el ahora desaparecido grupo industrial Power.org. Power ISA es una evolución de la arquitectura PowerPC, creada por la fusión del núcleo ISA PowerPC ISA y el Libro E opcional para aplicaciones integradas. La fusión de estos dos componentes en 2006 fue liderada por los fundadores de Power.org, IBM y Freescale Semiconductor.

## Características

La ISA se divide en varias categorías que se describen en un determinado Libro. Los procesadores implementan un conjunto de estas categorías según sea necesario para su tarea. Se requieren diferentes clases de procesadores para implementar ciertas categorías, por ejemplo, un procesador de clase de servidor incluye las categorías: Base, Servidor, Coma flotante, 64 bits, etc. Todos los procesadores implementan la categoría Base.
Power ISA es una RISC arquitectura de carga-almacenamiento. Tiene varios conjuntos de registros:
* 32 registros de propósito general (GPR) de 32 o 64 bits para operaciones de enteros.
* 64 registros escalares vectoriales (VSR) de 128 bits para operaciones vectoriales y operaciones de coma flotante.
** 32 registros de coma flotante (FPR) de 64 bits como parte de los VSR para operaciones de coma flotante.
** 32 registros vectoriales (VR) de 128 bits como parte de los VSR para operaciones vectoriales.
* 8 campos de registros de condiciones (CR) × 4 bits para comparación y control de flujo.
* 11 registros especiales de varios tamaños: registro de contador (CTR), registro de enlace (LR), base de tiempo (TBU, TBL), base de tiempo alternativa (ATBU, ATBL), acumulador (ACC), registros de estado (XER, FPSCR, VSCR, SPEFSCR).
Las instrucciones hasta la versión 3.0 tienen una longitud de 32 bits, con la excepción del subconjunto VLE (codificación de longitud variable) que proporciona una densidad de código más alta para aplicaciones integradas de gama baja, y la versión 3.1 que introdujo prefijos para crear instrucciones de 64 bits. La mayoría de las instrucciones son triádicas, es decir, tienen dos operandos de origen y un destino. Se admiten operaciones de coma flotante compatibles con precisión simple y precisión doble IEEE-754, incluidas instrucciones adicionales de multiplicar-sumar (FMA) y coma flotante decimal. Existen provisiones para operaciones instrucción única, datos múltiples (SIMD) en datos enteros y de coma flotante en hasta 16 elementos en una instrucción.
Power ISA tiene soporte para caché Harvard, es decir, cachés de instrucciones y datos divididas y soporte para cachés unificadas. Las operaciones de memoria son estrictamente de carga/almacenamiento, pero permiten la ejecución fuera de orden. También hay soporte para direccionamiento big y little-endian con categorías separadas para endianness por página y modo, y soporte para direccionamiento 32 bits y 64 bits.
Los diferentes modos de operación incluyen usuario, supervisor e hipervisor.

## Categorías

* Base: La mayor parte de los Libro I y Libro II
* Servidor: Libro III-S
* Embedded: Libro III-E
* Misc: coma flotante, vector, procesamiento de señales, bloqueo de caché, coma flotante decimal, etc.

## Libros

La especificación Power ISA se divide en cinco partes, llamadas "libros":
* Libro I - Arquitectura del conjunto de instrucciones del usuario cubre el conjunto de instrucciones base disponible para el programador de aplicaciones. Referencia de memoria, control de flujo, enteros, coma flotante, aceleración numérica, programación a nivel de aplicación. Incluye capítulos sobre unidades de procesamiento auxiliares como procesadores de señales digitales (DSP) y la extensión AltiVec.
* Libro II - Arquitectura de entorno virtual define el modelo de almacenamiento disponible para el programador de aplicaciones, incluidos el tiempo, la sincronización, la gestión de caché, las funciones de almacenamiento y el orden de bytes.
* Libro III - Arquitectura del entorno operativo incluye excepciones, interrupciones, gestión de memoria, funciones de depuración y funciones de control especiales. Se divide en dos partes.
** Libro III-S: define las instrucciones de supervisor utilizadas para implementaciones de propósito general/servidor. Se trata principalmente del contenido del Libro III del antiguo ISA PowerPC.
** Libro III-E: define las instrucciones del supervisor utilizadas para las aplicaciones integradas. Se deriva del antiguo PowerPC Libro E.
* Libro VLE: Arquitectura de instrucción codificada de longitud variable define instrucciones y definiciones alternativas de los libros I–III, destinadas a una mayor densidad de instrucción y aplicaciones de gama muy baja. Utilizan instrucciones de 16 bits y ordenación de bytes big-endian.

### Cumplimiento

Lo nuevo en la versión 3 de Power ISA es que no tiene que implementar toda la especificación para cumplir. La proliferación de instrucciones y tecnologías ha hecho que la especificación completa sea difícil de manejar, por lo que Foundación OpenPOWER decidió habilitar el cumplimiento por niveles.
Estos niveles incluyen requisitos «opcionales» y «obligatorios». Sin embargo, se recomienda que se proporcione una opción para deshabilitar cualquier función adicional más allá del nivel de subconjunto declarado del diseño.
Un diseño debe cumplir con su nivel de subconjunto declarado para hacer uso de la protección de la Fundación con respecto al uso de propiedad intelectual, ya sea patentes o marcas registradas. Esto se explica en el EULA de OpenPOWER.
Un diseño compatible debe:
* Admitir la arquitectura Base
* Y soportar al menos uno de los subconjuntos
** SFS – Subconjunto escalar de coma fija. 129 instrucciones. Instrucciones básicas de coma fija y carga/almacenamiento, que es realmente la arquitectura "Base".
** SFFS – Subconjunto escalar de coma fija + coma flotante. 214 instrucciones. Agregar operaciones de coma flotante a la Base.
** LCS – subconjunto de cumplimiento de Linux. 962 instrucciones. Diseñado para Linux de nivel de servidor, agrega características como 64 bits, SIMD/VSX opcional, Radix MMU, modo little endian y compatibilidad con hipervisor.
** ACS – Subconjunto de cumplimiento AIX. 1099 instrucciones. Destinado a ejecutar AIX, añadiendo características como coma flotante de precisión cuádruple y decimal, modo big endian y multiprocesamiento simétrico.
* Puede incluir cualquiera de las funciones de LCS y ACS como Opcional o elegir entre las funciones Siempre opcionales, como matriz matemática y administración de energía.
* Las funciones opcionales, si se eligen, deben implementarse en su totalidad (no se permite la implementación parcial de una función opcional)
* Puede incluir extensiones Personalizadas, específicas de la implementación, implementadas en el Architecture Sandbox.
Si la extensión es lo suficientemente general, OpenPOWER Foundation solicita a los implementadores que la envíen como una solicitud de comentarios (RFC) al OpenPOWER ISA Workgroup. Tenga en cuenta que no es estrictamente necesario unirse a la Fundación OpenPOWER para enviar RFC.
* Mucho de esto puede implementarse en hardware o firmware.

#### Discrepancia en el cumplimiento de EABI y Linux

Las especificaciones de EABI son anteriores al anuncio y la creación de los subconjuntos de Cumplimiento.
Con respecto al subconjunto de cumplimiento de Linux que tiene VSX (SIMD) opcional: en 2003 EABI v1.9 de 64 bits hizo que SIMD fuera opcional, pero en julio de 2015, para mejorar el rendimiento de los sistemas IBM POWER9, SIMD se hizo obligatorio en EABI v2.0. Esta discrepancia entre que SIMD sea opcional en el nivel de cumplimiento de Linux pero obligatorio en EABI v2.0 no se puede rectificar sin un esfuerzo considerable: la incompatibilidad con versiones anteriores de las distribuciones de Linux no es una opción viable. En la actualidad, esto deja a los nuevos implementadores de OpenPOWER que deseen ejecutar distribuciones Linux estándar teniendo que implementar instrucciones en gran cantidad: 962. Por el contrario, RISC-V RV64GC, el mínimo para ejecutar Linux requiere solo 165.

## Especificaciones
### Power ISA v2.03

La especificación para Power ISA v2.03 se basa en el antiguo PowerPC ISA v2.02 del POWER5+ y el Libro E de la extensión de la especificación PowerPC. El Libro I incluía cinco nuevos capítulos sobre unidades auxiliares de procesamiento como DSP y la extensión AltiVec.

#### Núcleos compatibles

* Freescale PowerPC e200, e500
* IBM PowerPC 405, 440, 460, 970, POWER5 y POWER6
* IBM Cell EPP

### Power ISA v2.04

La especificación para Power ISA v2.04 se finalizó en junio de 2007. Se basa en Power ISA v2.03 e incluye cambios, principalmente en la parte del Libro III-S, con respecto a la virtualización, funciones de hipervisor, particionamiento lógico y manejo de página virtual.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* El núcleo PA6T de P.A. Semi
* Titan de AMCC

### Energía ISA v.2.05

La especificación para Power ISA v2.05 se publicó en diciembre de 2007. Se basa en Power ISA v.2.04 e incluye cambios principalmente en el "Libro I" y el "Libro III-S", incluidas mejoras significativas como la aritmética decimal (Categoría: Coma flotante decimal en Libro I) y mejoras en el hipervisor del servidor.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* POWER6
* PowerPC 476

### Energía ISA v.2.06

La especificación para Power ISA v2.06 se lanzó en febrero de 2009 y se revisó en julio de 2010. Se basa en Power ISA v2.05 e incluye extensiones para el procesador POWER7 y el núcleo e500-mc. Una nueva característica importante son las instrucciones de coma flotante escalar vectorial (VSX). El Book III-E también incluye mejoras significativas para la especificación integrada con respecto al hipervisor y la virtualización en implementaciones de uno o varios núcleos.
La especificación se revisó en noviembre de 2010 con respecto a la especificación Power ISA v2.06 revisión B, mejorando las funciones de virtualización.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* POWER7
* A2I
* e500-mc
* e5500

### POWER ISA v.2.07

La especificación para Power ISA v2.07 se lanzó en mayo de 2013. Se basa en Power ISA v2.06 e incluye importantes mejoras en funciones de partición lógica, memoria transaccional, monitoreo de rendimiento, nuevas funciones de control de almacenamiento, adiciones a las instalaciones de vector VMX y VSX (VSX-2), junto con AES< ref>Barbosa, Leonidas (21 de septiembre de 2014). «POWER8 in-core cryptography». IBM. </ref> y Modo de contador de Galois (GCM), extensiones criptográficas SHA-224, SHA-256, SHA-384 y SHA-512 (SHA-2) y algoritmos de comprobación de redundancia cíclica (CRC).
La especificación se revisó en abril de 2015 a la especificación Power ISA v.2.07 B.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* POWER8
* e6500 núcleo
* A2O

### POWER ISA v3.0

La especificación para Power ISA v3.0 se lanzó en noviembre de 2015. Es el primero en salir después de la creación de la Fundación OpenPOWER e incluye mejoras para un amplio espectro de cargas de trabajo y elimina el servidor y las categorías incrustadas mientras conserva la compatibilidad con versiones anteriores y agrega soporte para Instrucciones VSX-3. Las nuevas funciones incluyen operaciones de coma flotante de precisión cuádruple de 128 bits, un generador de números aleatorios, recolección de basura asistida por hardware y computación confiable aplicada por hardware.
La especificación se revisó en marzo de 2017 con respecto al Power ISA v3.0 B. y revisado nuevamente a v3.0C en mayo de 2020. La diferencia clave entre v3.0B y v3.0C es que los niveles de cumplimiento enumerados en v3.1 también se agregaron a v3.0C.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* POWER9
* OpenPOWER Microvatios
* Libre-SOC tiene como objetivo la compatibilidad con Embedded FP solo con Power ISA 3.0

### Energía ISA v3.1

La especificación para Power ISA v3.1 se lanzó en mayo de 2020. Principalmente brinda soporte para las nuevas funciones introducidas en Power10, pero también incluye la noción de opcionalidad para la especificación PowerISA. Las instrucciones ahora pueden tener ocho bytes de largo, «instrucciones prefijadas», en comparación con las habituales «instrucciones de palabras» de cuatro bytes. También se agregan muchas funciones nuevas a las instrucciones SIMD y VSX.
Un beneficio clave de las nuevas instrucciones prefijadas de 64 bits es la extensión de las instrucciones inmediatas en las ramas a 34 bits.

#### Núcleos compatibles

* Todos los núcleos que cumplen con las versiones anteriores de Power ISA
* Power10