xref: /openbsd-src/lib/libc/arch/amd64/gen/fpgetsticky.S (revision 631951aab24dc7dce7719dfa2487185ea5ef120f)
1*631951aaSmortimer/*	$OpenBSD: fpgetsticky.S,v 1.3 2018/07/03 23:14:05 mortimer Exp $	*/
2118f6189Smickey/*	$NetBSD: fpgetsticky.S,v 1.3 2002/06/12 19:17:22 fvdl Exp $	*/
3118f6189Smickey
4118f6189Smickey/*
5118f6189Smickey * Written by Frank van der Linden at Wasabi Systems for NetBSD.
6118f6189Smickey * Public domain.
7118f6189Smickey *
8118f6189Smickey */
9118f6189Smickey
10118f6189Smickey#include <machine/asm.h>
11118f6189Smickey
12118f6189Smickey/*
13118f6189Smickey * XXX read both the x87 and SSE status words here, and OR
14118f6189Smickey * them to get a complete picture of exceptions.
15118f6189Smickey */
16118f6189Smickey
17118f6189Smickey#ifdef WEAK_ALIAS
18118f6189SmickeyWEAK_ALIAS(fpgetsticky, _fpgetsticky)
19118f6189SmickeyENTRY(_fpgetsticky)
20118f6189Smickey#else
21118f6189SmickeyENTRY(fpgetsticky)
22118f6189Smickey#endif
23*631951aaSmortimer	RETGUARD_SETUP(fpgetsticky, r11)
24118f6189Smickey	fnstsw	-4(%rsp)
25118f6189Smickey	stmxcsr	-8(%rsp)
26118f6189Smickey	movl	-4(%rsp),%eax
27118f6189Smickey	orl	-8(%rsp),%eax
28118f6189Smickey	andl	$63,%eax
29*631951aaSmortimer	RETGUARD_CHECK(fpgetsticky, r11)
30118f6189Smickey	ret
3153e48b83Suebayasi#ifdef WEAK_ALIAS
3253e48b83SuebayasiEND(_fpgetsticky)
3353e48b83Suebayasi#else
3453e48b83SuebayasiEND(fpgetsticky)
3553e48b83Suebayasi#endif
36