X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=vm%2FInlineNative.cpp;h=00c1e95540c979b73f7481db1c6736553feb3e35;hb=c5d0614f778e0f26db913fdc7320f08e9417e984;hp=124031dace0074c2735acdadaf65642814b641ec;hpb=61e50bdecb9161ab87fbeb1d20da1a86ff7e8f59;p=android-x86%2Fdalvik.git diff --git a/vm/InlineNative.cpp b/vm/InlineNative.cpp index 124031dac..00c1e9554 100644 --- a/vm/InlineNative.cpp +++ b/vm/InlineNative.cpp @@ -136,7 +136,7 @@ bool javaLangString_charAt(u4 arg0, u4 arg1, u4 arg2, u4 arg3, return false; } - //LOGI("String.charAt this=0x%08x index=%d", arg0, arg1); + //ALOGI("String.charAt this=0x%08x index=%d", arg0, arg1); count = dvmGetFieldInt((Object*) arg0, STRING_FIELDOFF_COUNT); if ((s4) arg1 < 0 || (s4) arg1 >= count) { dvmThrowStringIndexOutOfBoundsExceptionWithIndex(count, arg1); @@ -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); @@ -403,7 +403,7 @@ bool javaLangString_equals(u4 arg0, u4 arg1, u4 arg2, u4 arg3, bool javaLangString_length(u4 arg0, u4 arg1, u4 arg2, u4 arg3, JValue* pResult) { - //LOGI("String.length this=0x%08x pResult=%p", arg0, pResult); + //ALOGI("String.length this=0x%08x pResult=%p", arg0, pResult); /* null reference check on "this" */ if ((Object*) arg0 == NULL) { @@ -421,7 +421,7 @@ bool javaLangString_length(u4 arg0, u4 arg1, u4 arg2, u4 arg3, bool javaLangString_isEmpty(u4 arg0, u4 arg1, u4 arg2, u4 arg3, JValue* pResult) { - //LOGI("String.isEmpty this=0x%08x pResult=%p", arg0, pResult); + //ALOGI("String.isEmpty this=0x%08x pResult=%p", arg0, pResult); /* null reference check on "this" */ if ((Object*) arg0 == NULL) { @@ -455,7 +455,7 @@ static inline int indexOfCommon(Object* strObj, int ch, int start) const u2* chars = (const u2*)(void*)charArray->contents; int offset = dvmGetFieldInt(strObj, STRING_FIELDOFF_OFFSET); int count = dvmGetFieldInt(strObj, STRING_FIELDOFF_COUNT); - //LOGI("String.indexOf(0x%08x, 0x%04x, %d) off=%d count=%d", + //ALOGI("String.indexOf(0x%08x, 0x%04x, %d) off=%d count=%d", // (u4) strObj, ch, start, offset, count); /* factor out the offset */ @@ -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; } @@ -891,9 +883,9 @@ Method* dvmResolveInlineNative(int opIndex) } gDvm.inlinedMethods[opIndex] = method; - IF_LOGV() { + IF_ALOGV() { char* desc = dexProtoCopyMethodDescriptor(&method->prototype); - LOGV("Registered for profile: %s.%s %s", + ALOGV("Registered for profile: %s.%s %s", method->clazz->descriptor, method->name, desc); free(desc); }