1*dd81489dSjsg /* $OpenBSD: fpgetround.c,v 1.4 2022/08/29 02:01:18 jsg Exp $ */
2c7933ddeSpatrick /*
3c7933ddeSpatrick * Copyright (C) 2014 Andrew Turner
4c7933ddeSpatrick * All rights reserved.
5c7933ddeSpatrick *
6c7933ddeSpatrick * Redistribution and use in source and binary forms, with or without
7c7933ddeSpatrick * modification, are permitted provided that the following conditions
8c7933ddeSpatrick * are met:
9c7933ddeSpatrick * 1. Redistributions of source code must retain the above copyright
10c7933ddeSpatrick * notice, this list of conditions and the following disclaimer.
11c7933ddeSpatrick * 2. Redistributions in binary form must reproduce the above copyright
12c7933ddeSpatrick * notice, this list of conditions and the following disclaimer in the
13c7933ddeSpatrick * documentation and/or other materials provided with the distribution.
14c7933ddeSpatrick *
15c7933ddeSpatrick * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16c7933ddeSpatrick * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17c7933ddeSpatrick * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18c7933ddeSpatrick * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19c7933ddeSpatrick * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20c7933ddeSpatrick * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21c7933ddeSpatrick * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22c7933ddeSpatrick * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23c7933ddeSpatrick * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24c7933ddeSpatrick * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25c7933ddeSpatrick * SUCH DAMAGE.
26c7933ddeSpatrick *
27c7933ddeSpatrick */
28c7933ddeSpatrick
29c7933ddeSpatrick #include <sys/types.h>
30c7933ddeSpatrick #include <ieeefp.h>
31c7933ddeSpatrick
32c7933ddeSpatrick fp_rnd
fpgetround(void)33c7933ddeSpatrick fpgetround(void)
34c7933ddeSpatrick {
35c7933ddeSpatrick uint32_t fpscr;
36c7933ddeSpatrick
37*dd81489dSjsg __asm volatile("mrs %x0, fpcr" : "=&r"(fpscr));
38c7933ddeSpatrick
39c7933ddeSpatrick return ((fpscr >> 22) & 3);
40c7933ddeSpatrick }
41aed3c9fcSguenther DEF_WEAK(fpgetround);
42