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