diff options
author | Liubov Dmitrieva <liubov.dmitrieva@gmail.com> | 2012-09-10 11:44:49 +0200 |
---|---|---|
committer | Andreas Jaeger <aj@suse.de> | 2012-09-10 11:44:49 +0200 |
commit | 80ccd52c95bda018899d83f21c797dd0fd028512 (patch) | |
tree | 428a02774c0b6a050ce30b929e14c6250bd1173c /sysdeps/x86_64 | |
parent | 3d9b46b3500566163815747173002d3d0bbb9b2f (diff) | |
download | glibc-80ccd52c95bda018899d83f21c797dd0fd028512.tar.gz glibc-80ccd52c95bda018899d83f21c797dd0fd028512.tar.xz glibc-80ccd52c95bda018899d83f21c797dd0fd028512.zip |
Fix x86 SSE cosf, sinf issues
* sysdeps/i386/i686/fpu/multiarch/s_sinf-sse2.S: Fix unwind info if defined PIC. Fix special cases description. * sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S: Likewise. * sysdeps/x86_64/fpu/s_sinf.S: Fix special cases description, fix DP_HI_MASK entry. * sysdeps/x86_64/fpu/s_cosf.S: Likewise.
Diffstat (limited to 'sysdeps/x86_64')
-rw-r--r-- | sysdeps/x86_64/fpu/s_cosf.S | 24 | ||||
-rw-r--r-- | sysdeps/x86_64/fpu/s_sinf.S | 21 |
2 files changed, 16 insertions, 29 deletions
diff --git a/sysdeps/x86_64/fpu/s_cosf.S b/sysdeps/x86_64/fpu/s_cosf.S index 7eeefe8f30..dc8c76a131 100644 --- a/sysdeps/x86_64/fpu/s_cosf.S +++ b/sysdeps/x86_64/fpu/s_cosf.S @@ -50,12 +50,12 @@ * 9) if x is NaN, return x-x. * * Special cases: - * cos(+-0)==+-0 not raising inexact/underflow, - * cos(subnormal) raises inexact/underflow - * cos(min_normalized) raises inexact/underflow - * cos(normalized) raises inexact - * cos(Inf) = NaN, raises invalid, sets errno to EDOM - * cos(NaN) = NaN + * cos(+-0) = 1 not raising inexact, + * cos(subnormal) raises inexact, + * cos(min_normalized) raises inexact, + * cos(normalized) raises inexact, + * cos(Inf) = NaN, raises invalid, sets errno to EDOM, + * cos(NaN) = NaN. */ .text @@ -163,10 +163,6 @@ L(sin_poly): cvtsd2ss %xmm3, %xmm0 /* SP result */ ret - - - - .p2align 4 L(large_args): /* Here if |x|>=9*Pi/4 */ @@ -257,7 +253,6 @@ L(very_large_skip2): jmp L(reconstruction) /* end of very_large_args peth */ - .p2align 4 L(arg_less_pio4): /* Here if |x|<Pi/4 */ @@ -317,7 +312,6 @@ L(arg_inf_or_nan): /* Here if x is Inf. Set errno to EDOM. */ call JUMPTARGET(__errno_location) - lea (%rax), %rax movl $EDOM, (%rax) .p2align 4 @@ -328,8 +322,6 @@ L(skip_errno_setting): ret END(__cosf) - - .section .rodata, "a" .p2align 3 L(PIO4J): /* Table of j*Pi/4, for j=0,1,..,10 */ @@ -516,8 +508,8 @@ L(DP_ABS_MASK): /* Mask for getting DP absolute value */ .p2align 3 L(DP_HI_MASK): /* Mask for getting high 21 bits of DP value */ .long 0x00000000,0xffffffff - .type L(DP_ABS_MASK), @object - ASM_SIZE_DIRECTIVE(L(DP_ABS_MASK)) + .type L(DP_HI_MASK), @object + ASM_SIZE_DIRECTIVE(L(DP_HI_MASK)) .p2align 4 L(SP_ABS_MASK): /* Mask for getting SP absolute value */ diff --git a/sysdeps/x86_64/fpu/s_sinf.S b/sysdeps/x86_64/fpu/s_sinf.S index 295ba3df85..9a6c87ff79 100644 --- a/sysdeps/x86_64/fpu/s_sinf.S +++ b/sysdeps/x86_64/fpu/s_sinf.S @@ -50,12 +50,12 @@ * 9) if x is NaN, return x-x. * * Special cases: - * sin(+-0)==+-0 not raising inexact/underflow, - * sin(subnormal) raises inexact/underflow - * sin(min_normalized) raises inexact/underflow - * sin(normalized) raises inexact - * sin(Inf) = NaN, raises invalid, sets errno to EDOM - * sin(NaN) = NaN + * sin(+-0) = +-0 not raising inexact/underflow, + * sin(subnormal) raises inexact/underflow, + * sin(min_normalized) raises inexact/underflow, + * sin(normalized) raises inexact, + * sin(Inf) = NaN, raises invalid, sets errno to EDOM, + * sin(NaN) = NaN. */ .text @@ -168,7 +168,6 @@ L(sin_poly): cvtsd2ss %xmm3, %xmm0 /* SP result */ ret - .p2align 4 L(large_args): /* Here if |x|>=9*Pi/4 */ @@ -262,7 +261,6 @@ L(very_large_skip2): jmp L(reconstruction) /* end of very_large_args peth */ - .p2align 4 L(arg_less_pio4): /* Here if |x|<Pi/4 */ @@ -340,7 +338,6 @@ L(arg_inf_or_nan): /* Here if x is Inf. Set errno to EDOM. */ call JUMPTARGET(__errno_location) - lea (%rax), %rax movl $EDOM, (%rax) .p2align 4 @@ -351,8 +348,6 @@ L(skip_errno_setting): ret END(__sinf) - - .section .rodata, "a" .p2align 3 L(PIO4J): /* Table of j*Pi/4, for j=0,1,..,10 */ @@ -545,8 +540,8 @@ L(DP_ABS_MASK): /* Mask for getting DP absolute value */ .p2align 3 L(DP_HI_MASK): /* Mask for getting high 21 bits of DP value */ .long 0x00000000,0xffffffff - .type L(DP_ABS_MASK),@object - ASM_SIZE_DIRECTIVE(L(DP_ABS_MASK)) + .type L(DP_HI_MASK),@object + ASM_SIZE_DIRECTIVE(L(DP_HI_MASK)) .p2align 4 L(SP_ABS_MASK): /* Mask for getting SP absolute value */ |