This is the mail archive of the libc-hacker@sourceware.cygnus.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
On Wed, Dec 29, 1999 at 10:10:43AM -0800, Ulrich Drepper wrote: > Hi, > > I've finally added the soft-fp stuff Jakub sent me quite some time > ago. It not of use for x86 or m68k, but probably for all the others. > Especially SPARC64 where the 128bit FP format can be/is implement > using these functions. > > I've never really tested this stuff since none of my machines is using > them. So, send mail to Jakub and rth (or for PPC to Geoff who at > least look at this code and nodded at some point in time). Thanks. Here are small fixes which came up during the meantime: 2000-01-03 Jakub Jelinek <jakub@redhat.com> * op-1.h: Fix division for machines using not normalizing version of udiv_qrnnd in longlong.h. * sysdeps/mips/sfp-machine.h: Likewise. * sysdeps/mips/mips64/sfp-machine.h: Likewise. * sysdeps/sparc/sparc64/sfp-machine.h: Likewise. Patch by Eddie C. Dost <ecd@skynet.be>. * soft-fp.h (QItype, UQItype): New types used by longlong.h. --- soft-fp/sysdeps/mips/mips64/sfp-machine.h.jj Wed Dec 29 19:08:15 1999 +++ soft-fp/sysdeps/mips/mips64/sfp-machine.h Mon Jan 3 08:47:30 2000 @@ -11,7 +11,7 @@ _FP_MUL_MEAT_2_wide_3mul(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) #define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) --- soft-fp/sysdeps/mips/sfp-machine.h.jj Wed Dec 29 19:08:15 1999 +++ soft-fp/sysdeps/mips/sfp-machine.h Mon Jan 3 08:47:10 2000 @@ -10,7 +10,7 @@ #define _FP_MUL_MEAT_Q(R,X,Y) \ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) -#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(S,R,X,Y) #define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) --- soft-fp/sysdeps/sparc/sparc64/sfp-machine.h.jj Wed Dec 29 19:08:16 1999 +++ soft-fp/sysdeps/sparc/sparc64/sfp-machine.h Mon Jan 3 08:45:38 2000 @@ -49,7 +49,7 @@ do { \ _FP_MUL_MEAT_RESET_FE) #define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_imm(S,R,X,Y,_FP_DIV_HELP_imm) -#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv(D,R,X,Y) +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_1_udiv_norm(D,R,X,Y) #define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_2_udiv(Q,R,X,Y) #define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) --- soft-fp/soft-fp.h.jj Wed Dec 29 19:08:14 1999 +++ soft-fp/soft-fp.h Mon Jan 3 08:43:28 2000 @@ -159,8 +159,10 @@ do { \ #define UWtype _FP_W_TYPE #define W_TYPE_SIZE _FP_W_TYPE_SIZE +typedef int QItype __attribute__((mode(QI))); typedef int SItype __attribute__((mode(SI))); typedef int DItype __attribute__((mode(DI))); +typedef unsigned int UQItype __attribute__((mode(QI))); typedef unsigned int USItype __attribute__((mode(SI))); typedef unsigned int UDItype __attribute__((mode(DI))); #if _FP_W_TYPE_SIZE == 32 --- soft-fp/op-1.h.jj Wed Dec 29 19:08:14 1999 +++ soft-fp/op-1.h Mon Dec 20 09:33:32 1999 @@ -199,25 +199,25 @@ #define _FP_DIV_MEAT_1_udiv_norm(fs, R, X, Y) \ do { \ - _FP_W_TYPE _nh, _nl, _q, _r; \ + _FP_W_TYPE _nh, _nl, _q, _r, _y; \ \ /* Normalize Y -- i.e. make the most significant bit set. */ \ - Y##_f <<= _FP_WFRACXBITS_##fs - 1; \ + _y = Y##_f << _FP_WFRACXBITS_##fs; \ \ /* Shift X op correspondingly high, that is, up one full word. */ \ - if (X##_f <= Y##_f) \ + if (X##_f < Y##_f) \ { \ + R##_e--; \ _nl = 0; \ _nh = X##_f; \ } \ else \ { \ - R##_e++; \ - _nl = X##_f << (_FP_W_TYPE_SIZE-1); \ + _nl = X##_f << (_FP_W_TYPE_SIZE - 1); \ _nh = X##_f >> 1; \ } \ \ - udiv_qrnnd(_q, _r, _nh, _nl, Y##_f); \ + udiv_qrnnd(_q, _r, _nh, _nl, _y); \ R##_f = _q | (_r != 0); \ } while (0) Cheers, Jakub ___________________________________________________________________ Jakub Jelinek | jakub@redhat.com | http://sunsite.mff.cuni.cz/~jj Linux version 2.3.35 on a sparc64 machine (1343.49 BogoMips) ___________________________________________________________________
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |