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