fpsetmask.S revision 1.3 1 1.3 fvdl /* $NetBSD: fpsetmask.S,v 1.3 2002/06/12 19:17:22 fvdl 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.2 thorpej #ifdef WEAK_ALIAS
18 1.2 thorpej WEAK_ALIAS(fpsetmask, _fpsetmask)
19 1.2 thorpej ENTRY(_fpsetmask)
20 1.2 thorpej #else
21 1.1 fvdl ENTRY(fpsetmask)
22 1.2 thorpej #endif
23 1.3 fvdl fnstcw -4(%rsp)
24 1.3 fvdl stmxcsr -8(%rsp)
25 1.3 fvdl andl $63,%edi
26 1.3 fvdl notl %edi
27 1.3 fvdl
28 1.3 fvdl movl -4(%rsp),%edx
29 1.3 fvdl movl %edx,%eax
30 1.3 fvdl andl %edi,%edx
31 1.3 fvdl movl %edx,-4(%rsp)
32 1.3 fvdl
33 1.3 fvdl movl -8(%rsp),%edx
34 1.3 fvdl roll $7,%edi
35 1.3 fvdl andl %edi,%edx
36 1.3 fvdl movl %edx,-8(%rsp)
37 1.3 fvdl
38 1.3 fvdl fldcw -4(%rsp)
39 1.3 fvdl ldmxcsr -8(%rsp)
40 1.3 fvdl andl $63,%eax
41 1.1 fvdl ret
42