X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Ffenv%2Fx86_64%2Ffenv.s;h=443e35a27cc513f23b5d367a47a907cc1bfbb0ae;hb=afd209deb7d3bfc9cc31713e2cb8f22693ca6fae;hp=3ed22755b471cf68e5477aa46f4f9b61675fdd89;hpb=773b0fe4473be18fdcc1b822630e2ebdb1719536;p=musl diff --git a/src/fenv/x86_64/fenv.s b/src/fenv/x86_64/fenv.s index 3ed22755..443e35a2 100644 --- a/src/fenv/x86_64/fenv.s +++ b/src/fenv/x86_64/fenv.s @@ -1,58 +1,69 @@ -2: not %edi +.global feclearexcept +.type feclearexcept,@function +feclearexcept: + mov %edi,%ecx + not %ecx + stmxcsr -8(%rsp) + and %ecx,-8(%rsp) + ldmxcsr -8(%rsp) + test $0x3f,%ecx + jnz 2f +1: fnclex + xor %eax,%eax + ret +2: fnstsw %ax + and %ecx,%eax + jz 1b sub $32,%rsp fnstenv (%rsp) - and %edi,4(%rsp) - or %esi,4(%rsp) + mov %al,4(%rsp) fldenv (%rsp) - stmxcsr (%rsp) - and %edi,(%rsp) - ldmxcsr (%rsp) add $32,%rsp - ret - -.global feclearexcept -feclearexcept: xor %eax,%eax - xor %esi,%esi - test %edi,%edi - jnz 2b ret .global feraiseexcept +.type feraiseexcept,@function feraiseexcept: + stmxcsr -8(%rsp) + or %edi,-8(%rsp) + ldmxcsr -8(%rsp) + fnstenv -32(%rsp) + or %edi,-28(%rsp) + fldenv -32(%rsp) xor %eax,%eax - mov %edi,%esi - xor %edi,%edi - test %esi,%esi - jnz 2b ret .global fesetround +.type fesetround,@function fesetround: + push %rax xor %eax,%eax - sub $32,%rsp - fnstenv (%rsp) + mov %edi,%ecx + fnstcw (%rsp) andb $0xf3,1(%rsp) - or %edi,(%rsp) - fldenv (%rsp) + or %ch,1(%rsp) + fldcw (%rsp) stmxcsr (%rsp) - shl $3,%edi + shl $3,%ch andb $0x9f,1(%rsp) - or %edi,(%rsp) + or %ch,1(%rsp) ldmxcsr (%rsp) - add $32,%rsp + pop %rcx ret .global fegetround +.type fegetround,@function fegetround: push %rax stmxcsr (%rsp) pop %rax shr $3,%eax - and $0xc,%ah + and $0xc00,%eax ret .global fegetenv +.type fegetenv,@function fegetenv: xor %eax,%eax fnstenv (%rdi) @@ -60,6 +71,7 @@ fegetenv: ret .global fesetenv +.type fesetenv,@function fesetenv: xor %eax,%eax inc %rdi @@ -78,6 +90,7 @@ fesetenv: ret .global fetestexcept +.type fetestexcept,@function fetestexcept: push %rax stmxcsr (%rsp)