[Bug 156] Missing 32MSB bits of System.currentTimeMillis() on AU11xx embedded board (MIPSEL)
[email protected] Tue, 30 Aug 2005 04:30:55 -0400
| Newsgroups | gmane.comp.java.vm.sablevm.bugs |
|---|---|
| Message-ID | <[email protected]> |
http://sablevm.org/bugs/show_bug.cgi?id=156 ------- Additional Comments From [email protected] 2005-08-30 04:30 ------- Here are the results of the test: public static void main(String[] args) { System.out.println("\n****** START TEST ******"); long t = System.currentTimeMillis(); System.out.println("\n\n****** DUMP IN JAVA CLASS ******"); System.out.println("currentTimeMillis (long): " + Long.toHexString(t)); int a = (int)(t >> 32); int b = (int)(t & 0xFFFFFFFFL); System.out.println("Splitted to int/int : " + Integer.toHexString(a) + "/" + Integer.toHexString(b)); System.out.println("\n****** Printing Date in Java ******"); System.out.println(new Date()); } /* * Class: java_lang_VMSystem * Method: currentTimeMillis * Signature: ()J */ JNIEXPORT jlong JNICALL Java_java_lang_VMSystem_currentTimeMillis (JNIEnv * env __attribute__ ((__unused__)), jclass thisClass __attribute__ ((__unused__))) { /* Note: this implementation copied directly from Japhar's, by Chris Toshok. */ jlong result; struct timeval tp; printf("\n****** DUMP IN VMSystem_currentTimeMillis ******\n"); if (gettimeofday (&tp, NULL) == -1) (*env)->FatalError (env, "gettimeofday call failed."); printf("gettimeofday[tp.tv_sec] : %08x\n", tp.tv_sec); printf("gettimeofday[tp.tv_usec] : %08x\n", tp.tv_usec); result = (jlong) tp.tv_sec; printf("result = tp.tv_sec : %016llx\n", result); result *= 1000L; printf("result *= 1000L : %016llx\n", result); result += (jlong)((jlong)tp.tv_usec / 1000L); printf("result +=(tp.tv_usec/1000): %016llx\n", result); printf("ctime(tp.tv_sec) : %s", ctime(&tp.tv_sec)); return result; } ****** START TEST ****** ****** DUMP IN VMSystem_currentTimeMillis ****** gettimeofday[tp.tv_sec] : 43140dcb gettimeofday[tp.tv_usec] : 00040142 result = tp.tv_sec : 0000000043140dcb result *= 1000L : 000001060655e0f8 result +=(tp.tv_usec/1000): 000001060655e1fe ctime(tp.tv_sec) : Tue Aug 30 09:42:03 2005 ****** DUMP IN JAVA CLASS ****** currentTimeMillis (long): 655e1fe Splitted to int/int : 0/655e1fe ****** Printing Date in Java ****** ****** DUMP IN VMSystem_currentTimeMillis ****** gettimeofday[tp.tv_sec] : 43140dcb gettimeofday[tp.tv_usec] : 00063640 result = tp.tv_sec : 0000000043140dcb result *= 1000L : 000001060655e0f8 result +=(tp.tv_usec/1000): 000001060655e28f ctime(tp.tv_sec) : Tue Aug 30 09:42:03 2005 ****** DUMP IN VMSystem_currentTimeMillis ****** gettimeofday[tp.tv_sec] : 43140dcf gettimeofday[tp.tv_usec] : 0001e8a5 result = tp.tv_sec : 0000000043140dcf result *= 1000L : 000001060655f098 result +=(tp.tv_usec/1000): 000001060655f115 ctime(tp.tv_sec) : Tue Aug 30 09:42:07 2005 ****** DUMP IN VMSystem_currentTimeMillis ****** gettimeofday[tp.tv_sec] : 43140dcf gettimeofday[tp.tv_usec] : 0002226c result = tp.tv_sec : 0000000043140dcf result *= 1000L : 000001060655f098 result +=(tp.tv_usec/1000): 000001060655f123 ctime(tp.tv_sec) : Tue Aug 30 09:42:07 2005 Wed Aug 17 02:07:40 GMT+02:00 1977 And here is the bytecode dump: javap -c Method void main(java.lang.String[]) 0: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 3: ldc #16=<String "\n****** START TEST ******"> 5: invokevirtual #22=<Method java.io.PrintStream.println (java.lang.String)vo> 8: invokestatic #26=<Method java.lang.System.currentTimeMillis ()long> 11: lstore_1 12: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 15: ldc #28=<String "\n\n****** DUMP IN JAVA CLASS ******"> 17: invokevirtual #22=<Method java.io.PrintStream.println (java.lang.String)vo> 20: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 23: new #30=<Class java.lang.StringBuffer> 26: dup 27: ldc #32=<String "currentTimeMillis (long): "> 29: invokespecial #35=<Method java.lang.StringBuffer.<init> (java.lang.String)> 32: lload_1 33: invokestatic #41=<Method java.lang.Long.toHexString (long)java.lang.String> 36: invokevirtual #45=<Method java.lang.StringBuffer.append (java.lang.String)> 39: invokevirtual #49=<Method java.lang.StringBuffer.toString ()java.lang.Stri> 42: invokevirtual #22=<Method java.io.PrintStream.println (java.lang.String)vo> 45: lload_1 46: bipush 32 48: lshr 49: l2i 50: istore_3 51: lload_1 52: ldc2_w #50=<Long 4294967295> 55: land 56: l2i 57: istore 4 59: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 62: new #30=<Class java.lang.StringBuffer> 65: dup 66: ldc #53=<String "Splitted to int/int : "> 68: invokespecial #35=<Method java.lang.StringBuffer.<init> (java.lang.String)> 71: iload_3 72: invokestatic #58=<Method java.lang.Integer.toHexString (int)java.lang.Stri> 75: invokevirtual #45=<Method java.lang.StringBuffer.append (java.lang.String)> 78: bipush 47 80: invokevirtual #61=<Method java.lang.StringBuffer.append (char)java.lang.St> 83: iload 4 85: invokestatic #58=<Method java.lang.Integer.toHexString (int)java.lang.Stri> 88: invokevirtual #45=<Method java.lang.StringBuffer.append (java.lang.String)> 91: invokevirtual #49=<Method java.lang.StringBuffer.toString ()java.lang.Stri> 94: invokevirtual #22=<Method java.io.PrintStream.println (java.lang.String)vo> 97: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 100: ldc #63=<String "\n****** Printing Date in Java ******"> 102: invokevirtual #22=<Method java.io.PrintStream.println (java.lang.String)vo> 105: getstatic #14=<Field java.lang.System.out java.io.PrintStream> 108: new #65=<Class java.util.Date> 111: dup 112: invokespecial #68=<Method java.util.Date.<init> ()void> 115: invokevirtual #71=<Method java.io.PrintStream.println (java.lang.Object)vo> 118: return Hope this helps to trace my problem. Best regards ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. You are the QA contact for the bug, or are watching the QA contact.