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