xref: /linux/arch/arm/nwfpe/ChangeLog (revision e5451c8f8330e03ad3cfa16048b4daf961af434f)
1*1da177e4SLinus Torvalds2003-03-22  Ralph Siemsen <ralphs@netwinder.org>
2*1da177e4SLinus Torvalds	* Reformat all but softfloat files to get a consistent coding style.
3*1da177e4SLinus Torvalds	  Used "indent -kr -i8 -ts8 -sob -l132 -ss" and a few manual fixups.
4*1da177e4SLinus Torvalds	* Removed dead code and fixed function protypes to match definitions.
5*1da177e4SLinus Torvalds	* Consolidated use of (opcode && MASK_ARITHMETIC_OPCODE) >> 20.
6*1da177e4SLinus Torvalds	* Make 80-bit precision a compile-time option. (1%)
7*1da177e4SLinus Torvalds	* Only initialize FPE state once in repeat-FP situations. (6%)
8*1da177e4SLinus Torvalds
9*1da177e4SLinus Torvalds2002-01-19  Russell King <rmk@arm.linux.org.uk>
10*1da177e4SLinus Torvalds
11*1da177e4SLinus Torvalds	* fpa11.h - Add documentation
12*1da177e4SLinus Torvalds	          - remove userRegisters pointer from this structure.
13*1da177e4SLinus Torvalds	          - add new method to obtain integer register values.
14*1da177e4SLinus Torvalds	* softfloat.c - Remove float128
15*1da177e4SLinus Torvalds	* softfloat.h - Remove float128
16*1da177e4SLinus Torvalds	* softfloat-specialize - Remove float128
17*1da177e4SLinus Torvalds
18*1da177e4SLinus Torvalds	* The FPA11 structure is not a kernel-specific data structure.
19*1da177e4SLinus Torvalds	  It is used by users of ptrace to examine the values of the
20*1da177e4SLinus Torvalds	  floating point registers.  Therefore, any changes to the
21*1da177e4SLinus Torvalds	  FPA11 structure (size or position of elements contained
22*1da177e4SLinus Torvalds	  within) have to be well thought out.
23*1da177e4SLinus Torvalds
24*1da177e4SLinus Torvalds	* Since 128-bit float requires the FPA11 structure to change
25*1da177e4SLinus Torvalds	  size, it has been removed.  128-bit float is currently unused,
26*1da177e4SLinus Torvalds	  and needs various things to be re-worked so that we won't
27*1da177e4SLinus Torvalds	  overflow the available space in the task structure.
28*1da177e4SLinus Torvalds
29*1da177e4SLinus Torvalds	* The changes are designed to break any patch that goes on top
30*1da177e4SLinus Torvalds	  of this code, so that the authors properly review their changes.
31*1da177e4SLinus Torvalds
32*1da177e4SLinus Torvalds1999-08-19  Scott Bambrough  <scottb@netwinder.org>
33*1da177e4SLinus Torvalds
34*1da177e4SLinus Torvalds	* fpmodule.c - Changed version number to 0.95
35*1da177e4SLinus Torvalds	* fpa11.h - modified FPA11, FPREG structures
36*1da177e4SLinus Torvalds	* fpa11.c - Changes due to FPA11, FPREG structure alterations.
37*1da177e4SLinus Torvalds	* fpa11_cpdo.c - Changes due to FPA11, FPREG structure alterations.
38*1da177e4SLinus Torvalds	* fpa11_cpdt.c - Changes due to FPA11, FPREG structure alterations.
39*1da177e4SLinus Torvalds	* fpa11_cprt.c - Changes due to FPA11, FPREG structure alterations.
40*1da177e4SLinus Torvalds	* single_cpdo.c - Changes due to FPA11, FPREG structure alterations.
41*1da177e4SLinus Torvalds	* double_cpdo.c - Changes due to FPA11, FPREG structure alterations.
42*1da177e4SLinus Torvalds	* extended_cpdo.c - Changes due to FPA11, FPREG structure alterations.
43*1da177e4SLinus Torvalds
44*1da177e4SLinus Torvalds	* I discovered several bugs.  First and worst is that the kernel
45*1da177e4SLinus Torvalds	  passes in a pointer to the FPE's state area.	This is defined
46*1da177e4SLinus Torvalds	  as a struct user_fp (see user.h).  This pointer was cast to a
47*1da177e4SLinus Torvalds	  FPA11*.  Unfortunately FPA11 and user_fp are of different sizes;
48*1da177e4SLinus Torvalds	  user_fp is smaller.  This meant that the FPE scribbled on things
49*1da177e4SLinus Torvalds	  below its area, which is bad, as the area is in the thread_struct
50*1da177e4SLinus Torvalds	  embedded in the process task structure.  Thus we were scribbling
51*1da177e4SLinus Torvalds	  over one of the most important structures in the entire OS.
52*1da177e4SLinus Torvalds
53*1da177e4SLinus Torvalds	* user_fp and FPA11 have now been harmonized.  Most of the changes
54*1da177e4SLinus Torvalds	  in the above code were dereferencing problems due to moving the
55*1da177e4SLinus Torvalds	  register type out of FPREG, and getting rid of the union variable
56*1da177e4SLinus Torvalds	  fpvalue.
57*1da177e4SLinus Torvalds
58*1da177e4SLinus Torvalds	* Second I noticed resetFPA11 was not always being called for a
59*1da177e4SLinus Torvalds	  task.  This should happen on the first floating point exception
60*1da177e4SLinus Torvalds	  that occurs.	It is controlled by init_flag in FPA11.  The
61*1da177e4SLinus Torvalds	  comment in the code beside init_flag state the kernel guarantees
62*1da177e4SLinus Torvalds	  this to be zero.  Not so.  I found that the kernel recycles task
63*1da177e4SLinus Torvalds	  structures, and that recycled ones may not have init_flag zeroed.
64*1da177e4SLinus Torvalds	  I couldn't even find anything that guarantees it is zeroed when
65*1da177e4SLinus Torvalds	  when the task structure is initially allocated.  In any case
66*1da177e4SLinus Torvalds	  I now initialize the entire FPE state in the thread structure to
67*1da177e4SLinus Torvalds	  zero when allocated and recycled.  See alloc_task_struct() and
68*1da177e4SLinus Torvalds	  flush_thread() in arch/arm/process.c.  The change to
69*1da177e4SLinus Torvalds	  alloc_task_struct() may not be necessary, but I left it in for
70*1da177e4SLinus Torvalds	  completeness (better safe than sorry).
71*1da177e4SLinus Torvalds
72*1da177e4SLinus Torvalds1998-11-23  Scott Bambrough  <scottb@netwinder.org>
73*1da177e4SLinus Torvalds
74*1da177e4SLinus Torvalds	* README.FPE - fix typo in description of lfm/sfm instructions
75*1da177e4SLinus Torvalds	* NOTES - Added file to describe known bugs/problems
76*1da177e4SLinus Torvalds	* fpmodule.c - Changed version number to 0.94
77*1da177e4SLinus Torvalds
78*1da177e4SLinus Torvalds1998-11-20  Scott Bambrough  <scottb@netwinder.org>
79*1da177e4SLinus Torvalds
80*1da177e4SLinus Torvalds	* README.FPE - fix description of URD, NRM instructions
81*1da177e4SLinus Torvalds	* TODO - remove URD, NRM instructions from TODO list
82*1da177e4SLinus Torvalds	* single_cpdo.c - implement URD, NRM
83*1da177e4SLinus Torvalds	* double_cpdo.c - implement URD, NRM
84*1da177e4SLinus Torvalds	* extended_cpdo.c - implement URD, NRM
85*1da177e4SLinus Torvalds
86*1da177e4SLinus Torvalds1998-11-19  Scott Bambrough  <scottb@netwinder.org>
87*1da177e4SLinus Torvalds
88*1da177e4SLinus Torvalds	* ChangeLog - Added this file to track changes made.
89*1da177e4SLinus Torvalds	* fpa11.c - added code to initialize register types to typeNone
90*1da177e4SLinus Torvalds	* fpa11_cpdt.c - fixed bug in storeExtended (typeExtended changed to
91*1da177e4SLinus Torvalds	  typeDouble in switch statement)
92