diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/i386/fpu/s_nearbyint.S | 23 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_nearbyintf.S | 23 | ||||
-rw-r--r-- | sysdeps/i386/fpu/s_nearbyintl.S | 26 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_nearbyintl.S | 14 |
4 files changed, 38 insertions, 48 deletions
diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S index 5290913..8da8ae9 100644 --- a/sysdeps/i386/fpu/s_nearbyint.S +++ b/sysdeps/i386/fpu/s_nearbyint.S @@ -8,22 +8,17 @@ ENTRY(__nearbyint) fldl 4(%esp) - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - fnstcw (%esp) - movl (%esp), %eax + subl $32, %esp + cfi_adjust_cfa_offset (32) + fnstenv 4(%esp) + movl 4(%esp), %eax orl $0x20, %eax - movl %eax, 4(%esp) - fldcw 4(%esp) - frndint - fclex + movl %eax, (%esp) fldcw (%esp) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) + frndint + fldenv 4(%esp) + addl $32, %esp + cfi_adjust_cfa_offset (-32) ret END (__nearbyint) weak_alias (__nearbyint, nearbyint) diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S index 6a6b1d6..0c51f72 100644 --- a/sysdeps/i386/fpu/s_nearbyintf.S +++ b/sysdeps/i386/fpu/s_nearbyintf.S @@ -8,22 +8,17 @@ ENTRY(__nearbyintf) flds 4(%esp) - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - fnstcw (%esp) - movl (%esp), %eax + subl $32, %esp + cfi_adjust_cfa_offset (32) + fnstenv 4(%esp) + movl 4(%esp), %eax orl $0x20, %eax - movl %eax, 4(%esp) - fldcw 4(%esp) - frndint - fclex + movl %eax, (%esp) fldcw (%esp) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) + frndint + fldenv 4(%esp) + addl $32, %esp + cfi_adjust_cfa_offset (-32) ret END (__nearbyintf) weak_alias (__nearbyintf, nearbyintf) diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S index 819af63..b260ab5 100644 --- a/sysdeps/i386/fpu/s_nearbyintl.S +++ b/sysdeps/i386/fpu/s_nearbyintl.S @@ -8,22 +8,20 @@ ENTRY(__nearbyintl) fldt 4(%esp) - pushl %eax - cfi_adjust_cfa_offset (4) - pushl %ecx - cfi_adjust_cfa_offset (4) - fnstcw (%esp) - movl (%esp), %eax + subl $32, %esp + cfi_adjust_cfa_offset (32) + fnstenv 4(%esp) + movl 4(%esp), %eax orl $0x20, %eax - movl %eax, 4(%esp) - fldcw 4(%esp) - frndint - fclex + movl %eax, (%esp) fldcw (%esp) - popl %ecx - cfi_adjust_cfa_offset (-4) - popl %eax - cfi_adjust_cfa_offset (-4) + frndint + fnstsw + andl $0x1, %eax + orl %eax, 8(%esp) + fldenv 4(%esp) + addl $32, %esp + cfi_adjust_cfa_offset (-32) ret END (__nearbyintl) weak_alias (__nearbyintl, nearbyintl) diff --git a/sysdeps/x86_64/fpu/s_nearbyintl.S b/sysdeps/x86_64/fpu/s_nearbyintl.S index dab2750..76d41bd 100644 --- a/sysdeps/x86_64/fpu/s_nearbyintl.S +++ b/sysdeps/x86_64/fpu/s_nearbyintl.S @@ -8,14 +8,16 @@ ENTRY(__nearbyintl) fldt 8(%rsp) - fnstcw -4(%rsp) - movl -4(%rsp), %eax + fnstenv -28(%rsp) + movl -28(%rsp), %eax orl $0x20, %eax - movl %eax, -8(%rsp) - fldcw -8(%rsp) + movl %eax, -32(%rsp) + fldcw -32(%rsp) frndint - fclex - fldcw -4(%rsp) + fnstsw + andl $0x1, %eax + orl %eax, -24(%rsp) + fldenv -28(%rsp) ret END (__nearbyintl) weak_alias (__nearbyintl, nearbyintl) |