1*e11d2af5Sdrahn /* $OpenBSD: fabs.c,v 1.1 2020/06/25 02:03:55 drahn Exp $ */
2*e11d2af5Sdrahn
3*e11d2af5Sdrahn /*
4*e11d2af5Sdrahn * Copyright (c) 2002 Theo de Raadt
5*e11d2af5Sdrahn * All rights reserved.
6*e11d2af5Sdrahn *
7*e11d2af5Sdrahn * Redistribution and use in source and binary forms, with or without
8*e11d2af5Sdrahn * modification, are permitted provided that the following conditions
9*e11d2af5Sdrahn * are met:
10*e11d2af5Sdrahn * 1. Redistributions of source code must retain the above copyright
11*e11d2af5Sdrahn * notice, this list of conditions and the following disclaimer.
12*e11d2af5Sdrahn * 2. Redistributions in binary form must reproduce the above copyright
13*e11d2af5Sdrahn * notice, this list of conditions and the following disclaimer in the
14*e11d2af5Sdrahn * documentation and/or other materials provided with the distribution.
15*e11d2af5Sdrahn *
16*e11d2af5Sdrahn * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17*e11d2af5Sdrahn * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18*e11d2af5Sdrahn * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19*e11d2af5Sdrahn * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20*e11d2af5Sdrahn * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21*e11d2af5Sdrahn * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22*e11d2af5Sdrahn * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23*e11d2af5Sdrahn * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24*e11d2af5Sdrahn * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25*e11d2af5Sdrahn * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*e11d2af5Sdrahn */
27*e11d2af5Sdrahn
28*e11d2af5Sdrahn #include <math.h>
29*e11d2af5Sdrahn
30*e11d2af5Sdrahn double
fabs(double x)31*e11d2af5Sdrahn fabs(double x)
32*e11d2af5Sdrahn {
33*e11d2af5Sdrahn __asm__ volatile("fabs %0,%1" : "=f"(x) : "f"(x));
34*e11d2af5Sdrahn return (x);
35*e11d2af5Sdrahn }
36*e11d2af5Sdrahn
37*e11d2af5Sdrahn __strong_alias(fabsl, fabs);
38