From: Liubov Dmitrieva Date: Mon, 10 Sep 2012 09:44:49 +0000 (+0200) Subject: Fix x86 SSE cosf, sinf issues X-Git-Tag: upstream/2.20~3318 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=80ccd52c95bda018899d83f21c797dd0fd028512;p=platform%2Fupstream%2Flinaro-glibc.git 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. --- diff --git a/ChangeLog b/ChangeLog index 30a0727..e87c0a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-09-10 Liubov Dmitrieva + + * 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. + 2012-09-07 H.J. Lu * scripts/check-local-headers.sh: Add "shopt -s nullglob". diff --git a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S b/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S index 2b5a2a5..405c6ea 100644 --- a/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S +++ b/sysdeps/i386/i686/fpu/multiarch/s_cosf-sse2.S @@ -50,25 +50,29 @@ * 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. */ #ifdef PIC # define MO1(symbol) L(symbol)##@GOTOFF(%ebx) # define MO2(symbol,reg2,_scale) L(symbol)##@GOTOFF(%ebx,reg2,_scale) -# define SAVE_BX pushl %ebx -# define RESTORE_BX popl %ebx +# define CFI_PUSH(REG) cfi_adjust_cfa_offset(4); cfi_rel_offset(REG,0) +# define CFI_POP(REG) cfi_adjust_cfa_offset(-4); cfi_restore(REG) +# define PUSH(REG) pushl REG; CFI_PUSH(REG) +# define POP(REG) popl REG; CFI_POP(REG) +# define ENTRANCE PUSH(%ebx); LOAD_PIC_REG(bx) +# define RETURN POP(%ebx); ret; CFI_PUSH(%ebx) # define ARG_X 8(%esp) #else # define MO1(symbol) L(symbol) # define MO2(symbol,reg2,_scale) L(symbol)(,reg2,_scale) -# define SAVE_BX -# define RESTORE_BX +# define ENTRANCE +# define RETURN ret # define ARG_X 4(%esp) #endif @@ -76,11 +80,7 @@ ENTRY(__cosf_sse2) /* Input: single precision x on stack at address ARG_X */ -#ifdef PIC - SAVE_BX - LOAD_PIC_REG(bx) -#endif - + ENTRANCE movl ARG_X, %eax /* Bits of x */ cvtss2sd ARG_X, %xmm0 /* DP x */ andl $0x7fffffff, %eax /* |x| */ @@ -143,8 +143,7 @@ L(reconstruction): fldl 0(%esp) /* ...to FPU. */ /* Return back 4 bytes of stack frame */ lea 8(%esp), %esp - RESTORE_BX - ret + RETURN .p2align 4 L(sin_poly): @@ -183,9 +182,7 @@ L(sin_poly): fldl 0(%esp) /* ...to FPU. */ /* Return back 4 bytes of stack frame */ lea 8(%esp), %esp - RESTORE_BX - ret - + RETURN .p2align 4 L(large_args): @@ -275,7 +272,6 @@ L(very_large_skip2): jmp L(reconstruction) /* end of very_large_args peth */ - .p2align 4 L(arg_less_pio4): /* 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|=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|