Ignore:
File:
1 edited

Legend:

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

    rc0c38c7c rfaa45c17  
    3434 */
    3535
     36#include "sftypes.h"
    3637#include "add.h"
    3738#include "comparison.h"
    3839#include "common.h"
    39 #include "sub.h"
    4040
    4141/** Add two single-precision floats with the same sign.
     
    413413}
    414414
    415 #ifdef float32_t
    416 
    417 float32_t __addsf3(float32_t a, float32_t b)
    418 {
    419         float32_u ua;
    420         ua.val = a;
    421        
    422         float32_u ub;
    423         ub.val = b;
    424        
    425         float32_u res;
    426        
    427         if (ua.data.parts.sign != ub.data.parts.sign) {
    428                 if (ua.data.parts.sign) {
    429                         ua.data.parts.sign = 0;
    430                         res.data = sub_float32(ub.data, ua.data);
    431                 } else {
    432                         ub.data.parts.sign = 0;
    433                         res.data = sub_float32(ua.data, ub.data);
    434                 }
    435         } else
    436                 res.data = add_float32(ua.data, ub.data);
    437        
    438         return res.val;
    439 }
    440 
    441 float32_t __aeabi_fadd(float32_t a, float32_t b)
    442 {
    443         float32_u ua;
    444         ua.val = a;
    445        
    446         float32_u ub;
    447         ub.val = b;
    448        
    449         float32_u res;
    450        
    451         if (ua.data.parts.sign != ub.data.parts.sign) {
    452                 if (ua.data.parts.sign) {
    453                         ua.data.parts.sign = 0;
    454                         res.data = sub_float32(ub.data, ua.data);
    455                 } else {
    456                         ub.data.parts.sign = 0;
    457                         res.data = sub_float32(ua.data, ub.data);
    458                 }
    459         } else
    460                 res.data = add_float32(ua.data, ub.data);
    461        
    462         return res.val;
    463 }
    464 
    465 #endif
    466 
    467 #ifdef float64_t
    468 
    469 float64_t __adddf3(float64_t a, float64_t b)
    470 {
    471         float64_u ua;
    472         ua.val = a;
    473        
    474         float64_u ub;
    475         ub.val = b;
    476        
    477         float64_u res;
    478        
    479         if (ua.data.parts.sign != ub.data.parts.sign) {
    480                 if (ua.data.parts.sign) {
    481                         ua.data.parts.sign = 0;
    482                         res.data = sub_float64(ub.data, ua.data);
    483                 } else {
    484                         ub.data.parts.sign = 0;
    485                         res.data = sub_float64(ua.data, ub.data);
    486                 }
    487         } else
    488                 res.data = add_float64(ua.data, ub.data);
    489        
    490         return res.val;
    491 }
    492 
    493 float64_t __aeabi_dadd(float64_t a, float64_t b)
    494 {
    495         float64_u ua;
    496         ua.val = a;
    497        
    498         float64_u ub;
    499         ub.val = b;
    500        
    501         float64_u res;
    502        
    503         if (ua.data.parts.sign != ub.data.parts.sign) {
    504                 if (ua.data.parts.sign) {
    505                         ua.data.parts.sign = 0;
    506                         res.data = sub_float64(ub.data, ua.data);
    507                 } else {
    508                         ub.data.parts.sign = 0;
    509                         res.data = sub_float64(ua.data, ub.data);
    510                 }
    511         } else
    512                 res.data = add_float64(ua.data, ub.data);
    513        
    514         return res.val;
    515 }
    516 
    517 #endif
    518 
    519 #ifdef float128_t
    520 
    521 float128_t __addtf3(float128_t a, float128_t b)
    522 {
    523         float128_u ua;
    524         ua.val = a;
    525        
    526         float128_u ub;
    527         ub.val = b;
    528        
    529         float128_u res;
    530        
    531         if (ua.data.parts.sign != ub.data.parts.sign) {
    532                 if (ua.data.parts.sign) {
    533                         ua.data.parts.sign = 0;
    534                         res.data = sub_float128(ub.data, ua.data);
    535                 } else {
    536                         ub.data.parts.sign = 0;
    537                         res.data = sub_float128(ua.data, ub.data);
    538                 }
    539         } else
    540                 res.data = add_float128(ua.data, ub.data);
    541        
    542         return res.val;
    543 }
    544 
    545 void _Qp_add(float128_t *c, float128_t *a, float128_t *b)
    546 {
    547         *c = __addtf3(*a, *b);
    548 }
    549 
    550 #endif
    551 
    552415/** @}
    553416 */
Note: See TracChangeset for help on using the changeset viewer.