PageRenderTime 9ms CodeModel.GetById 1ms app.highlight 2ms RepoModel.GetById 2ms app.codeStats 0ms

#! | 67 lines | 55 code | 12 blank | 0 comment | 0 complexity | 481496168a7cb47ea79cc803421f7b33 MD5 | raw file
 4POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power
 5RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power
 6POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2)
 8LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10
 9LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e 
10EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent
11SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine
12COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine
13TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent
14ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine
15ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine
16ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent
18These are not implemented.  They are not currently issued by the compiler,
19and are handled by routines in libc.  These are not implemented by the FPA11
20hardware, but are handled by the floating point support code.  They should 
21be implemented in future versions.
23There are a couple of ways to approach the implementation of these.  One
24method would be to use accurate table methods for these routines.  I have 
25a couple of papers by S. Gal from IBM's research labs in Haifa, Israel that
26seem to promise extreme accuracy (in the order of 99.8%) and reasonable speed.
27These methods are used in GLIBC for some of the transcendental functions.
29Another approach, which I know little about is CORDIC.  This stands for
30Coordinate Rotation Digital Computer, and is a method of computing 
31transcendental functions using mostly shifts and adds and a few
32multiplications and divisions.  The ARM excels at shifts and adds,
33so such a method could be promising, but requires more research to 
34determine if it is feasible.
36Rounding Methods
38The IEEE standard defines 4 rounding modes.  Round to nearest is the
39default, but rounding to + or - infinity or round to zero are also allowed.
40Many architectures allow the rounding mode to be specified by modifying bits
41in a control register.  Not so with the ARM FPA11 architecture.  To change
42the rounding mode one must specify it with each instruction.
44This has made porting some benchmarks difficult.  It is possible to
45introduce such a capability into the emulator.  The FPCR contains 
46bits describing the rounding mode.  The emulator could be altered to 
47examine a flag, which if set forced it to ignore the rounding mode in
48the instruction, and use the mode specified in the bits in the FPCR.
50This would require a method of getting/setting the flag, and the bits
51in the FPCR.  This requires a kernel call in ArmLinux, as WFC/RFC are
52supervisor only instructions.  If anyone has any ideas or comments I
53would like to hear them.
55[NOTE: pulled out from some docs on ARM floating point, specifically
56 for the Acorn FPE, but not limited to it:
58 The floating point control register (FPCR) may only be present in some
59 implementations: it is there to control the hardware in an implementation-
60 specific manner, for example to disable the floating point system.  The user
61 mode of the ARM is not permitted to use this register (since the right is
62 reserved to alter it between implementations) and the WFC and RFC
63 instructions will trap if tried in user mode.
65 Hence, the answer is yes, you could do this, but then you will run a high
66 risk of becoming isolated if and when hardware FP emulation comes out
67		-- Russell].