인텔 8087의 부동소수점 덧셈과 뺄셈 마이크로코드 분석
- 8087은 덧셈 속도가 8086 대비 거의 100배 향상됨
- 칩 중앙의 마이크로코드 ROM에 1648개 마이크로 명령어가 있어 칩 전체를 제어함
- 덧셈은 지수 차이만큼 시프터로 가수를 밀어 정렬한 뒤 정수 가산기로 더하고, 결과를 정규화함
- 선행 0을 세는 회로와 지수 변환기가 오버플로와 언더플로를 감지해 특수한 경우를 처리함
Hacker News 의견들
정정 하나 할게. 1.1(2진수) × 2^8은 304가 아니라 384가 맞음. 본문 예시 숫자가 틀렸더라.
Win32 아니고 Win64 얘기였음. 초기 버전이 컨텍스트 스위치 때 8087 레지스터를 저장 안 했는데, 내가 마이크로소프트 사람들한테 연락해서 보존하게 만들었음.
8087이 IEEE 754의 기반이라 numerics 쪽이 무시한 건 아님. 문제는 80비트 타입에 명시적 정수 비트가 있어서 32/64비트 IEEE 연산을 비트 단위로 똑같이 흉내 내기 어렵다는 거임. 컴파일러가 레지스터를 80비트가 아니라 32/64비트로 스필해서 결과가 랜덤처럼 나오기도 함.
나도 8087 칩 아직 갖고 있는데 이사하면서 핀 하나 빠졌더라. 칩에 3716150AA MALAY BEV 22 각인이 있는데 검색해도 안 나옴.
1980년 칩이 80비트 부동소수점을 했다는 게 놀랍임. 요즘 마이크로컨트롤러가 FPU 없이 나오는 건 솔직히 좀 빡침.
Espressif가 ESP32-S3에 FPU를 다시 넣었음. H, P 라인으로 유료 옵션 만들려다 시장 반응 보고 접었더라.
아니 그래도 NASA도 그렇게 많은 비트는 필요 없다고 Ken이 직접 말한 적 있음.
다음 글 주제로는 P6 마이크로코드에서 예전 ISA를 어떻게 지원하는지가 궁금함. 8087 초월함수 명령이 실제로 얼마나 쓰였는지도 알고 싶음.