X-Authentication-Warning: delorie.com: mail set sender to djgpp-workers-bounces using -f X-Recipient: djgpp-workers AT delorie DOT com Message-ID: <55608E9F.50406@gmx.de> Date: Sat, 23 May 2015 16:28:47 +0200 From: "Juan Manuel Guerrero (juan DOT guerrero AT gmx DOT de)" User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.2.13) Gecko/20101206 SUSE/3.1.7 Thunderbird/3.1.7 MIME-Version: 1.0 To: djgpp-workers AT delorie DOT com Subject: Order of arguments passed to sincos changed. Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:5/oMfjcYrfWgp5reLehkw+taRBAvnCInzeQ+xEU2VemWz/DD5yG wKDIhHJ0Lwn/+OJAOws76rjF4Okr3OCASCSnxBl3163Q1ygWKtCJYlnzb2JT63Bmle9KVke Qk1/CpdhP48pqmlk2kCQYzNPGJo7JBEKPzqVgG3G4hjUCFmhAMw6W4+CtaCG3TM+bI5P3sy dARiEP50mpnEeyqDDyxlg== X-UI-Out-Filterresults: notjunk:1; Reply-To: djgpp-workers AT delorie DOT com OFYI, I have applied the patch below. Regards, Juan M. Guerrero 2015-05-17 Juan Manuel Guerrero * djgpp/include/math.h: Order of arguments of sincos function changed to match the order used by GNU systems. * djgpp/src/libc/compat/math/sincos.S: Order of arguments of sincos function changed to match the order used by GNU systems. * djgpp/src/libc/compat/math/sincos.txh: Order of arguments of sincos function changed to match the order used by GNU systems. * djgpp/tests/libc/compat/math/makefile: sincos test program added. * djgpp/tests/libc/compat/math/sincos.c: sincos test program added. Index: djgpp/include/math.h =================================================================== RCS file: /cvs/djgpp/djgpp/include/math.h,v retrieving revision 1.25 diff -U 5 -r1.25 math.h --- djgpp/include/math.h 16 Nov 2013 21:48:26 -0000 1.25 +++ djgpp/include/math.h 23 May 2015 13:00:30 -0000 @@ -256,11 +256,11 @@ double exp10(double _x); double pow10(double _x); double pow2(double _x); double powi(double _base, int _exp); -void sincos(double *_cos, double *_sin, double _x); +void sincos(double _x, double *_sin, double *_cos); /* These are in libm.a (Cygnus). You must link -lm to get these */ /* See libm/math.h for comments */ #ifndef __cplusplus Index: djgpp/src/docs/kb/wc205.txi =================================================================== RCS file: /cvs/djgpp/djgpp/src/docs/kb/wc205.txi,v retrieving revision 1.4 diff -U 5 -r1.4 wc205.txi --- djgpp/src/docs/kb/wc205.txi 16 May 2015 18:50:04 -0000 1.4 +++ djgpp/src/docs/kb/wc205.txi 23 May 2015 13:00:30 -0000 @@ -12,12 +12,12 @@ @code{free}. In DJGPP v2.05, memory management was replaced by the @strong{nmalloc} implementation written by Charles B. Falconer (1931-2012). nmalloc was already used for a rather long time for various DJGPP packages including DJGPP port of GCC. -@subsection Update of DXE lookup - +@cindex Update of @acronym{DXE3} lookup +@cindex @env{SYSTEM_DXE_PATH}, new search path for @acronym{DXE3} modules Updated handling of DXE search path for relative file names @itemize @bullet @item At first, directories from @env{LD_LIBRARY_PATH} are tried. The predefined value of @env{LD_LIBRARY_PATH} is currently kept for @@ -32,11 +32,14 @@ Both environment variables contain @strong{;} separated lists of directories. Before DJGPP-v2.05, only @env{LD_LIBRARY_PATH} was used. The result was DXE lookup failure when @env{LD_LIBRARY_PATH} was redefined by user. -@subsection Bug Fixes - +@cindex @file{dir.h}, fixed a wrong structure packing directive @file{dir.h}: Fixed a wrong structure packing directive (bug introduced by djgpp-v2.01 back in 1996) that would infect other sources and headers with potentially adverse effects. NOTE: You might want to recompile your libraries. +@cindex @file{math.h}, order of arguments of @code{sincos} changed +@findex sincos AT r{, order of arguments of @code{sincos} changed} +The Order of arguments passed to the @code{sincos} function has been changed to +match the order used by the function version as implemented in @acronym{GNU} systems. Index: djgpp/src/libc/compat/math/sincos.S =================================================================== RCS file: /cvs/djgpp/djgpp/src/libc/compat/math/sincos.S,v retrieving revision 1.4 diff -U 5 -r1.4 sincos.S --- djgpp/src/libc/compat/math/sincos.S 17 Apr 2011 18:49:47 -0000 1.4 +++ djgpp/src/libc/compat/math/sincos.S 23 May 2015 13:00:30 -0000 @@ -1,25 +1,26 @@ +/* Copyright (C) 2015 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 2011 DJ Delorie, see COPYING.DJ for details */ /* Copyright (C) 1999 DJ Delorie, see COPYING.DJ for details */ NaN: .long 0x00000000, 0xFFF80000 .globl _sincos _sincos: - /* void sincos(double *cosine, double *sine, double x); */ + /* void sincos(double x, double *sine, double *cosine); */ - movl 16(%esp), %ecx + movl 8(%esp), %ecx - movl 4(%esp), %eax /* Point to cosine. */ - movl 8(%esp), %edx /* Point to sine. */ + movl 12(%esp), %edx /* Point to sine. */ + movl 16(%esp), %eax /* Point to cosine. */ andl $0x7FF00000, %ecx /* Examine exponent of x. */ cmpl $0x43E00000, %ecx /* |x| >= 2^63 */ jae bigarg - fldl 12(%esp) + fldl 4(%esp) fsincos fstpl (%eax) /* cos */ fstpl (%edx) /* sin */ ret Index: djgpp/src/libc/compat/math/sincos.txh =================================================================== RCS file: /cvs/djgpp/djgpp/src/libc/compat/math/sincos.txh,v retrieving revision 1.2 diff -U 5 -r1.2 sincos.txh --- djgpp/src/libc/compat/math/sincos.txh 29 Jan 2003 12:36:37 -0000 1.2 +++ djgpp/src/libc/compat/math/sincos.txh 23 May 2015 13:00:30 -0000 @@ -4,11 +4,11 @@ @subheading Syntax @example #include -void sincos(double *cosine, double *sine, double x); +void sincos(double x, double *sine, double *cosine); @end example @subheading Description This function computes the cosine and the sine of @var{x} in a single diff -aprNU5 djgpp.orig/tests/libc/compat/math/makefile djgpp/tests/libc/compat/math/makefile --- djgpp.orig/tests/libc/compat/math/makefile 1970-01-01 00:00:00 +0000 +++ djgpp/tests/libc/compat/math/makefile 2015-05-18 00:51:30 +0000 @@ -0,0 +1,5 @@ +TOP=../.. + +SRC += sincos.c + +include $(TOP)/../makefile.inc diff -aprNU5 djgpp.orig/tests/libc/compat/math/sincos.c djgpp/tests/libc/compat/math/sincos.c --- djgpp.orig/tests/libc/compat/math/sincos.c 1970-01-01 00:00:00 +0000 +++ djgpp/tests/libc/compat/math/sincos.c 2015-05-18 00:51:30 +0000 @@ -0,0 +1,78 @@ +#include +#include + +static double argument[] = { + -1.5707963267948966192313216916398L, /* -90 degree. */ + -1.3089969389957471826927680763665L, /* -75 degree. */ + -1.0471975511965977461542144610932L, /* -60 degree. */ + -0.7853981633974483096156608458199L, /* -45 degree. */ + -0.5235987755982988730771072305466L, /* -30 degree. */ + -0.2617993877991494365385536152733L, /* -15 degree. */ + +0.0000000000000000000000000000000L, /* +0 degree. */ + +0.2617993877991494365385536152733L, /* +15 degree. */ + +0.5235987755982988730771072305466L, /* +30 degree. */ + +0.7853981633974483096156608458199L, /* +45 degree. */ + +1.0471975511965977461542144610932L, /* +60 degree. */ + +1.3089969389957471826927680763665L, /* +75 degree. */ + +1.5707963267948966192313216916398L, /* +90 degree. */ + +2.0943951023931954923084289221863L, /* +120 degree. */ + +2.6179938779914943653855361527329L, /* +150 degree. */ + +3.1415926535897932384626433832795L, /* +180 degree. */ + +3.1415926535897932384626433832795L, /* +180 degree. */ + +3.9269908169872415480783042290994L, /* +225 degree. */ + +4.7123889803846898576939650749193L, /* +270 degree. */ + +5.4977871437821381673096259207391L, /* +315 degree. */ + +6.283185307179586476925286766559L, /* +360 degree. */ +}; + +static double should_be[][2] = { + /* sine value cosine value */ + {-1.000000000000000, 0.000000000000000}, + {-0.965925826289068, 0.258819045102521}, + {-0.866025403784439, 0.500000000000000}, + {-0.707106781186547, 0.707106781186548}, + {-0.500000000000000, 0.866025403784439}, + {-0.258819045102521, 0.965925826289068}, + {0.000000000000000, 1.000000000000000}, + {0.258819045102521, 0.965925826289068}, + {0.500000000000000, 0.866025403784439}, + {0.707106781186547, 0.707106781186548}, + {0.866025403784439, 0.500000000000000}, + {0.965925826289068, 0.258819045102521}, + {1.000000000000000, 0.000000000000000}, + {0.866025403784439, -0.500000000000000}, + {0.500000000000000, -0.866025403784439}, + {0.000000000000000, -1.000000000000000}, + {0.000000000000000, -1.000000000000000}, + {-0.707106781186547, -0.707106781186548}, + {-1.000000000000000, -0.000000000000000}, + {-0.707106781186548, 0.707106781186547}, + {-0.000000000000000, 1.000000000000000} +}; + +static const size_t n_test_arguments = sizeof(argument) / sizeof(argument[0]); + + +int main(void) +{ + unsigned int i, error_counter; + + for (error_counter = i = 0; i < n_test_arguments; i++) + { + double sv, cv; + sincos(argument[i], &sv, &cv); + if (fabs(sv - should_be[i][0]) > 1.E-15 || fabs(cv - should_be[i][1]) > 1.E-15) + { + printf("sincos failed for %.15f\n" + "returned values: sine value = %.15f, should be = %.15f\n" + " cosine value = %.15f, should be = %.15f\n", + argument[i], sv, should_be[i][0], cv, should_be[i][1]); + error_counter++; + } + } + + if (error_counter == 0) + printf("sincos test passed.\n"); + + return error_counter; +}