1 1.6 uebayasi /* $NetBSD: fpsetmask.S,v 1.6 2014/05/22 15:01:56 uebayasi 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 notl %edi 24 1.4 njoly andl $0x0000003f,%edi 25 1.3 fvdl 26 1.4 njoly fnstcw -4(%rsp) 27 1.4 njoly movl -4(%rsp), %edx 28 1.4 njoly movl %edx, %eax 29 1.4 njoly andl $0xffffffc0, %edx 30 1.4 njoly orl %edi, %edx 31 1.3 fvdl movl %edx,-4(%rsp) 32 1.4 njoly fldcw -4(%rsp) 33 1.3 fvdl 34 1.4 njoly stmxcsr -4(%rsp) 35 1.4 njoly movl -4(%rsp), %edx 36 1.5 drochner andl $0xffffe07f, %edx 37 1.4 njoly sall $7, %edi 38 1.4 njoly orl %edi, %edx 39 1.4 njoly movl %edx,-4(%rsp) 40 1.4 njoly ldmxcsr -4(%rsp) 41 1.3 fvdl 42 1.4 njoly notl %eax 43 1.4 njoly andl $0x0000003f, %eax 44 1.1 fvdl ret 45 1.6 uebayasi #ifdef WEAK_ALIAS 46 1.6 uebayasi END(_fpsetmask) 47 1.6 uebayasi #else 48 1.6 uebayasi END(fpsetmask) 49 1.6 uebayasi #endif 50