e6b6a85705
As recently discussed <https://sourceware.org/ml/libc-alpha/2014-02/msg00670.html>, it doesn't seem particularly useful for libm-test-ulps files to contain huge amounts of data on ulps for individual tests; just the global maximum observed ulps for each function, together with the verification of exceptions, errno and special results such as infinities and NaNs for each test, suffices to verify that a function's behavior on the given test inputs is within the expected accuracy. Removing this data reduces source tree churn caused by updates to these files when libm tests are added, and reduces the frequency with which testsuite additions actually need libm-test-ulps changes at all. Accordingly, this patch removes that data, so that individual tests get checked against the global bounds for the given function and only generate an error if those are exceeded. Tested x86_64 (including verifying that if an ulps value is artificially reduced, the tests do indeed fail as they should and "make regen-ulps" generates the expected changes). * math/libm-test.inc (struct ulp_data): Don't refer to ulps for individual tests in comment. (libm-test-ulps.h): Don't refer to test_ulps in #include comment. (prev_max_error): New variable. (prev_real_max_error): Likewise. (prev_imag_max_error): Likewise. (compare_ulp_data): Don't refer to test names in comment. (find_test_ulps): Remove function. (find_function_ulps): Likewise. (find_complex_function_ulps): Likewise. (init_max_error): Take function name as argument. Look up ulps for that function. (print_ulps): Remove function. (print_max_error): Use prev_max_error instead of calling find_function_ulps. (print_complex_max_error): Use prev_real_max_error and prev_imag_max_error instead of calling find_complex_function_ulps. (check_float_internal): Take max_ulp parameter instead of calling find_test_ulps. Don't call print_ulps. (check_float): Update call to check_float_internal. (check_complex): Update calls to check_float_internal. (START): Pass argument to init_max_error. * math/gen-libm-test.pl (%results): Don't include "kind" information. (parse_ulps): Don't handle ulps of individual tests. (print_ulps_file): Likewise. (output_ulps): Likewise. * math/README.libm-test: Update. * manual/libm-err-tab.pl (parse_ulps): Don't handle ulps of individual tests. * sysdeps/aarch64/libm-test-ulps: Remove individual test ulps. * sysdeps/alpha/fpu/libm-test-ulps: Likewise. * sysdeps/arm/libm-test-ulps: Likewise. * sysdeps/i386/fpu/libm-test-ulps: Likewise. * sysdeps/ia64/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Likewise. * sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise. * sysdeps/microblaze/libm-test-ulps: Likewise. * sysdeps/mips/mips32/libm-test-ulps: Likewise. * sysdeps/mips/mips64/libm-test-ulps: Likewise. * sysdeps/powerpc/fpu/libm-test-ulps: Likewise. * sysdeps/powerpc/nofpu/libm-test-ulps: Likewise. * sysdeps/s390/fpu/libm-test-ulps: Likewise. * sysdeps/sh/libm-test-ulps: Likewise. * sysdeps/sparc/fpu/libm-test-ulps: Likewise. * sysdeps/tile/libm-test-ulps: Likewise. * sysdeps/x86_64/fpu/libm-test-ulps: Likewise. * sysdeps/hppa/fpu/libm-test-ulps: Remove individual test ulps.
---------------------------------------------------------- Notes on how to update libm based on Intel's libm releases ---------------------------------------------------------- This source code in this directory is currently based on Intel libm v2.1 as available from: http://www.intel.com/software/products/opensource/libraries/num.htm To ease importing, fix some bugs, and simplify integration into libc, it is also necessary to apply the patch at: ftp://ftp.hpl.hp.com/pub/linux-ia64/intel-libm-041228.diff.gz The expectation is that Intel will integrate most if not all of these changes into future releases of libm, so this patching step can hopefully be omitted in the future. Once the patched libm sources are extracted in a directory $LIBM, they can be imported into the libc source tree at $LIBC with the following step: $ cd $LIBC/src/sysdep/ia64/fpu $ ./import_intel_libm $LIBM This should produce a number of "Importing..." messages, without showing any errors. At this point, you should be able to build glibc in the usual fashion. We assume you do this in directory $OBJ. Once the build has completed, run "make check" to verify that all (math) checks succeed. If these checks succeed, you should also run the following commands to verify that the new libm doesn't pollute the name-space and has proper size-info for the data objects: $ cd $LIBC/src/sysdep/ia64/fpu $ import_check $OBJ/math/ There should be no (unexpected) errors reported by this script. As an optional step, you may also want to confirm that the new libm exports the exact same global symbols as the old one. If you want to see the changes introduced by the "import_intel_libm" script, you can run the commands: $ cd $LIBC/src/sysdep/ia64/fpu $ import_diffs That's it.