github.com/afumu/libc@v0.0.6/musl/src/fenv/x86_64/fenv.s (about)

     1  .global feclearexcept
     2  .type feclearexcept,@function
     3  feclearexcept:
     4  		# maintain exceptions in the sse mxcsr, clear x87 exceptions
     5  	mov %edi,%ecx
     6  	and $0x3f,%ecx
     7  	fnstsw %ax
     8  	test %eax,%ecx
     9  	jz 1f
    10  	fnclex
    11  1:	stmxcsr -8(%rsp)
    12  	and $0x3f,%eax
    13  	or %eax,-8(%rsp)
    14  	test %ecx,-8(%rsp)
    15  	jz 1f
    16  	not %ecx
    17  	and %ecx,-8(%rsp)
    18  	ldmxcsr -8(%rsp)
    19  1:	xor %eax,%eax
    20  	ret
    21  
    22  .global feraiseexcept
    23  .type feraiseexcept,@function
    24  feraiseexcept:
    25  	and $0x3f,%edi
    26  	stmxcsr -8(%rsp)
    27  	or %edi,-8(%rsp)
    28  	ldmxcsr -8(%rsp)
    29  	xor %eax,%eax
    30  	ret
    31  
    32  .global __fesetround
    33  .hidden __fesetround
    34  .type __fesetround,@function
    35  __fesetround:
    36  	push %rax
    37  	xor %eax,%eax
    38  	mov %edi,%ecx
    39  	fnstcw (%rsp)
    40  	andb $0xf3,1(%rsp)
    41  	or %ch,1(%rsp)
    42  	fldcw (%rsp)
    43  	stmxcsr (%rsp)
    44  	shl $3,%ch
    45  	andb $0x9f,1(%rsp)
    46  	or %ch,1(%rsp)
    47  	ldmxcsr (%rsp)
    48  	pop %rcx
    49  	ret
    50  
    51  .global fegetround
    52  .type fegetround,@function
    53  fegetround:
    54  	push %rax
    55  	stmxcsr (%rsp)
    56  	pop %rax
    57  	shr $3,%eax
    58  	and $0xc00,%eax
    59  	ret
    60  
    61  .global fegetenv
    62  .type fegetenv,@function
    63  fegetenv:
    64  	xor %eax,%eax
    65  	fnstenv (%rdi)
    66  	stmxcsr 28(%rdi)
    67  	ret
    68  
    69  .global fesetenv
    70  .type fesetenv,@function
    71  fesetenv:
    72  	xor %eax,%eax
    73  	inc %rdi
    74  	jz 1f
    75  	fldenv -1(%rdi)
    76  	ldmxcsr 27(%rdi)
    77  	ret
    78  1:	push %rax
    79  	push %rax
    80  	pushq $0xffff
    81  	pushq $0x37f
    82  	fldenv (%rsp)
    83  	pushq $0x1f80
    84  	ldmxcsr (%rsp)
    85  	add $40,%rsp
    86  	ret
    87  
    88  .global fetestexcept
    89  .type fetestexcept,@function
    90  fetestexcept:
    91  	and $0x3f,%edi
    92  	push %rax
    93  	stmxcsr (%rsp)
    94  	pop %rsi
    95  	fnstsw %ax
    96  	or %esi,%eax
    97  	and %edi,%eax
    98  	ret