L'architecture Alpha AXP est une architecture RISC de type load/store, 64 bits. L'accent a été mis sur sa haute fréquence d'horloge, l'émission simultanée de plusieurs instructions, l'aspect multiprocesseur et le support de plusieurs systèmes d'exploitation.
N'ayant aucune compatibilité binaire à assurer, une architecture 64 bits a été définie. Tous les registres ont une taille de 64 bits (32 registres flottants et entiers) et toutes les opérations sont effectuées entre des registres de 64 bits. Toutes les instructions ont une taille fixe de 32 bits. Les seules opérations d'accès à la mémoire sont des opérations de lecture/écriture. Toutes les manipulations de données sont faites entre registres.
L'architecture Alpha supporte les types de données suivants :
L'architecture Alpha utilise un ensemble de routines, appelé Privileged Architecture Library code (PALcode), spécifique à un système d'exploitation et à une implémentation matérielle. Ces routines sont utilisées lors des changements de contexte, pour les interruptions et les exceptions ainsi que pour la gestion de la mémoire. Elles peuvent être invoquées soit par matériel, soit directement par l'intermédiaire de l'instruction Call_Pall.
L'une des particularités de l'architecture Alpha est qu'elle n'implémente aucune instruction de lecture/écriture d'octet ou de mot de 16 bits. Ces formats de données sont accédés par combinaison d'instructions de décalage, de masquage et d'extraction.
L'ordre des octets en mémoire est conforme au schéma little-endian. Le format big-endian est également supporté mais nécessite une instruction supplémentaire .
L'architecture Alpha définit cinq formats d'instructions :
Trois modes d'adressage sont supportés : absolu, indirect et basé (le registre R31 est cablé à zéro). L'architecture Alpha n'implémente pas de branchement retardé (comme sur le MIPS). Ce type de branchement rend plus complexe la gestion d'un séquencement superscalaire.
Comme on l'a dit précédemment, l'architecture Alpha ne permet des
accès à la mémoire que pour des mots de 32 bits. Ce choix a pour
conséquence une pénalité sur l'ensemble des programmes manipulant des
données de 8 ou 16 bits. DEC affirme que moins de 8%des références
mémoires VAX/VMS concernent des quantités inférieures à 32 bits, et
que beaucoup concernent des manipulations de chaînes de caractères qui
peuvent être effectuées sur des double ou quadruple-mots (présence
d'instructions de manipulation d'octets). Par contre, les données de
32 bits ne sont pas forcément alignées sur des frontières de
32 bits. Le jeu d'instructions comprend donc des instructions qui
permettent d'accéder à ces données en ignorant les trois bits de poids
faible. La gestion de ce type de données est particulièrement
importante pour DEC amené à opérer sur des programmes VAX où des
structures de données non alignées peuvent subsister malgré la
recompilation.
Cette caractéristique a également un impact important sur les caches à
écriture différée. DEC implémente un mécanisme de correction d'erreur
de type ECC. Pour implémenter un cache à écriture différée accessible
par octet avec une protection ECC, des bits de corrections et de tests
doivent être associés à chaque octet. Ceci est relativement coûteux et
pourrait être évité en abandonnant ce type de données.
Le jeu arithmétique entier définit par l'architecture Alpha est
traditionnel. Les opérations d'addition, de soustraction et de
multiplication sont fournies en version 32 et 64 bits. La division entière
par une constante est effectuée en multipliant par l'inverse, la division par
une variable est quant à elle émulée logiciellement (table de look-up et
algorithme itératif).
Les instructions de déplacement conditionnel sont spécifiques à l'architecture Alpha mais commencent à se trouver sur d'autres jeu d'instructions (SPARC-V9 par exemple). Ces instructions recopient un registre source vers un registre destination si un troisième registre vérifie une condition. Cette condition est testée par rapport à zéro. Ces instructions permettent d'implémenter de manière élégante un cas fréquent sans provoquer de rupture dans le pipeline.
Nous n'expliciterons pas plus longuement les particularités de ce jeu d'instructions. nous renvoyons le lecteur à [4] et [8] pour plus de détails à ce sujet.