L’erreur à 475 millions de dollars d’Intel : le problème matériel du bug de division du Pentium
(righto.com)- Sorti en 1993, le Pentium a adopté la méthode SRT pour effectuer des divisions en virgule flottante plus rapides que l’Intel 486, mais l’erreur de l’instruction FDIV a été rendue publique en 1994 ; Intel a accepté de remplacer toutes les puces défectueuses, pour un coût de 475 millions de dollars
- Le défaut se trouvait dans la PLA qui implémentait la table de consultation utilisée pour la division. Intel a déclaré que 5 entrées manquaient à cause d’une erreur de script, mais l’analyse du die indique 16 omissions, dont 5 provoquaient effectivement l’erreur
- La division SRT en radix 4 produit 2 bits de quotient par étape et est rapide, mais elle repose sur une structure complexe : le reste partiel et le diviseur sont mappés dans une table P-D de 2 048 entrées, puis compressés dans une PLA de 112 lignes
- La cause principale tient au fait qu’à cause du carry-save adder, l’index de consultation peut se retrouver une cellule en dessous du reste partiel réel ; Intel a appliqué une correction mathématique erronée à la borne supérieure de la zone +2, laissant certaines cellules à 0
- Le Pentium corrigé ne s’est pas contenté de remplir les 5 entrées manquantes : il a rempli toute la zone inutilisée de la table avec 2, simplifiant les limites ; l’usage de la PLA est aussi passé de 120 lignes à 74, soit environ un tiers de moins que la PLA défectueuse
Comment le bug FDIV a été révélé et combien il a coûté
- Intel a lancé en 1993 le processeur Pentium hautes performances, avec un algorithme de division en virgule flottante plus rapide que celui de l’Intel 486 précédent
- En mai 1994, des tests internes chez Intel ont révélé que la division en virgule flottante du Pentium donnait, très rarement, des résultats incorrects
- Intel a estimé qu’environ une valeur sur 9 milliards seulement posait problème, et a considéré le défaut comme mineur
- Le circuit du Pentium a néanmoins été corrigé discrètement
- En octobre 1994, le professeur Thomas Nicely a découvert un résultat de calcul erroné lors de ses recherches sur les inverses de nombres premiers jumeaux
- Le calcul de
1/824633702441était faux sur trois ordinateurs Pentium différents, tandis que des ordinateurs plus anciens donnaient la bonne réponse - N’obtenant pas de réponse suffisante du support technique d’Intel, Nicely a envoyé un e-mail à des magazines informatiques et à des particuliers
- Cet e-mail a été publié sur un forum Compuserve, et Electronic Engineering Times a publié le 7 novembre Intel fixes a Pentium FPU glitch
- Le calcul de
- Au départ, Intel voulait ne proposer un remplacement qu’aux clients capables de convaincre un ingénieur qu’ils avaient besoin d’exactitude, et les utilisateurs ont exprimé leur mécontentement sur des groupes en ligne comme comp.sys.intel
- Après un reportage de CNN le 22 novembre, l’attention du grand public a augmenté ; la situation s’est aggravée le 12 décembre, quand IBM a annoncé suspendre les livraisons d’ordinateurs Pentium
- Le 19 décembre, Intel a annoncé qu’il remplacerait les puces défectueuses pour tous les clients
- Le coût du rappel a été de 475 millions de dollars
- Cela représente plus d’un milliard de dollars en valeur actuelle
La division SRT utilisée par le Pentium
- Une division binaire longue classique est lente, car elle nécessite un cycle d’horloge pour chaque bit du quotient
- L’Intel 486 et les processeurs précédents utilisaient cette approche
- Le Pentium utilise l’algorithme SRT en radix 4, c’est-à-dire par groupes de 2 bits
- Il génère 2 bits de quotient à chaque étape, ce qui le rend deux fois plus rapide qu’une division binaire classique
- Chaque chiffre du quotient vaut l’une des valeurs
-2,-1,0,1,2
- Comme SRT autorise des chiffres de quotient négatifs, même si l’on choisit une valeur un peu trop grande à une étape, elle peut être corrigée par un chiffre négatif à l’étape suivante
- Le chiffre du quotient n’a pas besoin d’être déterminé de manière unique, ce qui permet de le choisir rapidement via une table de consultation
- Le reste partiel et le diviseur sont tronqués à quelques bits afin de réduire la taille de la table à un niveau pratique
- Cette méthode est rapide, mais nécessite en plus une table de consultation, des circuits pour ajouter ou soustraire des multiples de
1ou2, et des circuits pour convertir le résultat en une forme standard de quotient
Une table de 2 048 entrées compressée en une PLA de 112 lignes
- La table de consultation SRT du Pentium prend en entrée le reste partiel
pet le diviseurd, puis renvoie le chiffre de quotient approprié - La table comporte 2 048 entrées
- Le diviseur est mis à l’échelle entre 1 et 2 et devient la coordonnée de l’axe X
- Le reste partiel devient une coordonnée de l’axe Y, avec une valeur comprise entre -8 et 8
- Pour le diviseur, on utilise les 4 bits de
1.dddden excluant le premier bit, toujours égal à 1 - Le reste partiel est tronqué en une valeur signée sur 7 bits
pppp.ppp - L’index total fait 11 bits, pointant vers
2^11 = 2048entrées
- La table comporte 5 zones correspondant aux chiffres de quotient
+2,+1,0,-1,-2- Certaines zones en haut et en bas ne sont pas utilisées mathématiquement par SRT
- Dans la table défectueuse d’origine, les entrées inutilisées étaient remplies avec 0
- Les 5 entrées rouges problématiques auraient dû valoir
+2, mais étaient restées à 0
- Le Pentium implémente cette table non pas sous forme de ROM, mais avec une PLA (Programmable Logic Array)
- Stocker toute la table en ROM aurait nécessité 2 048 lignes
- Comme la structure de la table est régulière et comporte beaucoup de zones vides, la PLA n’utilise que 112 lignes
- Une PLA se compose d’un plan AND et d’un plan OR
- Le plan AND génère des termes logiques à partir de combinaisons de bits d’entrée et de leurs compléments
- Le plan OR combine ces termes pour produire les bits de sortie indiquant si le quotient vaut
1ou2
- En extrayant au microscope les motifs de transistors de la PLA, on peut reconstruire l’expression logique de chaque ligne de la PLA
- Une ligne de PLA ne correspond pas à une seule case de la table : elle agit plutôt comme une zone rectangulaire couvrant plusieurs cases à la fois
- Plus une limite de table est irrégulière, plus il faut de lignes de PLA
Les limites mathématiques et la zone +2 erronée
- L’étape clé de la division SRT consiste à choisir le chiffre de quotient
qà partir du rapportp/d, oùpest le reste partiel etdle diviseur - Pour des raisons mathématiques, la plage autorisée de
p/ddoit rester dans[-8/3, 8/3]- Après avoir choisi le chiffre de quotient, on soustrait
q*dpuis on multiplie par 4 pour produire le reste partiel de l’étape suivante - Pour que ce processus puisse se répéter, la nouvelle plage doit avoir la même taille que la plage d’origine
- Après avoir choisi le chiffre de quotient, on soustrait
- SRT comporte de la redondance : dans certains intervalles, il est possible de choisir l’un de deux chiffres de quotient
- Mais si l’on choisit
0à un endroit oùq=2est obligatoire, le reste partiel suivant sort de la plage autorisée et l’algorithme ne peut plus se rétablir - Le bug FDIV correspond à ce cas
- Mais si l’on choisit
- La table P-D du Pentium est une quantification, cellule par cellule, de cette limite mathématique
- Les limites diagonales déterminent quelles cellules doivent impérativement être
+2, lesquelles peuvent être+1ou+2, lesquelles doivent impérativement être+1, etc.
- Les limites diagonales déterminent quelles cellules doivent impérativement être
- L’analyse du die montre que, dans la table défectueuse, la limite magenta supérieure devait impérativement rester au-dessus de la limite mathématique noire, mais la franchissait à plusieurs reprises
- En conséquence, certaines cellules qui devaient impérativement valoir
+2sont restées à 0 - Ce sont ces cellules qui constituent les entrées manquantes à l’origine du bug FDIV
- En conséquence, certaines cellules qui devaient impérativement valoir
Comment le carry-save adder a rendu l’erreur rare, mais décisive
- Le circuit de division du Pentium utilise un carry-save adder pour accélérer les additions et soustractions
- Un carry-save adder ne propage pas immédiatement les retenues : il les stocke dans un mot séparé, ce qui est avantageux pour la division, qui exige de nombreuses additions
- À la fin, une addition plus lente est nécessaire pour combiner les retenues stockées
- L’index de la table de consultation a besoin du reste partiel, mais le carry-save adder conserve ce reste partiel séparé en bits de somme et bits de retenue
- Le Pentium utilise un carry-lookahead adder pour calculer rapidement les 7 bits nécessaires à l’index de la table
- Ce circuit calcule les retenues de chaque position en parallèle
- Sa complexité le rend inadapté aux grands mots, mais il est pratique pour une valeur de 7 bits
- Le problème est que le reste partiel fait 64 bits, tandis que le calcul de l’index de la table n’en utilise que 7
- Lorsque les bits restants sont tronqués avant l’addition, le reste partiel utilisé pour l’index peut devenir légèrement inférieur à la valeur réelle
- Concrètement, cela peut créer un décalage d’une cellule vers le bas par rapport à la bonne cellule, soit un offset de
1/8
- À cause de cet effet, certaines limites doivent être déplacées vers le bas de
1/8, mais pas toutes- La limite supérieure
+2ne doit pas être déplacée vers le bas, or Intel a généré une table qui la déplaçait à tort - Cet effet lié au carry-save était un effet connu, déjà mentionné dans les articles sur la division SRT de l’époque
- La limite supérieure
Là où l’explication d’Intel diverge de l’analyse du die
- Le livre blanc d’Intel explique que quelques entrées ont été omises de la PLA à cause d’un problème dans le script qui y insérait la table
- Intel appelait cela une Programmable Lookup Array, mais la structure réelle est une Programmable Logic Array
- L’analyse du die estime que les entrées manquantes correspondent mieux à une erreur de limite mathématique qu’à une simple erreur de copie
- Il est possible que le programme de génération de la table ait mal défini les conditions aux limites
- Le terme « script » peut être techniquement correct s’il désigne un programme C générant la table, mais l’interprétation est que le cœur du problème était une limite mathématique erronée
- The Pentium Chronicles de Robert Colwell propose une autre explication
- Selon lui, la conception du Pentium utilisait à l’origine la même table de consultation que le 486, puis une erreur serait apparue lors d’une optimisation de dernière minute visant à économiser de la surface sur le die
- Cette explication présente des incohérences
- Le Pentium utilisait dès le départ un algorithme de division différent de celui du 486
- Le Pentium emploie SRT en radix 4, tandis que le 486 utilise une division binaire standard
- Le 486 ne possède pas cette table de consultation
- La PLA défectueuse contenait 8 lignes inutilisées ; si l’objectif avait simplement été de réduire le circuit, ces lignes auraient pu être retirées en premier
Pourquoi la PLA corrigée est devenue plus petite
- Les articles de l’époque indiquaient qu’Intel avait ajouté quelques dizaines de transistors ou une séquence de portes supplémentaire à la PLA pour corriger le défaut
- La PLA corrigée observée sur le die montre exactement l’inverse
- La taille de la PLA est restée la même
- Environ un tiers des termes a été supprimé
- Seules 74 lignes sur 120 sont utilisées, les 46 autres étant vides
- La PLA défectueuse d’origine ne comptait que 8 lignes vides
- La correction d’Intel ne s’est pas limitée à remplir avec
2les 5 entrées manquantes- Toutes les entrées de table inutilisées ont été remplies avec 2
- Cela supprimait la possibilité d’accéder par erreur à une entrée vide
- Remplir les zones inutilisées avec 2 a simplifié les limites de la table
- Des limites irrégulières nécessitent de nombreux termes de PLA
- Une grande zone rectangulaire peut être couverte par un seul terme de PLA
- Ainsi, même si davantage de cellules de la table ont été remplies, l’expression de la PLA est devenue plus simple
- Les termes logiques de la PLA corrigée étant complètement différents de ceux de la PLA d’origine, il est difficile de désigner quelques transistors précis comme ayant corrigé le bug
Impact réel et controverse
- Dans des divisions aléatoires, la probabilité que le défaut survienne est très faible, d’environ 1 sur 9 milliards
- Les résultats de division erronés ne diffèrent généralement qu’à la 9e ou 10e décimale
- Dans de rares pires cas, l’erreur apparaît au 4e chiffre significatif
- Le livre blanc d’Intel estimait qu’un utilisateur ordinaire avait une chance de rencontrer le problème une fois tous les 27 000 ans
- Intel indiquait que ce n’était pas un problème pour la plupart des utilisateurs, mais que certains usages scientifiques, d’ingénierie et de finance quantitative pouvaient nécessiter un processeur corrigé ou un contournement logiciel
- IBM, dans sa propre analyse, a estimé que ses clients pouvaient rencontrer le problème tous les quelques jours et a interrompu les ventes de Pentium
- IBM disposait aussi à l’époque du processeur concurrent PowerPC
- Certaines évaluations estiment que, dans l’usage réel, la seule personne ayant effectivement découvert le bug était le professeur Nicely
- L’analyse d’IBM est jugée avoir en partie choisi des nombres susceptibles de déclencher l’erreur
- La plupart des utilisateurs ne rencontreraient pas le bug et, même si cela arrivait, une faible dégradation de la précision en virgule flottante ne poserait probablement pas problème
- Mais le bug FDIV est reproductible de façon déterministe
- Si un dividend et un divisor précis déclenchent le problème, le résultat sera incorrect dans 100 % des cas
- Comme les clients pouvaient le reproduire facilement sur leur ordinateur, Intel pouvait difficilement soutenir qu’il s’agissait d’un problème qu’ils ne rencontreraient jamais
Bugs processeur ultérieurs et microcode patchable
- Le bug FDIV est l’un des bugs de processeur les plus célèbres, mais Intel a connu d’autres défauts importants
- Certains premiers processeurs 386 avaient un problème de multiplication 32 bits
- Sous certaines conditions de température, de tension et de fréquence, ils donnaient des résultats erronés de manière imprévisible
- La cause était un problème de layout avec une marge électrique insuffisante
- Intel a limité la vente des puces défectueuses au marché 16 bits et les a marquées « 16 BIT S/W ONLY »
- Un autre problème du Pentium, le bug F00F, a été découvert en 1997
- Une séquence d’instructions particulière commençant par
F0 0Fpouvait bloquer le processeur jusqu’au redémarrage - Il a été résolu par une mise à jour du système d’exploitation
- Une séquence d’instructions particulière commençant par
- Dans le Pentium, le microcode était codé en dur dans une ROM, il était donc impossible de corriger le bug FDIV par une mise à jour de microcode
- Intel a ajouté un microcode patchable au Pentium Pro en 1995
- À l’origine, c’était destiné au débogage et aux tests de la puce
- Après le bug FDIV, sa valeur pour corriger des bugs est devenue évidente
- Le Pentium Pro comportait, en plus du microcode en ROM, une SRAM pouvant contenir jusqu’à 60 micro-instructions, et le BIOS pouvait charger un correctif au démarrage
- Les correctifs de microcode des processeurs Intel modernes sont utilisés pour divers problèmes, des vulnérabilités Spectre aux problèmes de tension
Une erreur née de circuits devenus plus complexes
- Avec l’augmentation du nombre de transistors dans les processeurs selon la loi de Moore, les circuits et les algorithmes sont devenus plus complexes
- L’évolution de la prise en charge de la division l’illustre bien
- L’Intel 8080 de 1974 utilisait 6 000 transistors et ne prenait pas en charge la division matérielle ni l’arithmétique en virgule flottante
- L’Intel 8086 de 1978 utilisait 29 000 transistors ; la division entière était implémentée en microcode, mais la virgule flottante nécessitait le coprocesseur 8087
- L’Intel 486 de 1989 intégrait la prise en charge de la virgule flottante sur la puce, avec 1,2 million de transistors
- Le Pentium de 1993 comptait 3,1 millions de transistors et adoptait un algorithme de division SRT plus rapide, mais plus complexe
- À elle seule, la PLA de division du Pentium comporte environ 4 900 emplacements de transistors
- C’est plus que l’ensemble du processeur MOS Technology 6502
- Un seul composant du circuit de division du Pentium utilisait donc plus de transistors qu’un processeur entier de 1975
- L’impact à long terme du bug FDIV fait débat
- Des concurrents comme AMD en ont profité avec des publicités se moquant du problème du Pentium
- Robert Colwell estime que le bug FDIV a fortement accru la notoriété du nom Pentium et montré qu’Intel soutenait sa marque, si bien que son effet net a pu être positif
- Intel a survécu au bug FDIV, mais ce défaut a montré qu’une combinaison de mathématiques complexes, de compression de circuits et de limites de validation pouvait transformer une erreur extrêmement rare en un grave problème de confiance
1 commentaires
Commentaires sur Hacker News
C’est l’auteur. Je peux répondre aux questions sur le Pentium :-)
Un fil Mastodon sur ce bug a été publié sur HN il y a quelques semaines, donc cela vous est peut-être familier, mais j’ai maintenant terminé le billet de blog détaillé. Il y a aussi pas mal de commentaires sur le précédent post HN : https://news.ycombinator.com/item?id=42391079
Il y avait des erreurs plus graves chez Intel, et d’autres dans d’autres entreprises, mais elles ont été complètement oubliées. Je suis curieux au sujet de la pile de valeurs de l’unité en virgule flottante du Pentium — je ne connais pas le nom exact — et de la refonte correspondante. Cela remonte à longtemps, mais est-ce qu’il n’y avait pas une sorte de première forme de register renaming qui obligeait à gérer manuellement
fxchgavec précaution ?À quel point est-il difficile de « dumper » le microcode sous forme de bitstream ? Est-ce faisable par programme à partir de photos haute résolution du die ? Bien sûr, cela reste peut-être la partie facile comparée au travail de rétro-ingénierie nécessaire pour comprendre ce que signifie le bitstream
Le passage « j’ai examiné attentivement le PLA au microscope » m’intrigue aussi. J’aimerais savoir si ce genre de travail se fait chez soi, quel équipement il y a dans le labo, et comment on acquiert ce type de compétences
Avec le recul, on se demande pourquoi les parties inutilisées de la table de consultation n’ont pas été remplies dès le départ avec 2 et -2
Le bug en lui-même est intéressant, mais la réponse d’Intel l’est tout autant. Il ne me semble pas qu’ils aient remplacé le processeur par un exemplaire sans défaut pour tous ceux qui le souhaitaient, et ils ont reçu d’énormes critiques pour cela
Par comparaison, cela me fait beaucoup penser au lancement de l’Amazon Colorsoft. Certains appareils — le mien compris — avaient un problème graphique de bande jaune ; Amazon a vérifié les faits pendant un ou deux jours, l’a reconnu, puis a discrètement remplacé tous les exemplaires. Pas de rappel, ils envoient simplement un nouveau produit sur demande. Mon remplacement arrive vendredi ; j’espère que ce sera réglé. Quand un lancement se passe mal, disposer d’un système de retours/support très solide semble clairement être un avantage bien plus important que ce qu’une analyse laisserait prévoir
De la même façon, le problème de bruit des Apple AirPods Pro, il y a quelques années, n’a pas non plus fait tant de bruit que ça récemment. J’ai dû faire remplacer mes AirPods deux fois, mais Apple l’a fait discrètement, et j’ai eu l’impression que leur capacité de support, peu visible en surface, fonctionnait en réalité de façon très efficace
Colorsoft : https://www.tomsguide.com/tablets/e-readers/amazon-kindle-co...
AirPods Pro : https://support.apple.com/airpods-pro-service-program-sound-...
Côté Apple, l’Antennagate de l’iPhone 4 serait une meilleure comparaison. Dans ce cas, la solution équivalente aurait été de remplacer gratuitement un produit phare essentiel au chiffre d’affaires, mais Apple ne l’a pas fait
En revanche, Intel a fini par offrir un remplacement gratuit à toute personne qui en faisait la demande, en acceptant un gros choc financier
Cette façon qu’a Apple d’assumer ses produits mérite vraiment le respect
Je vois ce que vous voulez dire, pour avoir connu la situation de « garantie implicite » côté Apple grand public, mais à mon avis c’était très différent de la crise IT à laquelle Intel faisait face. À l’époque, le simple fait que « IBM l’ait dit » avait un poids énorme dans l’IT
Dans son livre blanc, Intel affirmait qu’un utilisateur ordinaire ne rencontrerait le problème qu’une fois tous les 27 000 ans, et que c’était négligeable comparé à d’autres sources d’erreur comme les flips de bits en DRAM. IBM, à l’inverse, estimait dans sa propre analyse qu’un client pouvait y être confronté tous les quelques jours
Ces chiffres ne sont probablement pas aussi éloignés qu’ils en ont l’air. Intel semble avoir raisonné à l’échelle d’un utilisateur individuel, tandis qu’IBM a peut-être réfléchi du point de vue des demandes au support
J’ai connu un problème similaire au travail. Quand on traite 100 millions de requêtes par jour, un problème à une chance sur un milliard finit par se produire quelques fois par mois. Si c’est le genre de chose que le client, ou pire encore un administrateur, remarque, les gens ignorent le dénominateur et soupçonnent tout le monde d’incompétence. Quatre fois par mois peuvent se traduire par « tout le temps » dans les biais de l’expérience humaine. Si un regroupement statistique de trois fois par semaine se produit deux fois, quelqu’un finit par exploser
IBM considérait aussi que les nombres utilisés par les gens avaient 90 fois plus de chances de provoquer l’erreur que les nombres à distribution uniforme pris par Intel. On arrivait donc à un résultat d’une erreur tous les 24 jours pour un utilisateur
Il y a ce passage : « Il semble que la seule personne à avoir remarqué ce bug en usage réel ait été le professeur Nicely »
Cela me rappelle une vieille étude où l’on avait distribué à des étudiants des calculatrices pour les cours de maths. Les calculatrices avaient été trafiquées pour produire des résultats erronés, et les chercheurs voulaient savoir à quel point elles devaient se tromper pour que les étudiants remarquent l’anomalie
La réponse était un facteur 2
Remarquer une erreur et subir les conséquences d’une erreur sont deux choses complètement différentes. Combien de gens vérifient que la sortie d’un ordinateur est correcte ? À mon avis, très, très, très peu. Moi non plus, sauf une fois chez Boeing où, pour un calcul d’ingénierie, j’ai refait l’équation à l’envers pour vérifier que la sortie correspondait à l’entrée
Au final, cela dépend beaucoup du contexte et du degré de compréhension du sujet par la personne qui fait le calcul
Dans quelle mesure l’usage de FDIV sur Pentium servait-il à produire des sorties numériquement importantes, plutôt qu’à du multimédia ?
Je me souviens de ce bug. Comme je ne pouvais pas contrôler sur quel CPU tournaient mes clients, j’ai dû ajouter à la bibliothèque un code de détection du FPU défectueux et exécuter un contournement. Ce code était fourni par Intel
Autrement dit, le problème d’Intel était devenu mon problème, beurk
Ça me rappelle une blague qui circulait à l’époque. Elle capturait bien plusieurs ambiances des années 90 :
I AM PENTIUM OF BORG.
DIVISION IS FUTILE.
YOU WILL BE APPROXIMATED.
Encore un excellent article de Ken. Je m’en souviens particulièrement parce que le premier PC que j’ai acheté avec mon propre argent contenait un CPU concerné. Avant ça, les PC m’intéressaient peu, parce qu’ils ne pouvaient pas faire tourner de « vrais » logiciels
Mais Windows NT a changé ça, merci à Cutler. Grâce aussi aux cartes mères taïwanaises bon marché, assembler soi-même sa machine est devenu réaliste, et beaucoup de gens le font encore aujourd’hui. Ken souligne qu’il était facile pour un utilisateur de vérifier si son CPU était concerné. Dans mon souvenir, il suffisait d’entrer dans Excel une formule de division avec des nombres magiques. Si Microsoft avait publié une version d’Excel contournant le bug, il y aurait sans doute eu moins de demandes de remplacement
Analyse intéressante et vraiment tenace. L’effort fourni pour analyser le silicium et partager les résultats est impressionnant. J’ai particulièrement apprécié le fait que, là où la communication d’Intel donnait l’impression que la cause réelle était quelque chose de mineur, comme une simple omission, l’article mette en évidence la véritable cause racine
En réalité, c’était un problème bien moins excusable et bien plus blâmable : ils avaient raté l’algorithme de génération de la table
La phrase « Smith a posté cet e-mail sur les forums Compuserve, la version des réseaux sociaux des années 1990 » me fait une drôle d’impression
La table corrigée était bien plus simple, car elle renvoyait simplement 2 pour les valeurs hors plage au lieu d’ajouter un circuit renvoyant 0 pour les valeurs hors plage. Du coup, on se demande pourquoi ils n’ont pas fait ça dès le départ
La personne qui a généré la table ne savait peut-être pas que remplir les valeurs hors plage avec 2 aurait produit un PLA plus simple, et la personne qui a injecté la table dans le PLA a peut-être ignoré que 0 était une valeur indifférente (don't care) et a supposé qu’il fallait la préserver
Ou alors ils ont peut-être arrêté d’optimiser au moment où le PLA leur a semblé assez petit. Si le plan de placement était déjà terminé, réduire encore le PLA n’aurait sans doute pas réduit la taille totale de la puce, et le temps d’ingénierie aurait mieux valu être utilisé ailleurs
Comme pour la plupart des logiciels, il y avait une optimisation restante à faire, à laquelle personne n’a pensé à temps. Et les CPU de cette époque ne pouvaient pas être patchés