From 7cd468a3d7dee7d6c92f69a0bb7061ae208ec727 Mon Sep 17 00:00:00 2001 From: Damjan Marion Date: Mon, 19 Dec 2016 23:05:39 +0100 Subject: Reorganize source tree to use single autotools instance Change-Id: I7b51f88292e057c6443b12224486f2d0c9f8ae23 Signed-off-by: Damjan Marion --- src/vppinfra/math.h | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/vppinfra/math.h (limited to 'src/vppinfra/math.h') diff --git a/src/vppinfra/math.h b/src/vppinfra/math.h new file mode 100644 index 00000000..48f8c0f4 --- /dev/null +++ b/src/vppinfra/math.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2015 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/* + Copyright (c) 2001, 2002, 2003 Eliot Dresselhaus + + 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. +*/ + +#ifndef included_math_h +#define included_math_h + +#include + +always_inline f64 +sqrt (f64 x) +{ + return __builtin_sqrt (x); +} + +always_inline f64 +fabs (f64 x) +{ + return __builtin_fabs (x); +} + +#endif /* included_math_h */ + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ -- cgit 1.2.3-korg From bb18ee6f1c7c172d30cb0c98153499af571777ee Mon Sep 17 00:00:00 2001 From: Chris Luke Date: Sun, 9 Jul 2017 14:30:25 -0400 Subject: format: Check for NaN when rendering doubles - The result of 0.0/0.0 was being rendered as a lot of zeroes in the integer portion, as in this example: DBGvpp# show physmem 0: 16 objects, 576k of 582k used, 3k free, 0 reclaimed, 2k overhead, 16380k capacity alloc. from small object cache: 0 hits 0 attempts (0.00%) replacements 0 alloc. from free-list: 0 attempts, 0 hits (0.00%), 0 considered (per-attempt 0.00) alloc. from vector-expand: 16 allocs: 16 73643.06 clocks/call frees: 0 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.00 clocks/call - Add two macros to vppinfra/math.h that use compiler builtins to check for NaN and Infinity and then use them in format_float(). Change-Id: Iccc03997e6e33d6b888d1e7e20cd78df0cfd02e8 Signed-off-by: Chris Luke --- src/vppinfra/format.c | 7 ++++++- src/vppinfra/math.h | 8 ++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'src/vppinfra/math.h') diff --git a/src/vppinfra/format.c b/src/vppinfra/format.c index 999b093c..70292c04 100644 --- a/src/vppinfra/format.c +++ b/src/vppinfra/format.c @@ -62,6 +62,7 @@ #include #include #include /* os_puts */ +#include typedef struct { @@ -708,8 +709,12 @@ format_float (u8 * s, f64 x, uword n_fraction_digits, uword output_style) sign = 1; } + /* Check for not-a-number. */ + if (isnan (x)) + return format (s, "%cNaN", sign ? '-' : '+'); + /* Check for infinity. */ - if (x == x / 2) + if (isinf (x)) return format (s, "%cinfinity", sign ? '-' : '+'); x = normalize (x, &expon, &prec); diff --git a/src/vppinfra/math.h b/src/vppinfra/math.h index 48f8c0f4..cafa1cb3 100644 --- a/src/vppinfra/math.h +++ b/src/vppinfra/math.h @@ -52,6 +52,14 @@ fabs (f64 x) return __builtin_fabs (x); } +#ifndef isnan +#define isnan(x) __builtin_isnan(x) +#endif + +#ifndef isinf +#define isinf(x) __builtin_isinf(x) +#endif + #endif /* included_math_h */ /* -- cgit 1.2.3-korg