Fixes nanotime and also implements currentTimeMillis on top of it 
instead of vice-versa. The ref impl therefore now returns with
microsecond precision.

2006-07-26  Sven de Marothy  <[EMAIL PROTECTED]>

        * include/java_lang_VMSystem.h
        * vm/reference/java/lang/VMSystem.java
        * native/jni/java-lang/java_lang_VMSystem.c
        (nanoTime, currentTimeMillis): Switch the former to native code and
        the latter to java.
        

Index: include/java_lang_VMSystem.h
===================================================================
RCS file: /sources/classpath/classpath/include/java_lang_VMSystem.h,v
retrieving revision 1.8
diff -U3 -r1.8 java_lang_VMSystem.h
--- include/java_lang_VMSystem.h	3 May 2006 20:22:55 -0000	1.8
+++ include/java_lang_VMSystem.h	26 Jul 2006 19:36:33 -0000
@@ -15,7 +15,7 @@
 JNIEXPORT void JNICALL Java_java_lang_VMSystem_setIn (JNIEnv *env, jclass, jobject);
 JNIEXPORT void JNICALL Java_java_lang_VMSystem_setOut (JNIEnv *env, jclass, jobject);
 JNIEXPORT void JNICALL Java_java_lang_VMSystem_setErr (JNIEnv *env, jclass, jobject);
-JNIEXPORT jlong JNICALL Java_java_lang_VMSystem_currentTimeMillis (JNIEnv *env, jclass);
+JNIEXPORT jlong JNICALL Java_java_lang_VMSystem_nanoTime (JNIEnv *env, jclass);
 JNIEXPORT jobject JNICALL Java_java_lang_VMSystem_environ (JNIEnv *env, jclass);
 JNIEXPORT jstring JNICALL Java_java_lang_VMSystem_getenv (JNIEnv *env, jclass, jstring);
 
Index: native/jni/java-lang/java_lang_VMSystem.c
===================================================================
RCS file: /sources/classpath/classpath/native/jni/java-lang/java_lang_VMSystem.c,v
retrieving revision 1.14
diff -U3 -r1.14 java_lang_VMSystem.c
--- native/jni/java-lang/java_lang_VMSystem.c	22 Apr 2006 21:52:18 -0000	1.14
+++ native/jni/java-lang/java_lang_VMSystem.c	26 Jul 2006 19:36:34 -0000
@@ -113,11 +113,11 @@
 
 /*
  * Class:     java_lang_VMSystem
- * Method:    currentTimeMillis
+ * Method:    nanoTime
  * Signature: ()J
  */
 JNIEXPORT jlong JNICALL
-Java_java_lang_VMSystem_currentTimeMillis
+Java_java_lang_VMSystem_nanoTime
   (JNIEnv * env __attribute__ ((__unused__)),
    jclass thisClass __attribute__ ((__unused__)))
 {
@@ -129,8 +129,9 @@
     (*env)->FatalError (env, "gettimeofday call failed.");
 
   result = (jlong) tp.tv_sec;
-  result *= 1000;
-  result += (tp.tv_usec / 1000);
+  result *= (jlong)1000000L;
+  result += (jlong)tp.tv_usec;
+  result *= (jlong)1000;
 
   return result;
 }
Index: vm/reference/java/lang/VMSystem.java
===================================================================
RCS file: /sources/classpath/classpath/vm/reference/java/lang/VMSystem.java,v
retrieving revision 1.16
diff -U3 -r1.16 VMSystem.java
--- vm/reference/java/lang/VMSystem.java	22 Apr 2006 21:52:18 -0000	1.16
+++ vm/reference/java/lang/VMSystem.java	26 Jul 2006 19:36:35 -0000
@@ -135,7 +135,10 @@
    * @return the current time
    * @see java.util.Date
    */
-   public static native long currentTimeMillis();
+   public static long currentTimeMillis()
+   {
+     return nanoTime() / 1000000L;
+   }
 
   /**
    * <p>
@@ -162,10 +165,7 @@
    * @return the time of a system timer in nanoseconds.
    * @since 1.5 
    */
-   public static long nanoTime()
-   {
-     return currentTimeMillis() * 1000;
-   }
+  public static native long nanoTime();
 
   /**
    * Returns a list of 'name=value' pairs representing the current environment

Reply via email to