lib/libm_dbl: Add implementation of copysign() for DEBUG builds.

This provides a double variant of the float copysignf from libm/math.c
which is required for DEBUG=1 builds when MICROPY_FLOAT_IMPL=double
pull/4156/merge
Andrew Leech 2018-09-17 12:21:09 +10:00 zatwierdzone przez Damien George
rodzic 927a5d1dfd
commit 57a73973ad
2 zmienionych plików z 52 dodań i 0 usunięć

Wyświetl plik

@ -4,6 +4,10 @@ functions.
The files lgamma.c, log10.c and tanh.c are too small to have a meaningful
copyright or license.
The file copysign.c contains a double version of the float copysignf provided
in libm/math.c for use in DEBUG builds where the standard library copy is
not available.
The rest of the files in this directory are copied from the musl library,
v1.1.16, and, unless otherwise stated in the individual file, have the
following copyright and MIT license:

Wyświetl plik

@ -0,0 +1,48 @@
/*
* This file is part of the MicroPython project, http://micropython.org/
*
* The MIT License (MIT)
*
* Copyright (c) 2013, 2014 Damien P. George
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include "libm.h"
#ifndef NDEBUG
typedef union {
double d;
struct {
uint64_t m : 52;
uint64_t e : 11;
uint64_t s : 1;
};
} double_s_t;
double copysign(double x, double y) {
double_s_t dx={.d = x};
double_s_t dy={.d = y};
// copy sign bit;
dx.s = dy.s;
return dx.d;
}
#endif