fpsetround.S revision 1.3 1 1.3 fvdl /* $NetBSD: fpsetround.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.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.3 fvdl fnstcw -4(%rsp)
25 1.3 fvdl stmxcsr -8(%rsp)
26 1.3 fvdl
27 1.3 fvdl andl $3,%edi
28 1.3 fvdl
29 1.3 fvdl movl -4(%rsp),%edx
30 1.3 fvdl rorl $10,%edx
31 1.3 fvdl movl %edx,%eax
32 1.3 fvdl andl $3,%eax
33 1.3 fvdl
34 1.3 fvdl andl $~3,%edx
35 1.3 fvdl orl %edi,%edx
36 1.3 fvdl roll $10,%edx
37 1.3 fvdl movl %edx,-4(%rsp)
38 1.3 fvdl
39 1.3 fvdl movl -8(%rsp),%edx
40 1.3 fvdl rorl $13,%edx
41 1.3 fvdl andl $~3,%edx
42 1.3 fvdl orl %edi,%edx
43 1.3 fvdl roll $13,%edx
44 1.3 fvdl movl %edx,-8(%rsp)
45 1.1 fvdl
46 1.3 fvdl ldmxcsr -8(%rsp)
47 1.3 fvdl fldcw -4(%rsp)
48 1.1 fvdl ret
49