Ignore:
File:
1 edited

Legend:

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

    rc0c38c7c r2416085  
    3434 */
    3535
     36#include "sftypes.h"
    3637#include "sub.h"
    3738#include "comparison.h"
    3839#include "common.h"
    39 #include "add.h"
    4040
    4141/** Subtract two single-precision floats with the same sign.
     
    438438}
    439439
    440 #ifdef float32_t
    441 
    442 float32_t __subsf3(float32_t a, float32_t b)
    443 {
    444         float32_u ua;
    445         ua.val = a;
    446        
    447         float32_u ub;
    448         ub.val = b;
    449        
    450         float32_u res;
    451        
    452         if (ua.data.parts.sign != ub.data.parts.sign) {
    453                 ub.data.parts.sign = !ub.data.parts.sign;
    454                 res.data = add_float32(ua.data, ub.data);
    455         } else
    456                 res.data = sub_float32(ua.data, ub.data);
    457        
    458         return res.val;
    459 }
    460 
    461 float32_t __aeabi_fsub(float32_t a, float32_t b)
    462 {
    463         float32_u ua;
    464         ua.val = a;
    465        
    466         float32_u ub;
    467         ub.val = b;
    468        
    469         float32_u res;
    470        
    471         if (ua.data.parts.sign != ub.data.parts.sign) {
    472                 ub.data.parts.sign = !ub.data.parts.sign;
    473                 res.data = add_float32(ua.data, ub.data);
    474         } else
    475                 res.data = sub_float32(ua.data, ub.data);
    476        
    477         return res.val;
    478 }
    479 
    480 #endif
    481 
    482 #ifdef float64_t
    483 
    484 float64_t __subdf3(float64_t a, float64_t b)
    485 {
    486         float64_u ua;
    487         ua.val = a;
    488        
    489         float64_u ub;
    490         ub.val = b;
    491        
    492         float64_u res;
    493        
    494         if (ua.data.parts.sign != ub.data.parts.sign) {
    495                 ub.data.parts.sign = !ub.data.parts.sign;
    496                 res.data = add_float64(ua.data, ub.data);
    497         } else
    498                 res.data = sub_float64(ua.data, ub.data);
    499        
    500         return res.val;
    501 }
    502 
    503 float64_t __aeabi_dsub(float64_t a, float64_t b)
    504 {
    505         float64_u ua;
    506         ua.val = a;
    507        
    508         float64_u ub;
    509         ub.val = b;
    510        
    511         float64_u res;
    512        
    513         if (ua.data.parts.sign != ub.data.parts.sign) {
    514                 ub.data.parts.sign = !ub.data.parts.sign;
    515                 res.data = add_float64(ua.data, ub.data);
    516         } else
    517                 res.data = sub_float64(ua.data, ub.data);
    518        
    519         return res.val;
    520 }
    521 
    522 #endif
    523 
    524 #ifdef float128_t
    525 
    526 float128_t __subtf3(float128_t a, float128_t b)
    527 {
    528         float128_u ua;
    529         ua.val = a;
    530        
    531         float128_u ub;
    532         ub.val = b;
    533        
    534         float128_u res;
    535        
    536         if (ua.data.parts.sign != ub.data.parts.sign) {
    537                 ub.data.parts.sign = !ub.data.parts.sign;
    538                 res.data = add_float128(ua.data, ub.data);
    539         } else
    540                 res.data = sub_float128(ua.data, ub.data);
    541        
    542         return res.val;
    543 }
    544 
    545 void _Qp_sub(float128_t *c, float128_t *a, float128_t *b)
    546 {
    547         *c = __subtf3(*a, *b);
    548 }
    549 
    550 #endif
    551 
    552440/** @}
    553441 */
Note: See TracChangeset for help on using the changeset viewer.