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