Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4041042

fstore, istore doesn't work correctly in wide mode on win32

XMLWordPrintable

    • sparc
    • solaris_2.5



      Name: szC45993 Date: 03/25/97



      The following JCK tests fails on JDK1.1.1E for WinNT/Win95:

      vm/instr/fstore_w/fstore_w001/fstore_w00101/fstore_w00101.html
      vm/instr/fstore_w/fstore_w005/fstore_w00501/fstore_w00501.html
      vm/instr/istore_w/istore_w001/istore_w00101/istore_w00101.html
      vm/instr/istore_w/istore_w005/istore_w00501/istore_w00501.html

      Note that tests work successfully on JDK1.0.2 and JDK1.1.

      Two tests below shows that wide fstore can produce wrong results
      or even crach VM.

      The first test:
      --------------------- fstore_w00101.jasm
      package javasoft/sqe/tests/vm/fstore_w/fstore_w001/fstore_w00101;

      public class fstore_w00101
      extends java/lang/Object
      {
      // Compiled from fstore_w.java
      // Compiler version 3.45;


      public static Method main:"([Ljava/lang/String;)V"
      stack 2 locals 1
      {
      aload_0;
      getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
      invokestatic Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I";
      bipush 95/*STATUS_TEMP*/;
      iadd;
      invokestatic Method java/lang/System.exit:"(I)V";
      return;
      }

      public static Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I"
      stack 20 locals 5
      {
      //================================================
      ldc float 5;
      dup;
      fstore_w 4; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      fstore 3;
      //================================================
      getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
      new class java/lang/StringBuffer;
      dup;
      invokespecial Method java/lang/StringBuffer.<init>:"()V";
      //================================================
      fload 3;
      //================================================
      invokevirtual Method java/lang/StringBuffer.append:"(F)Ljava/lang/StringBuffer;";
      ldc String " - instead of 5.0";
      invokevirtual Method java/lang/StringBuffer.append:"(Ljava/lang/String;)Ljava/lang/StringBuffer;";
      invokevirtual Method java/lang/StringBuffer.toString:"()Ljava/lang/String;";
      invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
      iconst_2;
      ireturn;
      }

      public Method <init>:"()V"
      stack 1 locals 1
      {
      aload_0;
      invokenonvirtual Method java/lang/Object.<init>:"()V";
      return;
      }

      } // end Class fstore_w00101
      ---------------------

      shows that fstore_w instr damages the value which is loaded on
      the stack top after the fstore_w perform. See result:

      > jdk1.1.1e/win32/bin/java -verify javasoft.sqe.tests.vm.fstore_w.fstore_w001.fstore_w00101.fstore_w00101
      9.45225E-39 - instead of 5.0

      And the second test:
      --------------------- fstore_w00101.jasm
      package javasoft/sqe/tests/vm/fstore_w/fstore_w001/fstore_w00101;

      public class fstore_w00101
      extends java/lang/Object
      {
      // Compiled from fstore_w.java
      // Compiler version 3.45;


      public static Method main:"([Ljava/lang/String;)V"
      stack 2 locals 1
      {
      aload_0;
      getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
      invokestatic Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I";
      bipush 95/*STATUS_TEMP*/;
      iadd;
      invokestatic Method java/lang/System.exit:"(I)V";
      return;
      }

      public static Method run:"([Ljava/lang/String;Ljava/io/PrintStream;)I"
      stack 20 locals 5
      {
      getstatic Field java/lang/System.out:"Ljava/io/PrintStream;";
      new class java/lang/StringBuffer;
      dup;
      invokespecial Method java/lang/StringBuffer.<init>:"()V";
      //================================================
      ldc float 5;
      dup;
      fstore_w 4; //<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      //================================================
      invokevirtual Method java/lang/StringBuffer.append:"(F)Ljava/lang/StringBuffer;";
      ldc String " - instead of 5.0";
      invokevirtual Method java/lang/StringBuffer.append:"(Ljava/lang/String;)Ljava/lang/StringBuffer;";
      invokevirtual Method java/lang/StringBuffer.toString:"()Ljava/lang/String;";
      invokevirtual Method java/io/PrintStream.println:"(Ljava/lang/String;)V";
      iconst_2;
      ireturn;
      }

      public Method <init>:"()V"
      stack 1 locals 1
      {
      aload_0;
      invokenonvirtual Method java/lang/Object.<init>:"()V";
      return;
      }

      } // end Class fstore_w00101
      ---------------------
      shows that in some cases fstore_w instr crashes the jvm. See result:

      > jdk1.1.1e/win32/bin/java -verify javasoft.sqe.tests.vm.fstore_w.fstore_w001.fstore_w00101.fstore_w00101
        0xfffb1793 Segmentation violation

      ======================================================================

            apalanissunw Anand Palaniswamy (Inactive)
            zsssunw Zss Zss (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: