OSDN Git Service

am 813a3a2d: Merge "If dalvik wants ASCII casing, it needs to ask for it."
[android-x86/dalvik.git] / vm / InlineNative.cpp
index 6e3f373..00c1e95 100644 (file)
@@ -180,9 +180,9 @@ static void badMatch(StringObject* thisStrObj, StringObject* compStrObj,
     thisStr = dvmCreateCstrFromString(thisStrObj);
     compStr = dvmCreateCstrFromString(compStrObj);
 
-    LOGE("%s expected %d got %d", compareType, expectResult, newResult);
-    LOGE(" this (o=%d l=%d) '%s'", thisOffset, thisCount, thisStr);
-    LOGE(" comp (o=%d l=%d) '%s'", compOffset, compCount, compStr);
+    ALOGE("%s expected %d got %d", compareType, expectResult, newResult);
+    ALOGE(" this (o=%d l=%d) '%s'", thisOffset, thisCount, thisStr);
+    ALOGE(" comp (o=%d l=%d) '%s'", compOffset, compCount, compStr);
     dvmPrintHexDumpEx(ANDROID_LOG_INFO, LOG_TAG,
         ((const u2*) thisArray->contents) + thisOffset, thisCount*2,
         kHexDumpLocal);
@@ -463,6 +463,8 @@ static inline int indexOfCommon(Object* strObj, int ch, int start)
 
     if (start < 0)
         start = 0;
+    else if (start > count)
+        start = count;
 
 #if 0
     /* 16-bit loop, simple */
@@ -730,51 +732,41 @@ const InlineOperation gDvmInlineOpsTable[] = {
         "Lorg/apache/harmony/dalvik/NativeTestTarget;",
         "emptyInlineMethod", "()V" },
 
-    { javaLangString_charAt,
-        "Ljava/lang/String;", "charAt", "(I)C" },
-    { javaLangString_compareTo,
-        "Ljava/lang/String;", "compareTo", "(Ljava/lang/String;)I" },
-    { javaLangString_equals,
-        "Ljava/lang/String;", "equals", "(Ljava/lang/Object;)Z" },
-    { javaLangString_fastIndexOf_II,
-        "Ljava/lang/String;", "fastIndexOf", "(II)I" },
-    { javaLangString_isEmpty,
-        "Ljava/lang/String;", "isEmpty", "()Z" },
-    { javaLangString_length,
-        "Ljava/lang/String;", "length", "()I" },
-
-    { javaLangMath_abs_int,
-        "Ljava/lang/Math;", "abs", "(I)I" },
-    { javaLangMath_abs_long,
-        "Ljava/lang/Math;", "abs", "(J)J" },
-    { javaLangMath_abs_float,
-        "Ljava/lang/Math;", "abs", "(F)F" },
-    { javaLangMath_abs_double,
-        "Ljava/lang/Math;", "abs", "(D)D" },
-    { javaLangMath_min_int,
-        "Ljava/lang/Math;", "min", "(II)I" },
-    { javaLangMath_max_int,
-        "Ljava/lang/Math;", "max", "(II)I" },
-    { javaLangMath_sqrt,
-        "Ljava/lang/Math;", "sqrt", "(D)D" },
-    { javaLangMath_cos,
-        "Ljava/lang/Math;", "cos", "(D)D" },
-    { javaLangMath_sin,
-        "Ljava/lang/Math;", "sin", "(D)D" },
-
-    { javaLangFloat_floatToIntBits,
-        "Ljava/lang/Float;", "floatToIntBits", "(F)I" },
-    { javaLangFloat_floatToRawIntBits,
-        "Ljava/lang/Float;", "floatToRawIntBits", "(F)I" },
-    { javaLangFloat_intBitsToFloat,
-        "Ljava/lang/Float;", "intBitsToFloat", "(I)F" },
-
-    { javaLangDouble_doubleToLongBits,
-        "Ljava/lang/Double;", "doubleToLongBits", "(D)J" },
-    { javaLangDouble_doubleToRawLongBits,
-        "Ljava/lang/Double;", "doubleToRawLongBits", "(D)J" },
-    { javaLangDouble_longBitsToDouble,
-        "Ljava/lang/Double;", "longBitsToDouble", "(J)D" },
+    { javaLangString_charAt, "Ljava/lang/String;", "charAt", "(I)C" },
+    { javaLangString_compareTo, "Ljava/lang/String;", "compareTo", "(Ljava/lang/String;)I" },
+    { javaLangString_equals, "Ljava/lang/String;", "equals", "(Ljava/lang/Object;)Z" },
+    { javaLangString_fastIndexOf_II, "Ljava/lang/String;", "fastIndexOf", "(II)I" },
+    { javaLangString_isEmpty, "Ljava/lang/String;", "isEmpty", "()Z" },
+    { javaLangString_length, "Ljava/lang/String;", "length", "()I" },
+
+    { javaLangMath_abs_int, "Ljava/lang/Math;", "abs", "(I)I" },
+    { javaLangMath_abs_long, "Ljava/lang/Math;", "abs", "(J)J" },
+    { javaLangMath_abs_float, "Ljava/lang/Math;", "abs", "(F)F" },
+    { javaLangMath_abs_double, "Ljava/lang/Math;", "abs", "(D)D" },
+    { javaLangMath_min_int, "Ljava/lang/Math;", "min", "(II)I" },
+    { javaLangMath_max_int, "Ljava/lang/Math;", "max", "(II)I" },
+    { javaLangMath_sqrt, "Ljava/lang/Math;", "sqrt", "(D)D" },
+    { javaLangMath_cos, "Ljava/lang/Math;", "cos", "(D)D" },
+    { javaLangMath_sin, "Ljava/lang/Math;", "sin", "(D)D" },
+
+    { javaLangFloat_floatToIntBits, "Ljava/lang/Float;", "floatToIntBits", "(F)I" },
+    { javaLangFloat_floatToRawIntBits, "Ljava/lang/Float;", "floatToRawIntBits", "(F)I" },
+    { javaLangFloat_intBitsToFloat, "Ljava/lang/Float;", "intBitsToFloat", "(I)F" },
+
+    { javaLangDouble_doubleToLongBits, "Ljava/lang/Double;", "doubleToLongBits", "(D)J" },
+    { javaLangDouble_doubleToRawLongBits, "Ljava/lang/Double;", "doubleToRawLongBits", "(D)J" },
+    { javaLangDouble_longBitsToDouble, "Ljava/lang/Double;", "longBitsToDouble", "(J)D" },
+
+    // These are implemented exactly the same in Math and StrictMath,
+    // so we can make the StrictMath calls fast too. Note that this
+    // isn't true in general!
+    { javaLangMath_abs_int, "Ljava/lang/StrictMath;", "abs", "(I)I" },
+    { javaLangMath_abs_long, "Ljava/lang/StrictMath;", "abs", "(J)J" },
+    { javaLangMath_abs_float, "Ljava/lang/StrictMath;", "abs", "(F)F" },
+    { javaLangMath_abs_double, "Ljava/lang/StrictMath;", "abs", "(D)D" },
+    { javaLangMath_min_int, "Ljava/lang/StrictMath;", "min", "(II)I" },
+    { javaLangMath_max_int, "Ljava/lang/StrictMath;", "max", "(II)I" },
+    { javaLangMath_sqrt, "Ljava/lang/StrictMath;", "sqrt", "(D)D" },
 };
 
 /*
@@ -823,7 +815,7 @@ Method* dvmFindInlinableMethod(const char* classDescriptor,
      */
     ClassObject* clazz = dvmFindClassNoInit(classDescriptor, NULL);
     if (clazz == NULL) {
-        LOGE("dvmFindInlinableMethod: can't find class '%s'",
+        ALOGE("dvmFindInlinableMethod: can't find class '%s'",
             classDescriptor);
         dvmClearException(dvmThreadSelf());
         return NULL;
@@ -840,7 +832,7 @@ Method* dvmFindInlinableMethod(const char* classDescriptor,
             methodSignature);
     }
     if (method == NULL) {
-        LOGE("dvmFindInlinableMethod: can't find method %s.%s %s",
+        ALOGE("dvmFindInlinableMethod: can't find method %s.%s %s",
             clazz->descriptor, methodName, methodSignature);
         return NULL;
     }
@@ -849,13 +841,13 @@ Method* dvmFindInlinableMethod(const char* classDescriptor,
      * Check that the method is appropriate for inlining.
      */
     if (!dvmIsFinalClass(clazz) && !dvmIsFinalMethod(method)) {
-        LOGE("dvmFindInlinableMethod: can't inline non-final method %s.%s",
+        ALOGE("dvmFindInlinableMethod: can't inline non-final method %s.%s",
             clazz->descriptor, method->name);
         return NULL;
     }
     if (dvmIsSynchronizedMethod(method) ||
             dvmIsDeclaredSynchronizedMethod(method)) {
-        LOGE("dvmFindInlinableMethod: can't inline synchronized method %s.%s",
+        ALOGE("dvmFindInlinableMethod: can't inline synchronized method %s.%s",
             clazz->descriptor, method->name);
         return NULL;
     }