1185377Ssam/*	$OpenBSD: fpgetsticky.c,v 1.1 2018/02/28 11:16:54 kettenis Exp $	*/
2187831Ssam/*
3185377Ssam * Copyright (c) 2018 Mark Kettenis <kettenis@openbsd.org>
4185377Ssam *
5185377Ssam * Permission to use, copy, modify, and distribute this software for any
6185377Ssam * purpose with or without fee is hereby granted, provided that the above
7185377Ssam * copyright notice and this permission notice appear in all copies.
8185377Ssam *
9185377Ssam * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10185377Ssam * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11185377Ssam * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12185377Ssam * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13185377Ssam * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14185377Ssam * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15185377Ssam * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16185377Ssam */
17187831Ssam
18185377Ssam#include <ieeefp.h>
19185377Ssam#ifdef SOFTFLOAT_FOR_GCC
20185377Ssam#include "softfloat-for-gcc.h"
21185377Ssam#endif
22185377Ssam#include "milieu.h"
23185377Ssam#include <softfloat.h>
24185377Ssam
25185377Ssam#define FP_X_MASK	(FP_X_INV | FP_X_DZ | FP_X_OFL | FP_X_UFL | FP_X_IMP)
26185377Ssam
27185377Ssam__weak_alias(_fpgetsticky,fpgetsticky);
28185377Ssam
29185377Ssamfp_except
30185377Ssamfpgetsticky(void)
31185377Ssam{
32185377Ssam	fp_except old;
33185377Ssam
34185377Ssam	__asm volatile("vmrs %0, fpscr" : "=r" (old));
35185377Ssam	old |= float_exception_flags;
36185377Ssam
37185377Ssam	return (old & FP_X_MASK);
38185377Ssam}
39185377Ssam