18c2ecf20Sopenharmony_ci2003-03-22 Ralph Siemsen <ralphs@netwinder.org> 28c2ecf20Sopenharmony_ci * Reformat all but softfloat files to get a consistent coding style. 38c2ecf20Sopenharmony_ci Used "indent -kr -i8 -ts8 -sob -l132 -ss" and a few manual fixups. 48c2ecf20Sopenharmony_ci * Removed dead code and fixed function protypes to match definitions. 58c2ecf20Sopenharmony_ci * Consolidated use of (opcode && MASK_ARITHMETIC_OPCODE) >> 20. 68c2ecf20Sopenharmony_ci * Make 80-bit precision a compile-time option. (1%) 78c2ecf20Sopenharmony_ci * Only initialize FPE state once in repeat-FP situations. (6%) 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci2002-01-19 Russell King <rmk@arm.linux.org.uk> 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci * fpa11.h - Add documentation 128c2ecf20Sopenharmony_ci - remove userRegisters pointer from this structure. 138c2ecf20Sopenharmony_ci - add new method to obtain integer register values. 148c2ecf20Sopenharmony_ci * softfloat.c - Remove float128 158c2ecf20Sopenharmony_ci * softfloat.h - Remove float128 168c2ecf20Sopenharmony_ci * softfloat-specialize - Remove float128 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci * The FPA11 structure is not a kernel-specific data structure. 198c2ecf20Sopenharmony_ci It is used by users of ptrace to examine the values of the 208c2ecf20Sopenharmony_ci floating point registers. Therefore, any changes to the 218c2ecf20Sopenharmony_ci FPA11 structure (size or position of elements contained 228c2ecf20Sopenharmony_ci within) have to be well thought out. 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci * Since 128-bit float requires the FPA11 structure to change 258c2ecf20Sopenharmony_ci size, it has been removed. 128-bit float is currently unused, 268c2ecf20Sopenharmony_ci and needs various things to be re-worked so that we won't 278c2ecf20Sopenharmony_ci overflow the available space in the task structure. 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci * The changes are designed to break any patch that goes on top 308c2ecf20Sopenharmony_ci of this code, so that the authors properly review their changes. 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci1999-08-19 Scott Bambrough <scottb@netwinder.org> 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci * fpmodule.c - Changed version number to 0.95 358c2ecf20Sopenharmony_ci * fpa11.h - modified FPA11, FPREG structures 368c2ecf20Sopenharmony_ci * fpa11.c - Changes due to FPA11, FPREG structure alterations. 378c2ecf20Sopenharmony_ci * fpa11_cpdo.c - Changes due to FPA11, FPREG structure alterations. 388c2ecf20Sopenharmony_ci * fpa11_cpdt.c - Changes due to FPA11, FPREG structure alterations. 398c2ecf20Sopenharmony_ci * fpa11_cprt.c - Changes due to FPA11, FPREG structure alterations. 408c2ecf20Sopenharmony_ci * single_cpdo.c - Changes due to FPA11, FPREG structure alterations. 418c2ecf20Sopenharmony_ci * double_cpdo.c - Changes due to FPA11, FPREG structure alterations. 428c2ecf20Sopenharmony_ci * extended_cpdo.c - Changes due to FPA11, FPREG structure alterations. 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci * I discovered several bugs. First and worst is that the kernel 458c2ecf20Sopenharmony_ci passes in a pointer to the FPE's state area. This is defined 468c2ecf20Sopenharmony_ci as a struct user_fp (see user.h). This pointer was cast to a 478c2ecf20Sopenharmony_ci FPA11*. Unfortunately FPA11 and user_fp are of different sizes; 488c2ecf20Sopenharmony_ci user_fp is smaller. This meant that the FPE scribbled on things 498c2ecf20Sopenharmony_ci below its area, which is bad, as the area is in the thread_struct 508c2ecf20Sopenharmony_ci embedded in the process task structure. Thus we were scribbling 518c2ecf20Sopenharmony_ci over one of the most important structures in the entire OS. 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci * user_fp and FPA11 have now been harmonized. Most of the changes 548c2ecf20Sopenharmony_ci in the above code were dereferencing problems due to moving the 558c2ecf20Sopenharmony_ci register type out of FPREG, and getting rid of the union variable 568c2ecf20Sopenharmony_ci fpvalue. 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ci * Second I noticed resetFPA11 was not always being called for a 598c2ecf20Sopenharmony_ci task. This should happen on the first floating point exception 608c2ecf20Sopenharmony_ci that occurs. It is controlled by init_flag in FPA11. The 618c2ecf20Sopenharmony_ci comment in the code beside init_flag state the kernel guarantees 628c2ecf20Sopenharmony_ci this to be zero. Not so. I found that the kernel recycles task 638c2ecf20Sopenharmony_ci structures, and that recycled ones may not have init_flag zeroed. 648c2ecf20Sopenharmony_ci I couldn't even find anything that guarantees it is zeroed when 658c2ecf20Sopenharmony_ci when the task structure is initially allocated. In any case 668c2ecf20Sopenharmony_ci I now initialize the entire FPE state in the thread structure to 678c2ecf20Sopenharmony_ci zero when allocated and recycled. See alloc_task_struct() and 688c2ecf20Sopenharmony_ci flush_thread() in arch/arm/process.c. The change to 698c2ecf20Sopenharmony_ci alloc_task_struct() may not be necessary, but I left it in for 708c2ecf20Sopenharmony_ci completeness (better safe than sorry). 718c2ecf20Sopenharmony_ci 728c2ecf20Sopenharmony_ci1998-11-23 Scott Bambrough <scottb@netwinder.org> 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci * README.FPE - fix typo in description of lfm/sfm instructions 758c2ecf20Sopenharmony_ci * NOTES - Added file to describe known bugs/problems 768c2ecf20Sopenharmony_ci * fpmodule.c - Changed version number to 0.94 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci1998-11-20 Scott Bambrough <scottb@netwinder.org> 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci * README.FPE - fix description of URD, NRM instructions 818c2ecf20Sopenharmony_ci * TODO - remove URD, NRM instructions from TODO list 828c2ecf20Sopenharmony_ci * single_cpdo.c - implement URD, NRM 838c2ecf20Sopenharmony_ci * double_cpdo.c - implement URD, NRM 848c2ecf20Sopenharmony_ci * extended_cpdo.c - implement URD, NRM 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci1998-11-19 Scott Bambrough <scottb@netwinder.org> 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_ci * ChangeLog - Added this file to track changes made. 898c2ecf20Sopenharmony_ci * fpa11.c - added code to initialize register types to typeNone 908c2ecf20Sopenharmony_ci * fpa11_cpdt.c - fixed bug in storeExtended (typeExtended changed to 918c2ecf20Sopenharmony_ci typeDouble in switch statement) 92