xref: /minix/lib/libc/arch/x86_64/gen/fpsetround.S (revision ebfedea0)
1/*	$NetBSD: fpsetround.S,v 1.4 2011/09/30 17:42:34 christos Exp $	*/
2
3/*
4 * Written by Frank van der Linden at Wasabi Systems for NetBSD.
5 * Public domain.
6 */
7
8#include <machine/asm.h>
9
10/*
11 * XXX set both the x87 control word and the SSE mxcsr register.
12 * Applications should only set exception and round flags
13 * via the fp*() interface, otherwise the status words
14 * will get our of sync.
15 */
16
17
18#ifdef WEAK_ALIAS
19WEAK_ALIAS(fpsetround, _fpsetround)
20ENTRY(_fpsetround)
21#else
22ENTRY(fpsetround)
23#endif
24
25	fnstcw	-4(%rsp)
26	movl	-4(%rsp), %edx
27	movl	%edx, %eax
28	andl	$0x00000c00, %eax
29	andl	$0xfffff3ff, %edx
30	orl	%edi, %edx
31	movl	%edx, -4(%rsp)
32	fldcw	-4(%rsp)
33
34	stmxcsr	-4(%rsp)
35	movl	-4(%rsp), %edx
36	andl	$0xffff9fff, %edx
37	sall	$3, %edi
38	orl	%edi,%edx
39	movl	%edx,-4(%rsp)
40	ldmxcsr	-4(%rsp)
41
42	ret
43