xref: /openbsd-src/lib/libc/arch/amd64/gen/fpgetmask.S (revision 631951aab24dc7dce7719dfa2487185ea5ef120f)
1*631951aaSmortimer/*	$OpenBSD: fpgetmask.S,v 1.3 2018/07/03 23:14:05 mortimer Exp $	*/
2118f6189Smickey/*	$NetBSD: fpgetmask.S,v 1.3 2002/06/12 19:17:22 fvdl Exp $	*/
3118f6189Smickey
4118f6189Smickey/*
5118f6189Smickey * Written by J.T. Conklin, Apr 4, 1995
6118f6189Smickey * Public domain.
7118f6189Smickey */
8118f6189Smickey
9118f6189Smickey#include <machine/asm.h>
10118f6189Smickey
11118f6189Smickey/*
12118f6189Smickey * XXX only read x87 control word here. If an application only
13118f6189Smickey * uses the fp* interface to manipulate FP bits, it should
14118f6189Smickey * always remain in sync with the SSE mxcsr register.
15118f6189Smickey */
16118f6189Smickey
17118f6189Smickey#ifdef WEAK_ALIAS
18118f6189SmickeyWEAK_ALIAS(fpgetmask, _fpgetmask)
19118f6189SmickeyENTRY(_fpgetmask)
20118f6189Smickey#else
21118f6189SmickeyENTRY(fpgetmask)
22118f6189Smickey#endif
23*631951aaSmortimer	RETGUARD_SETUP(fpgetmask, r11)
24118f6189Smickey	fnstcw -4(%rsp)
25118f6189Smickey	movl -4(%rsp),%eax
26118f6189Smickey	notl %eax
27118f6189Smickey	andl $63,%eax
28*631951aaSmortimer	RETGUARD_CHECK(fpgetmask, r11)
29118f6189Smickey	ret
3053e48b83Suebayasi#ifdef WEAK_ALIAS
3153e48b83SuebayasiEND(_fpgetmask)
3253e48b83Suebayasi#else
3353e48b83SuebayasiEND(fpgetmask)
3453e48b83Suebayasi#endif
35