xref: /openbsd-src/lib/libc/arch/amd64/gen/fpgetround.S (revision 631951aab24dc7dce7719dfa2487185ea5ef120f)
1*631951aaSmortimer/*	$OpenBSD: fpgetround.S,v 1.3 2018/07/03 23:14:05 mortimer Exp $	*/
2118f6189Smickey/*	$NetBSD: fpgetround.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 store only x87 state. If an application only uses the fp*
13118f6189Smickey * interface, this should be in sync with the SSE mxcsr register.
14118f6189Smickey */
15118f6189Smickey
16118f6189Smickey#ifdef WEAK_ALIAS
17118f6189SmickeyWEAK_ALIAS(fpgetround, _fpgetround)
18118f6189SmickeyENTRY(_fpgetround)
19118f6189Smickey#else
20118f6189SmickeyENTRY(fpgetround)
21118f6189Smickey#endif
22*631951aaSmortimer	RETGUARD_SETUP(fpgetround, r11)
23118f6189Smickey	fnstcw -4(%rsp)
24118f6189Smickey	movl -4(%rsp),%eax
25118f6189Smickey	rorl $10,%eax
26118f6189Smickey	andl $3,%eax
27*631951aaSmortimer	RETGUARD_CHECK(fpgetround, r11)
28118f6189Smickey	ret
2953e48b83Suebayasi#ifdef WEAK_ALIAS
3053e48b83SuebayasiEND(_fpgetround)
3153e48b83Suebayasi#else
3253e48b83SuebayasiEND(fpgetround)
3353e48b83Suebayasi#endif
34