changeset 2085:4e8e7394fd77

S6539464, RH500077: Ensure Math functions return consistent results. 2010-09-03 Andrew John Hughes <ahughes@redhat.com> * Makefile.am: Add new patch. * patches/hotspot/original/6539464-consistent-math.patch: Backport fix for S6539464 which ensures Math functions return consistent results. * NEWS: Updated.
author Andrew John Hughes <ahughes@redhat.com>
date Mon, 06 Sep 2010 14:48:38 +0100
parents 59c86078a676
children d3e0fe2c10b2
files ChangeLog Makefile.am NEWS patches/hotspot/original/6539464-consistent-math.patch
diffstat 4 files changed, 90 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Sun Aug 29 12:54:00 2010 +0200
+++ b/ChangeLog	Mon Sep 06 14:48:38 2010 +0100
@@ -1,3 +1,11 @@
+2010-09-03  Andrew John Hughes  <ahughes@redhat.com>
+
+	* Makefile.am: Add new patch.
+	* patches/hotspot/original/6539464-consistent-math.patch:
+	Backport fix for S6539464 which ensures Math functions
+	return consistent results.
+	* NEWS: Updated.
+
 2010-08-27  Andrew John Hughes  <ahughes@redhat.com>
 	    Matthias Klose  <doko@ubuntu.com>
 
--- a/Makefile.am	Sun Aug 29 12:54:00 2010 +0200
+++ b/Makefile.am	Mon Sep 06 14:48:38 2010 +0100
@@ -400,7 +400,8 @@
 	patches/hotspot/original/icedtea-6778657-f2i-overflow.patch \
 	patches/hotspot/original/icedtea-6791168.patch \
 	patches/hotspot/original/icedtea-6793825-includedb.patch \
-	patches/openjdk/6822370-reentrantreadwritelock.patch
+	patches/openjdk/6822370-reentrantreadwritelock.patch \
+	patches/hotspot/original/6539464-consistent-math.patch
 endif
 
 if HAS_PAX
--- a/NEWS	Sun Aug 29 12:54:00 2010 +0200
+++ b/NEWS	Mon Sep 06 14:48:38 2010 +0100
@@ -5,6 +5,7 @@
   - G266295: Provide font configuration for Gentoo.
   - Provide font configuration for RHEL 6.
   - S6951319: enable solaris builds using Sun Studio 12 update 1 (fixes PR398)
+  - S6539464, RH500077: Ensure java.lang.Math functions provide consistent results.
 - NetX:
   - Fix browser command in BasicService.showDocument(URL)
   - Run programs that inherit main(String[]) in their main-class
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/hotspot/original/6539464-consistent-math.patch	Mon Sep 06 14:48:38 2010 +0100
@@ -0,0 +1,79 @@
+# HG changeset patch
+# User never
+# Date 1239043997 25200
+# Node ID 819880572f0972750d759c1fa6f8705c33b42172
+# Parent  1f2abec697143b7575318be7db855e5e9f893e69
+6539464: Math.log() produces inconsistent results between successive runs.
+Reviewed-by: kvn
+
+diff -r 1f2abec69714 -r 819880572f09 src/cpu/x86/vm/templateInterpreter_x86_64.cpp
+--- openjdk.orig/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp	Fri Apr 03 18:51:31 2009 -0700
++++ openjdk/hotspot/src/cpu/x86/vm/templateInterpreter_x86_64.cpp	Mon Apr 06 11:53:17 2009 -0700
+@@ -1393,12 +1393,13 @@
+   case Interpreter::empty                  : entry_point = ((InterpreterGenerator*) this)->generate_empty_entry();       break;
+   case Interpreter::accessor               : entry_point = ((InterpreterGenerator*) this)->generate_accessor_entry();    break;
+   case Interpreter::abstract               : entry_point = ((InterpreterGenerator*) this)->generate_abstract_entry();    break;
+-  case Interpreter::java_lang_math_sin     :                                                                             break;
+-  case Interpreter::java_lang_math_cos     :                                                                             break;
+-  case Interpreter::java_lang_math_tan     :                                                                             break;
+-  case Interpreter::java_lang_math_abs     :                                                                             break;
+-  case Interpreter::java_lang_math_log     :                                                                             break;
+-  case Interpreter::java_lang_math_log10   :                                                                             break;
++
++  case Interpreter::java_lang_math_sin     : // fall thru
++  case Interpreter::java_lang_math_cos     : // fall thru
++  case Interpreter::java_lang_math_tan     : // fall thru
++  case Interpreter::java_lang_math_abs     : // fall thru
++  case Interpreter::java_lang_math_log     : // fall thru
++  case Interpreter::java_lang_math_log10   : // fall thru
+   case Interpreter::java_lang_math_sqrt    : entry_point = ((InterpreterGenerator*) this)->generate_math_entry(kind);    break;
+   default                                  : ShouldNotReachHere();                                                       break;
+   }
+diff -r 1f2abec69714 -r 819880572f09 test/compiler/6539464/Test.java
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ openjdk/hotspot/test/compiler/6539464/Test.java	Mon Apr 06 11:53:17 2009 -0700
+@@ -0,0 +1,44 @@
++/*
++ * Copyright 2009 Sun Microsystems, Inc.  All Rights Reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
++ * CA 95054 USA or visit www.sun.com if you need additional information or
++ * have any questions.
++ */
++
++/**
++ * @test
++ * @bug 6539464
++ * @summary Math.log() produces inconsistent results between successive runs.
++ *
++ * @run main/othervm -Xcomp -XX:CompileOnly=Test.main Test
++ */
++
++public class Test {
++    static double log_value = 17197;
++    static double log_result = Math.log(log_value);
++
++    public static void main(String[] args) throws Exception {
++        for (int i = 0; i < 1000000; i++) {
++            double log_result2 = Math.log(log_value);
++            if (log_result2 != log_result) {
++                throw new InternalError("Math.log produces inconsistent results: " + log_result2 + " != " + log_result);
++            }
++        }
++    }
++}