⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readme

📁 LINUX1.0内核源代码,学习LINUX编程的一定要看。
💻
📖 第 1 页 / 共 2 页
字号:
 +---------------------------------------------------------------------------+ |  wm-FPU-emu   an FPU emulator for 80386 and 80486SX microprocessors.      | |                                                                           | | Copyright (C) 1992,1993,1994                                              | |                       W. Metzenthen, 22 Parker St, Ormond, Vic 3163,      | |                       Australia.  E-mail   billm@vaxc.cc.monash.edu.au    | |                                                                           | |    This program is free software; you can redistribute it and/or modify   | |    it under the terms of the GNU General Public License version 2 as      | |    published by the Free Software Foundation.                             | |                                                                           | |    This program is distributed in the hope that it will be useful,        | |    but WITHOUT ANY WARRANTY; without even the implied warranty of         | |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          | |    GNU General Public License for more details.                           | |                                                                           | |    You should have received a copy of the GNU General Public License      | |    along with this program; if not, write to the Free Software            | |    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.              | |                                                                           | +---------------------------------------------------------------------------+wm-FPU-emu is an FPU emulator for Linux. It is derived from wm-emu387which is my 80387 emulator for djgpp (gcc under msdos); wm-emu387 wasin turn based upon emu387 which was written by DJ Delorie for djgpp.The interface to the Linux kernel is based upon the original Linuxmath emulator by Linus Torvalds.My target FPU for wm-FPU-emu is that described in the Intel486Programmer's Reference Manual (1992 edition). Unfortunately, numerousfacets of the functioning of the FPU are not well covered in theReference Manual. The information in the manual has been supplementedwith measurements on real 80486's. Unfortunately, it is simply notpossible to be sure that all of the peculiarities of the 80486 havebeen discovered, so there is always likely to be obscure differencesin the detailed behaviour of the emulator and a real 80486.wm-FPU-emu does not implement all of the behaviour of the 80486 FPU.See "Limitations" later in this file for a list of some differences.Please report bugs, etc to me at:       billm@vaxc.cc.monash.edu.au  or at:       billm@jacobi.maths.monash.edu.au--Bill Metzenthen  Feb 1994----------------------- Internals of wm-FPU-emu -----------------------Numeric algorithms:(1) Add, subtract, and multiply. Nothing remarkable in these.(2) Divide has been tuned to get reasonable performance. The algorithm    is not the obvious one which most people seem to use, but is designed    to take advantage of the characteristics of the 80386. I expect that    it has been invented many times before I discovered it, but I have not    seen it. It is based upon one of those ideas which one carries around    for years without ever bothering to check it out.(3) The sqrt function has been tuned to get good performance. It is based    upon Newton's classic method. Performance was improved by capitalizing    upon the properties of Newton's method, and the code is once again    structured taking account of the 80386 characteristics.(4) The trig, log, and exp functions are based in each case upon quasi-    "optimal" polynomial approximations. My definition of "optimal" was    based upon getting good accuracy with reasonable speed.(5) The argument reducing code for the trig function effectively uses    a value of pi which is accurate to more than 128 bits. As a consequence,    the reduced argument is accurate to more than 64 bits for arguments up    to a few pi, and accurate to more than 64 bits for most arguments,    even for arguments approaching 2^63. This is far superior to an    80486, which uses a value of pi which is accurate to 66 bits.The code of the emulator is complicated slightly by the need toaccount for a limited form of re-entrancy. Normally, the emulator willemulate each FPU instruction to completion without interruption.However, it may happen that when the emulator is accessing the usermemory space, swapping may be needed. In this case the emulator may betemporarily suspended while disk i/o takes place. During this timeanother process may use the emulator, thereby changing some staticvariables (eg FPU_st0_ptr, etc). The code which accesses user memoryis confined to five files:    fpu_entry.c    reg_ld_str.c    load_store.c    get_address.c    errors.c----------------------- Limitations of wm-FPU-emu -----------------------There are a number of differences between the current wm-FPU-emu(version beta 1.10) and the 80486 FPU (apart from bugs). Some of themore important differences are listed below:The Roundup flag does not have much meaning for the transcendentalfunctions and its 80486 value with these functions is likely to differfrom its emulator value.In a few rare cases the Underflow flag obtained with the emulator willbe different from that obtained with an 80486. This occurs when thefollowing conditions apply simultaneously:(a) the operands have a higher precision than the current setting of the    precision control (PC) flags.(b) the underflow exception is masked.(c) the magnitude of the exact result (before rounding) is less than 2^-16382.(d) the magnitude of the final result (after rounding) is exactly 2^-16382.(e) the magnitude of the exact result would be exactly 2^-16382 if the    operands were rounded to the current precision before the arithmetic    operation was performed.If all of these apply, the emulator will set the Underflow flag but a real80486 will not.NOTE: Certain formats of Extended Real are UNSUPPORTED. They areunsupported by the 80486. They are the Pseudo-NaNs, Pseudoinfinities,and Unnormals. None of these will be generated by an 80486 or by theemulator. Do not use them. The emulator treats them differently indetail from the way an 80486 does.The emulator treats PseudoDenormals differently from an 80486. Thesenumbers are in fact properly normalised numbers with the exponentoffset by 1, and the emulator treats them as such. Unlike the 80486,the emulator does not generate a Denormal Operand exception for thesenumbers. The arithmetical results produced when using such a number asan operand are the same for the emulator and a real 80486 (apart fromany slight precision difference for the transcendental functions).Neither the emulator nor an 80486 produces one of these numbers as theresult of any arithmetic operation. An 80486 can keep one of thesenumbers in an FPU register with its identity as a PseudoDenormal, butthe emulator will not; they are always converted to a valid number.Self modifying code can cause the emulator to fail. An example of suchcode is:          movl %esp,[%ebx]	  fld1The FPU instruction may be (usually will be) loaded into the pre-fetchqueue of the cpu before the mov instruction is executed. If thedestination of the 'movl' overlaps the FPU instruction then the bytesin the prefetch queue and memory will be inconsistent when the FPUinstruction is executed. The emulator will be invoked but will not beable to find the instruction which caused the device-not-presentexception. For this case, the emulator cannot emulate the behaviour ofan 80486DX.----------------------- Performance of wm-FPU-emu -----------------------Speed.-----The speed of floating point computation with the emulator will dependupon instruction mix. Relative performance is best for the instructionswhich require most computation. The simple instructions are adverselyaffected by the fpu instruction trap overhead.Timing: Some simple timing tests have been made on the emulator functions.The times include load/store instructions. All times are in microseconds

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -