Changeset c0c38c7c in mainline for uspace/lib/softfloat/sub.c


Ignore:
Timestamp:
2015-03-14T21:36:44Z (9 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7f9d97f3
Parents:
2c7fdaa
Message:

software floating point overhaul
use proper type mapping
fix cosine calculation

File:
1 edited

Legend:

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

    r2c7fdaa rc0c38c7c  
    3434 */
    3535
    36 #include "sftypes.h"
    3736#include "sub.h"
    3837#include "comparison.h"
    3938#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
     442float32_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
     461float32_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
     484float64_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
     503float64_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
     526float128_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
     545void _Qp_sub(float128_t *c, float128_t *a, float128_t *b)
     546{
     547        *c = __subtf3(*a, *b);
     548}
     549
     550#endif
     551
    440552/** @}
    441553 */
Note: See TracChangeset for help on using the changeset viewer.