Intel 8087 부동소수점 칩의 마이크로코드: 스케일 명령어

4 days ago 13

FSCALE 은 지수에 정수를 더해 부동소수점 수를 2의 거듭제곱만큼 빠르게 확대하거나 축소하지만, 특수값과 예외 처리까지 포함하면 140개 이상의 마이크로명령과 3단계 서브루틴 호출을 사용함 일반 경로에서는 스케일 인수를 시프트로 정수 변환하고 대상 수의 지수에 더하거나 뺀 뒤, 지수 변환 회로로 오버플로와 언더플로를 검사함 0, NaN, 무한대, 비정규화 수, 빈 스택에 대한 처리가 실행 흐름을 복잡하게 만들며, 두 인수가 모두 NaN이면 더 큰 NaN 표현을 선택하는 문서화된 동작도 있음 정확한 반올림은 Guard, Round, Sticky 비트와 전용 회로가 뒷받침하며, 예외 마스크와 반올림 모드에 따라 결과가 무한대, 최대 유한값, 비정규화 수 또는 부호 있는 0으로 달라짐 역공학 과정에서 반올림 방향을 CC1 조건 코드에 기록하는 미문서화 기능도 확인됨. Intel은 이 동작을 8087 문서에 넣지 않았고, 1987년 387SX에서야 문서화함 8087의 정확성 목표와 역공학 1970년대에는 제조사마다 서로 호환되지 않는 부동소수점 규격을 사용했고, 수학적 엄밀성보다 하드웨어 단순성을 우선해 수치 안정성 문제가 발생함 1980년 출시한 8087은 경계 사례까지 최대한 정확하게 처리하도록 설계됐으며, IBM PC에 장착할 수 있어 널리 사용됨 스프레드시트부터 CAD까지 부동소수점 연산을 최대 100배 빠르게 수행함 William Kahan의 수치 계산 전문성이 설계에 크게 기여했으며, 이후 오늘날 거의 모든 컴퓨터가 사용하는 IEEE 754 표준으로 이어짐 Opcode Collective는 칩을 열어 촬영한 고해상도 현미경 이미지와 ROM 데이터를 바탕으로 마이크로코드를 역공학하고 있음 분석 자료는 마이크로명령 문서와 8087 저장소에 공개돼 있음 8087 특허는 하드웨어 일부를 설명하지만 마이크로코드는 제공하지 않음 데이터 경로와 내부 수 표현 칩 중앙의 마이크로코드 ROM에는 1,648개 마이크로명령이 있고, 왼쪽의 마이크로코드 엔진이 순차 실행, 점프, 서브루틴 호출을 처리함 하단 계산 회로는 16비트 지수 경로와 64비트 유효숫자 경로로 나뉨 시프터는 값을 임의의 비트 수만큼 좌우로 이동함 가산기는 덧셈과 뺄셈뿐 아니라 반복 연산을 통한 곱셈, 나눗셈, 제곱근 계산에도 사용됨 Breg가 가산기의 한 입력을, 여러 선택 가능한 소스가 다른 입력을 공급하며, 출력은 합계 레지스터에 저장됨 반올림용 비...

Read Entire Article