Reverse-engineering the Intel 8087's tangent algorithm: more than CORDIC
L'article présente une analyse détaillée de l'instruction FPTAN du coprocesseur Intel 8087 en s'appuyant sur l'examen du die, du microcode ROM et du datapath. L'algorithme combine 16 itérations CORDIC pour réduire l'angle et une approximation rationnelle de Padé 3x/(3-x^2) pour traiter le petit angle résiduel, en renvoyant séparément le numérateur et le dénominateur pour éviter une division coûteuse. La microcode réalise trois phases distinctes — pseudo-division pour générer les bits de décision CORDIC, calcul du polynôme rationnel (incluant une mise au carré coûteuse) et pseudo-multiplication pour appliquer les rotations par décalages et additions — en utilisant des registres temporaires et un registre à décalage de 16 bits. L'article décrit aussi les détails matériels pertinents, notamment la ROM à micro-instructions, le shifter 64 bits, l'additionneur central, les registres internes 80 bits et l'utilisation d'arithmétique entière à point fixe implicite pour préserver la précision. En pratique, FPTAN offrait un grand gain de performance par rapport au 8086 (une tangente en ~90 μs contre ~13 000 μs) tout en restant complexe (typiquement ~450 cycles), et Intel finira par privilégier des approximations polynomiales sur les architectures ultérieures.