diff options
Diffstat (limited to 'Documentation/arm/nwfpe/README.FPE')
-rw-r--r-- | Documentation/arm/nwfpe/README.FPE | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/Documentation/arm/nwfpe/README.FPE b/Documentation/arm/nwfpe/README.FPE deleted file mode 100644 index 26f5d7bb9a41..000000000000 --- a/Documentation/arm/nwfpe/README.FPE +++ /dev/null @@ -1,156 +0,0 @@ -The following describes the current state of the NetWinder's floating point -emulator. - -In the following nomenclature is used to describe the floating point -instructions. It follows the conventions in the ARM manual. - -<S|D|E> = <single|double|extended>, no default -{P|M|Z} = {round to +infinity,round to -infinity,round to zero}, - default = round to nearest - -Note: items enclosed in {} are optional. - -Floating Point Coprocessor Data Transfer Instructions (CPDT) ------------------------------------------------------------- - -LDF/STF - load and store floating - -<LDF|STF>{cond}<S|D|E> Fd, Rn -<LDF|STF>{cond}<S|D|E> Fd, [Rn, #<expression>]{!} -<LDF|STF>{cond}<S|D|E> Fd, [Rn], #<expression> - -These instructions are fully implemented. - -LFM/SFM - load and store multiple floating - -Form 1 syntax: -<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn] -<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn, #<expression>]{!} -<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn], #<expression> - -Form 2 syntax: -<LFM|SFM>{cond}<FD,EA> Fd, <count>, [Rn]{!} - -These instructions are fully implemented. They store/load three words -for each floating point register into the memory location given in the -instruction. The format in memory is unlikely to be compatible with -other implementations, in particular the actual hardware. Specific -mention of this is made in the ARM manuals. - -Floating Point Coprocessor Register Transfer Instructions (CPRT) ----------------------------------------------------------------- - -Conversions, read/write status/control register instructions - -FLT{cond}<S,D,E>{P,M,Z} Fn, Rd Convert integer to floating point -FIX{cond}{P,M,Z} Rd, Fn Convert floating point to integer -WFS{cond} Rd Write floating point status register -RFS{cond} Rd Read floating point status register -WFC{cond} Rd Write floating point control register -RFC{cond} Rd Read floating point control register - -FLT/FIX are fully implemented. - -RFS/WFS are fully implemented. - -RFC/WFC are fully implemented. RFC/WFC are supervisor only instructions, and -presently check the CPU mode, and do an invalid instruction trap if not called -from supervisor mode. - -Compare instructions - -CMF{cond} Fn, Fm Compare floating -CMFE{cond} Fn, Fm Compare floating with exception -CNF{cond} Fn, Fm Compare negated floating -CNFE{cond} Fn, Fm Compare negated floating with exception - -These are fully implemented. - -Floating Point Coprocessor Data Instructions (CPDT) ---------------------------------------------------- - -Dyadic operations: - -ADF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - add -SUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - subtract -RSF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse subtract -MUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - multiply -DVF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - divide -RDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse divide - -These are fully implemented. - -FML{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast multiply -FDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast divide -FRD{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast reverse divide - -These are fully implemented as well. They use the same algorithm as the -non-fast versions. Hence, in this implementation their performance is -equivalent to the MUF/DVF/RDV instructions. This is acceptable according -to the ARM manual. The manual notes these are defined only for single -operands, on the actual FPA11 hardware they do not work for double or -extended precision operands. The emulator currently does not check -the requested permissions conditions, and performs the requested operation. - -RMF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - IEEE remainder - -This is fully implemented. - -Monadic operations: - -MVF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move -MNF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move negated - -These are fully implemented. - -ABS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - absolute value -SQT{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - square root -RND{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - round - -These are fully implemented. - -URD{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - unnormalized round -NRM{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - normalize - -These are implemented. URD is implemented using the same code as the RND -instruction. Since URD cannot return a unnormalized number, NRM becomes -a NOP. - -Library calls: - -POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power -RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power -POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2) - -LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10 -LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e -EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent -SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine -COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine -TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent -ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine -ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine -ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent - -These are not implemented. They are not currently issued by the compiler, -and are handled by routines in libc. These are not implemented by the FPA11 -hardware, but are handled by the floating point support code. They should -be implemented in future versions. - -Signalling: - -Signals are implemented. However current ELF kernels produced by Rebel.com -have a bug in them that prevents the module from generating a SIGFPE. This -is caused by a failure to alias fp_current to the kernel variable -current_set[0] correctly. - -The kernel provided with this distribution (vmlinux-nwfpe-0.93) contains -a fix for this problem and also incorporates the current version of the -emulator directly. It is possible to run with no floating point module -loaded with this kernel. It is provided as a demonstration of the -technology and for those who want to do floating point work that depends -on signals. It is not strictly necessary to use the module. - -A module (either the one provided by Russell King, or the one in this -distribution) can be loaded to replace the functionality of the emulator -built into the kernel. |