source: mainline/uspace/lib/softfloat/arch/mips64/include/functions.h@ c67aff2

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since c67aff2 was c67aff2, checked in by Petr Koupy <petr.koupy@…>, 14 years ago

Quadruple-precision softfloat, coding style improvements. Details below…

Highlights:

  • completed double-precision support
  • added quadruple-precision support
  • added SPARC quadruple-precision wrappers
  • added doxygen comments
  • corrected and unified coding style

Current state of the softfloat library:

Support for single, double and quadruple precision is currently almost complete (apart from power, square root, complex multiplication and complex division) and provides the same set of features (i.e. the support for all three precisions is now aligned). In order to extend softfloat library consistently, addition of quadruple precision was done in the same spirit as already existing single and double precision written by Josef Cejka in 2006 - that is relaxed standard-compliance for corner cases while mission-critical code sections heavily inspired by the widely used softfloat library written by John R. Hauser (although I personally think it would be more appropriate for HelenOS to use something less optimized, shorter and more readable).

Most of the quadruple-precision code is just an adapted double-precision code to work on 128-bit variables. That means if there is TODO, FIXME or some defect in single or double-precision code, it is most likely also in the quadruple-precision code. Please note that quadruple-precision functions are currently not tested - it is challenging task for itself, especially when the ports that use them are either not finished (mips64) or badly supported by simulators (sparc64). To test whole softfloat library, one would probably have to either write very non-trivial native tester, or use some existing one (e.g. TestFloat from J. R. Hauser) and port it to HelenOS (or rip the softfloat library out of HelenOS and test it on a host system). At the time of writing this, the code dependent on quadruple-precision functions (on mips64 and sparc64) is just a libposix strtold() function (and its callers, most notably scanf backend).

  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * Copyright (c) 2006 Josef Cejka
3 * Copyright (c) 2011 Petr Koupy
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup softfloatmips64 mips64
31 * @ingroup sfl
32 * @brief softfloat architecture dependent definitions
33 * @{
34 */
35/** @file
36 */
37
38#ifndef __SOFTFLOAT_FUNCTIONS_H__
39#define __SOFTFLOAT_FUNCTIONS_H__
40
41#define float32_to_int(X) float32_to_int32(X);
42#define float32_to_long(X) float32_to_int64(X);
43#define float32_to_longlong(X) float32_to_int64(X);
44
45#define float64_to_int(X) float64_to_int32(X);
46#define float64_to_long(X) float64_to_int64(X);
47#define float64_to_longlong(X) float64_to_int64(X);
48
49#define float128_to_int(X) float128_to_int32(X);
50#define float128_to_long(X) float128_to_int64(X);
51#define float128_to_longlong(X) float128_to_int64(X);
52
53#define float32_to_uint(X) float32_to_uint32(X);
54#define float32_to_ulong(X) float32_to_uint64(X);
55#define float32_to_ulonglong(X) float32_to_uint64(X);
56
57#define float64_to_uint(X) float64_to_uint32(X);
58#define float64_to_ulong(X) float64_to_uint64(X);
59#define float64_to_ulonglong(X) float64_to_uint64(X);
60
61#define float128_to_uint(X) float128_to_uint32(X);
62#define float128_to_ulong(X) float128_to_uint64(X);
63#define float128_to_ulonglong(X) float128_to_uint64(X);
64
65#define int_to_float32(X) int32_to_float32(X);
66#define long_to_float32(X) int64_to_float32(X);
67#define longlong_to_float32(X) int64_to_float32(X);
68
69#define int_to_float64(X) int32_to_float64(X);
70#define long_to_float64(X) int64_to_float64(X);
71#define longlong_to_float64(X) int64_to_float64(X);
72
73#define int_to_float128(X) int32_to_float128(X);
74#define long_to_float128(X) int64_to_float128(X);
75#define longlong_to_float128(X) int64_to_float128(X);
76
77#define uint_to_float32(X) uint32_to_float32(X);
78#define ulong_to_float32(X) uint64_to_float32(X);
79#define ulonglong_to_float32(X) uint64_to_float32(X);
80
81#define uint_to_float64(X) uint32_to_float64(X);
82#define ulong_to_float64(X) uint64_to_float64(X);
83#define ulonglong_to_float64(X) uint64_to_float64(X);
84
85#define uint_to_float128(X) uint32_to_float128(X);
86#define ulong_to_float128(X) uint64_to_float128(X);
87#define ulonglong_to_float128(X) uint64_to_float128(X);
88
89#endif
90
91/** @}
92 */
Note: See TracBrowser for help on using the repository browser.