From: Rich Felker Date: Sun, 18 Mar 2012 00:10:02 +0000 (-0400) Subject: try fixing/optimizing x86_64 fenv exception code X-Git-Tag: v0.8.7~1 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b60053e7621a29ace6ab5c7b4e256e252f31ad13;p=oweals%2Fmusl.git try fixing/optimizing x86_64 fenv exception code untested; may need followup-fixes. --- diff --git a/src/fenv/x86_64/fenv.s b/src/fenv/x86_64/fenv.s index 11aa3da2..443e35a2 100644 --- a/src/fenv/x86_64/fenv.s +++ b/src/fenv/x86_64/fenv.s @@ -1,32 +1,37 @@ -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 -.type feclearexcept,@function -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