요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Introduction
============
This directory contains the version 0.92 test release of the NetWinder
Floating Point Emulator.
The majority of the code was written by me, Scott Bambrough It is
written in C, with a small number of routines in inline assembler
where required. It was written quickly, with a goal of implementing a
working version of all the floating point instructions the compiler
emits as the first target. I have attempted to be as optimal as
possible, but there remains much room for improvement.
I have attempted to make the emulator as portable as possible. One of
the problems is with leading underscores on kernel symbols. Elf
kernels have no leading underscores, a.out compiled kernels do. I
have attempted to use the C_SYMBOL_NAME macro wherever this may be
important.
Another choice I made was in the file structure. I have attempted to
contain all operating system specific code in one module (fpmodule.*).
All the other files contain emulator specific code. This should allow
others to port the emulator to NetBSD for instance relatively easily.
The floating point operations are based on SoftFloat Release 2, by
John Hauser. SoftFloat is a software implementation of floating-point
that conforms to the IEC/IEEE Standard for Binary Floating-point
Arithmetic. As many as four formats are supported: single precision,
double precision, extended double precision, and quadruple precision.
All operations required by the standard are implemented, except for
conversions to and from decimal. We use only the single precision,
double precision and extended double precision formats. The port of
SoftFloat to the ARM was done by Phil Blundell, based on an earlier
port of SoftFloat version 1 by Neil Carson for NetBSD/arm32.
The file README.FPE contains a description of what has been implemented
so far in the emulator. The file TODO contains a information on what
remains to be done, and other ideas for the emulator.
Bug reports, comments, suggestions should be directed to me at
<[email protected]>. General reports of "this program doesn't
work correctly when your emulator is installed" are useful for
determining that bugs still exist; but are virtually useless when
attempting to isolate the problem. Please report them, but don't
expect quick action. Bugs still exist. The problem remains in isolating
which instruction contains the bug. Small programs illustrating a specific
problem are a godsend.
Legal Notices
-------------
The NetWinder Floating Point Emulator is free software. Everything Rebel.com
has written is provided under the GNU GPL. See the file COPYING for copying
conditions. Excluded from the above is the SoftFloat code. John Hauser's
legal notice for SoftFloat is included below.
-------------------------------------------------------------------------------
SoftFloat Legal Notice
SoftFloat was written by John R. Hauser. This work was made possible in
part by the International Computer Science Institute, located at Suite 600,
1947 Center Street, Berkeley, California 94704. Funding was partially
provided by the National Science Foundation under grant MIP-9311980. The
original version of this code was written as part of a project to build
a fixed-point vector processor in collaboration with the University of
California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE. Although reasonable effort
has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
TIMES RESULT IN INCORRECT BEHAVIOR. USE OF THIS SOFTWARE IS RESTRICTED TO
PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
-------------------------------------------------------------------------------
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Introduction
1-6이 directory에는 NetWinder Floating Point Emulator version 0.92 test release가 들어 있습니다.
Implementation goals
7-13대부분의 code는 Scott Bambrough가 C로 작성했고 필요한 일부 routine만 inline assembler를 사용합니다. compiler가 emit하는 모든 floating-point instruction의 동작 version을 먼저 완성하는 것이 목표였으며 가능한 한 최적화했지만 개선 여지가 많이 남아 있습니다.
Portability and file structure
14-24emulator를 최대한 portable하게 만들려 했습니다. kernel symbol의 leading underscore가 문제인데 ELF kernel에는 없고 a.out으로 compile한 kernel에는 있으므로 중요한 곳마다 `C_SYMBOL_NAME` macro를 사용했습니다.
operating-system-specific code는 `fpmodule.*` 하나에 모으고 나머지 file에는 emulator-specific code만 두었습니다. 이 분리는 NetBSD 같은 다른 OS로 비교적 쉽게 port할 수 있게 합니다.
SoftFloat foundation
25-39floating-point operation은 John Hauser의 SoftFloat Release 2를 기반으로 합니다. SoftFloat는 IEC/IEEE Standard for Binary Floating-point Arithmetic을 따르는 software 구현입니다.
| format | SoftFloat 지원 | NWFPE 사용 |
|---|---|---|
| single precision | 지원 | 사용 |
| double precision | 지원 | 사용 |
| extended double precision | 지원 | 사용 |
| quadruple precision | 지원 | 사용하지 않음 |
표준이 요구하는 operation 중 decimal 변환을 제외한 모든 것을 SoftFloat가 구현합니다. ARM port는 Phil Blundell이 수행했으며 Neil Carson이 NetBSD/arm32용으로 만든 SoftFloat version 1 port를 바탕으로 했습니다.
`README.FPE`에는 현재 구현 상태가, `TODO`에는 남은 작업과 emulator 아이디어가 들어 있습니다.
Bug reports
40-48bug report, comment, suggestion은 `<[email protected]>`로 보내도록 안내합니다. 단순히 프로그램이 emulator에서 틀리게 동작한다는 report는 bug 존재 확인에는 유용하지만 원인 instruction을 격리하기에는 거의 도움이 되지 않습니다.
특정 문제를 재현하는 작은 program이 가장 유용합니다. 문서는 bug가 여전히 존재하며 어느 instruction의 문제인지 격리하는 일이 핵심이라고 명시합니다.
Legal Notices
49-74NetWinder Floating Point Emulator는 free software입니다. Rebel.com이 작성한 모든 부분은 GNU GPL로 제공되며 복사 조건은 `COPYING`을 따릅니다. SoftFloat code는 이 조건에서 제외되고 John Hauser의 별도 legal notice를 적용합니다.
SoftFloat는 John R. Hauser가 작성했습니다. Berkeley의 International Computer Science Institute와 National Science Foundation grant `MIP-9311980`의 지원을 일부 받았고, University of California at Berkeley와 함께 fixed-point vector processor를 만드는 project에서 원본 code가 작성되었습니다. Nelson Morgan과 John Wawrzynek 교수가 감독했습니다.
이 software는 있는 그대로 무료 배포됩니다. 합리적인 노력을 기울였지만 잘못된 동작을 일으킬 fault가 있을 수 있으며, 사용으로 발생하는 모든 손실·비용·문제에 전적인 책임을 질 수 있는 개인과 조직만 사용해야 한다는 면책 조건입니다.
요약과 해설
nwfpe.rst:1-74NWFPE는 compiler가 emit하는 instruction의 동작 구현을 먼저 목표로 하고, OS-specific code를 `fpmodule.*`로 격리해 portability를 확보했습니다. arithmetic core는 검증된 SoftFloat를 재사용합니다.
portability를 위해 책임을 분리한 구조입니다.