Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/softfloat/mul.c

    rc0c38c7c r2416085  
    3434 */
    3535
     36#include "sftypes.h"
    3637#include "mul.h"
    3738#include "comparison.h"
     
    6162                        return result;
    6263                }
    63                
    6464                if (is_float32_signan(b)) { /* TODO: fix SigNaN */
    6565                        result.parts.fraction = b.parts.fraction;
     
    6767                        return result;
    6868                }
    69                
    7069                /* set NaN as result */
    7170                result.bin = FLOAT32_NAN;
     
    7978                        return result;
    8079                }
    81                
    8280                result.parts.fraction = a.parts.fraction;
    8381                result.parts.exp = a.parts.exp;
     
    9189                        return result;
    9290                }
    93                
    9491                result.parts.fraction = b.parts.fraction;
    9592                result.parts.exp = b.parts.exp;
     
    109106        }
    110107       
    111         if (exp < 0) {
     108        if (exp < 0) { 
    112109                /* FIXME: underflow */
    113110                /* return signed zero */
     
    167164                /* denormalized number */
    168165                frac1 >>= 1; /* denormalize */
    169                
    170166                while ((frac1 > 0) && (exp < 0)) {
    171167                        frac1 >>= 1;
    172168                        ++exp;
    173169                }
    174                
    175170                if (frac1 == 0) {
    176171                        /* FIXME : underflow */
     
    180175                }
    181176        }
    182        
    183177        result.parts.exp = exp;
    184178        result.parts.fraction = frac1 & ((1 << FLOAT32_FRACTION_SIZE) - 1);
     
    386380}
    387381
    388 #ifdef float32_t
    389 
    390 float32_t __mulsf3(float32_t a, float32_t b)
    391 {
    392         float32_u ua;
    393         ua.val = a;
    394        
    395         float32_u ub;
    396         ub.val = b;
    397        
    398         float32_u res;
    399         res.data = mul_float32(ua.data, ub.data);
    400        
    401         return res.val;
    402 }
    403 
    404 float32_t __aeabi_fmul(float32_t a, float32_t b)
    405 {
    406         float32_u ua;
    407         ua.val = a;
    408        
    409         float32_u ub;
    410         ub.val = b;
    411        
    412         float32_u res;
    413         res.data = mul_float32(ua.data, ub.data);
    414        
    415         return res.val;
    416 }
    417 
    418 #endif
    419 
    420 #ifdef float64_t
    421 
    422 float64_t __muldf3(float64_t a, float64_t b)
    423 {
    424         float64_u ua;
    425         ua.val = a;
    426        
    427         float64_u ub;
    428         ub.val = b;
    429        
    430         float64_u res;
    431         res.data = mul_float64(ua.data, ub.data);
    432        
    433         return res.val;
    434 }
    435 
    436 float64_t __aeabi_dmul(float64_t a, float64_t b)
    437 {
    438         float64_u ua;
    439         ua.val = a;
    440        
    441         float64_u ub;
    442         ub.val = b;
    443        
    444         float64_u res;
    445         res.data = mul_float64(ua.data, ub.data);
    446        
    447         return res.val;
    448 }
    449 
    450 #endif
    451 
    452 #ifdef float128_t
    453 
    454 float128_t __multf3(float128_t a, float128_t b)
    455 {
    456         float128_u ua;
    457         ua.val = a;
    458        
    459         float128_u ub;
    460         ub.val = b;
    461        
    462         float128_u res;
    463         res.data = mul_float128(ua.data, ub.data);
    464        
    465         return res.val;
    466 }
    467 
    468 void _Qp_mul(float128_t *c, float128_t *a, float128_t *b)
    469 {
    470         *c = __multf3(*a, *b);
    471 }
    472 
    473 #endif
    474 
    475382/** @}
    476383 */
Note: See TracChangeset for help on using the changeset viewer.