George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 1 | /* |
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 2 | * funder.c - manually provoke SP exceptions for mathlib |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 3 | * |
Szabolcs Nagy | 11253b0 | 2018-11-12 11:10:57 +0000 | [diff] [blame] | 4 | * Copyright (c) 2009-2018, Arm Limited. |
5 | * SPDX-License-Identifier: MIT | ||||
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 6 | */ |
7 | |||||
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 8 | #include <fenv.h> |
Szabolcs Nagy | 0d51c04 | 2018-04-25 13:26:22 +0100 | [diff] [blame] | 9 | #include "math_private.h" |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 10 | |
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 11 | __inline float __mathlib_flt_infnan2(float x, float y) |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 12 | { |
13 | return x+y; | ||||
14 | } | ||||
15 | |||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 16 | __inline float __mathlib_flt_infnan(float x) |
17 | { | ||||
18 | return x+x; | ||||
19 | } | ||||
20 | |||||
21 | float __mathlib_flt_underflow(void) | ||||
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 22 | { |
23 | #ifdef CLANG_EXCEPTIONS | ||||
24 | feraiseexcept(FE_UNDERFLOW); | ||||
25 | #endif | ||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 26 | return 0x1p-95F * 0x1p-95F; |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 27 | } |
28 | |||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 29 | float __mathlib_flt_overflow(void) |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 30 | { |
31 | #ifdef CLANG_EXCEPTIONS | ||||
32 | feraiseexcept(FE_OVERFLOW); | ||||
33 | #endif | ||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 34 | return 0x1p+97F * 0x1p+97F; |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 35 | } |
36 | |||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 37 | float __mathlib_flt_invalid(void) |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 38 | { |
39 | #ifdef CLANG_EXCEPTIONS | ||||
40 | feraiseexcept(FE_INVALID); | ||||
41 | #endif | ||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 42 | return 0.0f / 0.0f; |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 43 | } |
44 | |||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 45 | float __mathlib_flt_divzero(void) |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 46 | { |
47 | #ifdef CLANG_EXCEPTIONS | ||||
48 | feraiseexcept(FE_DIVBYZERO); | ||||
49 | #endif | ||||
Szabolcs Nagy | 6752e61 | 2018-04-25 10:05:07 +0100 | [diff] [blame] | 50 | return 1.0f / 0.0f; |
George Lander | da55ef9 | 2015-11-19 12:05:06 +0000 | [diff] [blame] | 51 | } |