Home | History | Annotate | Line # | Download | only in gen
fpsetround.S revision 1.4.18.1
      1  1.4.18.1       tls /*	$NetBSD: fpsetround.S,v 1.4.18.1 2014/08/10 06:51:49 tls 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  1.4.18.1       tls #ifdef WEAK_ALIAS
     44  1.4.18.1       tls END(_fpsetround)
     45  1.4.18.1       tls #else
     46  1.4.18.1       tls END(fpsetround)
     47  1.4.18.1       tls #endif
     48