Changeset cf4a823 in mainline


Ignore:
Timestamp:
2005-12-22T12:11:35Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
75a23abf
Parents:
ef0aa999
Message:

Fixed some bugs in softfloat after tests.

Location:
softfloat
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • softfloat/generic/arithmetic.c

    ref0aa999 rcf4a823  
    2929#include<sftypes.h>
    3030#include<arithmetic.h>
     31#include<comparison.h>
    3132
    3233/** Add two Float32 numbers with same signs
  • softfloat/generic/comparison.c

    ref0aa999 rcf4a823  
    5050inline int isFloat32eq(float32 a, float32 b)
    5151{
    52         return ((a==b)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
     52        return ((a.binary==b.binary)||(((a.binary| b.binary)&0x7FFFFFFF)==0)); /* a equals to b or both are zeros (with any sign) */
    5353}
    5454
     
    5959{
    6060        if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
    61                 return 0;
     61                return 0; /* +- zeroes */
    6262        };
    63         a.parts.sign^=a.parts.sign;
    64         b.parts.sign^=b.parts.sign;
     63       
     64        if ((a.parts.sign)&&(b.parts.sign)) {
     65                /*if both are negative, smaller is that with greater binary value*/
     66                return (a.binary>b.binary);
     67                };
     68       
     69        /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
     70        a.parts.sign=!a.parts.sign;
     71        b.parts.sign=!b.parts.sign;
    6572        return (a.binary<b.binary);
    6673                       
     
    7380{
    7481        if (((a.binary| b.binary)&0x7FFFFFFF)==0) {
    75                 return 0;
     82                return 0; /* zeroes are equal with any sign */
    7683        };
    77         a.parts.sign^=a.parts.sign;
    78         b.parts.sign^=b.parts.sign;
     84       
     85        if ((a.parts.sign)&&(b.parts.sign)) {
     86                /*if both are negative, greater is that with smaller binary value*/
     87                return (a.binary<b.binary);
     88                };
     89       
     90        /* lets negate signs - now will be positive numbers allways bigger than negative (first bit will be set for unsigned integer comparison)*/
     91        a.parts.sign=!a.parts.sign;
     92        b.parts.sign=!b.parts.sign;
    7993        return (a.binary>b.binary);
    8094                       
  • softfloat/generic/softfloat.c

    ref0aa999 rcf4a823  
    5858        fb.f=b;
    5959        if (fa.parts.sign!=fb.parts.sign) {
    60                 fb.parts.sign!=fb.parts.sign;
     60                fb.parts.sign=!fb.parts.sign;
    6161                return addFloat32(fa,fb).f;
    6262        }
     
    8989 * */
    9090
    91 int __cmpsf2(double a, double b)
     91int __cmpsf2(float a, float b)
    9292{
    9393        float32 fa,fb;
     
    146146        if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
    147147                /* TODO: sigNaNs*/
    148                 return 1;
     148                return -1;
    149149                };
    150150       
     
    199199
    200200/** Return positive value, if a>b and neither is NaN*/
    201 int __ltsf2(float a, float b)
    202 {
    203         float32 fa,fb;
    204         fa.f=a;
    205         fb.f=b;
    206         if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
    207                 /* TODO: sigNaNs*/
    208                 return 1;
     201int __gtsf2(float a, float b)
     202{
     203        float32 fa,fb;
     204        fa.f=a;
     205        fb.f=b;
     206        if ((isFloat32NaN(fa))||(isFloat32NaN(fb))) {
     207                /* TODO: sigNaNs*/
     208                return -1;
    209209                };
    210210        if (isFloat32gt(fa, fb)) {
  • softfloat/include/comparison.h

    ref0aa999 rcf4a823  
    3333inline int isFloat32SigNaN(float32 f);
    3434
    35 inline int isFloat32Infinity(float32 f) 
     35inline int isFloat32Infinity(float32 f);
    3636
    3737inline int isFloat32eq(float32 a, float32 b);
Note: See TracChangeset for help on using the changeset viewer.