RFR (XS) JDK-6961433: Revisit need to disable Windows C++ compiler optimisation of sharedRuntimeTrig.cpp

Vladimir Kozlov vladimir.kozlov at oracle.com
Fri May 30 01:37:15 UTC 2014

Hi Lois,

What about sharedRuntimeTrans.cpp which also have switch off pragma?

Changes look correct but I am a little nervous. We were burned very hard 
recently when we implemented exp/pow using x87 instructions in C2.

Also we switch off optimization in makefiles for these files (I don't 
know why):

# The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized
OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT)
# The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized
OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT)

And I don't see performance results. Can you write tests similar to next 
to measure performance and, most importantly, that sum result is the same?


expintr$ cat ExpTime.java
import java.lang.Math;
import java.util.Random;

public class ExpTime {

static double[] buffer;
public static void main(String[] args) {
   buffer = new double[1000];
   Random rand = new Random(435437646);
   for(int i=0; i<1000; i++) {
      buffer[i] = rand.nextDouble()*10;

   double sum = 0.0;
   for (int j = 0; j < 10; j++) {
     sum += test(10000);
   System.out.println("Warmup done...");
   long start = System.currentTimeMillis();
   sum += test(300000*5000);
   long elapsedTimeMillis = System.currentTimeMillis()-start;
   System.out.println("Iterations Per Micro Second:" + (300 * 
5000)/elapsedTimeMillis+" ipus");
   System.out.println("Sum:" + sum);

private static double test(int len) {
    double sum = 0.0;
    for (int k = 0; k < len; k++) {
       sum +=  Math.exp(buffer[(k)%1000]);
    return sum;

On 5/29/14 11:25 AM, Lois Foltan wrote:
> Hello,
> Please review the following fix:
> Webrev:
>      http://cr.openjdk.java.net/~lfoltan/bug_jdk6961433/
> Bug: Revisit need to disable Windows C++ compiler optimisation of
> sharedRuntimeTrig.cpp
>      https://bugs.openjdk.java.net/browse/JDK-6961433
> Summary of fix:
> Remove WIN32 specific pragma optimize "off" within sharedRuntimeTrig.cpp
> which resulted in the file being compiled with no optimizations.  The
> SAFEBUF macro definition is also being removed.  It was a workaround
> caused by the pragma being in effect. The problem report indicates that
> this pragma was added in the VS2003/VS2005 time frame.  Where or how the
> C++ compiler optimization manifested itself could not be located.  Thank
> you to Dan Daugherty for completing a historical search to try to track
> this down.  His search is posted in the problem report.  Also, thank you
> to Vladimir Koslov for proposing ideas on how this should be tested.
> Since VS2010 & higher should not have this optimization issue, the
> pragma is being removed early in JDK 9 so it can benefit from continual
> full testing.
> Tests:
> JPRT build & test
> vm.quick.testlist via Adhoc Aurora testing on Windows 32 & 64 bit - runs
> with/without -Xint
> JDK java/lang & java/util - runs with/without -Xint
> Hotspot JTREG - runs with/without -Xint
> Built full JDK 9 fastdebug and production images with this Hotspot
> change, resulting image used for testing.

More information about the hotspot-runtime-dev mailing list