blob: ef16f6813edf2e8a4a156b8b420acc6dce8621b1 [file] [log] [blame]
George Landerda55ef92015-11-19 12:05:06 +00001/*
Szabolcs Nagy6752e612018-04-25 10:05:07 +01002 * funder.c - manually provoke SP exceptions for mathlib
George Landerda55ef92015-11-19 12:05:06 +00003 *
Szabolcs Nagy11253b02018-11-12 11:10:57 +00004 * Copyright (c) 2009-2018, Arm Limited.
5 * SPDX-License-Identifier: MIT
George Landerda55ef92015-11-19 12:05:06 +00006 */
7
George Landerda55ef92015-11-19 12:05:06 +00008#include <fenv.h>
Szabolcs Nagy0d51c042018-04-25 13:26:22 +01009#include "math_private.h"
George Landerda55ef92015-11-19 12:05:06 +000010
Szabolcs Nagy6752e612018-04-25 10:05:07 +010011__inline float __mathlib_flt_infnan2(float x, float y)
George Landerda55ef92015-11-19 12:05:06 +000012{
13 return x+y;
14}
15
Szabolcs Nagy6752e612018-04-25 10:05:07 +010016__inline float __mathlib_flt_infnan(float x)
17{
18 return x+x;
19}
20
21float __mathlib_flt_underflow(void)
George Landerda55ef92015-11-19 12:05:06 +000022{
23#ifdef CLANG_EXCEPTIONS
24 feraiseexcept(FE_UNDERFLOW);
25#endif
Szabolcs Nagy6752e612018-04-25 10:05:07 +010026 return 0x1p-95F * 0x1p-95F;
George Landerda55ef92015-11-19 12:05:06 +000027}
28
Szabolcs Nagy6752e612018-04-25 10:05:07 +010029float __mathlib_flt_overflow(void)
George Landerda55ef92015-11-19 12:05:06 +000030{
31#ifdef CLANG_EXCEPTIONS
32 feraiseexcept(FE_OVERFLOW);
33#endif
Szabolcs Nagy6752e612018-04-25 10:05:07 +010034 return 0x1p+97F * 0x1p+97F;
George Landerda55ef92015-11-19 12:05:06 +000035}
36
Szabolcs Nagy6752e612018-04-25 10:05:07 +010037float __mathlib_flt_invalid(void)
George Landerda55ef92015-11-19 12:05:06 +000038{
39#ifdef CLANG_EXCEPTIONS
40 feraiseexcept(FE_INVALID);
41#endif
Szabolcs Nagy6752e612018-04-25 10:05:07 +010042 return 0.0f / 0.0f;
George Landerda55ef92015-11-19 12:05:06 +000043}
44
Szabolcs Nagy6752e612018-04-25 10:05:07 +010045float __mathlib_flt_divzero(void)
George Landerda55ef92015-11-19 12:05:06 +000046{
47#ifdef CLANG_EXCEPTIONS
48 feraiseexcept(FE_DIVBYZERO);
49#endif
Szabolcs Nagy6752e612018-04-25 10:05:07 +010050 return 1.0f / 0.0f;
George Landerda55ef92015-11-19 12:05:06 +000051}