From: Raghu Gandham Date: Tue, 31 Jan 2012 02:25:05 +0000 (-0800) Subject: Support architectures that require correctly aligned doubles X-Git-Tag: android-x86-4.4-r1~334^2~5^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=d3b112e1f9f8563e82f1c3d23dcb424a5f2189a7;p=android-x86%2Fdalvik.git Support architectures that require correctly aligned doubles CTS: tests.api.java.lang.reflect.MethodTest#test_invokeLjava_lang_Object$Ljava_lang_Object Change-Id: I93c391884d802b8e69fe3e1ced55a2f2c7866d16 Signed-off-by: Nikola Kuzmanovic Signed-off-by: Chris Dearman --- diff --git a/vm/reflect/Reflect.cpp b/vm/reflect/Reflect.cpp index 8caddfc4d..c3d59e785 100644 --- a/vm/reflect/Reflect.cpp +++ b/vm/reflect/Reflect.cpp @@ -901,6 +901,9 @@ int dvmConvertPrimitiveValue(PrimitiveType srcType, }; enum Conversion conv; +#ifdef ARCH_HAVE_ALIGNED_DOUBLES + double ret; +#endif assert((srcType != PRIM_VOID) && (srcType != PRIM_NOT)); assert((dstType != PRIM_VOID) && (dstType != PRIM_NOT)); @@ -978,9 +981,15 @@ int dvmConvertPrimitiveValue(PrimitiveType srcType, case OK4: *dstPtr = *srcPtr; return 1; case OK8: *(s8*) dstPtr = *(s8*)srcPtr; return 2; case ItoJ: *(s8*) dstPtr = (s8) (*(s4*) srcPtr); return 2; +#ifndef ARCH_HAVE_ALIGNED_DOUBLES case ItoD: *(double*) dstPtr = (double) (*(s4*) srcPtr); return 2; case JtoD: *(double*) dstPtr = (double) (*(long long*) srcPtr); return 2; case FtoD: *(double*) dstPtr = (double) (*(float*) srcPtr); return 2; +#else + case ItoD: ret = (double) (*(s4*) srcPtr); memcpy(dstPtr, &ret, 8); return 2; + case JtoD: ret = (double) (*(long long*) srcPtr); memcpy(dstPtr, &ret, 8); return 2; + case FtoD: ret = (double) (*(float*) srcPtr); memcpy(dstPtr, &ret, 8); return 2; +#endif case ItoF: *(float*) dstPtr = (float) (*(int*) srcPtr); return 1; case JtoF: *(float*) dstPtr = (float) (*(long long*) srcPtr); return 1; case bad: {