1980년대 초 개인용 컴퓨터 시대의 문을 연 인텔 8087 부동소수점 코프로세서의 내부 동작이 최근 역공학(reverse engineering)을 통해 상세히 밝혀졌습니다. 특히 'FSCALE' 명령어는 부동소수점 숫자를 2의 거듭제곱으로 빠르게 확대하거나 축소하는 기능을 수행하는데, 겉보기와 달리 140개가 넘는 마이크로명령과 3단계 서브루틴 호출을 사용하는 등 매우 복잡하게 구현되어 있었습니다.
FSCALE 명령어는 기본적으로 스케일 인수를 정수로 변환한 뒤 대상 숫자의 지수에 더하거나 빼는 방식으로 작동합니다. 하지만 0, NaN(Not a Number), 무한대, 비정규화 수(denormalized number), 빈 스택 등 다양한 특수값과 예외 상황을 처리하기 위해 실행 흐름이 복잡하게 분기됩니다. 예를 들어, 두 인수가 모두 NaN일 경우 더 큰 NaN 표현을 선택하는 등 문서화된 동작 외에도 반올림 방향을 조건 코드에 기록하는 미문서화 기능까지 발견되었습니다. 이러한 복잡성은 1970년대 제조사별로 호환되지 않던 부동소수점 규격 문제를 해결하고, 수학적 엄밀성을 추구했던 인텔의 설계 철학을 반영합니다. 8087은 IBM PC에 장착되어 스프레드시트나 CAD 같은 응용 프로그램에서 부동소수점 연산을 최대 100배 빠르게 처리하며 널리 사용되었고, 윌리엄 카한(William Kahan)의 전문성이 더해져 오늘날 대부분의 컴퓨터가 사용하는 IEEE 754 표준의 기반을 다졌습니다.
이러한 심층 분석은 Opcode Collective가 칩의 고해상도 현미경 이미지와 ROM 데이터를 바탕으로 마이크로코드를 역공학하여 얻은 결과입니다. 8087 칩 중앙의 마이크로코드 ROM에는 1,648개의 마이크로명령이 저장되어 있으며, 마이크로코드 엔진이 이를 순차적으로 실행하거나 점프, 서브루틴 호출을 처리합니다. 하단 계산 회로는 16비트 지수 경로와 64비트 유효숫자 경로로 나뉘며, 시프터, 가산기, 지수 변환기 등 전용 하드웨어와 함께 80비트 내부 임시 실수(temporary real) 형식을 사용하여 높은 정밀도를 유지합니다. 8087은 잘못된 연산, 오버플로, 언더플로, 0으로 나누기, 비정규화 피연산자, 정밀도 등 6가지 예외를 지원하며, 이 예외 처리 방식과 반올림 모드, 특수값의 조합이 마이크로코드의 경계 사례를 크게 늘려 복잡성을 더했습니다. 이러한 세밀한 설계는 당시 컴퓨터의 수치 안정성을 획기적으로 개선하는 데 기여했습니다.