├── .gitignore ├── README.md └── jni ├── Android.mk ├── Application.mk └── nc ├── Dex2C.cpp ├── Dex2C.h ├── Java_com_test_MainActivity_onCreate__Landroid_os_Bundle_2.cpp ├── Java_com_test_MainActivity_testCompiler__.cpp ├── Java_com_test_TestCompiler_Array_checkBooleans___3Z.cpp ├── Java_com_test_TestCompiler_Array_checkBytes___3B.cpp ├── Java_com_test_TestCompiler_Array_checkChars___3C.cpp ├── Java_com_test_TestCompiler_Array_checkFloats___3F.cpp ├── Java_com_test_TestCompiler_Array_checkInts___3I.cpp ├── Java_com_test_TestCompiler_Array_checkLongs___3J.cpp ├── Java_com_test_TestCompiler_Array_checkNegAlloc__I.cpp ├── Java_com_test_TestCompiler_Array_checkRange32___3I_3III.cpp ├── Java_com_test_TestCompiler_Array_checkRange64___3JII.cpp ├── Java_com_test_TestCompiler_Array_checkShorts___3S.cpp ├── Java_com_test_TestCompiler_Array_checkStrings___3Ljava_lang_String_2.cpp ├── Java_com_test_TestCompiler_Array_run__.cpp ├── Java_com_test_TestCompiler_Classes_arrayInstance__.cpp ├── Java_com_test_TestCompiler_Classes_checkCast__Ljava_lang_Object_2Ljava_lang_Object_2Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_iarTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_iararTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_run__.cpp ├── Java_com_test_TestCompiler_Classes_subFunc__Z.cpp ├── Java_com_test_TestCompiler_Classes_xTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_xarTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_xarararTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_yTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_yarTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Classes_yarararTests__Ljava_lang_Object_2.cpp ├── Java_com_test_TestCompiler_Compare_run__.cpp ├── Java_com_test_TestCompiler_Compare_testDoubleCompare__DDDD.cpp ├── Java_com_test_TestCompiler_Compare_testFloatCompare__FFFF.cpp ├── Java_com_test_TestCompiler_Compare_testIntCompare__IIII.cpp ├── Java_com_test_TestCompiler_Compare_testLongCompare__JJJJ.cpp ├── Java_com_test_TestCompiler_FillArrayData_newByteArray__.cpp ├── Java_com_test_TestCompiler_FillArrayData_newCharArray__.cpp ├── Java_com_test_TestCompiler_FillArrayData_newLongArray__.cpp ├── Java_com_test_TestCompiler_FillArrayData_run__.cpp ├── Java_com_test_TestCompiler_FloatMath_approxEqual__DDD.cpp ├── Java_com_test_TestCompiler_FloatMath_approxEqual__FFF.cpp ├── Java_com_test_TestCompiler_FloatMath_checkConsts__.cpp ├── Java_com_test_TestCompiler_FloatMath_checkConvD___3D.cpp ├── Java_com_test_TestCompiler_FloatMath_checkConvF___3F.cpp ├── Java_com_test_TestCompiler_FloatMath_checkConvI___3I.cpp ├── Java_com_test_TestCompiler_FloatMath_checkConvL___3J.cpp ├── Java_com_test_TestCompiler_FloatMath_convD__IJF.cpp ├── Java_com_test_TestCompiler_FloatMath_convF__IJD.cpp ├── Java_com_test_TestCompiler_FloatMath_convI__JFDF.cpp ├── Java_com_test_TestCompiler_FloatMath_convL__IFDD.cpp ├── Java_com_test_TestCompiler_FloatMath_convTest__.cpp ├── Java_com_test_TestCompiler_FloatMath_doubleOperCheck___3D.cpp ├── Java_com_test_TestCompiler_FloatMath_doubleOperTest__DD.cpp ├── Java_com_test_TestCompiler_FloatMath_floatOperCheck___3F.cpp ├── Java_com_test_TestCompiler_FloatMath_floatOperTest__FF.cpp ├── Java_com_test_TestCompiler_FloatMath_jlmTests__FD.cpp ├── Java_com_test_TestCompiler_FloatMath_run__.cpp ├── Java_com_test_TestCompiler_FloatMath_unopTest__F.cpp ├── Java_com_test_TestCompiler_GenSelect_run__.cpp ├── Java_com_test_TestCompiler_GenSelect_test__Z.cpp ├── Java_com_test_TestCompiler_Goto_filler__I.cpp ├── Java_com_test_TestCompiler_Goto_mediumGoto__Z.cpp ├── Java_com_test_TestCompiler_Goto_run__.cpp ├── Java_com_test_TestCompiler_Goto_smallGoto__Z.cpp ├── Java_com_test_TestCompiler_InstField_assignFields__.cpp ├── Java_com_test_TestCompiler_InstField_checkFields__.cpp ├── Java_com_test_TestCompiler_InstField_nullCheck__Lcom_test_TestCompiler_InstField_2.cpp ├── Java_com_test_TestCompiler_InstField_run__.cpp ├── Java_com_test_TestCompiler_IntMath_bigDivideOverflow__IJ.cpp ├── Java_com_test_TestCompiler_IntMath_charSubTest__.cpp ├── Java_com_test_TestCompiler_IntMath_checkConsts__BSIJ.cpp ├── Java_com_test_TestCompiler_IntMath_convTest__.cpp ├── Java_com_test_TestCompiler_IntMath_divLiteralTestBody__II.cpp ├── Java_com_test_TestCompiler_IntMath_divLiteralTest__.cpp ├── Java_com_test_TestCompiler_IntMath_divideByZero__I.cpp ├── Java_com_test_TestCompiler_IntMath_intOperCheck___3I.cpp ├── Java_com_test_TestCompiler_IntMath_intOperTest__II.cpp ├── Java_com_test_TestCompiler_IntMath_intShiftCheck___3I.cpp ├── Java_com_test_TestCompiler_IntMath_intShiftTest__II.cpp ├── Java_com_test_TestCompiler_IntMath_jlmTests__IJ.cpp ├── Java_com_test_TestCompiler_IntMath_lit16Check___3I.cpp ├── Java_com_test_TestCompiler_IntMath_lit16Test__I.cpp ├── Java_com_test_TestCompiler_IntMath_lit8Check___3I.cpp ├── Java_com_test_TestCompiler_IntMath_lit8Test__I.cpp ├── Java_com_test_TestCompiler_IntMath_longOperCheck___3J.cpp ├── Java_com_test_TestCompiler_IntMath_longOperTest__JJ.cpp ├── Java_com_test_TestCompiler_IntMath_longShiftCheck___3J.cpp ├── Java_com_test_TestCompiler_IntMath_longShiftTest__JI.cpp ├── Java_com_test_TestCompiler_IntMath_run__.cpp ├── Java_com_test_TestCompiler_IntMath_shiftTest1__.cpp ├── Java_com_test_TestCompiler_IntMath_shiftTest2__.cpp ├── Java_com_test_TestCompiler_IntMath_shiftTest3__I.cpp ├── Java_com_test_TestCompiler_IntMath_truncateCheck__Lcom_test_TestCompiler_IntMath_00024Shorty_2.cpp ├── Java_com_test_TestCompiler_IntMath_truncateTest__I.cpp ├── Java_com_test_TestCompiler_IntMath_unopCheck__I.cpp ├── Java_com_test_TestCompiler_IntMath_unopTest__I.cpp ├── Java_com_test_TestCompiler_IntMath_unsignedShiftTest__.cpp ├── Java_com_test_TestCompiler_InternedString_makeWeakString__.cpp ├── Java_com_test_TestCompiler_InternedString_run__.cpp ├── Java_com_test_TestCompiler_InternedString_testDeadInternedString__.cpp ├── Java_com_test_TestCompiler_InternedString_testImmortalInternedString__.cpp ├── Java_com_test_TestCompiler_LocalRef_DeleteLocalRef__.cpp ├── Java_com_test_TestCompiler_LocalRef_foo__I.cpp ├── Java_com_test_TestCompiler_LocalRef_run__.cpp ├── Java_com_test_TestCompiler_Main_assertTrue__Z.cpp ├── Java_com_test_TestCompiler_Main_main___3Ljava_lang_String_2.cpp ├── Java_com_test_TestCompiler_Main_run__.cpp ├── Java_com_test_TestCompiler_MethodCallBase_tryThing__.cpp ├── Java_com_test_TestCompiler_MethodCall_directly__.cpp ├── Java_com_test_TestCompiler_MethodCall_manyArgs__IJIJIJIIDFDSICIIBZIIJJIIIII_3_3Ljava_lang_String_2_3Ljava_lang_String_2Ljava_lang_String_2.cpp ├── Java_com_test_TestCompiler_MethodCall_run__.cpp ├── Java_com_test_TestCompiler_MethodCall_testInterface__.cpp ├── Java_com_test_TestCompiler_MethodCall_tryThing__.cpp ├── Java_com_test_TestCompiler_Monitor_run__.cpp ├── Java_com_test_TestCompiler_Monitor_subTest__.cpp ├── Java_com_test_TestCompiler_MoreClasses_subFunc__Z.cpp ├── Java_com_test_TestCompiler_MoreClasses_superFunc__Z.cpp ├── Java_com_test_TestCompiler_StaticField_assignFields__.cpp ├── Java_com_test_TestCompiler_StaticField_checkFields__.cpp ├── Java_com_test_TestCompiler_StaticField_run__.cpp ├── Java_com_test_TestCompiler_Switch_run__.cpp ├── Java_com_test_TestCompiler_Switch_testSwitch__.cpp ├── Java_com_test_TestCompiler_Throw_one__.cpp ├── Java_com_test_TestCompiler_Throw_rethrow__.cpp ├── Java_com_test_TestCompiler_Throw_run__.cpp ├── Java_com_test_TestCompiler_Throw_throwArithmeticException__.cpp ├── Java_com_test_TestCompiler_Throw_throwNullPointerException__.cpp ├── Java_com_test_TestCompiler_Throw_twoA__.cpp ├── Java_com_test_TestCompiler_Throw_twoN__.cpp ├── ScopedLocalRef.h ├── ScopedPthreadMutexLock.h ├── compiled_methods.txt ├── well_known_classes.cpp └── well_known_classes.h /.gitignore: -------------------------------------------------------------------------------- 1 | .externalNativeBuild 2 | import-summary.txt 3 | 4 | #java files 5 | *.class 6 | *.dex 7 | 8 | 9 | #for idea temp file 10 | *.iws 11 | *.ipr 12 | *.iml 13 | target/ 14 | .idea/ 15 | .gradle/ 16 | release/ 17 | build/ 18 | spoon/ 19 | releasebak/ 20 | 21 | #mac temp file 22 | */.idea/ 23 | */__MACOSX 24 | */.DS_Store 25 | 26 | 27 | #for eclipse 28 | .settings/ 29 | local.properties 30 | *gen/ 31 | *.classpath 32 | */bin/ 33 | 34 | 35 | #temp file 36 | *.bak 37 | 38 | *.pmd 39 | sh.exe.stackdump 40 | 41 | .vs/ 42 | .vscode/ 43 | 44 | *.log 45 | *.ctxt 46 | .mtj.tmp/ 47 | 48 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 49 | hs_err_pid* 50 | 51 | # Package Files # 52 | # *.jar 53 | *.war 54 | *.nar 55 | *.ear 56 | *.zip 57 | *.tar.gz 58 | *.rar 59 | *.cxx 60 | firelineReport/ 61 | fireline*.jar 62 | format.txt 63 | google-java-format-1.12.0-all-deps.jar 64 | google-java-format-*.jar 65 | spoon-runner-1.7.1-jar-with-dependencies.jar 66 | spoon-*.jar 67 | fireline_1.7.3.jar 68 | fireline*.jar 69 | firelineReport/ 70 | obj/ 71 | libs/ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dex2c 2 | 不记得那里找到的工程。 dex2c 3 | 4 | NDK-BUILD编译,可支持全平台。使用未分析 5 | -------------------------------------------------------------------------------- /jni/Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH:= $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE := nc 5 | LOCAL_LDLIBS := -llog 6 | 7 | SOURCES := $(wildcard $(LOCAL_PATH)/nc/*.cpp) 8 | LOCAL_C_INCLUDES := $(LOCAL_PATH)/nc 9 | 10 | LOCAL_SRC_FILES := $(SOURCES:$(LOCAL_PATH)/%=%) 11 | 12 | include $(BUILD_SHARED_LIBRARY) 13 | -------------------------------------------------------------------------------- /jni/Application.mk: -------------------------------------------------------------------------------- 1 | # https://developer.android.com/ndk/guides/application_mk 2 | APP_STL := c++_static 3 | APP_CPPFLAGS += -fvisibility=hidden 4 | APP_PLATFORM := android-19 5 | #APP_ABI := armeabi-v7a arm64-v8a 6 | #APP_ABI := armeabi-v7a 7 | APP_ABI := armeabi-v7a arm64-v8a x86 x86_64 8 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_MainActivity_onCreate__Landroid_os_Bundle_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/MainActivity;->onCreate(Landroid/os/Bundle;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_MainActivity_onCreate__Landroid_os_Bundle_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jint v2; 9 | jclass cls0 = NULL,cls1 = NULL; 10 | jmethodID mth0 = NULL, mth1 = NULL; 11 | v0 = (jobject)env->NewLocalRef(thiz); 12 | v1 = (jobject)env->NewLocalRef(p1); 13 | L0: 14 | LOGD("0:invoke-super \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x61\x6e\x64\x72\x6f\x69\x64\x2f\x61\x70\x70\x2f\x41\x63\x74\x69\x76\x69\x74\x79\x3b\x2d\x3e\x6f\x6e\x43\x72\x65\x61\x74\x65\x28\x4c\x61\x6e\x64\x72\x6f\x69\x64\x2f\x6f\x73\x2f\x42\x75\x6e\x64\x6c\x65\x3b\x29\x56"); 15 | { 16 | #define EX_HANDLE EX_UnwindBlock 17 | D2C_NOT_NULL(v0); 18 | jclass &clz = cls0; 19 | jmethodID &mid = mth0; 20 | D2C_RESOLVE_METHOD(clz, mid, "android/app/Activity", "onCreate", "(Landroid/os/Bundle;)V"); 21 | jvalue args[] = {{.l = v1}}; 22 | env->CallNonvirtualVoidMethodA(v0, clz, mid, args); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("6:invoke-direct \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x4d\x61\x69\x6e\x41\x63\x74\x69\x76\x69\x74\x79\x3b\x2d\x3e\x74\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x28\x29\x49"); 27 | { 28 | #define EX_HANDLE EX_UnwindBlock 29 | D2C_NOT_NULL(v0); 30 | jclass &clz = cls1; 31 | jmethodID &mid = mth1; 32 | D2C_RESOLVE_METHOD(clz, mid, "com/test/MainActivity", "testCompiler", "()I"); 33 | jvalue args[] = {}; 34 | v2 = (jint) env->CallIntMethodA(v0, mid, args); 35 | D2C_CHECK_PENDING_EX; 36 | #undef EX_HANDLE 37 | } 38 | return; 39 | EX_UnwindBlock: return; 40 | } 41 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_MainActivity_testCompiler__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/MainActivity;->testCompiler()I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_MainActivity_testCompiler__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL; 11 | jmethodID mth0 = NULL; 12 | v0 = (jobject)env->NewLocalRef(thiz); 13 | L0: 14 | if (v1) { 15 | LOGD("env->DeleteLocalRef(%p):v1", v1); 16 | env->DeleteLocalRef(v1); 17 | } 18 | v1 = 0; 19 | LOGD("2:filled-new-array \x76\x30\x2c\x20\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | jclass &clz = cls0; 23 | D2C_RESOLVE_CLASS(clz,"java/lang/String"); 24 | v2 = env->NewObjectArray((jint) 1, clz, NULL); 25 | d2c_filled_new_array(env, (jarray) v2, "Ljava/lang/String;", 1, v1); 26 | D2C_CHECK_PENDING_EX; 27 | #undef EX_HANDLE 28 | } 29 | LOGD("8:move-result-object \x76\x30"); 30 | if (v1) { 31 | LOGD("env->DeleteLocalRef(%p):v1", v1); 32 | env->DeleteLocalRef(v1); 33 | } 34 | v1 = (jobject) v2; 35 | LOGD("a:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x6d\x61\x69\x6e\x28\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 36 | { 37 | #define EX_HANDLE EX_UnwindBlock 38 | jclass &clz = cls1; 39 | jmethodID &mid = mth0; 40 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "main", "([Ljava/lang/String;)V"); 41 | jvalue args[] = {{.l = v1}}; 42 | env->CallStaticVoidMethodA(clz, mid, args); 43 | D2C_CHECK_PENDING_EX; 44 | #undef EX_HANDLE 45 | } 46 | v3 = 0; 47 | return (jint) v3; 48 | EX_UnwindBlock: return (jint)0; 49 | } 50 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkBooleans___3Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkBooleans([Z)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkBooleans___3Z(JNIEnv *env, jobject thiz, jarray p2){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jclass cls0 = NULL; 10 | jmethodID mth0 = NULL; 11 | v0 = (jobject)env->NewLocalRef(p2); 12 | L0: 13 | v1 = 0; 14 | LOGD("2:aget-boolean \x76\x30\x2c\x20\x76\x32\x2c\x20\x76\x30"); 15 | { 16 | #define EX_HANDLE EX_UnwindBlock 17 | D2C_NOT_NULL(v0); 18 | {jboolean val;env->GetBooleanArrayRegion((jbooleanArray) v0, (jint) v1, 1, &val);v1 = val;} 19 | D2C_CHECK_PENDING_EX; 20 | #undef EX_HANDLE 21 | } 22 | LOGD("6:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 23 | { 24 | #define EX_HANDLE EX_UnwindBlock 25 | jclass &clz = cls0; 26 | jmethodID &mid = mth0; 27 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 28 | jvalue args[] = {{.z = (jboolean) v1}}; 29 | env->CallStaticVoidMethodA(clz, mid, args); 30 | D2C_CHECK_PENDING_EX; 31 | #undef EX_HANDLE 32 | } 33 | v1 = 1; 34 | v1 = 1; 35 | v1 = 1; 36 | LOGD("e:aget-boolean \x76\x31\x2c\x20\x76\x32\x2c\x20\x76\x30"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v0); 40 | {jboolean val;env->GetBooleanArrayRegion((jbooleanArray) v0, (jint) v1, 1, &val);v2 = val;} 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | LOGD("12:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 45 | { 46 | #define EX_HANDLE EX_UnwindBlock 47 | jclass &clz = cls0; 48 | jmethodID &mid = mth0; 49 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 50 | jvalue args[] = {{.z = (jboolean) v2}}; 51 | env->CallStaticVoidMethodA(clz, mid, args); 52 | D2C_CHECK_PENDING_EX; 53 | #undef EX_HANDLE 54 | } 55 | v2 = 2; 56 | LOGD("1a:aget-boolean \x76\x31\x2c\x20\x76\x32\x2c\x20\x76\x31"); 57 | { 58 | #define EX_HANDLE EX_UnwindBlock 59 | D2C_NOT_NULL(v0); 60 | {jboolean val;env->GetBooleanArrayRegion((jbooleanArray) v0, (jint) v2, 1, &val);v2 = val;} 61 | D2C_CHECK_PENDING_EX; 62 | #undef EX_HANDLE 63 | } 64 | LOGD("1e:xor-int/2addr \x76\x31\x2c\x20\x76\x30"); 65 | v2 = (v2 ^ v1); 66 | LOGD("20:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 67 | { 68 | #define EX_HANDLE EX_UnwindBlock 69 | jclass &clz = cls0; 70 | jmethodID &mid = mth0; 71 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 72 | jvalue args[] = {{.z = (jboolean) v2}}; 73 | env->CallStaticVoidMethodA(clz, mid, args); 74 | D2C_CHECK_PENDING_EX; 75 | #undef EX_HANDLE 76 | } 77 | v2 = 3; 78 | LOGD("28:aget-boolean \x76\x31\x2c\x20\x76\x32\x2c\x20\x76\x31"); 79 | { 80 | #define EX_HANDLE EX_UnwindBlock 81 | D2C_NOT_NULL(v0); 82 | {jboolean val;env->GetBooleanArrayRegion((jbooleanArray) v0, (jint) v2, 1, &val);v2 = val;} 83 | D2C_CHECK_PENDING_EX; 84 | #undef EX_HANDLE 85 | } 86 | LOGD("2c:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 87 | { 88 | #define EX_HANDLE EX_UnwindBlock 89 | jclass &clz = cls0; 90 | jmethodID &mid = mth0; 91 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 92 | jvalue args[] = {{.z = (jboolean) v2}}; 93 | env->CallStaticVoidMethodA(clz, mid, args); 94 | D2C_CHECK_PENDING_EX; 95 | #undef EX_HANDLE 96 | } 97 | v2 = 4; 98 | LOGD("34:aget-boolean \x76\x31\x2c\x20\x76\x32\x2c\x20\x76\x31"); 99 | { 100 | #define EX_HANDLE EX_UnwindBlock 101 | D2C_NOT_NULL(v0); 102 | {jboolean val;env->GetBooleanArrayRegion((jbooleanArray) v0, (jint) v2, 1, &val);v2 = val;} 103 | D2C_CHECK_PENDING_EX; 104 | #undef EX_HANDLE 105 | } 106 | LOGD("38:xor-int/2addr \x76\x30\x2c\x20\x76\x31"); 107 | v1 = (v1 ^ v2); 108 | LOGD("3a:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 109 | { 110 | #define EX_HANDLE EX_UnwindBlock 111 | jclass &clz = cls0; 112 | jmethodID &mid = mth0; 113 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 114 | jvalue args[] = {{.z = (jboolean) v1}}; 115 | env->CallStaticVoidMethodA(clz, mid, args); 116 | D2C_CHECK_PENDING_EX; 117 | #undef EX_HANDLE 118 | } 119 | return; 120 | EX_UnwindBlock: return; 121 | } 122 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkBytes___3B.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkBytes([B)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkBytes___3B(JNIEnv *env, jobject thiz, jarray p4){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jclass cls0 = NULL; 12 | jmethodID mth0 = NULL; 13 | v0 = (jobject)env->NewLocalRef(p4); 14 | L0: 15 | v1 = 0; 16 | v1 = 0; 17 | LOGD("2:aget-byte \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x30"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | D2C_NOT_NULL(v0); 21 | {jbyte val;env->GetByteArrayRegion((jbyteArray) v0, (jint) v1, 1, &val);v2 = val;} 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | v3 = 1; 26 | LOGD("8:if-nez \x76\x31\x2c\x20\x2b\x34"); 27 | if(v2 != 0){ 28 | goto L2; 29 | } 30 | else { 31 | goto L1; 32 | } 33 | L1: 34 | v2 = 1; 35 | goto L3; 36 | L2: 37 | v2 = 0; 38 | L3: 39 | LOGD("12:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 40 | { 41 | #define EX_HANDLE EX_UnwindBlock 42 | jclass &clz = cls0; 43 | jmethodID &mid = mth0; 44 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 45 | jvalue args[] = {{.z = (jboolean) v2}}; 46 | env->CallStaticVoidMethodA(clz, mid, args); 47 | D2C_CHECK_PENDING_EX; 48 | #undef EX_HANDLE 49 | } 50 | LOGD("18:aget-byte \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x32"); 51 | { 52 | #define EX_HANDLE EX_UnwindBlock 53 | D2C_NOT_NULL(v0); 54 | {jbyte val;env->GetByteArrayRegion((jbyteArray) v0, (jint) v3, 1, &val);v2 = val;} 55 | D2C_CHECK_PENDING_EX; 56 | #undef EX_HANDLE 57 | } 58 | v4 = -1; 59 | LOGD("1e:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 60 | if(v2 != v4) { 61 | goto L5; 62 | } 63 | else { 64 | goto L4; 65 | } 66 | L4: 67 | v2 = 1; 68 | goto L6; 69 | L5: 70 | v2 = 0; 71 | L6: 72 | LOGD("28:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 73 | { 74 | #define EX_HANDLE EX_UnwindBlock 75 | jclass &clz = cls0; 76 | jmethodID &mid = mth0; 77 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 78 | jvalue args[] = {{.z = (jboolean) v2}}; 79 | env->CallStaticVoidMethodA(clz, mid, args); 80 | D2C_CHECK_PENDING_EX; 81 | #undef EX_HANDLE 82 | } 83 | v2 = 2; 84 | LOGD("30:aget-byte \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 85 | { 86 | #define EX_HANDLE EX_UnwindBlock 87 | D2C_NOT_NULL(v0); 88 | {jbyte val;env->GetByteArrayRegion((jbyteArray) v0, (jint) v2, 1, &val);v2 = val;} 89 | D2C_CHECK_PENDING_EX; 90 | #undef EX_HANDLE 91 | } 92 | v4 = -2; 93 | LOGD("36:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 94 | if(v2 != v4) { 95 | goto L8; 96 | } 97 | else { 98 | goto L7; 99 | } 100 | L7: 101 | v2 = 1; 102 | goto L9; 103 | L8: 104 | v2 = 0; 105 | L9: 106 | LOGD("40:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 107 | { 108 | #define EX_HANDLE EX_UnwindBlock 109 | jclass &clz = cls0; 110 | jmethodID &mid = mth0; 111 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 112 | jvalue args[] = {{.z = (jboolean) v2}}; 113 | env->CallStaticVoidMethodA(clz, mid, args); 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | v2 = 3; 118 | LOGD("48:aget-byte \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 119 | { 120 | #define EX_HANDLE EX_UnwindBlock 121 | D2C_NOT_NULL(v0); 122 | {jbyte val;env->GetByteArrayRegion((jbyteArray) v0, (jint) v2, 1, &val);v2 = val;} 123 | D2C_CHECK_PENDING_EX; 124 | #undef EX_HANDLE 125 | } 126 | v4 = -3; 127 | LOGD("4e:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 128 | if(v2 != v4) { 129 | goto L11; 130 | } 131 | else { 132 | goto L10; 133 | } 134 | L10: 135 | v2 = 1; 136 | goto L12; 137 | L11: 138 | v2 = 0; 139 | L12: 140 | LOGD("58:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 141 | { 142 | #define EX_HANDLE EX_UnwindBlock 143 | jclass &clz = cls0; 144 | jmethodID &mid = mth0; 145 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 146 | jvalue args[] = {{.z = (jboolean) v2}}; 147 | env->CallStaticVoidMethodA(clz, mid, args); 148 | D2C_CHECK_PENDING_EX; 149 | #undef EX_HANDLE 150 | } 151 | v2 = 4; 152 | LOGD("60:aget-byte \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 153 | { 154 | #define EX_HANDLE EX_UnwindBlock 155 | D2C_NOT_NULL(v0); 156 | {jbyte val;env->GetByteArrayRegion((jbyteArray) v0, (jint) v2, 1, &val);v2 = val;} 157 | D2C_CHECK_PENDING_EX; 158 | #undef EX_HANDLE 159 | } 160 | v4 = -4; 161 | LOGD("66:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 162 | if(v2 != v4) { 163 | goto L14; 164 | } 165 | else { 166 | goto L13; 167 | } 168 | L13: 169 | v1 = 1; 170 | L14: 171 | LOGD("6e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 172 | { 173 | #define EX_HANDLE EX_UnwindBlock 174 | jclass &clz = cls0; 175 | jmethodID &mid = mth0; 176 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 177 | jvalue args[] = {{.z = (jboolean) v1}}; 178 | env->CallStaticVoidMethodA(clz, mid, args); 179 | D2C_CHECK_PENDING_EX; 180 | #undef EX_HANDLE 181 | } 182 | return; 183 | EX_UnwindBlock: return; 184 | } 185 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkChars___3C.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkChars([C)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkChars___3C(JNIEnv *env, jobject thiz, jarray p4){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jclass cls0 = NULL; 12 | jmethodID mth0 = NULL; 13 | v0 = (jobject)env->NewLocalRef(p4); 14 | L0: 15 | v1 = 0; 16 | v1 = 0; 17 | LOGD("2:aget-char \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x30"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | D2C_NOT_NULL(v0); 21 | {jchar val;env->GetCharArrayRegion((jcharArray) v0, (jint) v1, 1, &val);v2 = val;} 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | v3 = 1; 26 | v4 = 40000; 27 | LOGD("e:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 28 | if(v2 != v4) { 29 | goto L2; 30 | } 31 | else { 32 | goto L1; 33 | } 34 | L1: 35 | v2 = 1; 36 | goto L3; 37 | L2: 38 | v2 = 0; 39 | L3: 40 | LOGD("18:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | jclass &clz = cls0; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 46 | jvalue args[] = {{.z = (jboolean) v2}}; 47 | env->CallStaticVoidMethodA(clz, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | LOGD("1e:aget-char \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x32"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | D2C_NOT_NULL(v0); 55 | {jchar val;env->GetCharArrayRegion((jcharArray) v0, (jint) v3, 1, &val);v2 = val;} 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | v4 = 40001; 60 | LOGD("28:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 61 | if(v2 != v4) { 62 | goto L5; 63 | } 64 | else { 65 | goto L4; 66 | } 67 | L4: 68 | v2 = 1; 69 | goto L6; 70 | L5: 71 | v2 = 0; 72 | L6: 73 | LOGD("32:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 74 | { 75 | #define EX_HANDLE EX_UnwindBlock 76 | jclass &clz = cls0; 77 | jmethodID &mid = mth0; 78 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 79 | jvalue args[] = {{.z = (jboolean) v2}}; 80 | env->CallStaticVoidMethodA(clz, mid, args); 81 | D2C_CHECK_PENDING_EX; 82 | #undef EX_HANDLE 83 | } 84 | v2 = 2; 85 | LOGD("3a:aget-char \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 86 | { 87 | #define EX_HANDLE EX_UnwindBlock 88 | D2C_NOT_NULL(v0); 89 | {jchar val;env->GetCharArrayRegion((jcharArray) v0, (jint) v2, 1, &val);v2 = val;} 90 | D2C_CHECK_PENDING_EX; 91 | #undef EX_HANDLE 92 | } 93 | v4 = 40002; 94 | LOGD("44:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 95 | if(v2 != v4) { 96 | goto L8; 97 | } 98 | else { 99 | goto L7; 100 | } 101 | L7: 102 | v2 = 1; 103 | goto L9; 104 | L8: 105 | v2 = 0; 106 | L9: 107 | LOGD("4e:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 108 | { 109 | #define EX_HANDLE EX_UnwindBlock 110 | jclass &clz = cls0; 111 | jmethodID &mid = mth0; 112 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 113 | jvalue args[] = {{.z = (jboolean) v2}}; 114 | env->CallStaticVoidMethodA(clz, mid, args); 115 | D2C_CHECK_PENDING_EX; 116 | #undef EX_HANDLE 117 | } 118 | v2 = 3; 119 | LOGD("56:aget-char \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 120 | { 121 | #define EX_HANDLE EX_UnwindBlock 122 | D2C_NOT_NULL(v0); 123 | {jchar val;env->GetCharArrayRegion((jcharArray) v0, (jint) v2, 1, &val);v2 = val;} 124 | D2C_CHECK_PENDING_EX; 125 | #undef EX_HANDLE 126 | } 127 | v4 = 40003; 128 | LOGD("60:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 129 | if(v2 != v4) { 130 | goto L11; 131 | } 132 | else { 133 | goto L10; 134 | } 135 | L10: 136 | v2 = 1; 137 | goto L12; 138 | L11: 139 | v2 = 0; 140 | L12: 141 | LOGD("6a:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 142 | { 143 | #define EX_HANDLE EX_UnwindBlock 144 | jclass &clz = cls0; 145 | jmethodID &mid = mth0; 146 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 147 | jvalue args[] = {{.z = (jboolean) v2}}; 148 | env->CallStaticVoidMethodA(clz, mid, args); 149 | D2C_CHECK_PENDING_EX; 150 | #undef EX_HANDLE 151 | } 152 | v2 = 4; 153 | LOGD("72:aget-char \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 154 | { 155 | #define EX_HANDLE EX_UnwindBlock 156 | D2C_NOT_NULL(v0); 157 | {jchar val;env->GetCharArrayRegion((jcharArray) v0, (jint) v2, 1, &val);v2 = val;} 158 | D2C_CHECK_PENDING_EX; 159 | #undef EX_HANDLE 160 | } 161 | v4 = 40004; 162 | LOGD("7c:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 163 | if(v2 != v4) { 164 | goto L14; 165 | } 166 | else { 167 | goto L13; 168 | } 169 | L13: 170 | v1 = 1; 171 | L14: 172 | LOGD("84:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 173 | { 174 | #define EX_HANDLE EX_UnwindBlock 175 | jclass &clz = cls0; 176 | jmethodID &mid = mth0; 177 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 178 | jvalue args[] = {{.z = (jboolean) v1}}; 179 | env->CallStaticVoidMethodA(clz, mid, args); 180 | D2C_CHECK_PENDING_EX; 181 | #undef EX_HANDLE 182 | } 183 | return; 184 | EX_UnwindBlock: return; 185 | } 186 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkInts___3I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkInts([I)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkInts___3I(JNIEnv *env, jobject thiz, jarray p4){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jclass cls0 = NULL; 12 | jmethodID mth0 = NULL; 13 | v0 = (jobject)env->NewLocalRef(p4); 14 | L0: 15 | v1 = 0; 16 | v1 = 0; 17 | LOGD("2:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x30"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | D2C_NOT_NULL(v0); 21 | {jint val;env->GetIntArrayRegion((jintArray) v0, (jint) v1, 1, &val);v2 = val;} 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | v3 = 1; 26 | v4 = 70000; 27 | LOGD("e:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 28 | if(v2 != v4) { 29 | goto L2; 30 | } 31 | else { 32 | goto L1; 33 | } 34 | L1: 35 | v2 = 1; 36 | goto L3; 37 | L2: 38 | v2 = 0; 39 | L3: 40 | LOGD("18:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | jclass &clz = cls0; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 46 | jvalue args[] = {{.z = (jboolean) v2}}; 47 | env->CallStaticVoidMethodA(clz, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | LOGD("1e:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x32"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | D2C_NOT_NULL(v0); 55 | {jint val;env->GetIntArrayRegion((jintArray) v0, (jint) v3, 1, &val);v2 = val;} 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | v4 = 70001; 60 | LOGD("28:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 61 | if(v2 != v4) { 62 | goto L5; 63 | } 64 | else { 65 | goto L4; 66 | } 67 | L4: 68 | v2 = 1; 69 | goto L6; 70 | L5: 71 | v2 = 0; 72 | L6: 73 | LOGD("32:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 74 | { 75 | #define EX_HANDLE EX_UnwindBlock 76 | jclass &clz = cls0; 77 | jmethodID &mid = mth0; 78 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 79 | jvalue args[] = {{.z = (jboolean) v2}}; 80 | env->CallStaticVoidMethodA(clz, mid, args); 81 | D2C_CHECK_PENDING_EX; 82 | #undef EX_HANDLE 83 | } 84 | v2 = 2; 85 | LOGD("3a:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 86 | { 87 | #define EX_HANDLE EX_UnwindBlock 88 | D2C_NOT_NULL(v0); 89 | {jint val;env->GetIntArrayRegion((jintArray) v0, (jint) v2, 1, &val);v2 = val;} 90 | D2C_CHECK_PENDING_EX; 91 | #undef EX_HANDLE 92 | } 93 | v4 = 70002; 94 | LOGD("44:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 95 | if(v2 != v4) { 96 | goto L8; 97 | } 98 | else { 99 | goto L7; 100 | } 101 | L7: 102 | v2 = 1; 103 | goto L9; 104 | L8: 105 | v2 = 0; 106 | L9: 107 | LOGD("4e:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 108 | { 109 | #define EX_HANDLE EX_UnwindBlock 110 | jclass &clz = cls0; 111 | jmethodID &mid = mth0; 112 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 113 | jvalue args[] = {{.z = (jboolean) v2}}; 114 | env->CallStaticVoidMethodA(clz, mid, args); 115 | D2C_CHECK_PENDING_EX; 116 | #undef EX_HANDLE 117 | } 118 | v2 = 3; 119 | LOGD("56:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 120 | { 121 | #define EX_HANDLE EX_UnwindBlock 122 | D2C_NOT_NULL(v0); 123 | {jint val;env->GetIntArrayRegion((jintArray) v0, (jint) v2, 1, &val);v2 = val;} 124 | D2C_CHECK_PENDING_EX; 125 | #undef EX_HANDLE 126 | } 127 | v4 = 70003; 128 | LOGD("60:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 129 | if(v2 != v4) { 130 | goto L11; 131 | } 132 | else { 133 | goto L10; 134 | } 135 | L10: 136 | v2 = 1; 137 | goto L12; 138 | L11: 139 | v2 = 0; 140 | L12: 141 | LOGD("6a:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 142 | { 143 | #define EX_HANDLE EX_UnwindBlock 144 | jclass &clz = cls0; 145 | jmethodID &mid = mth0; 146 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 147 | jvalue args[] = {{.z = (jboolean) v2}}; 148 | env->CallStaticVoidMethodA(clz, mid, args); 149 | D2C_CHECK_PENDING_EX; 150 | #undef EX_HANDLE 151 | } 152 | v2 = 4; 153 | LOGD("72:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 154 | { 155 | #define EX_HANDLE EX_UnwindBlock 156 | D2C_NOT_NULL(v0); 157 | {jint val;env->GetIntArrayRegion((jintArray) v0, (jint) v2, 1, &val);v2 = val;} 158 | D2C_CHECK_PENDING_EX; 159 | #undef EX_HANDLE 160 | } 161 | v4 = 70004; 162 | LOGD("7c:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 163 | if(v2 != v4) { 164 | goto L14; 165 | } 166 | else { 167 | goto L13; 168 | } 169 | L13: 170 | v1 = 1; 171 | L14: 172 | LOGD("84:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 173 | { 174 | #define EX_HANDLE EX_UnwindBlock 175 | jclass &clz = cls0; 176 | jmethodID &mid = mth0; 177 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 178 | jvalue args[] = {{.z = (jboolean) v1}}; 179 | env->CallStaticVoidMethodA(clz, mid, args); 180 | D2C_CHECK_PENDING_EX; 181 | #undef EX_HANDLE 182 | } 183 | return; 184 | EX_UnwindBlock: return; 185 | } 186 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkNegAlloc__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkNegAlloc(I)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkNegAlloc__I(JNIEnv *env, jobject thiz, jint p2){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jthrowable exception; 11 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL,cls4 = NULL; 12 | jfieldID fld0 = NULL; 13 | jmethodID mth0 = NULL, mth1 = NULL; 14 | v0 = (jint)p2; 15 | L0: 16 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 17 | { 18 | #define EX_HANDLE EX_UnwindBlock 19 | if (v1) { 20 | LOGD("env->DeleteLocalRef(%p):v1", v1); 21 | env->DeleteLocalRef(v1); 22 | } 23 | jclass &clz = cls0; 24 | jfieldID &fld = fld0; 25 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 26 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 27 | D2C_CHECK_PENDING_EX; 28 | #undef EX_HANDLE 29 | } 30 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x41\x72\x72\x61\x79\x2e\x63\x68\x65\x63\x6b\x4e\x65\x67\x41\x6c\x6c\x6f\x63\x27"); 31 | if (v2) { 32 | LOGD("env->DeleteLocalRef(%p):v2", v2); 33 | env->DeleteLocalRef(v2); 34 | } 35 | v2 = (jstring) env->NewStringUTF("\x41\x72\x72\x61\x79\x2e\x63\x68\x65\x63\x6b\x4e\x65\x67\x41\x6c\x6c\x6f\x63"); 36 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v1); 40 | jclass &clz = cls1; 41 | jmethodID &mid = mth0; 42 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 43 | jvalue args[] = {{.l = v2}}; 44 | env->CallVoidMethodA(v1, mid, args); 45 | D2C_CHECK_PENDING_EX; 46 | #undef EX_HANDLE 47 | } 48 | v3 = 0; 49 | v3 = 0; 50 | L1: 51 | LOGD("10:new-array \x76\x31\x2c\x20\x76\x32\x2c\x20\x5b\x49"); 52 | { 53 | #define EX_HANDLE EX_LandingPad_1 54 | if (v0 < 0) { 55 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 56 | goto EX_HANDLE; 57 | } 58 | if (v2) { 59 | LOGD("env->DeleteLocalRef(%p):v2", v2); 60 | env->DeleteLocalRef(v2); 61 | } 62 | v2 = (jarray) env->NewIntArray((jint) v0); 63 | D2C_CHECK_PENDING_EX; 64 | #undef EX_HANDLE 65 | } 66 | L2: 67 | LOGD("14:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 68 | { 69 | #define EX_HANDLE EX_LandingPad_1 70 | jclass &clz = cls3; 71 | jmethodID &mid = mth1; 72 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 73 | jvalue args[] = {{.z = (jboolean) v3}}; 74 | env->CallStaticVoidMethodA(clz, mid, args); 75 | D2C_CHECK_PENDING_EX; 76 | #undef EX_HANDLE 77 | } 78 | L3: 79 | goto L5; 80 | L4: 81 | LOGD("1c:move-exception \x76\x31"); 82 | if (v2) { 83 | LOGD("env->DeleteLocalRef(%p):v2", v2); 84 | env->DeleteLocalRef(v2); 85 | } 86 | v2 = exception; 87 | L5: 88 | LOGD("1e:new-array \x76\x31\x2c\x20\x76\x32\x2c\x20\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 89 | { 90 | #define EX_HANDLE EX_LandingPad_5 91 | if (v0 < 0) { 92 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 93 | goto EX_HANDLE; 94 | } 95 | if (v2) { 96 | LOGD("env->DeleteLocalRef(%p):v2", v2); 97 | env->DeleteLocalRef(v2); 98 | } 99 | jclass &clz = cls4; 100 | D2C_RESOLVE_CLASS(clz,"java/lang/String"); 101 | v2 = env->NewObjectArray((jint) v0, clz, NULL); 102 | D2C_CHECK_PENDING_EX; 103 | #undef EX_HANDLE 104 | } 105 | L6: 106 | LOGD("22:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 107 | { 108 | #define EX_HANDLE EX_LandingPad_5 109 | jclass &clz = cls3; 110 | jmethodID &mid = mth1; 111 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 112 | jvalue args[] = {{.z = (jboolean) v3}}; 113 | env->CallStaticVoidMethodA(clz, mid, args); 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | L7: 118 | goto L9; 119 | L8: 120 | LOGD("2a:move-exception \x76\x30"); 121 | if (v1) { 122 | LOGD("env->DeleteLocalRef(%p):v1", v1); 123 | env->DeleteLocalRef(v1); 124 | } 125 | v1 = exception; 126 | L9: 127 | return; 128 | 129 | EX_LandingPad_1: 130 | D2C_GET_PENDING_EX 131 | if(d2c_is_instance_of(env, exception, "java/lang/NegativeArraySizeException")) { 132 | goto L4; 133 | } 134 | D2C_GOTO_UNWINDBLOCK 135 | 136 | EX_LandingPad_5: 137 | D2C_GET_PENDING_EX 138 | if(d2c_is_instance_of(env, exception, "java/lang/NegativeArraySizeException")) { 139 | goto L8; 140 | } 141 | D2C_GOTO_UNWINDBLOCK 142 | EX_UnwindBlock: return; 143 | } 144 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Array_checkShorts___3S.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Array;->checkShorts([S)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Array_checkShorts___3S(JNIEnv *env, jobject thiz, jarray p4){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jclass cls0 = NULL; 12 | jmethodID mth0 = NULL; 13 | v0 = (jobject)env->NewLocalRef(p4); 14 | L0: 15 | v1 = 0; 16 | v1 = 0; 17 | LOGD("2:aget-short \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x30"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | D2C_NOT_NULL(v0); 21 | {jshort val;env->GetShortArrayRegion((jshortArray) v0, (jint) v1, 1, &val);v2 = val;} 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | v3 = 1; 26 | v4 = 20; 27 | LOGD("c:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 28 | if(v2 != v4) { 29 | goto L2; 30 | } 31 | else { 32 | goto L1; 33 | } 34 | L1: 35 | v2 = 1; 36 | goto L3; 37 | L2: 38 | v2 = 0; 39 | L3: 40 | LOGD("16:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | jclass &clz = cls0; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 46 | jvalue args[] = {{.z = (jboolean) v2}}; 47 | env->CallStaticVoidMethodA(clz, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | LOGD("1c:aget-short \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x32"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | D2C_NOT_NULL(v0); 55 | {jshort val;env->GetShortArrayRegion((jshortArray) v0, (jint) v3, 1, &val);v2 = val;} 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | v4 = 10; 60 | LOGD("24:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 61 | if(v2 != v4) { 62 | goto L5; 63 | } 64 | else { 65 | goto L4; 66 | } 67 | L4: 68 | v2 = 1; 69 | goto L6; 70 | L5: 71 | v2 = 0; 72 | L6: 73 | LOGD("2e:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 74 | { 75 | #define EX_HANDLE EX_UnwindBlock 76 | jclass &clz = cls0; 77 | jmethodID &mid = mth0; 78 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 79 | jvalue args[] = {{.z = (jboolean) v2}}; 80 | env->CallStaticVoidMethodA(clz, mid, args); 81 | D2C_CHECK_PENDING_EX; 82 | #undef EX_HANDLE 83 | } 84 | v2 = 2; 85 | LOGD("36:aget-short \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 86 | { 87 | #define EX_HANDLE EX_UnwindBlock 88 | D2C_NOT_NULL(v0); 89 | {jshort val;env->GetShortArrayRegion((jshortArray) v0, (jint) v2, 1, &val);v2 = val;} 90 | D2C_CHECK_PENDING_EX; 91 | #undef EX_HANDLE 92 | } 93 | LOGD("3a:if-nez \x76\x31\x2c\x20\x2b\x34"); 94 | if(v2 != 0){ 95 | goto L8; 96 | } 97 | else { 98 | goto L7; 99 | } 100 | L7: 101 | v2 = 1; 102 | goto L9; 103 | L8: 104 | v2 = 0; 105 | L9: 106 | LOGD("44:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 107 | { 108 | #define EX_HANDLE EX_UnwindBlock 109 | jclass &clz = cls0; 110 | jmethodID &mid = mth0; 111 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 112 | jvalue args[] = {{.z = (jboolean) v2}}; 113 | env->CallStaticVoidMethodA(clz, mid, args); 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | v2 = 3; 118 | LOGD("4c:aget-short \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 119 | { 120 | #define EX_HANDLE EX_UnwindBlock 121 | D2C_NOT_NULL(v0); 122 | {jshort val;env->GetShortArrayRegion((jshortArray) v0, (jint) v2, 1, &val);v2 = val;} 123 | D2C_CHECK_PENDING_EX; 124 | #undef EX_HANDLE 125 | } 126 | v4 = -10; 127 | LOGD("54:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 128 | if(v2 != v4) { 129 | goto L11; 130 | } 131 | else { 132 | goto L10; 133 | } 134 | L10: 135 | v2 = 1; 136 | goto L12; 137 | L11: 138 | v2 = 0; 139 | L12: 140 | LOGD("5e:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 141 | { 142 | #define EX_HANDLE EX_UnwindBlock 143 | jclass &clz = cls0; 144 | jmethodID &mid = mth0; 145 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 146 | jvalue args[] = {{.z = (jboolean) v2}}; 147 | env->CallStaticVoidMethodA(clz, mid, args); 148 | D2C_CHECK_PENDING_EX; 149 | #undef EX_HANDLE 150 | } 151 | v2 = 4; 152 | LOGD("66:aget-short \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 153 | { 154 | #define EX_HANDLE EX_UnwindBlock 155 | D2C_NOT_NULL(v0); 156 | {jshort val;env->GetShortArrayRegion((jshortArray) v0, (jint) v2, 1, &val);v2 = val;} 157 | D2C_CHECK_PENDING_EX; 158 | #undef EX_HANDLE 159 | } 160 | v4 = -20; 161 | LOGD("6e:if-ne \x76\x31\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 162 | if(v2 != v4) { 163 | goto L14; 164 | } 165 | else { 166 | goto L13; 167 | } 168 | L13: 169 | v1 = 1; 170 | L14: 171 | LOGD("76:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 172 | { 173 | #define EX_HANDLE EX_UnwindBlock 174 | jclass &clz = cls0; 175 | jmethodID &mid = mth0; 176 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 177 | jvalue args[] = {{.z = (jboolean) v1}}; 178 | env->CallStaticVoidMethodA(clz, mid, args); 179 | D2C_CHECK_PENDING_EX; 180 | #undef EX_HANDLE 181 | } 182 | return; 183 | EX_UnwindBlock: return; 184 | } 185 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_iarTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->iarTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_iarTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"java/lang/Object"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"[Ljava/lang/Object;"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:if-nez \x76\x30\x2c\x20\x2b\x34"); 42 | if(v1 != 0){ 43 | goto L2; 44 | } 45 | else { 46 | goto L1; 47 | } 48 | L1: 49 | v1 = 1; 50 | goto L3; 51 | L2: 52 | v1 = 0; 53 | L3: 54 | LOGD("18:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 55 | { 56 | #define EX_HANDLE EX_UnwindBlock 57 | jclass &clz = cls1; 58 | jmethodID &mid = mth0; 59 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 60 | jvalue args[] = {{.z = (jboolean) v1}}; 61 | env->CallStaticVoidMethodA(clz, mid, args); 62 | D2C_CHECK_PENDING_EX; 63 | #undef EX_HANDLE 64 | } 65 | return; 66 | EX_UnwindBlock: return; 67 | } 68 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_iararTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->iararTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_iararTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"java/lang/Object"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"[Ljava/lang/Object;"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 47 | jvalue args[] = {{.z = (jboolean) v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | LOGD("14:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x5b\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | jclass &clz = cls3; 56 | D2C_RESOLVE_CLASS(clz,"[[Ljava/lang/Object;"); 57 | v1 = d2c_is_instance_of(env, v0, clz); 58 | D2C_CHECK_PENDING_EX; 59 | #undef EX_HANDLE 60 | } 61 | LOGD("18:if-nez \x76\x30\x2c\x20\x2b\x34"); 62 | if(v1 != 0){ 63 | goto L2; 64 | } 65 | else { 66 | goto L1; 67 | } 68 | L1: 69 | v1 = 1; 70 | goto L3; 71 | L2: 72 | v1 = 0; 73 | L3: 74 | LOGD("22:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 75 | { 76 | #define EX_HANDLE EX_UnwindBlock 77 | jclass &clz = cls1; 78 | jmethodID &mid = mth0; 79 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 80 | jvalue args[] = {{.z = (jboolean) v1}}; 81 | env->CallStaticVoidMethodA(clz, mid, args); 82 | D2C_CHECK_PENDING_EX; 83 | #undef EX_HANDLE 84 | } 85 | return; 86 | EX_UnwindBlock: return; 87 | } 88 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_run__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL; 11 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL, mth4 = NULL, mth5 = NULL; 12 | L0: 13 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | if (v0) { 17 | LOGD("env->DeleteLocalRef(%p):v0", v0); 18 | env->DeleteLocalRef(v0); 19 | } 20 | jclass &clz = cls0; 21 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/Classes"); 22 | v0 = (jobject) env->AllocObject(clz); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("4:invoke-direct \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 27 | { 28 | #define EX_HANDLE EX_UnwindBlock 29 | D2C_NOT_NULL(v0); 30 | jclass &clz = cls0; 31 | jmethodID &mid = mth0; 32 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Classes", "", "()V"); 33 | jvalue args[] = {}; 34 | env->CallVoidMethodA(v0, mid, args); 35 | D2C_CHECK_PENDING_EX; 36 | #undef EX_HANDLE 37 | } 38 | LOGD("a:new-instance \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b"); 39 | { 40 | #define EX_HANDLE EX_UnwindBlock 41 | if (v1) { 42 | LOGD("env->DeleteLocalRef(%p):v1", v1); 43 | env->DeleteLocalRef(v1); 44 | } 45 | jclass &clz = cls1; 46 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/MoreClasses"); 47 | v1 = (jobject) env->AllocObject(clz); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | LOGD("e:invoke-direct \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | D2C_NOT_NULL(v1); 55 | jclass &clz = cls1; 56 | jmethodID &mid = mth1; 57 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/MoreClasses", "", "()V"); 58 | jvalue args[] = {}; 59 | env->CallVoidMethodA(v1, mid, args); 60 | D2C_CHECK_PENDING_EX; 61 | #undef EX_HANDLE 62 | } 63 | if (v2) { 64 | LOGD("env->DeleteLocalRef(%p):v2", v2); 65 | env->DeleteLocalRef(v2); 66 | } 67 | v2 = 0; 68 | LOGD("16:invoke-virtual \x76\x30\x2c\x20\x76\x30\x2c\x20\x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x63\x68\x65\x63\x6b\x43\x61\x73\x74\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x56"); 69 | { 70 | #define EX_HANDLE EX_UnwindBlock 71 | D2C_NOT_NULL(v0); 72 | jclass &clz = cls0; 73 | jmethodID &mid = mth2; 74 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Classes", "checkCast", "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V"); 75 | jvalue args[] = {{.l = v0},{.l = v1},{.l = v2}}; 76 | env->CallVoidMethodA(v0, mid, args); 77 | D2C_CHECK_PENDING_EX; 78 | #undef EX_HANDLE 79 | } 80 | v3 = 1; 81 | LOGD("1e:invoke-virtual \x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x73\x75\x62\x46\x75\x6e\x63\x28\x5a\x29\x56"); 82 | { 83 | #define EX_HANDLE EX_UnwindBlock 84 | D2C_NOT_NULL(v1); 85 | jclass &clz = cls1; 86 | jmethodID &mid = mth3; 87 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/MoreClasses", "subFunc", "(Z)V"); 88 | jvalue args[] = {{.z = (jboolean) v3}}; 89 | env->CallVoidMethodA(v1, mid, args); 90 | D2C_CHECK_PENDING_EX; 91 | #undef EX_HANDLE 92 | } 93 | v3 = 0; 94 | LOGD("26:invoke-virtual \x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x73\x75\x70\x65\x72\x46\x75\x6e\x63\x28\x5a\x29\x56"); 95 | { 96 | #define EX_HANDLE EX_UnwindBlock 97 | D2C_NOT_NULL(v1); 98 | jclass &clz = cls1; 99 | jmethodID &mid = mth4; 100 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/MoreClasses", "superFunc", "(Z)V"); 101 | jvalue args[] = {{.z = (jboolean) v3}}; 102 | env->CallVoidMethodA(v1, mid, args); 103 | D2C_CHECK_PENDING_EX; 104 | #undef EX_HANDLE 105 | } 106 | LOGD("2c:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x61\x72\x72\x61\x79\x49\x6e\x73\x74\x61\x6e\x63\x65\x28\x29\x56"); 107 | { 108 | #define EX_HANDLE EX_UnwindBlock 109 | jclass &clz = cls0; 110 | jmethodID &mid = mth5; 111 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Classes", "arrayInstance", "()V"); 112 | jvalue args[] = {}; 113 | env->CallStaticVoidMethodA(clz, mid, args); 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | return; 118 | EX_UnwindBlock: return; 119 | } 120 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_subFunc__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->subFunc(Z)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_subFunc__Z(JNIEnv *env, jobject thiz, jboolean p2){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jclass cls0 = NULL; 10 | jmethodID mth0 = NULL; 11 | v0 = (jobject)env->NewLocalRef(thiz); 12 | v1 = (jint)p2; 13 | L0: 14 | LOGD("2:xor-int/lit8 \x76\x30\x2c\x20\x76\x32\x2c\x20\x31"); 15 | v2 = (v1 ^ 1); 16 | LOGD("8:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 17 | { 18 | #define EX_HANDLE EX_UnwindBlock 19 | jclass &clz = cls0; 20 | jmethodID &mid = mth0; 21 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 22 | jvalue args[] = {{.z = (jboolean) v2}}; 23 | env->CallStaticVoidMethodA(clz, mid, args); 24 | D2C_CHECK_PENDING_EX; 25 | #undef EX_HANDLE 26 | } 27 | return; 28 | EX_UnwindBlock: return; 29 | } 30 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_xTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->xTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_xTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/Classes"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/MoreClasses"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:if-nez \x76\x30\x2c\x20\x2b\x34"); 42 | if(v1 != 0){ 43 | goto L2; 44 | } 45 | else { 46 | goto L1; 47 | } 48 | L1: 49 | v1 = 1; 50 | goto L3; 51 | L2: 52 | v1 = 0; 53 | L3: 54 | LOGD("18:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 55 | { 56 | #define EX_HANDLE EX_UnwindBlock 57 | jclass &clz = cls1; 58 | jmethodID &mid = mth0; 59 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 60 | jvalue args[] = {{.z = (jboolean) v1}}; 61 | env->CallStaticVoidMethodA(clz, mid, args); 62 | D2C_CHECK_PENDING_EX; 63 | #undef EX_HANDLE 64 | } 65 | return; 66 | EX_UnwindBlock: return; 67 | } 68 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_yTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->yTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_yTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/Classes"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/MoreClasses"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 47 | jvalue args[] = {{.z = (jboolean) v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | return; 53 | EX_UnwindBlock: return; 54 | } 55 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_yarTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->yarTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_yarTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"[Lcom/test/TestCompiler/Classes;"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"[Lcom/test/TestCompiler/MoreClasses;"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 47 | jvalue args[] = {{.z = (jboolean) v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | return; 53 | EX_UnwindBlock: return; 54 | } 55 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Classes_yarararTests__Ljava_lang_Object_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Classes;->yarararTests(Ljava/lang/Object;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Classes_yarararTests__Ljava_lang_Object_2(JNIEnv *env, jobject thiz, jobject p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(p1); 11 | L0: 12 | LOGD("0:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x5b\x5b\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | jclass &clz = cls0; 16 | D2C_RESOLVE_CLASS(clz,"[[[Lcom/test/TestCompiler/Classes;"); 17 | v1 = d2c_is_instance_of(env, v0, clz); 18 | D2C_CHECK_PENDING_EX; 19 | #undef EX_HANDLE 20 | } 21 | LOGD("4:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | jclass &clz = cls1; 25 | jmethodID &mid = mth0; 26 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 27 | jvalue args[] = {{.z = (jboolean) v1}}; 28 | env->CallStaticVoidMethodA(clz, mid, args); 29 | D2C_CHECK_PENDING_EX; 30 | #undef EX_HANDLE 31 | } 32 | LOGD("a:instance-of \x76\x30\x2c\x20\x76\x31\x2c\x20\x5b\x5b\x5b\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x6f\x72\x65\x43\x6c\x61\x73\x73\x65\x73\x3b"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | jclass &clz = cls2; 36 | D2C_RESOLVE_CLASS(clz,"[[[Lcom/test/TestCompiler/MoreClasses;"); 37 | v1 = d2c_is_instance_of(env, v0, clz); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 47 | jvalue args[] = {{.z = (jboolean) v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | return; 53 | EX_UnwindBlock: return; 54 | } 55 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Compare_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Compare;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Compare_run__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jint v1; 8 | jint v2; 9 | jlong v3; 10 | jlong v4; 11 | jlong v5; 12 | jlong v6; 13 | jfloat v7; 14 | jfloat v8; 15 | jfloat v9; 16 | jdouble v10; 17 | jdouble v11; 18 | jdouble v12; 19 | jdouble v13; 20 | jclass cls0 = NULL; 21 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL; 22 | L0: 23 | v0 = 4; 24 | v1 = -5; 25 | v2 = 0; 26 | LOGD("6:invoke-static \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x30\x2c\x20\x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6f\x6d\x70\x61\x72\x65\x3b\x2d\x3e\x74\x65\x73\x74\x49\x6e\x74\x43\x6f\x6d\x70\x61\x72\x65\x28\x49\x20\x49\x20\x49\x20\x49\x29\x56"); 27 | { 28 | #define EX_HANDLE EX_UnwindBlock 29 | jclass &clz = cls0; 30 | jmethodID &mid = mth0; 31 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Compare", "testIntCompare", "(IIII)V"); 32 | jvalue args[] = {{.i = v1},{.i = v0},{.i = v0},{.i = v2}}; 33 | env->CallStaticVoidMethodA(clz, mid, args); 34 | D2C_CHECK_PENDING_EX; 35 | #undef EX_HANDLE 36 | } 37 | v3 = -5; 38 | v4 = -4294967287; 39 | v5 = 4; 40 | v6 = 8; 41 | LOGD("22:invoke-static/range \x76\x33\x20\x2e\x2e\x2e\x20\x76\x31\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6f\x6d\x70\x61\x72\x65\x3b\x2d\x3e\x74\x65\x73\x74\x4c\x6f\x6e\x67\x43\x6f\x6d\x70\x61\x72\x65\x28\x4a\x20\x4a\x20\x4a\x20\x4a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls0; 45 | jmethodID &mid = mth1; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Compare", "testLongCompare", "(JJJJ)V"); 47 | jvalue args[] = {{.j = (jlong) v3},{.j = (jlong) v4},{.j = (jlong) v5},{.j = (jlong) v6}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | v7 = d2c_bitcast_to_float(1082130432); 53 | v8 = d2c_bitcast_to_float(-1063256064); 54 | v9 = d2c_bitcast_to_float(2143289344); 55 | LOGD("34:invoke-static \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x30\x2c\x20\x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6f\x6d\x70\x61\x72\x65\x3b\x2d\x3e\x74\x65\x73\x74\x46\x6c\x6f\x61\x74\x43\x6f\x6d\x70\x61\x72\x65\x28\x46\x20\x46\x20\x46\x20\x46\x29\x56"); 56 | { 57 | #define EX_HANDLE EX_UnwindBlock 58 | jclass &clz = cls0; 59 | jmethodID &mid = mth2; 60 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Compare", "testFloatCompare", "(FFFF)V"); 61 | jvalue args[] = {{.f = v8},{.f = v7},{.f = v7},{.f = v9}}; 62 | env->CallStaticVoidMethodA(clz, mid, args); 63 | D2C_CHECK_PENDING_EX; 64 | #undef EX_HANDLE 65 | } 66 | v10 = d2c_bitcast_to_double(-4606056518893174784); 67 | v11 = d2c_bitcast_to_double(4616189618054758400); 68 | v12 = d2c_bitcast_to_double(4616189618054758400); 69 | v13 = d2c_bitcast_to_double(9221120237041090560); 70 | LOGD("4a:invoke-static/range \x76\x33\x20\x2e\x2e\x2e\x20\x76\x31\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6f\x6d\x70\x61\x72\x65\x3b\x2d\x3e\x74\x65\x73\x74\x44\x6f\x75\x62\x6c\x65\x43\x6f\x6d\x70\x61\x72\x65\x28\x44\x20\x44\x20\x44\x20\x44\x29\x56"); 71 | { 72 | #define EX_HANDLE EX_UnwindBlock 73 | jclass &clz = cls0; 74 | jmethodID &mid = mth3; 75 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Compare", "testDoubleCompare", "(DDDD)V"); 76 | jvalue args[] = {{.d = v10},{.d = v11},{.d = v12},{.d = v13}}; 77 | env->CallStaticVoidMethodA(clz, mid, args); 78 | D2C_CHECK_PENDING_EX; 79 | #undef EX_HANDLE 80 | } 81 | return; 82 | EX_UnwindBlock: return; 83 | } 84 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FillArrayData_newByteArray__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FillArrayData;->newByteArray()[B */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FillArrayData_newByteArray__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | L0: 10 | v0 = 15; 11 | LOGD("4:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x42"); 12 | { 13 | #define EX_HANDLE EX_UnwindBlock 14 | if (v0 < 0) { 15 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 16 | goto EX_HANDLE; 17 | } 18 | if (v1) { 19 | LOGD("env->DeleteLocalRef(%p):v1", v1); 20 | env->DeleteLocalRef(v1); 21 | } 22 | v1 = (jarray) env->NewByteArray((jint) v0); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("8:fill-array-data \x76\x30\x2c\x20\x2b\x34\x20\x28\x30\x78\x37\x29"); 27 | { 28 | static const unsigned char data[] = {0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 121}; 29 | env->SetByteArrayRegion((jbyteArray) v1, 0, 15, (const jbyte *) data); 30 | } 31 | return (jarray) v1; 32 | EX_UnwindBlock: return (jarray)0; 33 | } 34 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FillArrayData_newCharArray__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FillArrayData;->newCharArray()[C */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FillArrayData_newCharArray__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | L0: 10 | v0 = 7; 11 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x43"); 12 | { 13 | #define EX_HANDLE EX_UnwindBlock 14 | if (v0 < 0) { 15 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 16 | goto EX_HANDLE; 17 | } 18 | if (v1) { 19 | LOGD("env->DeleteLocalRef(%p):v1", v1); 20 | env->DeleteLocalRef(v1); 21 | } 22 | v1 = (jarray) env->NewCharArray((jint) v0); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("6:fill-array-data \x76\x30\x2c\x20\x2b\x35\x20\x28\x30\x78\x39\x29"); 27 | { 28 | static const unsigned char data[] = {255, 255, 33, 67, 205, 171, 0, 0, 97, 0, 98, 0, 99, 0}; 29 | env->SetCharArrayRegion((jcharArray) v1, 0, 7, (const jchar *) data); 30 | } 31 | return (jarray) v1; 32 | EX_UnwindBlock: return (jarray)0; 33 | } 34 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FillArrayData_newLongArray__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FillArrayData;->newLongArray()[J */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FillArrayData_newLongArray__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | L0: 10 | v0 = 3; 11 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x4a"); 12 | { 13 | #define EX_HANDLE EX_UnwindBlock 14 | if (v0 < 0) { 15 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 16 | goto EX_HANDLE; 17 | } 18 | if (v1) { 19 | LOGD("env->DeleteLocalRef(%p):v1", v1); 20 | env->DeleteLocalRef(v1); 21 | } 22 | v1 = (jarray) env->NewLongArray((jint) v0); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("6:fill-array-data \x76\x30\x2c\x20\x2b\x35\x20\x28\x30\x78\x39\x29"); 27 | { 28 | static const unsigned char data[] = {69, 87, 50, 192, 179, 207, 171, 64, 189, 207, 236, 97, 142, 221, 163, 104, 2, 39, 31, 34, 66, 173, 79, 169}; 29 | env->SetLongArrayRegion((jlongArray) v1, 0, 3, (const jlong *) data); 30 | } 31 | return (jarray) v1; 32 | EX_UnwindBlock: return (jarray)0; 33 | } 34 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_approxEqual__DDD.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->approxEqual(DDD)Z */ 4 | extern "C" JNIEXPORT jboolean JNICALL 5 | Java_com_test_TestCompiler_FloatMath_approxEqual__DDD(JNIEnv *env, jobject thiz, jdouble p5, jdouble p7, jdouble p9){ 6 | jdouble v0; 7 | jdouble v1; 8 | jdouble v2; 9 | jint v3; 10 | jint v4; 11 | jdouble v5; 12 | jint v6; 13 | v0 = (jdouble)p5; 14 | v1 = (jdouble)p7; 15 | v2 = (jdouble)p9; 16 | L0: 17 | v3 = 1; 18 | v3 = 1; 19 | LOGD("4:cmpl-double \x76\x32\x2c\x20\x76\x35\x2c\x20\x76\x37"); 20 | v4 = (v0 == v1) ? 0 : (v0 > v1) ? 1 : -1; 21 | LOGD("8:if-lez \x76\x32\x2c\x20\x2b\x62"); 22 | if(v4 <= 0){ 23 | goto L5; 24 | } 25 | else { 26 | goto L1; 27 | } 28 | L1: 29 | LOGD("c:sub-double \x76\x32\x2c\x20\x76\x35\x2c\x20\x76\x37"); 30 | v5 = (v0 - v1); 31 | LOGD("10:cmpg-double \x76\x34\x2c\x20\x76\x32\x2c\x20\x76\x39"); 32 | v6 = (v5 == v2) ? 0 : (v5 < v2) ? -1 : 1; 33 | LOGD("14:if-gez \x76\x34\x2c\x20\x2b\x33"); 34 | if(v6 >= 0){ 35 | goto L3; 36 | } 37 | else { 38 | goto L2; 39 | } 40 | L2: 41 | goto L4; 42 | L3: 43 | v3 = 0; 44 | L4: 45 | return (jboolean) v3; 46 | L5: 47 | LOGD("1e:sub-double \x76\x32\x2c\x20\x76\x37\x2c\x20\x76\x35"); 48 | v5 = (v1 - v0); 49 | LOGD("22:cmpg-double \x76\x34\x2c\x20\x76\x32\x2c\x20\x76\x39"); 50 | v6 = (v5 == v2) ? 0 : (v5 < v2) ? -1 : 1; 51 | LOGD("26:if-gez \x76\x34\x2c\x20\x2b\x33"); 52 | if(v6 >= 0){ 53 | goto L7; 54 | } 55 | else { 56 | goto L6; 57 | } 58 | L6: 59 | goto L8; 60 | L7: 61 | v3 = 0; 62 | L8: 63 | return (jboolean) v3; 64 | EX_UnwindBlock: return (jboolean)0; 65 | } 66 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_approxEqual__FFF.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->approxEqual(FFF)Z */ 4 | extern "C" JNIEXPORT jboolean JNICALL 5 | Java_com_test_TestCompiler_FloatMath_approxEqual__FFF(JNIEnv *env, jobject thiz, jfloat p3, jfloat p4, jfloat p5){ 6 | jfloat v0; 7 | jfloat v1; 8 | jfloat v2; 9 | jint v3; 10 | jint v4; 11 | jfloat v5; 12 | v0 = (jfloat)p3; 13 | v1 = (jfloat)p4; 14 | v2 = (jfloat)p5; 15 | L0: 16 | v3 = 1; 17 | v3 = 1; 18 | LOGD("4:cmpl-float \x76\x32\x2c\x20\x76\x33\x2c\x20\x76\x34"); 19 | v4 = (v0 == v1) ? 0 : (v0 > v1) ? 1 : -1; 20 | LOGD("8:if-lez \x76\x32\x2c\x20\x2b\x62"); 21 | if(v4 <= 0){ 22 | goto L5; 23 | } 24 | else { 25 | goto L1; 26 | } 27 | L1: 28 | LOGD("c:sub-float \x76\x32\x2c\x20\x76\x33\x2c\x20\x76\x34"); 29 | v5 = (v0 - v1); 30 | LOGD("10:cmpg-float \x76\x32\x2c\x20\x76\x32\x2c\x20\x76\x35"); 31 | v4 = (v5 == v2) ? 0 : (v5 < v2) ? -1 : 1; 32 | LOGD("14:if-gez \x76\x32\x2c\x20\x2b\x33"); 33 | if(v4 >= 0){ 34 | goto L3; 35 | } 36 | else { 37 | goto L2; 38 | } 39 | L2: 40 | goto L4; 41 | L3: 42 | v3 = 0; 43 | L4: 44 | return (jboolean) v3; 45 | L5: 46 | LOGD("1e:sub-float \x76\x32\x2c\x20\x76\x34\x2c\x20\x76\x33"); 47 | v5 = (v1 - v0); 48 | LOGD("22:cmpg-float \x76\x32\x2c\x20\x76\x32\x2c\x20\x76\x35"); 49 | v4 = (v5 == v2) ? 0 : (v5 < v2) ? -1 : 1; 50 | LOGD("26:if-gez \x76\x32\x2c\x20\x2b\x33"); 51 | if(v4 >= 0){ 52 | goto L7; 53 | } 54 | else { 55 | goto L6; 56 | } 57 | L6: 58 | goto L8; 59 | L7: 60 | v3 = 0; 61 | L8: 62 | return (jboolean) v3; 63 | EX_UnwindBlock: return (jboolean)0; 64 | } 65 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_checkConsts__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->checkConsts()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_FloatMath_checkConsts__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jfloat v2; 9 | jdouble v3; 10 | jint v4; 11 | jdouble v5; 12 | jdouble v6; 13 | jint v7; 14 | jint v8; 15 | jint v9; 16 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 17 | jfieldID fld0 = NULL; 18 | jmethodID mth0 = NULL, mth1 = NULL; 19 | L0: 20 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 21 | { 22 | #define EX_HANDLE EX_UnwindBlock 23 | if (v0) { 24 | LOGD("env->DeleteLocalRef(%p):v0", v0); 25 | env->DeleteLocalRef(v0); 26 | } 27 | jclass &clz = cls0; 28 | jfieldID &fld = fld0; 29 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 30 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 31 | D2C_CHECK_PENDING_EX; 32 | #undef EX_HANDLE 33 | } 34 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x73\x74\x73\x27"); 35 | if (v1) { 36 | LOGD("env->DeleteLocalRef(%p):v1", v1); 37 | env->DeleteLocalRef(v1); 38 | } 39 | v1 = (jstring) env->NewStringUTF("\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x73\x74\x73"); 40 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | D2C_NOT_NULL(v0); 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 47 | jvalue args[] = {{.l = v1}}; 48 | env->CallVoidMethodA(v0, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | LOGD("e:const/high16 \x76\x30\x2c\x20\x31\x36\x36\x37\x32\x20\x23\x20\x5b\x31\x30\x2e\x30\x5d"); 53 | v2 = d2c_bitcast_to_float(1092616192); 54 | v3 = (jdouble)(v2); 55 | v4 = 1; 56 | v5 = d2c_bitcast_to_double(4621875412584313651); 57 | v5 = d2c_bitcast_to_double(4621875412584313651); 58 | v6 = d2c_bitcast_to_double(4621762822593629389); 59 | v6 = d2c_bitcast_to_double(4621762822593629389); 60 | LOGD("2c:cmpl-double \x76\x39\x2c\x20\x76\x31\x2c\x20\x76\x37"); 61 | v7 = (v3 == v6) ? 0 : (v3 > v6) ? 1 : -1; 62 | LOGD("30:if-lez \x76\x39\x2c\x20\x2b\x39"); 63 | if(v7 <= 0){ 64 | goto L3; 65 | } 66 | else { 67 | goto L1; 68 | } 69 | L1: 70 | v3 = (jdouble)(v2); 71 | LOGD("36:cmpg-double \x76\x39\x2c\x20\x76\x31\x2c\x20\x76\x34"); 72 | v7 = (v3 == v5) ? 0 : (v3 < v5) ? -1 : 1; 73 | LOGD("3a:if-gez \x76\x39\x2c\x20\x2b\x34"); 74 | if(v7 >= 0){ 75 | goto L3; 76 | } 77 | else { 78 | goto L2; 79 | } 80 | L2: 81 | v8 = 1; 82 | goto L4; 83 | L3: 84 | v8 = 0; 85 | L4: 86 | LOGD("44:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 87 | { 88 | #define EX_HANDLE EX_UnwindBlock 89 | jclass &clz = cls2; 90 | jmethodID &mid = mth1; 91 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 92 | jvalue args[] = {{.z = (jboolean) v8}}; 93 | env->CallStaticVoidMethodA(clz, mid, args); 94 | D2C_CHECK_PENDING_EX; 95 | #undef EX_HANDLE 96 | } 97 | v3 = d2c_bitcast_to_double(4621819117588971520); 98 | v3 = d2c_bitcast_to_double(4621819117588971520); 99 | LOGD("4e:cmpl-double \x76\x39\x2c\x20\x76\x31\x2c\x20\x76\x37"); 100 | v7 = (v3 == v6) ? 0 : (v3 > v6) ? 1 : -1; 101 | LOGD("52:if-lez \x76\x39\x2c\x20\x2b\x37"); 102 | if(v7 <= 0){ 103 | goto L7; 104 | } 105 | else { 106 | goto L5; 107 | } 108 | L5: 109 | LOGD("56:cmpg-double \x76\x37\x2c\x20\x76\x31\x2c\x20\x76\x34"); 110 | v9 = (v3 == v5) ? 0 : (v3 < v5) ? -1 : 1; 111 | LOGD("5a:if-gez \x76\x37\x2c\x20\x2b\x33"); 112 | if(v9 >= 0){ 113 | goto L7; 114 | } 115 | else { 116 | goto L6; 117 | } 118 | L6: 119 | goto L8; 120 | L7: 121 | v4 = 0; 122 | L8: 123 | LOGD("62:invoke-static \x76\x33\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 124 | { 125 | #define EX_HANDLE EX_UnwindBlock 126 | jclass &clz = cls2; 127 | jmethodID &mid = mth1; 128 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 129 | jvalue args[] = {{.z = (jboolean) v4}}; 130 | env->CallStaticVoidMethodA(clz, mid, args); 131 | D2C_CHECK_PENDING_EX; 132 | #undef EX_HANDLE 133 | } 134 | return; 135 | EX_UnwindBlock: return; 136 | } 137 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_checkConvD___3D.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->checkConvD([D)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_FloatMath_checkConvD___3D(JNIEnv *env, jobject thiz, jarray p7){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jdouble v4; 11 | jint v5; 12 | jdouble v6; 13 | jint v7; 14 | jint v8; 15 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 16 | jfieldID fld0 = NULL; 17 | jmethodID mth0 = NULL, mth1 = NULL; 18 | v0 = (jobject)env->NewLocalRef(p7); 19 | L0: 20 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 21 | { 22 | #define EX_HANDLE EX_UnwindBlock 23 | if (v1) { 24 | LOGD("env->DeleteLocalRef(%p):v1", v1); 25 | env->DeleteLocalRef(v1); 26 | } 27 | jclass &clz = cls0; 28 | jfieldID &fld = fld0; 29 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 30 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 31 | D2C_CHECK_PENDING_EX; 32 | #undef EX_HANDLE 33 | } 34 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x76\x44\x27"); 35 | if (v2) { 36 | LOGD("env->DeleteLocalRef(%p):v2", v2); 37 | env->DeleteLocalRef(v2); 38 | } 39 | v2 = (jstring) env->NewStringUTF("\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x76\x44"); 40 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | D2C_NOT_NULL(v1); 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 47 | jvalue args[] = {{.l = v2}}; 48 | env->CallVoidMethodA(v1, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | v3 = 0; 53 | v3 = 0; 54 | LOGD("10:aget-wide \x76\x31\x2c\x20\x76\x37\x2c\x20\x76\x30"); 55 | { 56 | #define EX_HANDLE EX_UnwindBlock 57 | D2C_NOT_NULL(v0); 58 | {jdouble val;env->GetDoubleArrayRegion((jdoubleArray) v0, (jint) v3, 1, &val);v4 = val;} 59 | D2C_CHECK_PENDING_EX; 60 | #undef EX_HANDLE 61 | } 62 | v5 = 1; 63 | v6 = d2c_bitcast_to_double(-4477173799908802560); 64 | LOGD("20:cmpl-double \x76\x36\x2c\x20\x76\x31\x2c\x20\x76\x34"); 65 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 66 | LOGD("24:if-nez \x76\x36\x2c\x20\x2b\x34"); 67 | if(v7 != 0){ 68 | goto L2; 69 | } 70 | else { 71 | goto L1; 72 | } 73 | L1: 74 | v8 = 1; 75 | goto L3; 76 | L2: 77 | v8 = 0; 78 | L3: 79 | LOGD("2e:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 80 | { 81 | #define EX_HANDLE EX_UnwindBlock 82 | jclass &clz = cls2; 83 | jmethodID &mid = mth1; 84 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 85 | jvalue args[] = {{.z = (jboolean) v8}}; 86 | env->CallStaticVoidMethodA(clz, mid, args); 87 | D2C_CHECK_PENDING_EX; 88 | #undef EX_HANDLE 89 | } 90 | LOGD("34:aget-wide \x76\x31\x2c\x20\x76\x37\x2c\x20\x76\x33"); 91 | { 92 | #define EX_HANDLE EX_UnwindBlock 93 | D2C_NOT_NULL(v0); 94 | {jdouble val;env->GetDoubleArrayRegion((jdoubleArray) v0, (jint) v5, 1, &val);v4 = val;} 95 | D2C_CHECK_PENDING_EX; 96 | #undef EX_HANDLE 97 | } 98 | v6 = d2c_bitcast_to_double(-4333058611834064073); 99 | LOGD("42:cmpl-double \x76\x36\x2c\x20\x76\x31\x2c\x20\x76\x34"); 100 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 101 | LOGD("46:if-nez \x76\x36\x2c\x20\x2b\x34"); 102 | if(v7 != 0){ 103 | goto L5; 104 | } 105 | else { 106 | goto L4; 107 | } 108 | L4: 109 | v8 = 1; 110 | goto L6; 111 | L5: 112 | v8 = 0; 113 | L6: 114 | LOGD("50:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 115 | { 116 | #define EX_HANDLE EX_UnwindBlock 117 | jclass &clz = cls2; 118 | jmethodID &mid = mth1; 119 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 120 | jvalue args[] = {{.z = (jboolean) v8}}; 121 | env->CallStaticVoidMethodA(clz, mid, args); 122 | D2C_CHECK_PENDING_EX; 123 | #undef EX_HANDLE 124 | } 125 | v8 = 2; 126 | LOGD("58:aget-wide \x76\x31\x2c\x20\x76\x37\x2c\x20\x76\x31"); 127 | { 128 | #define EX_HANDLE EX_UnwindBlock 129 | D2C_NOT_NULL(v0); 130 | {jdouble val;env->GetDoubleArrayRegion((jdoubleArray) v0, (jint) v8, 1, &val);v4 = val;} 131 | D2C_CHECK_PENDING_EX; 132 | #undef EX_HANDLE 133 | } 134 | v6 = d2c_bitcast_to_double(4638387860708261888); 135 | LOGD("66:cmpl-double \x76\x36\x2c\x20\x76\x31\x2c\x20\x76\x34"); 136 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 137 | LOGD("6a:if-nez \x76\x36\x2c\x20\x2b\x34"); 138 | if(v7 != 0){ 139 | goto L8; 140 | } 141 | else { 142 | goto L7; 143 | } 144 | L7: 145 | v3 = 1; 146 | L8: 147 | LOGD("72:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 148 | { 149 | #define EX_HANDLE EX_UnwindBlock 150 | jclass &clz = cls2; 151 | jmethodID &mid = mth1; 152 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 153 | jvalue args[] = {{.z = (jboolean) v3}}; 154 | env->CallStaticVoidMethodA(clz, mid, args); 155 | D2C_CHECK_PENDING_EX; 156 | #undef EX_HANDLE 157 | } 158 | return; 159 | EX_UnwindBlock: return; 160 | } 161 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_checkConvF___3F.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->checkConvF([F)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_FloatMath_checkConvF___3F(JNIEnv *env, jobject thiz, jarray p4){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jfloat v4; 11 | jint v5; 12 | jfloat v6; 13 | jint v7; 14 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 15 | jfieldID fld0 = NULL; 16 | jmethodID mth0 = NULL, mth1 = NULL; 17 | v0 = (jobject)env->NewLocalRef(p4); 18 | L0: 19 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v1) { 23 | LOGD("env->DeleteLocalRef(%p):v1", v1); 24 | env->DeleteLocalRef(v1); 25 | } 26 | jclass &clz = cls0; 27 | jfieldID &fld = fld0; 28 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 29 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 30 | D2C_CHECK_PENDING_EX; 31 | #undef EX_HANDLE 32 | } 33 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x76\x46\x27"); 34 | if (v2) { 35 | LOGD("env->DeleteLocalRef(%p):v2", v2); 36 | env->DeleteLocalRef(v2); 37 | } 38 | v2 = (jstring) env->NewStringUTF("\x46\x6c\x6f\x61\x74\x4d\x61\x74\x68\x2e\x63\x68\x65\x63\x6b\x43\x6f\x6e\x76\x46"); 39 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 40 | { 41 | #define EX_HANDLE EX_UnwindBlock 42 | D2C_NOT_NULL(v1); 43 | jclass &clz = cls1; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 46 | jvalue args[] = {{.l = v2}}; 47 | env->CallVoidMethodA(v1, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | v3 = 0; 52 | v3 = 0; 53 | LOGD("10:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x30"); 54 | { 55 | #define EX_HANDLE EX_UnwindBlock 56 | D2C_NOT_NULL(v0); 57 | {jfloat val;env->GetFloatArrayRegion((jfloatArray) v0, (jint) v3, 1, &val);v4 = val;} 58 | D2C_CHECK_PENDING_EX; 59 | #undef EX_HANDLE 60 | } 61 | v5 = 1; 62 | v6 = d2c_bitcast_to_float(-823193293); 63 | LOGD("1c:cmpl-float \x76\x31\x2c\x20\x76\x31\x2c\x20\x76\x33"); 64 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 65 | LOGD("20:if-nez \x76\x31\x2c\x20\x2b\x34"); 66 | if(v7 != 0){ 67 | goto L2; 68 | } 69 | else { 70 | goto L1; 71 | } 72 | L1: 73 | v7 = 1; 74 | goto L3; 75 | L2: 76 | v7 = 0; 77 | L3: 78 | LOGD("2a:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 79 | { 80 | #define EX_HANDLE EX_UnwindBlock 81 | jclass &clz = cls2; 82 | jmethodID &mid = mth1; 83 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 84 | jvalue args[] = {{.z = (jboolean) v7}}; 85 | env->CallStaticVoidMethodA(clz, mid, args); 86 | D2C_CHECK_PENDING_EX; 87 | #undef EX_HANDLE 88 | } 89 | LOGD("30:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x32"); 90 | { 91 | #define EX_HANDLE EX_UnwindBlock 92 | D2C_NOT_NULL(v0); 93 | {jfloat val;env->GetFloatArrayRegion((jfloatArray) v0, (jint) v5, 1, &val);v4 = val;} 94 | D2C_CHECK_PENDING_EX; 95 | #undef EX_HANDLE 96 | } 97 | v6 = d2c_bitcast_to_float(-554757837); 98 | LOGD("3a:cmpl-float \x76\x31\x2c\x20\x76\x31\x2c\x20\x76\x33"); 99 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 100 | LOGD("3e:if-nez \x76\x31\x2c\x20\x2b\x34"); 101 | if(v7 != 0){ 102 | goto L5; 103 | } 104 | else { 105 | goto L4; 106 | } 107 | L4: 108 | v7 = 1; 109 | goto L6; 110 | L5: 111 | v7 = 0; 112 | L6: 113 | LOGD("48:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 114 | { 115 | #define EX_HANDLE EX_UnwindBlock 116 | jclass &clz = cls2; 117 | jmethodID &mid = mth1; 118 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 119 | jvalue args[] = {{.z = (jboolean) v7}}; 120 | env->CallStaticVoidMethodA(clz, mid, args); 121 | D2C_CHECK_PENDING_EX; 122 | #undef EX_HANDLE 123 | } 124 | v7 = 2; 125 | LOGD("50:aget \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x31"); 126 | { 127 | #define EX_HANDLE EX_UnwindBlock 128 | D2C_NOT_NULL(v0); 129 | {jfloat val;env->GetFloatArrayRegion((jfloatArray) v0, (jint) v7, 1, &val);v4 = val;} 130 | D2C_CHECK_PENDING_EX; 131 | #undef EX_HANDLE 132 | } 133 | v6 = d2c_bitcast_to_float(-1068953637); 134 | LOGD("5a:cmpl-float \x76\x31\x2c\x20\x76\x31\x2c\x20\x76\x33"); 135 | v7 = (v4 == v6) ? 0 : (v4 > v6) ? 1 : -1; 136 | LOGD("5e:if-nez \x76\x31\x2c\x20\x2b\x34"); 137 | if(v7 != 0){ 138 | goto L8; 139 | } 140 | else { 141 | goto L7; 142 | } 143 | L7: 144 | v3 = 1; 145 | L8: 146 | LOGD("66:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 147 | { 148 | #define EX_HANDLE EX_UnwindBlock 149 | jclass &clz = cls2; 150 | jmethodID &mid = mth1; 151 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 152 | jvalue args[] = {{.z = (jboolean) v3}}; 153 | env->CallStaticVoidMethodA(clz, mid, args); 154 | D2C_CHECK_PENDING_EX; 155 | #undef EX_HANDLE 156 | } 157 | return; 158 | EX_UnwindBlock: return; 159 | } 160 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_convD__IJF.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->convD(IJF)[D */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FloatMath_convD__IJF(JNIEnv *env, jobject thiz, jint p4, jlong p5, jfloat p7){ 6 | jint v0; 7 | jlong v1; 8 | jfloat v2; 9 | jint v3; 10 | jobject v4 = NULL; 11 | jdouble v5; 12 | jint v6; 13 | jclass cls0 = NULL; 14 | v0 = (jint)p4; 15 | v1 = (jlong)p5; 16 | v2 = (jfloat)p7; 17 | L0: 18 | v3 = 3; 19 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x44"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v3 < 0) { 23 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 24 | goto EX_HANDLE; 25 | } 26 | if (v4) { 27 | LOGD("env->DeleteLocalRef(%p):v4", v4); 28 | env->DeleteLocalRef(v4); 29 | } 30 | v4 = (jarray) env->NewDoubleArray((jint) v3); 31 | D2C_CHECK_PENDING_EX; 32 | #undef EX_HANDLE 33 | } 34 | v5 = (jdouble)(v0); 35 | v6 = 0; 36 | LOGD("a:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v4); 40 | {jdouble val = v5;env->SetDoubleArrayRegion((jdoubleArray) v4, (jint) v6, 1, &val);} 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | v5 = (jdouble)(v1); 45 | v6 = 1; 46 | LOGD("12:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 47 | { 48 | #define EX_HANDLE EX_UnwindBlock 49 | D2C_NOT_NULL(v4); 50 | {jdouble val = v5;env->SetDoubleArrayRegion((jdoubleArray) v4, (jint) v6, 1, &val);} 51 | D2C_CHECK_PENDING_EX; 52 | #undef EX_HANDLE 53 | } 54 | v5 = (jdouble)(v2); 55 | v6 = 2; 56 | LOGD("1a:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 57 | { 58 | #define EX_HANDLE EX_UnwindBlock 59 | D2C_NOT_NULL(v4); 60 | {jdouble val = v5;env->SetDoubleArrayRegion((jdoubleArray) v4, (jint) v6, 1, &val);} 61 | D2C_CHECK_PENDING_EX; 62 | #undef EX_HANDLE 63 | } 64 | return (jarray) v4; 65 | EX_UnwindBlock: return (jarray)0; 66 | } 67 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_convF__IJD.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->convF(IJD)[F */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FloatMath_convF__IJD(JNIEnv *env, jobject thiz, jint p3, jlong p4, jdouble p6){ 6 | jint v0; 7 | jlong v1; 8 | jdouble v2; 9 | jint v3; 10 | jobject v4 = NULL; 11 | jfloat v5; 12 | jint v6; 13 | jclass cls0 = NULL; 14 | v0 = (jint)p3; 15 | v1 = (jlong)p4; 16 | v2 = (jdouble)p6; 17 | L0: 18 | v3 = 3; 19 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x46"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v3 < 0) { 23 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 24 | goto EX_HANDLE; 25 | } 26 | if (v4) { 27 | LOGD("env->DeleteLocalRef(%p):v4", v4); 28 | env->DeleteLocalRef(v4); 29 | } 30 | v4 = (jarray) env->NewFloatArray((jint) v3); 31 | D2C_CHECK_PENDING_EX; 32 | #undef EX_HANDLE 33 | } 34 | v5 = (jfloat)(v0); 35 | v6 = 0; 36 | LOGD("a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v4); 40 | {jfloat val = v5;env->SetFloatArrayRegion((jfloatArray) v4, (jint) v6, 1, &val);} 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | v5 = (jfloat)(v1); 45 | v6 = 1; 46 | LOGD("12:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 47 | { 48 | #define EX_HANDLE EX_UnwindBlock 49 | D2C_NOT_NULL(v4); 50 | {jfloat val = v5;env->SetFloatArrayRegion((jfloatArray) v4, (jint) v6, 1, &val);} 51 | D2C_CHECK_PENDING_EX; 52 | #undef EX_HANDLE 53 | } 54 | v5 = (jfloat)(v2); 55 | v6 = 2; 56 | LOGD("1a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 57 | { 58 | #define EX_HANDLE EX_UnwindBlock 59 | D2C_NOT_NULL(v4); 60 | {jfloat val = v5;env->SetFloatArrayRegion((jfloatArray) v4, (jint) v6, 1, &val);} 61 | D2C_CHECK_PENDING_EX; 62 | #undef EX_HANDLE 63 | } 64 | return (jarray) v4; 65 | EX_UnwindBlock: return (jarray)0; 66 | } 67 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_convI__JFDF.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->convI(JFDF)[I */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FloatMath_convI__JFDF(JNIEnv *env, jobject thiz, jlong p4, jfloat p6, jdouble p7, jfloat p9){ 6 | jlong v0; 7 | jfloat v1; 8 | jdouble v2; 9 | jfloat v3; 10 | jint v4; 11 | jobject v5 = NULL; 12 | jint v6; 13 | jint v7; 14 | jfloat v8; 15 | jfloat v9; 16 | jint v10; 17 | jclass cls0 = NULL; 18 | v0 = (jlong)p4; 19 | v1 = (jfloat)p6; 20 | v2 = (jdouble)p7; 21 | v3 = (jfloat)p9; 22 | L0: 23 | v4 = 6; 24 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x49"); 25 | { 26 | #define EX_HANDLE EX_UnwindBlock 27 | if (v4 < 0) { 28 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 29 | goto EX_HANDLE; 30 | } 31 | if (v5) { 32 | LOGD("env->DeleteLocalRef(%p):v5", v5); 33 | env->DeleteLocalRef(v5); 34 | } 35 | v5 = (jarray) env->NewIntArray((jint) v4); 36 | D2C_CHECK_PENDING_EX; 37 | #undef EX_HANDLE 38 | } 39 | v6 = (jint)(v0); 40 | v7 = 0; 41 | LOGD("a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | D2C_NOT_NULL(v5); 45 | {jint val = v6;env->SetIntArrayRegion((jintArray) v5, (jint) v7, 1, &val);} 46 | D2C_CHECK_PENDING_EX; 47 | #undef EX_HANDLE 48 | } 49 | v6 = d2c_float_to_int(v1); 50 | v7 = 1; 51 | LOGD("12:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | D2C_NOT_NULL(v5); 55 | {jint val = v6;env->SetIntArrayRegion((jintArray) v5, (jint) v7, 1, &val);} 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | v6 = d2c_double_to_int(v2); 60 | v7 = 2; 61 | LOGD("1a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 62 | { 63 | #define EX_HANDLE EX_UnwindBlock 64 | D2C_NOT_NULL(v5); 65 | {jint val = v6;env->SetIntArrayRegion((jintArray) v5, (jint) v7, 1, &val);} 66 | D2C_CHECK_PENDING_EX; 67 | #undef EX_HANDLE 68 | } 69 | v8 = d2c_bitcast_to_float(1065353216); 70 | v8 = d2c_bitcast_to_float(1065353216); 71 | v8 = d2c_bitcast_to_float(1065353216); 72 | LOGD("22:div-float \x76\x32\x2c\x20\x76\x31\x2c\x20\x76\x39"); 73 | { 74 | v9 = v8 / v3; 75 | } 76 | v7 = d2c_float_to_int(v9); 77 | v10 = 3; 78 | LOGD("2a:aput \x76\x32\x2c\x20\x76\x30\x2c\x20\x76\x33"); 79 | { 80 | #define EX_HANDLE EX_UnwindBlock 81 | D2C_NOT_NULL(v5); 82 | {jint val = v7;env->SetIntArrayRegion((jintArray) v5, (jint) v10, 1, &val);} 83 | D2C_CHECK_PENDING_EX; 84 | #undef EX_HANDLE 85 | } 86 | v9 = d2c_bitcast_to_float(-1082130432); 87 | LOGD("32:div-float/2addr \x76\x32\x2c\x20\x76\x39"); 88 | { 89 | v9 = v9 / v3; 90 | } 91 | v7 = d2c_float_to_int(v9); 92 | v10 = 4; 93 | LOGD("38:aput \x76\x32\x2c\x20\x76\x30\x2c\x20\x76\x33"); 94 | { 95 | #define EX_HANDLE EX_UnwindBlock 96 | D2C_NOT_NULL(v5); 97 | {jint val = v7;env->SetIntArrayRegion((jintArray) v5, (jint) v10, 1, &val);} 98 | D2C_CHECK_PENDING_EX; 99 | #undef EX_HANDLE 100 | } 101 | LOGD("3c:div-float \x76\x32\x2c\x20\x76\x31\x2c\x20\x76\x39"); 102 | { 103 | v9 = v8 / v3; 104 | } 105 | LOGD("40:div-float/2addr \x76\x31\x2c\x20\x76\x39"); 106 | { 107 | v8 = v8 / v3; 108 | } 109 | LOGD("42:div-float/2addr \x76\x32\x2c\x20\x76\x31"); 110 | { 111 | v9 = v9 / v8; 112 | } 113 | v6 = d2c_float_to_int(v9); 114 | v7 = 5; 115 | LOGD("48:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 116 | { 117 | #define EX_HANDLE EX_UnwindBlock 118 | D2C_NOT_NULL(v5); 119 | {jint val = v6;env->SetIntArrayRegion((jintArray) v5, (jint) v7, 1, &val);} 120 | D2C_CHECK_PENDING_EX; 121 | #undef EX_HANDLE 122 | } 123 | return (jarray) v5; 124 | EX_UnwindBlock: return (jarray)0; 125 | } 126 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_convL__IFDD.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->convL(IFDD)[J */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_FloatMath_convL__IFDD(JNIEnv *env, jobject thiz, jint p6, jfloat p7, jdouble p8, jdouble p10){ 6 | jint v0; 7 | jfloat v1; 8 | jdouble v2; 9 | jdouble v3; 10 | jint v4; 11 | jobject v5 = NULL; 12 | jlong v6; 13 | jint v7; 14 | jdouble v8; 15 | jdouble v9; 16 | jlong v10; 17 | jint v11; 18 | jclass cls0 = NULL; 19 | v0 = (jint)p6; 20 | v1 = (jfloat)p7; 21 | v2 = (jdouble)p8; 22 | v3 = (jdouble)p10; 23 | L0: 24 | v4 = 6; 25 | LOGD("2:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x4a"); 26 | { 27 | #define EX_HANDLE EX_UnwindBlock 28 | if (v4 < 0) { 29 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 30 | goto EX_HANDLE; 31 | } 32 | if (v5) { 33 | LOGD("env->DeleteLocalRef(%p):v5", v5); 34 | env->DeleteLocalRef(v5); 35 | } 36 | v5 = (jarray) env->NewLongArray((jint) v4); 37 | D2C_CHECK_PENDING_EX; 38 | #undef EX_HANDLE 39 | } 40 | v6 = (jlong)(v0); 41 | v7 = 0; 42 | LOGD("a:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 43 | { 44 | #define EX_HANDLE EX_UnwindBlock 45 | D2C_NOT_NULL(v5); 46 | {jlong val = v6;env->SetLongArrayRegion((jlongArray) v5, (jint) v7, 1, &val);} 47 | D2C_CHECK_PENDING_EX; 48 | #undef EX_HANDLE 49 | } 50 | v6 = d2c_float_to_long(v1); 51 | v7 = 1; 52 | LOGD("12:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | D2C_NOT_NULL(v5); 56 | {jlong val = v6;env->SetLongArrayRegion((jlongArray) v5, (jint) v7, 1, &val);} 57 | D2C_CHECK_PENDING_EX; 58 | #undef EX_HANDLE 59 | } 60 | v6 = d2c_double_to_long(v2); 61 | v7 = 2; 62 | LOGD("1a:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 63 | { 64 | #define EX_HANDLE EX_UnwindBlock 65 | D2C_NOT_NULL(v5); 66 | {jlong val = v6;env->SetLongArrayRegion((jlongArray) v5, (jint) v7, 1, &val);} 67 | D2C_CHECK_PENDING_EX; 68 | #undef EX_HANDLE 69 | } 70 | v8 = d2c_bitcast_to_double(4607182418800017408); 71 | v8 = d2c_bitcast_to_double(4607182418800017408); 72 | v8 = d2c_bitcast_to_double(4607182418800017408); 73 | LOGD("22:div-double \x76\x33\x2c\x20\x76\x31\x2c\x20\x76\x31\x30"); 74 | { 75 | v9 = v8 / v3; 76 | } 77 | v10 = d2c_double_to_long(v9); 78 | v11 = 3; 79 | LOGD("2a:aput-wide \x76\x33\x2c\x20\x76\x30\x2c\x20\x76\x35"); 80 | { 81 | #define EX_HANDLE EX_UnwindBlock 82 | D2C_NOT_NULL(v5); 83 | {jlong val = v10;env->SetLongArrayRegion((jlongArray) v5, (jint) v11, 1, &val);} 84 | D2C_CHECK_PENDING_EX; 85 | #undef EX_HANDLE 86 | } 87 | v9 = d2c_bitcast_to_double(-4616189618054758400); 88 | LOGD("32:div-double/2addr \x76\x33\x2c\x20\x76\x31\x30"); 89 | { 90 | v9 = v9 / v3; 91 | } 92 | v10 = d2c_double_to_long(v9); 93 | v11 = 4; 94 | LOGD("38:aput-wide \x76\x33\x2c\x20\x76\x30\x2c\x20\x76\x35"); 95 | { 96 | #define EX_HANDLE EX_UnwindBlock 97 | D2C_NOT_NULL(v5); 98 | {jlong val = v10;env->SetLongArrayRegion((jlongArray) v5, (jint) v11, 1, &val);} 99 | D2C_CHECK_PENDING_EX; 100 | #undef EX_HANDLE 101 | } 102 | LOGD("3c:div-double \x76\x33\x2c\x20\x76\x31\x2c\x20\x76\x31\x30"); 103 | { 104 | v9 = v8 / v3; 105 | } 106 | LOGD("40:div-double/2addr \x76\x31\x2c\x20\x76\x31\x30"); 107 | { 108 | v8 = v8 / v3; 109 | } 110 | LOGD("42:div-double/2addr \x76\x33\x2c\x20\x76\x31"); 111 | { 112 | v9 = v9 / v8; 113 | } 114 | v6 = d2c_double_to_long(v9); 115 | v7 = 5; 116 | LOGD("48:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 117 | { 118 | #define EX_HANDLE EX_UnwindBlock 119 | D2C_NOT_NULL(v5); 120 | {jlong val = v6;env->SetLongArrayRegion((jlongArray) v5, (jint) v7, 1, &val);} 121 | D2C_CHECK_PENDING_EX; 122 | #undef EX_HANDLE 123 | } 124 | return (jarray) v5; 125 | EX_UnwindBlock: return (jarray)0; 126 | } 127 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_FloatMath_unopTest__F.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/FloatMath;->unopTest(F)F */ 4 | extern "C" JNIEXPORT jfloat JNICALL 5 | Java_com_test_TestCompiler_FloatMath_unopTest__F(JNIEnv *env, jobject thiz, jfloat p0){ 6 | jfloat v0; 7 | v0 = (jfloat)p0; 8 | L0: 9 | LOGD("0:neg-float \x76\x30\x2c\x20\x76\x30"); 10 | v0 = (- v0); 11 | return (jfloat) v0; 12 | EX_UnwindBlock: return (jfloat)0; 13 | } 14 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_GenSelect_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/GenSelect;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_GenSelect_run__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | jint v4; 11 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 12 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 13 | L0: 14 | v0 = 1; 15 | LOGD("2:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x65\x6e\x53\x65\x6c\x65\x63\x74\x3b\x2d\x3e\x74\x65\x73\x74\x28\x5a\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 16 | { 17 | #define EX_HANDLE EX_UnwindBlock 18 | jclass &clz = cls0; 19 | jmethodID &mid = mth0; 20 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/GenSelect", "test", "(Z)Ljava/lang/String;"); 21 | jvalue args[] = {{.z = (jboolean) v0}}; 22 | v1 = (jstring) env->CallStaticObjectMethodA(clz, mid, args); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("8:move-result-object \x76\x30"); 27 | if (v2) { 28 | LOGD("env->DeleteLocalRef(%p):v2", v2); 29 | env->DeleteLocalRef(v2); 30 | } 31 | v2 = (jobject) v1; 32 | LOGD("a:const-string \x76\x31\x2c\x20\x27\x74\x72\x75\x65\x27"); 33 | if (v3) { 34 | LOGD("env->DeleteLocalRef(%p):v3", v3); 35 | env->DeleteLocalRef(v3); 36 | } 37 | v3 = (jstring) env->NewStringUTF("\x74\x72\x75\x65"); 38 | LOGD("e:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x65\x71\x75\x61\x6c\x73\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x5a"); 39 | { 40 | #define EX_HANDLE EX_UnwindBlock 41 | D2C_NOT_NULL(v2); 42 | jclass &clz = cls1; 43 | jmethodID &mid = mth1; 44 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/String", "equals", "(Ljava/lang/Object;)Z"); 45 | jvalue args[] = {{.l = v3}}; 46 | v4 = (jboolean) env->CallBooleanMethodA(v2, mid, args); 47 | D2C_CHECK_PENDING_EX; 48 | #undef EX_HANDLE 49 | } 50 | LOGD("14:move-result \x76\x30"); 51 | v0 = (jint) v4; 52 | LOGD("16:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | jclass &clz = cls2; 56 | jmethodID &mid = mth2; 57 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 58 | jvalue args[] = {{.z = (jboolean) v0}}; 59 | env->CallStaticVoidMethodA(clz, mid, args); 60 | D2C_CHECK_PENDING_EX; 61 | #undef EX_HANDLE 62 | } 63 | v0 = 0; 64 | LOGD("1e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x65\x6e\x53\x65\x6c\x65\x63\x74\x3b\x2d\x3e\x74\x65\x73\x74\x28\x5a\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 65 | { 66 | #define EX_HANDLE EX_UnwindBlock 67 | jclass &clz = cls0; 68 | jmethodID &mid = mth0; 69 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/GenSelect", "test", "(Z)Ljava/lang/String;"); 70 | jvalue args[] = {{.z = (jboolean) v0}}; 71 | v1 = (jstring) env->CallStaticObjectMethodA(clz, mid, args); 72 | D2C_CHECK_PENDING_EX; 73 | #undef EX_HANDLE 74 | } 75 | LOGD("24:move-result-object \x76\x30"); 76 | if (v2) { 77 | LOGD("env->DeleteLocalRef(%p):v2", v2); 78 | env->DeleteLocalRef(v2); 79 | } 80 | v2 = (jobject) v1; 81 | LOGD("26:const-string \x76\x31\x2c\x20\x27\x66\x61\x6c\x73\x65\x27"); 82 | if (v3) { 83 | LOGD("env->DeleteLocalRef(%p):v3", v3); 84 | env->DeleteLocalRef(v3); 85 | } 86 | v3 = (jstring) env->NewStringUTF("\x66\x61\x6c\x73\x65"); 87 | LOGD("2a:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x65\x71\x75\x61\x6c\x73\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x5a"); 88 | { 89 | #define EX_HANDLE EX_UnwindBlock 90 | D2C_NOT_NULL(v2); 91 | jclass &clz = cls1; 92 | jmethodID &mid = mth1; 93 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/String", "equals", "(Ljava/lang/Object;)Z"); 94 | jvalue args[] = {{.l = v3}}; 95 | v4 = (jboolean) env->CallBooleanMethodA(v2, mid, args); 96 | D2C_CHECK_PENDING_EX; 97 | #undef EX_HANDLE 98 | } 99 | LOGD("30:move-result \x76\x30"); 100 | v0 = (jint) v4; 101 | LOGD("32:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 102 | { 103 | #define EX_HANDLE EX_UnwindBlock 104 | jclass &clz = cls2; 105 | jmethodID &mid = mth2; 106 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 107 | jvalue args[] = {{.z = (jboolean) v0}}; 108 | env->CallStaticVoidMethodA(clz, mid, args); 109 | D2C_CHECK_PENDING_EX; 110 | #undef EX_HANDLE 111 | } 112 | return; 113 | EX_UnwindBlock: return; 114 | } 115 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_GenSelect_test__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/GenSelect;->test(Z)Ljava/lang/String; */ 4 | extern "C" JNIEXPORT jstring JNICALL 5 | Java_com_test_TestCompiler_GenSelect_test__Z(JNIEnv *env, jobject thiz, jboolean p3){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | v0 = (jint)p3; 11 | L0: 12 | LOGD("0:const-string \x76\x30\x2c\x20\x27\x74\x72\x75\x65\x27"); 13 | if (v1) { 14 | LOGD("env->DeleteLocalRef(%p):v1", v1); 15 | env->DeleteLocalRef(v1); 16 | } 17 | v1 = (jstring) env->NewStringUTF("\x74\x72\x75\x65"); 18 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x66\x61\x6c\x73\x65\x27"); 19 | if (v2) { 20 | LOGD("env->DeleteLocalRef(%p):v2", v2); 21 | env->DeleteLocalRef(v2); 22 | } 23 | v2 = (jstring) env->NewStringUTF("\x66\x61\x6c\x73\x65"); 24 | LOGD("8:if-eqz \x76\x33\x2c\x20\x2b\x34"); 25 | if(v0 == 0){ 26 | goto L2; 27 | } 28 | else { 29 | goto L1; 30 | } 31 | L1: 32 | if (v3) { 33 | LOGD("env->DeleteLocalRef(%p):v3", v3); 34 | env->DeleteLocalRef(v3); 35 | } 36 | v3 = (jobject) env->NewLocalRef(v1); 37 | goto L3; 38 | L2: 39 | if (v3) { 40 | LOGD("env->DeleteLocalRef(%p):v3", v3); 41 | env->DeleteLocalRef(v3); 42 | } 43 | v3 = (jobject) env->NewLocalRef(v2); 44 | L3: 45 | return (jstring) v3; 46 | EX_UnwindBlock: return NULL; 47 | } 48 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Goto_filler__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Goto;->filler(I)I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_TestCompiler_Goto_filler__I(JNIEnv *env, jobject thiz, jint p1){ 6 | jint v0; 7 | jint v1; 8 | v0 = (jint)p1; 9 | L0: 10 | LOGD("0:add-int/lit8 \x76\x30\x2c\x20\x76\x31\x2c\x20\x31"); 11 | v1 = (v0 + 1); 12 | return (jint) v1; 13 | EX_UnwindBlock: return (jint)0; 14 | } 15 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Goto_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Goto;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Goto_run__(JNIEnv *env, jobject thiz){ 6 | jint v0; 7 | jint v1; 8 | jint v2; 9 | jclass cls0 = NULL; 10 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 11 | L0: 12 | v0 = 0; 13 | v0 = 0; 14 | v0 = 0; 15 | LOGD("2:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x73\x6d\x61\x6c\x6c\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 16 | { 17 | #define EX_HANDLE EX_UnwindBlock 18 | jclass &clz = cls0; 19 | jmethodID &mid = mth0; 20 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "smallGoto", "(Z)I"); 21 | jvalue args[] = {{.z = (jboolean) v0}}; 22 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | v2 = 1; 27 | v2 = 1; 28 | v2 = 1; 29 | LOGD("a:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x73\x6d\x61\x6c\x6c\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 30 | { 31 | #define EX_HANDLE EX_UnwindBlock 32 | jclass &clz = cls0; 33 | jmethodID &mid = mth0; 34 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "smallGoto", "(Z)I"); 35 | jvalue args[] = {{.z = (jboolean) v2}}; 36 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 37 | D2C_CHECK_PENDING_EX; 38 | #undef EX_HANDLE 39 | } 40 | LOGD("10:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x6d\x65\x64\x69\x75\x6d\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 41 | { 42 | #define EX_HANDLE EX_UnwindBlock 43 | jclass &clz = cls0; 44 | jmethodID &mid = mth1; 45 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "mediumGoto", "(Z)I"); 46 | jvalue args[] = {{.z = (jboolean) v0}}; 47 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | LOGD("16:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x6d\x65\x64\x69\x75\x6d\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 52 | { 53 | #define EX_HANDLE EX_UnwindBlock 54 | jclass &clz = cls0; 55 | jmethodID &mid = mth1; 56 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "mediumGoto", "(Z)I"); 57 | jvalue args[] = {{.z = (jboolean) v2}}; 58 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 59 | D2C_CHECK_PENDING_EX; 60 | #undef EX_HANDLE 61 | } 62 | LOGD("1c:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x62\x69\x67\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 63 | { 64 | #define EX_HANDLE EX_UnwindBlock 65 | jclass &clz = cls0; 66 | jmethodID &mid = mth2; 67 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "bigGoto", "(Z)I"); 68 | jvalue args[] = {{.z = (jboolean) v0}}; 69 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 70 | D2C_CHECK_PENDING_EX; 71 | #undef EX_HANDLE 72 | } 73 | LOGD("22:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x62\x69\x67\x47\x6f\x74\x6f\x28\x5a\x29\x49"); 74 | { 75 | #define EX_HANDLE EX_UnwindBlock 76 | jclass &clz = cls0; 77 | jmethodID &mid = mth2; 78 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "bigGoto", "(Z)I"); 79 | jvalue args[] = {{.z = (jboolean) v2}}; 80 | v1 = (jint) env->CallStaticIntMethodA(clz, mid, args); 81 | D2C_CHECK_PENDING_EX; 82 | #undef EX_HANDLE 83 | } 84 | return; 85 | EX_UnwindBlock: return; 86 | } 87 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Goto_smallGoto__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Goto;->smallGoto(Z)I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_TestCompiler_Goto_smallGoto__Z(JNIEnv *env, jobject thiz, jboolean p2){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 13 | jfieldID fld0 = NULL; 14 | jmethodID mth0 = NULL, mth1 = NULL; 15 | v0 = (jint)p2; 16 | L0: 17 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | if (v1) { 21 | LOGD("env->DeleteLocalRef(%p):v1", v1); 22 | env->DeleteLocalRef(v1); 23 | } 24 | jclass &clz = cls0; 25 | jfieldID &fld = fld0; 26 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 27 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 28 | D2C_CHECK_PENDING_EX; 29 | #undef EX_HANDLE 30 | } 31 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x47\x6f\x74\x6f\x2e\x73\x6d\x61\x6c\x6c\x47\x6f\x74\x6f\x27"); 32 | if (v2) { 33 | LOGD("env->DeleteLocalRef(%p):v2", v2); 34 | env->DeleteLocalRef(v2); 35 | } 36 | v2 = (jstring) env->NewStringUTF("\x47\x6f\x74\x6f\x2e\x73\x6d\x61\x6c\x6c\x47\x6f\x74\x6f"); 37 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 38 | { 39 | #define EX_HANDLE EX_UnwindBlock 40 | D2C_NOT_NULL(v1); 41 | jclass &clz = cls1; 42 | jmethodID &mid = mth0; 43 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 44 | jvalue args[] = {{.l = v2}}; 45 | env->CallVoidMethodA(v1, mid, args); 46 | D2C_CHECK_PENDING_EX; 47 | #undef EX_HANDLE 48 | } 49 | v3 = 0; 50 | v3 = 0; 51 | v3 = 0; 52 | v3 = 0; 53 | LOGD("10:if-eqz \x76\x32\x2c\x20\x2b\x38"); 54 | if(v0 == 0){ 55 | goto L2; 56 | } 57 | else { 58 | goto L1; 59 | } 60 | L1: 61 | LOGD("14:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x66\x69\x6c\x6c\x65\x72\x28\x49\x29\x49"); 62 | { 63 | #define EX_HANDLE EX_UnwindBlock 64 | jclass &clz = cls2; 65 | jmethodID &mid = mth1; 66 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "filler", "(I)I"); 67 | jvalue args[] = {{.i = v3}}; 68 | v4 = (jint) env->CallStaticIntMethodA(clz, mid, args); 69 | D2C_CHECK_PENDING_EX; 70 | #undef EX_HANDLE 71 | } 72 | LOGD("1a:move-result \x76\x31"); 73 | v5 = (jint) v4; 74 | LOGD("1c:add-int/2addr \x76\x30\x2c\x20\x76\x31"); 75 | v3 = (v3 + v5); 76 | goto L3; 77 | L2: 78 | LOGD("20:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x47\x6f\x74\x6f\x3b\x2d\x3e\x66\x69\x6c\x6c\x65\x72\x28\x49\x29\x49"); 79 | { 80 | #define EX_HANDLE EX_UnwindBlock 81 | jclass &clz = cls2; 82 | jmethodID &mid = mth1; 83 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Goto", "filler", "(I)I"); 84 | jvalue args[] = {{.i = v3}}; 85 | v4 = (jint) env->CallStaticIntMethodA(clz, mid, args); 86 | D2C_CHECK_PENDING_EX; 87 | #undef EX_HANDLE 88 | } 89 | LOGD("26:move-result \x76\x31"); 90 | v5 = (jint) v4; 91 | LOGD("28:sub-int/2addr \x76\x30\x2c\x20\x76\x31"); 92 | v3 = (v3 - v5); 93 | L3: 94 | return (jint) v3; 95 | EX_UnwindBlock: return (jint)0; 96 | } 97 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_InstField_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/InstField;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_InstField_run__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 10 | v0 = (jobject)env->NewLocalRef(thiz); 11 | L0: 12 | LOGD("0:invoke-virtual \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x73\x74\x46\x69\x65\x6c\x64\x3b\x2d\x3e\x61\x73\x73\x69\x67\x6e\x46\x69\x65\x6c\x64\x73\x28\x29\x56"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | D2C_NOT_NULL(v0); 16 | jclass &clz = cls0; 17 | jmethodID &mid = mth0; 18 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/InstField", "assignFields", "()V"); 19 | jvalue args[] = {}; 20 | env->CallVoidMethodA(v0, mid, args); 21 | D2C_CHECK_PENDING_EX; 22 | #undef EX_HANDLE 23 | } 24 | LOGD("6:invoke-virtual \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x73\x74\x46\x69\x65\x6c\x64\x3b\x2d\x3e\x63\x68\x65\x63\x6b\x46\x69\x65\x6c\x64\x73\x28\x29\x56"); 25 | { 26 | #define EX_HANDLE EX_UnwindBlock 27 | D2C_NOT_NULL(v0); 28 | jclass &clz = cls0; 29 | jmethodID &mid = mth1; 30 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/InstField", "checkFields", "()V"); 31 | jvalue args[] = {}; 32 | env->CallVoidMethodA(v0, mid, args); 33 | D2C_CHECK_PENDING_EX; 34 | #undef EX_HANDLE 35 | } 36 | if (v1) { 37 | LOGD("env->DeleteLocalRef(%p):v1", v1); 38 | env->DeleteLocalRef(v1); 39 | } 40 | v1 = 0; 41 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x73\x74\x46\x69\x65\x6c\x64\x3b\x2d\x3e\x6e\x75\x6c\x6c\x43\x68\x65\x63\x6b\x28\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x73\x74\x46\x69\x65\x6c\x64\x3b\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls0; 45 | jmethodID &mid = mth2; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/InstField", "nullCheck", "(Lcom/test/TestCompiler/InstField;)V"); 47 | jvalue args[] = {{.l = v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | return; 53 | EX_UnwindBlock: return; 54 | } 55 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_charSubTest__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->charSubTest()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_charSubTest__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 13 | jfieldID fld0 = NULL; 14 | jmethodID mth0 = NULL, mth1 = NULL; 15 | L0: 16 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 17 | { 18 | #define EX_HANDLE EX_UnwindBlock 19 | if (v0) { 20 | LOGD("env->DeleteLocalRef(%p):v0", v0); 21 | env->DeleteLocalRef(v0); 22 | } 23 | jclass &clz = cls0; 24 | jfieldID &fld = fld0; 25 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 26 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 27 | D2C_CHECK_PENDING_EX; 28 | #undef EX_HANDLE 29 | } 30 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x63\x68\x61\x72\x53\x75\x62\x54\x65\x73\x74\x27"); 31 | if (v1) { 32 | LOGD("env->DeleteLocalRef(%p):v1", v1); 33 | env->DeleteLocalRef(v1); 34 | } 35 | v1 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x63\x68\x61\x72\x53\x75\x62\x54\x65\x73\x74"); 36 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v0); 40 | jclass &clz = cls1; 41 | jmethodID &mid = mth0; 42 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 43 | jvalue args[] = {{.l = v1}}; 44 | env->CallVoidMethodA(v0, mid, args); 45 | D2C_CHECK_PENDING_EX; 46 | #undef EX_HANDLE 47 | } 48 | v2 = 233; 49 | v3 = 65535; 50 | LOGD("18:sub-int \x76\x32\x2c\x20\x76\x30\x2c\x20\x76\x31"); 51 | v4 = (v2 - v3); 52 | v5 = -65302; 53 | LOGD("22:if-ne \x76\x32\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 54 | if(v4 != v5) { 55 | goto L2; 56 | } 57 | else { 58 | goto L1; 59 | } 60 | L1: 61 | v5 = 1; 62 | goto L3; 63 | L2: 64 | v5 = 0; 65 | L3: 66 | LOGD("2c:invoke-static \x76\x33\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 67 | { 68 | #define EX_HANDLE EX_UnwindBlock 69 | jclass &clz = cls2; 70 | jmethodID &mid = mth1; 71 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 72 | jvalue args[] = {{.z = (jboolean) v5}}; 73 | env->CallStaticVoidMethodA(clz, mid, args); 74 | D2C_CHECK_PENDING_EX; 75 | #undef EX_HANDLE 76 | } 77 | return; 78 | EX_UnwindBlock: return; 79 | } 80 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_divLiteralTest__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->divLiteralTest()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_divLiteralTest__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jint v2; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 11 | jfieldID fld0 = NULL; 12 | jmethodID mth0 = NULL, mth1 = NULL; 13 | L0: 14 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 15 | { 16 | #define EX_HANDLE EX_UnwindBlock 17 | if (v0) { 18 | LOGD("env->DeleteLocalRef(%p):v0", v0); 19 | env->DeleteLocalRef(v0); 20 | } 21 | jclass &clz = cls0; 22 | jfieldID &fld = fld0; 23 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 24 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 25 | D2C_CHECK_PENDING_EX; 26 | #undef EX_HANDLE 27 | } 28 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x64\x69\x76\x4c\x69\x74\x65\x72\x61\x6c\x54\x65\x73\x74\x27"); 29 | if (v1) { 30 | LOGD("env->DeleteLocalRef(%p):v1", v1); 31 | env->DeleteLocalRef(v1); 32 | } 33 | v1 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x64\x69\x76\x4c\x69\x74\x65\x72\x61\x6c\x54\x65\x73\x74"); 34 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 35 | { 36 | #define EX_HANDLE EX_UnwindBlock 37 | D2C_NOT_NULL(v0); 38 | jclass &clz = cls1; 39 | jmethodID &mid = mth0; 40 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 41 | jvalue args[] = {{.l = v1}}; 42 | env->CallVoidMethodA(v0, mid, args); 43 | D2C_CHECK_PENDING_EX; 44 | #undef EX_HANDLE 45 | } 46 | v2 = 2000; 47 | v2 = 2000; 48 | v2 = 2000; 49 | v3 = -1000; 50 | LOGD("16:invoke-static \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x3b\x2d\x3e\x64\x69\x76\x4c\x69\x74\x65\x72\x61\x6c\x54\x65\x73\x74\x42\x6f\x64\x79\x28\x49\x20\x49\x29\x56"); 51 | { 52 | #define EX_HANDLE EX_UnwindBlock 53 | jclass &clz = cls2; 54 | jmethodID &mid = mth1; 55 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/IntMath", "divLiteralTestBody", "(II)V"); 56 | jvalue args[] = {{.i = v3},{.i = v2}}; 57 | env->CallStaticVoidMethodA(clz, mid, args); 58 | D2C_CHECK_PENDING_EX; 59 | #undef EX_HANDLE 60 | } 61 | v3 = 2147481647; 62 | LOGD("22:invoke-static \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x3b\x2d\x3e\x64\x69\x76\x4c\x69\x74\x65\x72\x61\x6c\x54\x65\x73\x74\x42\x6f\x64\x79\x28\x49\x20\x49\x29\x56"); 63 | { 64 | #define EX_HANDLE EX_UnwindBlock 65 | jclass &clz = cls2; 66 | jmethodID &mid = mth1; 67 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/IntMath", "divLiteralTestBody", "(II)V"); 68 | jvalue args[] = {{.i = v3},{.i = v2}}; 69 | env->CallStaticVoidMethodA(clz, mid, args); 70 | D2C_CHECK_PENDING_EX; 71 | #undef EX_HANDLE 72 | } 73 | v3 = -983041; 74 | LOGD("2e:invoke-static \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x3b\x2d\x3e\x64\x69\x76\x4c\x69\x74\x65\x72\x61\x6c\x54\x65\x73\x74\x42\x6f\x64\x79\x28\x49\x20\x49\x29\x56"); 75 | { 76 | #define EX_HANDLE EX_UnwindBlock 77 | jclass &clz = cls2; 78 | jmethodID &mid = mth1; 79 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/IntMath", "divLiteralTestBody", "(II)V"); 80 | jvalue args[] = {{.i = v3},{.i = v2}}; 81 | env->CallStaticVoidMethodA(clz, mid, args); 82 | D2C_CHECK_PENDING_EX; 83 | #undef EX_HANDLE 84 | } 85 | return; 86 | EX_UnwindBlock: return; 87 | } 88 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_intShiftTest__II.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->intShiftTest(II)[I */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_IntMath_intShiftTest__II(JNIEnv *env, jobject thiz, jint p3, jint p4){ 6 | jint v0; 7 | jint v1; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | jint v4; 11 | jint v5; 12 | jint v6; 13 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 14 | jfieldID fld0 = NULL; 15 | jmethodID mth0 = NULL; 16 | v0 = (jint)p3; 17 | v1 = (jint)p4; 18 | L0: 19 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v2) { 23 | LOGD("env->DeleteLocalRef(%p):v2", v2); 24 | env->DeleteLocalRef(v2); 25 | } 26 | jclass &clz = cls0; 27 | jfieldID &fld = fld0; 28 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 29 | v2 = (jobject) env->GetStaticObjectField(clz,fld); 30 | D2C_CHECK_PENDING_EX; 31 | #undef EX_HANDLE 32 | } 33 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x69\x6e\x74\x53\x68\x69\x66\x74\x54\x65\x73\x74\x27"); 34 | if (v3) { 35 | LOGD("env->DeleteLocalRef(%p):v3", v3); 36 | env->DeleteLocalRef(v3); 37 | } 38 | v3 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x69\x6e\x74\x53\x68\x69\x66\x74\x54\x65\x73\x74"); 39 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 40 | { 41 | #define EX_HANDLE EX_UnwindBlock 42 | D2C_NOT_NULL(v2); 43 | jclass &clz = cls1; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 46 | jvalue args[] = {{.l = v3}}; 47 | env->CallVoidMethodA(v2, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | v4 = 4; 52 | LOGD("10:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x49"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | if (v4 < 0) { 56 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 57 | goto EX_HANDLE; 58 | } 59 | if (v2) { 60 | LOGD("env->DeleteLocalRef(%p):v2", v2); 61 | env->DeleteLocalRef(v2); 62 | } 63 | v2 = (jarray) env->NewIntArray((jint) v4); 64 | D2C_CHECK_PENDING_EX; 65 | #undef EX_HANDLE 66 | } 67 | LOGD("14:shl-int \x76\x31\x2c\x20\x76\x33\x2c\x20\x76\x34"); 68 | v5 = (v0) << (v1 & 0x1f); 69 | v6 = 0; 70 | LOGD("1a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 71 | { 72 | #define EX_HANDLE EX_UnwindBlock 73 | D2C_NOT_NULL(v2); 74 | {jint val = v5;env->SetIntArrayRegion((jintArray) v2, (jint) v6, 1, &val);} 75 | D2C_CHECK_PENDING_EX; 76 | #undef EX_HANDLE 77 | } 78 | LOGD("1e:shr-int \x76\x31\x2c\x20\x76\x33\x2c\x20\x76\x34"); 79 | v5 = (v0) >> (v1 & 0x1f); 80 | v6 = 1; 81 | LOGD("24:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 82 | { 83 | #define EX_HANDLE EX_UnwindBlock 84 | D2C_NOT_NULL(v2); 85 | {jint val = v5;env->SetIntArrayRegion((jintArray) v2, (jint) v6, 1, &val);} 86 | D2C_CHECK_PENDING_EX; 87 | #undef EX_HANDLE 88 | } 89 | LOGD("28:ushr-int \x76\x31\x2c\x20\x76\x33\x2c\x20\x76\x34"); 90 | v5 = ((uint32_t) v0) >> (v1 & 0x1f); 91 | v6 = 2; 92 | LOGD("2e:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 93 | { 94 | #define EX_HANDLE EX_UnwindBlock 95 | D2C_NOT_NULL(v2); 96 | {jint val = v5;env->SetIntArrayRegion((jintArray) v2, (jint) v6, 1, &val);} 97 | D2C_CHECK_PENDING_EX; 98 | #undef EX_HANDLE 99 | } 100 | LOGD("32:shl-int \x76\x31\x2c\x20\x76\x33\x2c\x20\x76\x34"); 101 | v5 = (v0) << (v1 & 0x1f); 102 | LOGD("36:shr-int/2addr \x76\x31\x2c\x20\x76\x34"); 103 | v5 = (v5) >> (v1 & 0x1f); 104 | LOGD("38:ushr-int/2addr \x76\x31\x2c\x20\x76\x34"); 105 | v5 = ((uint32_t) v5) >> (v1 & 0x1f); 106 | LOGD("3a:shl-int/2addr \x76\x31\x2c\x20\x76\x34"); 107 | v5 = (v5) << (v1 & 0x1f); 108 | v6 = 3; 109 | LOGD("3e:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 110 | { 111 | #define EX_HANDLE EX_UnwindBlock 112 | D2C_NOT_NULL(v2); 113 | {jint val = v5;env->SetIntArrayRegion((jintArray) v2, (jint) v6, 1, &val);} 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | return (jarray) v2; 118 | EX_UnwindBlock: return (jarray)0; 119 | } 120 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_lit8Test__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->lit8Test(I)[I */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_IntMath_lit8Test__I(JNIEnv *env, jobject thiz, jint p3){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 13 | jfieldID fld0 = NULL; 14 | jmethodID mth0 = NULL; 15 | v0 = (jint)p3; 16 | L0: 17 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | if (v1) { 21 | LOGD("env->DeleteLocalRef(%p):v1", v1); 22 | env->DeleteLocalRef(v1); 23 | } 24 | jclass &clz = cls0; 25 | jfieldID &fld = fld0; 26 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 27 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 28 | D2C_CHECK_PENDING_EX; 29 | #undef EX_HANDLE 30 | } 31 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x6c\x69\x74\x38\x54\x65\x73\x74\x27"); 32 | if (v2) { 33 | LOGD("env->DeleteLocalRef(%p):v2", v2); 34 | env->DeleteLocalRef(v2); 35 | } 36 | v2 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x6c\x69\x74\x38\x54\x65\x73\x74"); 37 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 38 | { 39 | #define EX_HANDLE EX_UnwindBlock 40 | D2C_NOT_NULL(v1); 41 | jclass &clz = cls1; 42 | jmethodID &mid = mth0; 43 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 44 | jvalue args[] = {{.l = v2}}; 45 | env->CallVoidMethodA(v1, mid, args); 46 | D2C_CHECK_PENDING_EX; 47 | #undef EX_HANDLE 48 | } 49 | v3 = 8; 50 | LOGD("12:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x49"); 51 | { 52 | #define EX_HANDLE EX_UnwindBlock 53 | if (v3 < 0) { 54 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 55 | goto EX_HANDLE; 56 | } 57 | if (v1) { 58 | LOGD("env->DeleteLocalRef(%p):v1", v1); 59 | env->DeleteLocalRef(v1); 60 | } 61 | v1 = (jarray) env->NewIntArray((jint) v3); 62 | D2C_CHECK_PENDING_EX; 63 | #undef EX_HANDLE 64 | } 65 | LOGD("16:add-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 66 | v4 = (v0 + 10); 67 | v5 = 0; 68 | LOGD("1c:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 69 | { 70 | #define EX_HANDLE EX_UnwindBlock 71 | D2C_NOT_NULL(v1); 72 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 73 | D2C_CHECK_PENDING_EX; 74 | #undef EX_HANDLE 75 | } 76 | LOGD("20:rsub-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 77 | v4 = (10 - v0); 78 | v5 = 1; 79 | LOGD("26:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 80 | { 81 | #define EX_HANDLE EX_UnwindBlock 82 | D2C_NOT_NULL(v1); 83 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 84 | D2C_CHECK_PENDING_EX; 85 | #undef EX_HANDLE 86 | } 87 | LOGD("2a:mul-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 88 | v4 = (v0 * 10); 89 | v5 = 2; 90 | LOGD("30:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 91 | { 92 | #define EX_HANDLE EX_UnwindBlock 93 | D2C_NOT_NULL(v1); 94 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 95 | D2C_CHECK_PENDING_EX; 96 | #undef EX_HANDLE 97 | } 98 | LOGD("34:div-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 99 | { 100 | #define EX_HANDLE EX_UnwindBlock 101 | if (10 == 0) { 102 | d2c_throw_exception(env, "java/lang/ArithmeticException", "divide by zero"); 103 | goto EX_HANDLE; 104 | } 105 | #undef EX_HANDLE 106 | v4 = v0 / 10; 107 | } 108 | v5 = 3; 109 | LOGD("3a:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 110 | { 111 | #define EX_HANDLE EX_UnwindBlock 112 | D2C_NOT_NULL(v1); 113 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | LOGD("3e:rem-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 118 | { 119 | #define EX_HANDLE EX_UnwindBlock 120 | if (10 == 0) { 121 | d2c_throw_exception(env, "java/lang/ArithmeticException", "divide by zero"); 122 | goto EX_HANDLE; 123 | } 124 | #undef EX_HANDLE 125 | v4 = v0 % 10; 126 | } 127 | v5 = 4; 128 | LOGD("44:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 129 | { 130 | #define EX_HANDLE EX_UnwindBlock 131 | D2C_NOT_NULL(v1); 132 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 133 | D2C_CHECK_PENDING_EX; 134 | #undef EX_HANDLE 135 | } 136 | LOGD("48:and-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x31\x30"); 137 | v4 = (v0 & 10); 138 | v5 = 5; 139 | LOGD("4e:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 140 | { 141 | #define EX_HANDLE EX_UnwindBlock 142 | D2C_NOT_NULL(v1); 143 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 144 | D2C_CHECK_PENDING_EX; 145 | #undef EX_HANDLE 146 | } 147 | LOGD("52:or-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x2d\x31\x30"); 148 | v4 = (v0 | -10); 149 | v5 = 6; 150 | LOGD("58:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 151 | { 152 | #define EX_HANDLE EX_UnwindBlock 153 | D2C_NOT_NULL(v1); 154 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 155 | D2C_CHECK_PENDING_EX; 156 | #undef EX_HANDLE 157 | } 158 | LOGD("5c:xor-int/lit8 \x76\x31\x2c\x20\x76\x33\x2c\x20\x2d\x31\x30"); 159 | v4 = (v0 ^ -10); 160 | v5 = 7; 161 | LOGD("62:aput \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x32"); 162 | { 163 | #define EX_HANDLE EX_UnwindBlock 164 | D2C_NOT_NULL(v1); 165 | {jint val = v4;env->SetIntArrayRegion((jintArray) v1, (jint) v5, 1, &val);} 166 | D2C_CHECK_PENDING_EX; 167 | #undef EX_HANDLE 168 | } 169 | return (jarray) v1; 170 | EX_UnwindBlock: return (jarray)0; 171 | } 172 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_longShiftTest__JI.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->longShiftTest(JI)[J */ 4 | extern "C" JNIEXPORT jarray JNICALL 5 | Java_com_test_TestCompiler_IntMath_longShiftTest__JI(JNIEnv *env, jobject thiz, jlong p4, jint p6){ 6 | jlong v0; 7 | jint v1; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | jint v4; 11 | jlong v5; 12 | jint v6; 13 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 14 | jfieldID fld0 = NULL; 15 | jmethodID mth0 = NULL; 16 | v0 = (jlong)p4; 17 | v1 = (jint)p6; 18 | L0: 19 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v2) { 23 | LOGD("env->DeleteLocalRef(%p):v2", v2); 24 | env->DeleteLocalRef(v2); 25 | } 26 | jclass &clz = cls0; 27 | jfieldID &fld = fld0; 28 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 29 | v2 = (jobject) env->GetStaticObjectField(clz,fld); 30 | D2C_CHECK_PENDING_EX; 31 | #undef EX_HANDLE 32 | } 33 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x6c\x6f\x6e\x67\x53\x68\x69\x66\x74\x54\x65\x73\x74\x27"); 34 | if (v3) { 35 | LOGD("env->DeleteLocalRef(%p):v3", v3); 36 | env->DeleteLocalRef(v3); 37 | } 38 | v3 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x6c\x6f\x6e\x67\x53\x68\x69\x66\x74\x54\x65\x73\x74"); 39 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 40 | { 41 | #define EX_HANDLE EX_UnwindBlock 42 | D2C_NOT_NULL(v2); 43 | jclass &clz = cls1; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 46 | jvalue args[] = {{.l = v3}}; 47 | env->CallVoidMethodA(v2, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | v4 = 4; 52 | LOGD("10:new-array \x76\x30\x2c\x20\x76\x30\x2c\x20\x5b\x4a"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | if (v4 < 0) { 56 | d2c_throw_exception(env, "java/lang/NegativeArraySizeException", "negative array size"); 57 | goto EX_HANDLE; 58 | } 59 | if (v2) { 60 | LOGD("env->DeleteLocalRef(%p):v2", v2); 61 | env->DeleteLocalRef(v2); 62 | } 63 | v2 = (jarray) env->NewLongArray((jint) v4); 64 | D2C_CHECK_PENDING_EX; 65 | #undef EX_HANDLE 66 | } 67 | LOGD("14:shl-long \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x36"); 68 | v5 = (v0) << (v1 & 0x3f); 69 | v6 = 0; 70 | LOGD("1a:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 71 | { 72 | #define EX_HANDLE EX_UnwindBlock 73 | D2C_NOT_NULL(v2); 74 | {jlong val = v5;env->SetLongArrayRegion((jlongArray) v2, (jint) v6, 1, &val);} 75 | D2C_CHECK_PENDING_EX; 76 | #undef EX_HANDLE 77 | } 78 | LOGD("1e:shr-long \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x36"); 79 | v5 = (v0) >> (v1 & 0x3f); 80 | v6 = 1; 81 | LOGD("24:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 82 | { 83 | #define EX_HANDLE EX_UnwindBlock 84 | D2C_NOT_NULL(v2); 85 | {jlong val = v5;env->SetLongArrayRegion((jlongArray) v2, (jint) v6, 1, &val);} 86 | D2C_CHECK_PENDING_EX; 87 | #undef EX_HANDLE 88 | } 89 | LOGD("28:ushr-long \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x36"); 90 | v5 = ((uint64_t) v0) >> (v1 & 0x3f); 91 | v6 = 2; 92 | LOGD("2e:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 93 | { 94 | #define EX_HANDLE EX_UnwindBlock 95 | D2C_NOT_NULL(v2); 96 | {jlong val = v5;env->SetLongArrayRegion((jlongArray) v2, (jint) v6, 1, &val);} 97 | D2C_CHECK_PENDING_EX; 98 | #undef EX_HANDLE 99 | } 100 | LOGD("32:shl-long \x76\x31\x2c\x20\x76\x34\x2c\x20\x76\x36"); 101 | v5 = (v0) << (v1 & 0x3f); 102 | LOGD("36:shr-long/2addr \x76\x31\x2c\x20\x76\x36"); 103 | v5 = (v5) >> (v1 & 0x3f); 104 | LOGD("38:ushr-long/2addr \x76\x31\x2c\x20\x76\x36"); 105 | v5 = ((uint64_t) v5) >> (v1 & 0x3f); 106 | LOGD("3a:shl-long/2addr \x76\x31\x2c\x20\x76\x36"); 107 | v5 = (v5) << (v1 & 0x3f); 108 | v6 = 3; 109 | LOGD("3e:aput-wide \x76\x31\x2c\x20\x76\x30\x2c\x20\x76\x33"); 110 | { 111 | #define EX_HANDLE EX_UnwindBlock 112 | D2C_NOT_NULL(v2); 113 | {jlong val = v5;env->SetLongArrayRegion((jlongArray) v2, (jint) v6, 1, &val);} 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | return (jarray) v2; 118 | EX_UnwindBlock: return (jarray)0; 119 | } 120 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_shiftTest2__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->shiftTest2()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_shiftTest2__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jlong v2; 9 | jlong v3; 10 | jlong v4; 11 | jlong v5; 12 | jlong v6; 13 | jlong v7; 14 | jlong v8; 15 | jlong v9; 16 | jlong v10; 17 | jlong v11; 18 | jint v12; 19 | jint v13; 20 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 21 | jfieldID fld0 = NULL; 22 | jmethodID mth0 = NULL, mth1 = NULL; 23 | L0: 24 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 25 | { 26 | #define EX_HANDLE EX_UnwindBlock 27 | if (v0) { 28 | LOGD("env->DeleteLocalRef(%p):v0", v0); 29 | env->DeleteLocalRef(v0); 30 | } 31 | jclass &clz = cls0; 32 | jfieldID &fld = fld0; 33 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 34 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 35 | D2C_CHECK_PENDING_EX; 36 | #undef EX_HANDLE 37 | } 38 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x73\x68\x69\x66\x74\x54\x65\x73\x74\x32\x27"); 39 | if (v1) { 40 | LOGD("env->DeleteLocalRef(%p):v1", v1); 41 | env->DeleteLocalRef(v1); 42 | } 43 | v1 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x73\x68\x69\x66\x74\x54\x65\x73\x74\x32"); 44 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 45 | { 46 | #define EX_HANDLE EX_UnwindBlock 47 | D2C_NOT_NULL(v0); 48 | jclass &clz = cls1; 49 | jmethodID &mid = mth0; 50 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 51 | jvalue args[] = {{.l = v1}}; 52 | env->CallVoidMethodA(v0, mid, args); 53 | D2C_CHECK_PENDING_EX; 54 | #undef EX_HANDLE 55 | } 56 | v2 = 17; 57 | v3 = 34; 58 | v4 = 51; 59 | v5 = 68; 60 | v6 = 85; 61 | v7 = 102; 62 | v8 = 119; 63 | v9 = 136; 64 | v10 = 56; 65 | LOGD("32:shl-long \x76\x31\x36\x2c\x20\x76\x30\x2c\x20\x76\x31\x36"); 66 | v10 = (v2) << (v10 & 0x3f); 67 | v11 = 48; 68 | LOGD("3a:shl-long \x76\x31\x38\x2c\x20\x76\x32\x2c\x20\x76\x31\x38"); 69 | v11 = (v3) << (v11 & 0x3f); 70 | LOGD("3e:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 71 | v10 = (v10 | v11); 72 | v11 = 40; 73 | LOGD("46:shl-long \x76\x31\x38\x2c\x20\x76\x34\x2c\x20\x76\x31\x38"); 74 | v11 = (v4) << (v11 & 0x3f); 75 | LOGD("4a:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 76 | v10 = (v10 | v11); 77 | v11 = 32; 78 | LOGD("52:shl-long \x76\x31\x38\x2c\x20\x76\x36\x2c\x20\x76\x31\x38"); 79 | v11 = (v5) << (v11 & 0x3f); 80 | LOGD("56:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 81 | v10 = (v10 | v11); 82 | v11 = 24; 83 | LOGD("5e:shl-long \x76\x31\x38\x2c\x20\x76\x38\x2c\x20\x76\x31\x38"); 84 | v11 = (v6) << (v11 & 0x3f); 85 | LOGD("62:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 86 | v10 = (v10 | v11); 87 | v11 = 16; 88 | LOGD("6a:shl-long \x76\x31\x38\x2c\x20\x76\x31\x30\x2c\x20\x76\x31\x38"); 89 | v11 = (v7) << (v11 & 0x3f); 90 | LOGD("6e:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 91 | v10 = (v10 | v11); 92 | v11 = 8; 93 | LOGD("76:shl-long \x76\x31\x38\x2c\x20\x76\x31\x32\x2c\x20\x76\x31\x38"); 94 | v11 = (v8) << (v11 & 0x3f); 95 | LOGD("7a:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 96 | v10 = (v10 | v11); 97 | LOGD("7e:or-long \x76\x31\x36\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x34"); 98 | v10 = (v10 | v9); 99 | v11 = 1234605616436508552; 100 | LOGD("8c:cmp-long \x76\x32\x30\x2c\x20\x76\x31\x36\x2c\x20\x76\x31\x38"); 101 | v12 = (v10 == v11) ? 0 : (v10 > v11) ? 1 : -1; 102 | LOGD("90:if-nez \x76\x32\x30\x2c\x20\x2b\x35"); 103 | if(v12 != 0){ 104 | goto L2; 105 | } 106 | else { 107 | goto L1; 108 | } 109 | L1: 110 | v13 = 1; 111 | goto L3; 112 | L2: 113 | v13 = 0; 114 | L3: 115 | LOGD("9e:invoke-static/range \x76\x31\x38\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 116 | { 117 | #define EX_HANDLE EX_UnwindBlock 118 | jclass &clz = cls2; 119 | jmethodID &mid = mth1; 120 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 121 | jvalue args[] = {{.z = (jboolean) v13}}; 122 | env->CallStaticVoidMethodA(clz, mid, args); 123 | D2C_CHECK_PENDING_EX; 124 | #undef EX_HANDLE 125 | } 126 | return; 127 | EX_UnwindBlock: return; 128 | } 129 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_truncateCheck__Lcom_test_TestCompiler_IntMath_00024Shorty_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->truncateCheck(Lcom/test/TestCompiler/IntMath$Shorty;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_truncateCheck__Lcom_test_TestCompiler_IntMath_00024Shorty_2(JNIEnv *env, jobject thiz, jobject p4){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL; 11 | jfieldID fld0 = NULL,fld1 = NULL,fld2 = NULL; 12 | jmethodID mth0 = NULL; 13 | v0 = (jobject)env->NewLocalRef(p4); 14 | L0: 15 | LOGD("0:iget-short \x76\x30\x2c\x20\x76\x34\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x53\x68\x6f\x72\x74\x20\x53"); 16 | { 17 | #define EX_HANDLE EX_UnwindBlock 18 | D2C_NOT_NULL(v0); 19 | jclass &clz = cls0; 20 | jfieldID &fld = fld0; 21 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mShort", "S"); 22 | v1 = (jshort) env->GetShortField(v0,fld); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | v2 = 1; 27 | v3 = -5597; 28 | LOGD("c:if-ne \x76\x30\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 29 | if(v1 != v3) { 30 | goto L2; 31 | } 32 | else { 33 | goto L1; 34 | } 35 | L1: 36 | v1 = 1; 37 | goto L3; 38 | L2: 39 | v1 = 0; 40 | L3: 41 | LOGD("16:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | jclass &clz = cls1; 45 | jmethodID &mid = mth0; 46 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 47 | jvalue args[] = {{.z = (jboolean) v1}}; 48 | env->CallStaticVoidMethodA(clz, mid, args); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | LOGD("1c:iget-char \x76\x30\x2c\x20\x76\x34\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x43\x68\x61\x72\x20\x43"); 53 | { 54 | #define EX_HANDLE EX_UnwindBlock 55 | D2C_NOT_NULL(v0); 56 | jclass &clz = cls0; 57 | jfieldID &fld = fld1; 58 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mChar", "C"); 59 | v1 = (jchar) env->GetCharField(v0,fld); 60 | D2C_CHECK_PENDING_EX; 61 | #undef EX_HANDLE 62 | } 63 | v3 = 59939; 64 | LOGD("26:if-ne \x76\x30\x2c\x20\x76\x33\x2c\x20\x2b\x34"); 65 | if(v1 != v3) { 66 | goto L5; 67 | } 68 | else { 69 | goto L4; 70 | } 71 | L4: 72 | v1 = 1; 73 | goto L6; 74 | L5: 75 | v1 = 0; 76 | L6: 77 | LOGD("30:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 78 | { 79 | #define EX_HANDLE EX_UnwindBlock 80 | jclass &clz = cls1; 81 | jmethodID &mid = mth0; 82 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 83 | jvalue args[] = {{.z = (jboolean) v1}}; 84 | env->CallStaticVoidMethodA(clz, mid, args); 85 | D2C_CHECK_PENDING_EX; 86 | #undef EX_HANDLE 87 | } 88 | LOGD("36:iget-byte \x76\x30\x2c\x20\x76\x34\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x42\x79\x74\x65\x20\x42"); 89 | { 90 | #define EX_HANDLE EX_UnwindBlock 91 | D2C_NOT_NULL(v0); 92 | jclass &clz = cls0; 93 | jfieldID &fld = fld2; 94 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mByte", "B"); 95 | v1 = (jbyte) env->GetByteField(v0,fld); 96 | D2C_CHECK_PENDING_EX; 97 | #undef EX_HANDLE 98 | } 99 | v3 = 35; 100 | LOGD("3e:if-ne \x76\x30\x2c\x20\x76\x33\x2c\x20\x2b\x33"); 101 | if(v1 != v3) { 102 | goto L8; 103 | } 104 | else { 105 | goto L7; 106 | } 107 | L7: 108 | goto L9; 109 | L8: 110 | v2 = 0; 111 | L9: 112 | LOGD("46:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 113 | { 114 | #define EX_HANDLE EX_UnwindBlock 115 | jclass &clz = cls1; 116 | jmethodID &mid = mth0; 117 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 118 | jvalue args[] = {{.z = (jboolean) v2}}; 119 | env->CallStaticVoidMethodA(clz, mid, args); 120 | D2C_CHECK_PENDING_EX; 121 | #undef EX_HANDLE 122 | } 123 | return; 124 | EX_UnwindBlock: return; 125 | } 126 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_truncateTest__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->truncateTest(I)Lcom/test/TestCompiler/IntMath$Shorty; */ 4 | extern "C" JNIEXPORT jobject JNICALL 5 | Java_com_test_TestCompiler_IntMath_truncateTest__I(JNIEnv *env, jobject thiz, jint p2){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 11 | jfieldID fld0 = NULL,fld1 = NULL,fld2 = NULL,fld3 = NULL; 12 | jmethodID mth0 = NULL, mth1 = NULL; 13 | v0 = (jint)p2; 14 | L0: 15 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 16 | { 17 | #define EX_HANDLE EX_UnwindBlock 18 | if (v1) { 19 | LOGD("env->DeleteLocalRef(%p):v1", v1); 20 | env->DeleteLocalRef(v1); 21 | } 22 | jclass &clz = cls0; 23 | jfieldID &fld = fld0; 24 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 25 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 26 | D2C_CHECK_PENDING_EX; 27 | #undef EX_HANDLE 28 | } 29 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x74\x72\x75\x6e\x63\x61\x74\x65\x54\x65\x73\x74\x27"); 30 | if (v2) { 31 | LOGD("env->DeleteLocalRef(%p):v2", v2); 32 | env->DeleteLocalRef(v2); 33 | } 34 | v2 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x74\x72\x75\x6e\x63\x61\x74\x65\x54\x65\x73\x74"); 35 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 36 | { 37 | #define EX_HANDLE EX_UnwindBlock 38 | D2C_NOT_NULL(v1); 39 | jclass &clz = cls1; 40 | jmethodID &mid = mth0; 41 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 42 | jvalue args[] = {{.l = v2}}; 43 | env->CallVoidMethodA(v1, mid, args); 44 | D2C_CHECK_PENDING_EX; 45 | #undef EX_HANDLE 46 | } 47 | LOGD("e:new-instance \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b"); 48 | { 49 | #define EX_HANDLE EX_UnwindBlock 50 | if (v1) { 51 | LOGD("env->DeleteLocalRef(%p):v1", v1); 52 | env->DeleteLocalRef(v1); 53 | } 54 | jclass &clz = cls2; 55 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/IntMath$Shorty"); 56 | v1 = (jobject) env->AllocObject(clz); 57 | D2C_CHECK_PENDING_EX; 58 | #undef EX_HANDLE 59 | } 60 | LOGD("12:invoke-direct \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 61 | { 62 | #define EX_HANDLE EX_UnwindBlock 63 | D2C_NOT_NULL(v1); 64 | jclass &clz = cls2; 65 | jmethodID &mid = mth1; 66 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/IntMath$Shorty", "", "()V"); 67 | jvalue args[] = {}; 68 | env->CallVoidMethodA(v1, mid, args); 69 | D2C_CHECK_PENDING_EX; 70 | #undef EX_HANDLE 71 | } 72 | v3 = (jshort)(v0); 73 | LOGD("1a:iput-short \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x53\x68\x6f\x72\x74\x20\x53"); 74 | { 75 | #define EX_HANDLE EX_UnwindBlock 76 | D2C_NOT_NULL(v1); 77 | jclass &clz = cls2; 78 | jfieldID &fld = fld1; 79 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mShort", "S"); 80 | env->SetShortField(v1,fld,(jshort) v3); 81 | D2C_CHECK_PENDING_EX; 82 | #undef EX_HANDLE 83 | } 84 | v3 = (jchar)(v0); 85 | LOGD("20:iput-char \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x43\x68\x61\x72\x20\x43"); 86 | { 87 | #define EX_HANDLE EX_UnwindBlock 88 | D2C_NOT_NULL(v1); 89 | jclass &clz = cls2; 90 | jfieldID &fld = fld2; 91 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mChar", "C"); 92 | env->SetCharField(v1,fld,(jchar) v3); 93 | D2C_CHECK_PENDING_EX; 94 | #undef EX_HANDLE 95 | } 96 | v3 = (jbyte)(v0); 97 | LOGD("26:iput-byte \x76\x31\x2c\x20\x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x4d\x61\x74\x68\x24\x53\x68\x6f\x72\x74\x79\x3b\x2d\x3e\x6d\x42\x79\x74\x65\x20\x42"); 98 | { 99 | #define EX_HANDLE EX_UnwindBlock 100 | D2C_NOT_NULL(v1); 101 | jclass &clz = cls2; 102 | jfieldID &fld = fld3; 103 | D2C_RESOLVE_FIELD(clz, fld, "com/test/TestCompiler/IntMath$Shorty", "mByte", "B"); 104 | env->SetByteField(v1,fld,(jbyte) v3); 105 | D2C_CHECK_PENDING_EX; 106 | #undef EX_HANDLE 107 | } 108 | return (jobject) v1; 109 | EX_UnwindBlock: return NULL; 110 | } 111 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_unopCheck__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->unopCheck(I)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_unopCheck__I(JNIEnv *env, jobject thiz, jint p1){ 6 | jint v0; 7 | jint v1; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jint)p1; 11 | L0: 12 | v1 = 37; 13 | LOGD("4:if-ne \x76\x31\x2c\x20\x76\x30\x2c\x20\x2b\x34"); 14 | if(v0 != v1) { 15 | goto L2; 16 | } 17 | else { 18 | goto L1; 19 | } 20 | L1: 21 | v1 = 1; 22 | goto L3; 23 | L2: 24 | v1 = 0; 25 | L3: 26 | LOGD("e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 27 | { 28 | #define EX_HANDLE EX_UnwindBlock 29 | jclass &clz = cls0; 30 | jmethodID &mid = mth0; 31 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 32 | jvalue args[] = {{.z = (jboolean) v1}}; 33 | env->CallStaticVoidMethodA(clz, mid, args); 34 | D2C_CHECK_PENDING_EX; 35 | #undef EX_HANDLE 36 | } 37 | return; 38 | EX_UnwindBlock: return; 39 | } 40 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_unopTest__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->unopTest(I)I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_TestCompiler_IntMath_unopTest__I(JNIEnv *env, jobject thiz, jint p0){ 6 | jint v0; 7 | v0 = (jint)p0; 8 | L0: 9 | LOGD("0:neg-int \x76\x30\x2c\x20\x76\x30"); 10 | v0 = (- v0); 11 | LOGD("2:xor-int/lit8 \x76\x30\x2c\x20\x76\x30\x2c\x20\x2d\x31"); 12 | v0 = (v0 ^ -1); 13 | return (jint) v0; 14 | EX_UnwindBlock: return (jint)0; 15 | } 16 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_IntMath_unsignedShiftTest__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/IntMath;->unsignedShiftTest()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_IntMath_unsignedShiftTest__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jint v2; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jint v6; 13 | jint v7; 14 | jint v8; 15 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 16 | jfieldID fld0 = NULL; 17 | jmethodID mth0 = NULL, mth1 = NULL; 18 | L0: 19 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 20 | { 21 | #define EX_HANDLE EX_UnwindBlock 22 | if (v0) { 23 | LOGD("env->DeleteLocalRef(%p):v0", v0); 24 | env->DeleteLocalRef(v0); 25 | } 26 | jclass &clz = cls0; 27 | jfieldID &fld = fld0; 28 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 29 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 30 | D2C_CHECK_PENDING_EX; 31 | #undef EX_HANDLE 32 | } 33 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x4d\x61\x74\x68\x2e\x75\x6e\x73\x69\x67\x6e\x65\x64\x53\x68\x69\x66\x74\x54\x65\x73\x74\x27"); 34 | if (v1) { 35 | LOGD("env->DeleteLocalRef(%p):v1", v1); 36 | env->DeleteLocalRef(v1); 37 | } 38 | v1 = (jstring) env->NewStringUTF("\x49\x6e\x74\x4d\x61\x74\x68\x2e\x75\x6e\x73\x69\x67\x6e\x65\x64\x53\x68\x69\x66\x74\x54\x65\x73\x74"); 39 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 40 | { 41 | #define EX_HANDLE EX_UnwindBlock 42 | D2C_NOT_NULL(v0); 43 | jclass &clz = cls1; 44 | jmethodID &mid = mth0; 45 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 46 | jvalue args[] = {{.l = v1}}; 47 | env->CallVoidMethodA(v0, mid, args); 48 | D2C_CHECK_PENDING_EX; 49 | #undef EX_HANDLE 50 | } 51 | v2 = -4; 52 | v3 = -4; 53 | v4 = 65532; 54 | v5 = -4; 55 | LOGD("1a:ushr-int/lit8 \x76\x34\x2c\x20\x76\x30\x2c\x20\x34"); 56 | v6 = ((uint32_t) v2) >> (4 & 0x1f); 57 | v2 = (jbyte)(v6); 58 | LOGD("20:ushr-int/lit8 \x76\x34\x2c\x20\x76\x31\x2c\x20\x34"); 59 | v6 = ((uint32_t) v3) >> (4 & 0x1f); 60 | v3 = (jshort)(v6); 61 | LOGD("26:ushr-int/lit8 \x76\x34\x2c\x20\x76\x32\x2c\x20\x34"); 62 | v6 = ((uint32_t) v4) >> (4 & 0x1f); 63 | v4 = (jchar)(v6); 64 | LOGD("2c:ushr-int/lit8 \x76\x33\x2c\x20\x76\x33\x2c\x20\x34"); 65 | v5 = ((uint32_t) v5) >> (4 & 0x1f); 66 | v6 = -1; 67 | v6 = -1; 68 | v7 = 1; 69 | LOGD("36:if-ne \x76\x30\x2c\x20\x76\x34\x2c\x20\x2b\x34"); 70 | if(v2 != v6) { 71 | goto L2; 72 | } 73 | else { 74 | goto L1; 75 | } 76 | L1: 77 | v8 = 1; 78 | goto L3; 79 | L2: 80 | v8 = 0; 81 | L3: 82 | LOGD("40:invoke-static \x76\x37\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 83 | { 84 | #define EX_HANDLE EX_UnwindBlock 85 | jclass &clz = cls2; 86 | jmethodID &mid = mth1; 87 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 88 | jvalue args[] = {{.z = (jboolean) v8}}; 89 | env->CallStaticVoidMethodA(clz, mid, args); 90 | D2C_CHECK_PENDING_EX; 91 | #undef EX_HANDLE 92 | } 93 | LOGD("46:if-ne \x76\x31\x2c\x20\x76\x34\x2c\x20\x2b\x34"); 94 | if(v3 != v6) { 95 | goto L5; 96 | } 97 | else { 98 | goto L4; 99 | } 100 | L4: 101 | v6 = 1; 102 | goto L6; 103 | L5: 104 | v6 = 0; 105 | L6: 106 | LOGD("50:invoke-static \x76\x34\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 107 | { 108 | #define EX_HANDLE EX_UnwindBlock 109 | jclass &clz = cls2; 110 | jmethodID &mid = mth1; 111 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 112 | jvalue args[] = {{.z = (jboolean) v6}}; 113 | env->CallStaticVoidMethodA(clz, mid, args); 114 | D2C_CHECK_PENDING_EX; 115 | #undef EX_HANDLE 116 | } 117 | v6 = 4095; 118 | LOGD("5a:if-ne \x76\x32\x2c\x20\x76\x34\x2c\x20\x2b\x34"); 119 | if(v4 != v6) { 120 | goto L8; 121 | } 122 | else { 123 | goto L7; 124 | } 125 | L7: 126 | v6 = 1; 127 | goto L9; 128 | L8: 129 | v6 = 0; 130 | L9: 131 | LOGD("64:invoke-static \x76\x34\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 132 | { 133 | #define EX_HANDLE EX_UnwindBlock 134 | jclass &clz = cls2; 135 | jmethodID &mid = mth1; 136 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 137 | jvalue args[] = {{.z = (jboolean) v6}}; 138 | env->CallStaticVoidMethodA(clz, mid, args); 139 | D2C_CHECK_PENDING_EX; 140 | #undef EX_HANDLE 141 | } 142 | v6 = 268435455; 143 | LOGD("70:if-ne \x76\x33\x2c\x20\x76\x34\x2c\x20\x2b\x33"); 144 | if(v5 != v6) { 145 | goto L11; 146 | } 147 | else { 148 | goto L10; 149 | } 150 | L10: 151 | goto L12; 152 | L11: 153 | v7 = 0; 154 | L12: 155 | LOGD("78:invoke-static \x76\x35\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 156 | { 157 | #define EX_HANDLE EX_UnwindBlock 158 | jclass &clz = cls2; 159 | jmethodID &mid = mth1; 160 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 161 | jvalue args[] = {{.z = (jboolean) v7}}; 162 | env->CallStaticVoidMethodA(clz, mid, args); 163 | D2C_CHECK_PENDING_EX; 164 | #undef EX_HANDLE 165 | } 166 | return; 167 | EX_UnwindBlock: return; 168 | } 169 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_InternedString_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/InternedString;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_InternedString_run__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jfieldID fld0 = NULL; 10 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 11 | L0: 12 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | if (v0) { 16 | LOGD("env->DeleteLocalRef(%p):v0", v0); 17 | env->DeleteLocalRef(v0); 18 | } 19 | jclass &clz = cls0; 20 | jfieldID &fld = fld0; 21 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 22 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x2e\x72\x75\x6e\x27"); 27 | if (v1) { 28 | LOGD("env->DeleteLocalRef(%p):v1", v1); 29 | env->DeleteLocalRef(v1); 30 | } 31 | v1 = (jstring) env->NewStringUTF("\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x2e\x72\x75\x6e"); 32 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | D2C_NOT_NULL(v0); 36 | jclass &clz = cls1; 37 | jmethodID &mid = mth0; 38 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 39 | jvalue args[] = {{.l = v1}}; 40 | env->CallVoidMethodA(v0, mid, args); 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | LOGD("e:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x74\x65\x73\x74\x49\x6d\x6d\x6f\x72\x74\x61\x6c\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x28\x29\x56"); 45 | { 46 | #define EX_HANDLE EX_UnwindBlock 47 | jclass &clz = cls2; 48 | jmethodID &mid = mth1; 49 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/InternedString", "testImmortalInternedString", "()V"); 50 | jvalue args[] = {}; 51 | env->CallStaticVoidMethodA(clz, mid, args); 52 | D2C_CHECK_PENDING_EX; 53 | #undef EX_HANDLE 54 | } 55 | LOGD("14:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x74\x65\x73\x74\x44\x65\x61\x64\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x28\x29\x56"); 56 | { 57 | #define EX_HANDLE EX_UnwindBlock 58 | jclass &clz = cls2; 59 | jmethodID &mid = mth2; 60 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/InternedString", "testDeadInternedString", "()V"); 61 | jvalue args[] = {}; 62 | env->CallStaticVoidMethodA(clz, mid, args); 63 | D2C_CHECK_PENDING_EX; 64 | #undef EX_HANDLE 65 | } 66 | return; 67 | EX_UnwindBlock: return; 68 | } 69 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_InternedString_testDeadInternedString__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/InternedString;->testDeadInternedString()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_InternedString_testDeadInternedString__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 11 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL, mth4 = NULL; 12 | L0: 13 | LOGD("0:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x49\x6e\x74\x65\x72\x6e\x65\x64\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x6d\x61\x6b\x65\x57\x65\x61\x6b\x53\x74\x72\x69\x6e\x67\x28\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x72\x65\x66\x2f\x57\x65\x61\x6b\x52\x65\x66\x65\x72\x65\x6e\x63\x65\x3b"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | jclass &clz = cls0; 17 | jmethodID &mid = mth0; 18 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/InternedString", "makeWeakString", "()Ljava/lang/ref/WeakReference;"); 19 | jvalue args[] = {}; 20 | v0 = (jobject) env->CallStaticObjectMethodA(clz, mid, args); 21 | D2C_CHECK_PENDING_EX; 22 | #undef EX_HANDLE 23 | } 24 | LOGD("6:move-result-object \x76\x30"); 25 | if (v1) { 26 | LOGD("env->DeleteLocalRef(%p):v1", v1); 27 | env->DeleteLocalRef(v1); 28 | } 29 | v1 = (jobject) v0; 30 | LOGD("8:invoke-static \x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b\x2d\x3e\x67\x65\x74\x52\x75\x6e\x74\x69\x6d\x65\x28\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b"); 31 | { 32 | #define EX_HANDLE EX_UnwindBlock 33 | jclass &clz = cls1; 34 | jmethodID &mid = mth1; 35 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "java/lang/Runtime", "getRuntime", "()Ljava/lang/Runtime;"); 36 | jvalue args[] = {}; 37 | v0 = (jobject) env->CallStaticObjectMethodA(clz, mid, args); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("e:move-result-object \x76\x31"); 42 | if (v2) { 43 | LOGD("env->DeleteLocalRef(%p):v2", v2); 44 | env->DeleteLocalRef(v2); 45 | } 46 | v2 = (jobject) v0; 47 | LOGD("10:invoke-virtual \x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b\x2d\x3e\x67\x63\x28\x29\x56"); 48 | { 49 | #define EX_HANDLE EX_UnwindBlock 50 | D2C_NOT_NULL(v2); 51 | jclass &clz = cls1; 52 | jmethodID &mid = mth2; 53 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/Runtime", "gc", "()V"); 54 | jvalue args[] = {}; 55 | env->CallVoidMethodA(v2, mid, args); 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | LOGD("16:invoke-virtual \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x72\x65\x66\x2f\x57\x65\x61\x6b\x52\x65\x66\x65\x72\x65\x6e\x63\x65\x3b\x2d\x3e\x67\x65\x74\x28\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 60 | { 61 | #define EX_HANDLE EX_UnwindBlock 62 | D2C_NOT_NULL(v1); 63 | jclass &clz = cls2; 64 | jmethodID &mid = mth3; 65 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/ref/WeakReference", "get", "()Ljava/lang/Object;"); 66 | jvalue args[] = {}; 67 | v0 = (jobject) env->CallObjectMethodA(v1, mid, args); 68 | D2C_CHECK_PENDING_EX; 69 | #undef EX_HANDLE 70 | } 71 | LOGD("1c:move-result-object \x76\x31"); 72 | if (v2) { 73 | LOGD("env->DeleteLocalRef(%p):v2", v2); 74 | env->DeleteLocalRef(v2); 75 | } 76 | v2 = (jobject) v0; 77 | LOGD("1e:if-nez \x76\x31\x2c\x20\x2b\x34"); 78 | if(v2 != NULL){ 79 | goto L2; 80 | } 81 | else { 82 | goto L1; 83 | } 84 | L1: 85 | v3 = 1; 86 | goto L3; 87 | L2: 88 | v3 = 0; 89 | L3: 90 | LOGD("28:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 91 | { 92 | #define EX_HANDLE EX_UnwindBlock 93 | jclass &clz = cls3; 94 | jmethodID &mid = mth4; 95 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 96 | jvalue args[] = {{.z = (jboolean) v3}}; 97 | env->CallStaticVoidMethodA(clz, mid, args); 98 | D2C_CHECK_PENDING_EX; 99 | #undef EX_HANDLE 100 | } 101 | return; 102 | EX_UnwindBlock: return; 103 | } 104 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_LocalRef_foo__I.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/LocalRef;->foo(I)Ljava/lang/String; */ 4 | extern "C" JNIEXPORT jstring JNICALL 5 | Java_com_test_TestCompiler_LocalRef_foo__I(JNIEnv *env, jobject thiz, jint p1){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jclass cls0 = NULL; 10 | jmethodID mth0 = NULL; 11 | v0 = (jint)p1; 12 | L0: 13 | LOGD("0:invoke-static \x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x76\x61\x6c\x75\x65\x4f\x66\x28\x49\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | jclass &clz = cls0; 17 | jmethodID &mid = mth0; 18 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "java/lang/String", "valueOf", "(I)Ljava/lang/String;"); 19 | jvalue args[] = {{.i = v0}}; 20 | v1 = (jstring) env->CallStaticObjectMethodA(clz, mid, args); 21 | D2C_CHECK_PENDING_EX; 22 | #undef EX_HANDLE 23 | } 24 | LOGD("6:move-result-object \x76\x30"); 25 | if (v2) { 26 | LOGD("env->DeleteLocalRef(%p):v2", v2); 27 | env->DeleteLocalRef(v2); 28 | } 29 | v2 = (jobject) v1; 30 | return (jstring) v2; 31 | EX_UnwindBlock: return NULL; 32 | } 33 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_LocalRef_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/LocalRef;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_LocalRef_run__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL; 9 | jfieldID fld0 = NULL; 10 | jmethodID mth0 = NULL, mth1 = NULL; 11 | L0: 12 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | if (v0) { 16 | LOGD("env->DeleteLocalRef(%p):v0", v0); 17 | env->DeleteLocalRef(v0); 18 | } 19 | jclass &clz = cls0; 20 | jfieldID &fld = fld0; 21 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 22 | v0 = (jobject) env->GetStaticObjectField(clz,fld); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x4c\x6f\x63\x61\x6c\x52\x65\x66\x2e\x72\x75\x6e\x27"); 27 | if (v1) { 28 | LOGD("env->DeleteLocalRef(%p):v1", v1); 29 | env->DeleteLocalRef(v1); 30 | } 31 | v1 = (jstring) env->NewStringUTF("\x4c\x6f\x63\x61\x6c\x52\x65\x66\x2e\x72\x75\x6e"); 32 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | D2C_NOT_NULL(v0); 36 | jclass &clz = cls1; 37 | jmethodID &mid = mth0; 38 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 39 | jvalue args[] = {{.l = v1}}; 40 | env->CallVoidMethodA(v0, mid, args); 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | LOGD("e:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4c\x6f\x63\x61\x6c\x52\x65\x66\x3b\x2d\x3e\x44\x65\x6c\x65\x74\x65\x4c\x6f\x63\x61\x6c\x52\x65\x66\x28\x29\x56"); 45 | { 46 | #define EX_HANDLE EX_UnwindBlock 47 | jclass &clz = cls2; 48 | jmethodID &mid = mth1; 49 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/LocalRef", "DeleteLocalRef", "()V"); 50 | jvalue args[] = {}; 51 | env->CallStaticVoidMethodA(clz, mid, args); 52 | D2C_CHECK_PENDING_EX; 53 | #undef EX_HANDLE 54 | } 55 | return; 56 | EX_UnwindBlock: return; 57 | } 58 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Main_assertTrue__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Main;->assertTrue(Z)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Main_assertTrue__Z(JNIEnv *env, jobject thiz, jboolean p1){ 6 | jint v0; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jint)p1; 11 | L0: 12 | LOGD("0:if-eqz \x76\x31\x2c\x20\x2b\x33"); 13 | if(v0 == 0){ 14 | goto L2; 15 | } 16 | else { 17 | goto L1; 18 | } 19 | L1: 20 | return; 21 | L2: 22 | LOGD("6:new-instance \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x45\x72\x72\x6f\x72\x3b"); 23 | { 24 | #define EX_HANDLE EX_UnwindBlock 25 | if (v1) { 26 | LOGD("env->DeleteLocalRef(%p):v1", v1); 27 | env->DeleteLocalRef(v1); 28 | } 29 | jclass &clz = cls0; 30 | D2C_RESOLVE_CLASS(clz,"java/lang/Error"); 31 | v1 = (jobject) env->AllocObject(clz); 32 | D2C_CHECK_PENDING_EX; 33 | #undef EX_HANDLE 34 | } 35 | LOGD("a:invoke-direct \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x45\x72\x72\x6f\x72\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 36 | { 37 | #define EX_HANDLE EX_UnwindBlock 38 | D2C_NOT_NULL(v1); 39 | jclass &clz = cls0; 40 | jmethodID &mid = mth0; 41 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/Error", "", "()V"); 42 | jvalue args[] = {}; 43 | env->CallVoidMethodA(v1, mid, args); 44 | D2C_CHECK_PENDING_EX; 45 | #undef EX_HANDLE 46 | } 47 | LOGD("10:throw \x76\x30"); 48 | { 49 | #define EX_HANDLE EX_UnwindBlock 50 | D2C_NOT_NULL(v1); 51 | env->Throw((jthrowable) v1); 52 | D2C_CHECK_PENDING_EX; 53 | #undef EX_HANDLE 54 | } 55 | EX_UnwindBlock: return; 56 | } 57 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Main_main___3Ljava_lang_String_2.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Main;->main([Ljava/lang/String;)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Main_main___3Ljava_lang_String_2(JNIEnv *env, jobject thiz, jarray p3){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | jobject v4 = NULL; 11 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 12 | jfieldID fld0 = NULL; 13 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL, mth4 = NULL; 14 | v0 = (jobject)env->NewLocalRef(p3); 15 | L0: 16 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b"); 17 | { 18 | #define EX_HANDLE EX_UnwindBlock 19 | if (v1) { 20 | LOGD("env->DeleteLocalRef(%p):v1", v1); 21 | env->DeleteLocalRef(v1); 22 | } 23 | jclass &clz = cls0; 24 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/Main"); 25 | v1 = (jobject) env->AllocObject(clz); 26 | D2C_CHECK_PENDING_EX; 27 | #undef EX_HANDLE 28 | } 29 | LOGD("4:invoke-direct \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 30 | { 31 | #define EX_HANDLE EX_UnwindBlock 32 | D2C_NOT_NULL(v1); 33 | jclass &clz = cls0; 34 | jmethodID &mid = mth0; 35 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Main", "", "()V"); 36 | jvalue args[] = {}; 37 | env->CallVoidMethodA(v1, mid, args); 38 | D2C_CHECK_PENDING_EX; 39 | #undef EX_HANDLE 40 | } 41 | LOGD("a:invoke-virtual \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x72\x75\x6e\x28\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | D2C_NOT_NULL(v1); 45 | jclass &clz = cls0; 46 | jmethodID &mid = mth1; 47 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Main", "run", "()V"); 48 | jvalue args[] = {}; 49 | env->CallVoidMethodA(v1, mid, args); 50 | D2C_CHECK_PENDING_EX; 51 | #undef EX_HANDLE 52 | } 53 | LOGD("10:invoke-static \x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b\x2d\x3e\x67\x65\x74\x52\x75\x6e\x74\x69\x6d\x65\x28\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b"); 54 | { 55 | #define EX_HANDLE EX_UnwindBlock 56 | jclass &clz = cls1; 57 | jmethodID &mid = mth2; 58 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "java/lang/Runtime", "getRuntime", "()Ljava/lang/Runtime;"); 59 | jvalue args[] = {}; 60 | v2 = (jobject) env->CallStaticObjectMethodA(clz, mid, args); 61 | D2C_CHECK_PENDING_EX; 62 | #undef EX_HANDLE 63 | } 64 | LOGD("16:move-result-object \x76\x31"); 65 | if (v3) { 66 | LOGD("env->DeleteLocalRef(%p):v3", v3); 67 | env->DeleteLocalRef(v3); 68 | } 69 | v3 = (jobject) v2; 70 | LOGD("18:invoke-virtual \x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x52\x75\x6e\x74\x69\x6d\x65\x3b\x2d\x3e\x67\x63\x28\x29\x56"); 71 | { 72 | #define EX_HANDLE EX_UnwindBlock 73 | D2C_NOT_NULL(v3); 74 | jclass &clz = cls1; 75 | jmethodID &mid = mth3; 76 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/Runtime", "gc", "()V"); 77 | jvalue args[] = {}; 78 | env->CallVoidMethodA(v3, mid, args); 79 | D2C_CHECK_PENDING_EX; 80 | #undef EX_HANDLE 81 | } 82 | LOGD("1e:sget-object \x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 83 | { 84 | #define EX_HANDLE EX_UnwindBlock 85 | if (v3) { 86 | LOGD("env->DeleteLocalRef(%p):v3", v3); 87 | env->DeleteLocalRef(v3); 88 | } 89 | jclass &clz = cls2; 90 | jfieldID &fld = fld0; 91 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 92 | v3 = (jobject) env->GetStaticObjectField(clz,fld); 93 | D2C_CHECK_PENDING_EX; 94 | #undef EX_HANDLE 95 | } 96 | LOGD("22:const-string \x76\x32\x2c\x20\x27\x44\x6f\x6e\x65\x21\x27"); 97 | if (v4) { 98 | LOGD("env->DeleteLocalRef(%p):v4", v4); 99 | env->DeleteLocalRef(v4); 100 | } 101 | v4 = (jstring) env->NewStringUTF("\x44\x6f\x6e\x65\x21"); 102 | LOGD("26:invoke-virtual \x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 103 | { 104 | #define EX_HANDLE EX_UnwindBlock 105 | D2C_NOT_NULL(v3); 106 | jclass &clz = cls3; 107 | jmethodID &mid = mth4; 108 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 109 | jvalue args[] = {{.l = v4}}; 110 | env->CallVoidMethodA(v3, mid, args); 111 | D2C_CHECK_PENDING_EX; 112 | #undef EX_HANDLE 113 | } 114 | return; 115 | EX_UnwindBlock: return; 116 | } 117 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MethodCallBase_tryThing__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MethodCallBase;->tryThing()I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_TestCompiler_MethodCallBase_tryThing__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | v0 = (jobject)env->NewLocalRef(thiz); 9 | L0: 10 | v1 = 7; 11 | return (jint) v1; 12 | EX_UnwindBlock: return (jint)0; 13 | } 14 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MethodCall_directly__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MethodCall;->directly()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_MethodCall_directly__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | v0 = (jobject)env->NewLocalRef(thiz); 8 | L0: 9 | return; 10 | EX_UnwindBlock: return; 11 | } 12 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MethodCall_testInterface__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MethodCall;->testInterface()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_MethodCall_testInterface__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jobject v3 = NULL; 10 | jobject v4 = NULL; 11 | jint v5; 12 | jint v6; 13 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 14 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL, mth4 = NULL; 15 | v0 = (jobject)env->NewLocalRef(thiz); 16 | L0: 17 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x75\x74\x69\x6c\x2f\x48\x61\x73\x68\x4d\x61\x70\x3b"); 18 | { 19 | #define EX_HANDLE EX_UnwindBlock 20 | if (v1) { 21 | LOGD("env->DeleteLocalRef(%p):v1", v1); 22 | env->DeleteLocalRef(v1); 23 | } 24 | jclass &clz = cls0; 25 | D2C_RESOLVE_CLASS(clz,"java/util/HashMap"); 26 | v1 = (jobject) env->AllocObject(clz); 27 | D2C_CHECK_PENDING_EX; 28 | #undef EX_HANDLE 29 | } 30 | LOGD("4:invoke-direct \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x75\x74\x69\x6c\x2f\x48\x61\x73\x68\x4d\x61\x70\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 31 | { 32 | #define EX_HANDLE EX_UnwindBlock 33 | D2C_NOT_NULL(v1); 34 | jclass &clz = cls0; 35 | jmethodID &mid = mth0; 36 | D2C_RESOLVE_METHOD(clz, mid, "java/util/HashMap", "", "()V"); 37 | jvalue args[] = {}; 38 | env->CallVoidMethodA(v1, mid, args); 39 | D2C_CHECK_PENDING_EX; 40 | #undef EX_HANDLE 41 | } 42 | LOGD("a:const-string \x76\x31\x2c\x20\x27\x6b\x65\x79\x27"); 43 | if (v2) { 44 | LOGD("env->DeleteLocalRef(%p):v2", v2); 45 | env->DeleteLocalRef(v2); 46 | } 47 | v2 = (jstring) env->NewStringUTF("\x6b\x65\x79"); 48 | LOGD("e:const-string \x76\x32\x2c\x20\x27\x76\x61\x6c\x75\x65\x27"); 49 | if (v3) { 50 | LOGD("env->DeleteLocalRef(%p):v3", v3); 51 | env->DeleteLocalRef(v3); 52 | } 53 | v3 = (jstring) env->NewStringUTF("\x76\x61\x6c\x75\x65"); 54 | LOGD("12:invoke-interface \x76\x30\x2c\x20\x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x75\x74\x69\x6c\x2f\x4d\x61\x70\x3b\x2d\x3e\x70\x75\x74\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 55 | { 56 | #define EX_HANDLE EX_UnwindBlock 57 | D2C_NOT_NULL(v1); 58 | jclass &clz = cls1; 59 | jmethodID &mid = mth1; 60 | D2C_RESOLVE_METHOD(clz, mid, "java/util/Map", "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); 61 | jvalue args[] = {{.l = v2},{.l = v3}}; 62 | v4 = (jobject) env->CallObjectMethodA(v1, mid, args); 63 | D2C_CHECK_PENDING_EX; 64 | #undef EX_HANDLE 65 | } 66 | if (v4) { 67 | LOGD("env->DeleteLocalRef(%p):v4", v4); 68 | env->DeleteLocalRef(v4); 69 | } 70 | LOGD("18:const-string \x76\x31\x2c\x20\x27\x6b\x65\x79\x27"); 71 | if (v2) { 72 | LOGD("env->DeleteLocalRef(%p):v2", v2); 73 | env->DeleteLocalRef(v2); 74 | } 75 | v2 = (jstring) env->NewStringUTF("\x6b\x65\x79"); 76 | LOGD("1c:invoke-interface \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x75\x74\x69\x6c\x2f\x4d\x61\x70\x3b\x2d\x3e\x67\x65\x74\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b"); 77 | { 78 | #define EX_HANDLE EX_UnwindBlock 79 | D2C_NOT_NULL(v1); 80 | jclass &clz = cls1; 81 | jmethodID &mid = mth2; 82 | D2C_RESOLVE_METHOD(clz, mid, "java/util/Map", "get", "(Ljava/lang/Object;)Ljava/lang/Object;"); 83 | jvalue args[] = {{.l = v2}}; 84 | v4 = (jobject) env->CallObjectMethodA(v1, mid, args); 85 | D2C_CHECK_PENDING_EX; 86 | #undef EX_HANDLE 87 | } 88 | LOGD("22:move-result-object \x76\x31"); 89 | if (v2) { 90 | LOGD("env->DeleteLocalRef(%p):v2", v2); 91 | env->DeleteLocalRef(v2); 92 | } 93 | v2 = (jobject) v4; 94 | LOGD("24:check-cast \x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b"); 95 | { 96 | #define EX_HANDLE EX_UnwindBlock 97 | jclass &clz = cls2; 98 | D2C_RESOLVE_CLASS(clz,"java/lang/String"); 99 | D2C_CHECK_CAST(v2, clz, "java/lang/String"); 100 | D2C_CHECK_PENDING_EX; 101 | #undef EX_HANDLE 102 | } 103 | LOGD("28:const-string \x76\x32\x2c\x20\x27\x76\x61\x6c\x75\x65\x27"); 104 | if (v3) { 105 | LOGD("env->DeleteLocalRef(%p):v3", v3); 106 | env->DeleteLocalRef(v3); 107 | } 108 | v3 = (jstring) env->NewStringUTF("\x76\x61\x6c\x75\x65"); 109 | LOGD("2c:invoke-virtual \x76\x31\x2c\x20\x76\x32\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x2d\x3e\x65\x71\x75\x61\x6c\x73\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4f\x62\x6a\x65\x63\x74\x3b\x29\x5a"); 110 | { 111 | #define EX_HANDLE EX_UnwindBlock 112 | D2C_NOT_NULL(v2); 113 | jclass &clz = cls2; 114 | jmethodID &mid = mth3; 115 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/String", "equals", "(Ljava/lang/Object;)Z"); 116 | jvalue args[] = {{.l = v3}}; 117 | v5 = (jboolean) env->CallBooleanMethodA(v2, mid, args); 118 | D2C_CHECK_PENDING_EX; 119 | #undef EX_HANDLE 120 | } 121 | LOGD("32:move-result \x76\x32"); 122 | v6 = (jint) v5; 123 | LOGD("34:invoke-static \x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 124 | { 125 | #define EX_HANDLE EX_UnwindBlock 126 | jclass &clz = cls3; 127 | jmethodID &mid = mth4; 128 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 129 | jvalue args[] = {{.z = (jboolean) v6}}; 130 | env->CallStaticVoidMethodA(clz, mid, args); 131 | D2C_CHECK_PENDING_EX; 132 | #undef EX_HANDLE 133 | } 134 | return; 135 | EX_UnwindBlock: return; 136 | } 137 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MethodCall_tryThing__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MethodCall;->tryThing()I */ 4 | extern "C" JNIEXPORT jint JNICALL 5 | Java_com_test_TestCompiler_MethodCall_tryThing__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jint v2; 9 | jint v3; 10 | jclass cls0 = NULL,cls1 = NULL; 11 | jmethodID mth0 = NULL, mth1 = NULL; 12 | v0 = (jobject)env->NewLocalRef(thiz); 13 | L0: 14 | LOGD("0:invoke-super \x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x65\x74\x68\x6f\x64\x43\x61\x6c\x6c\x42\x61\x73\x65\x3b\x2d\x3e\x74\x72\x79\x54\x68\x69\x6e\x67\x28\x29\x49"); 15 | { 16 | #define EX_HANDLE EX_UnwindBlock 17 | D2C_NOT_NULL(v0); 18 | jclass &clz = cls0; 19 | jmethodID &mid = mth0; 20 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/MethodCallBase", "tryThing", "()I"); 21 | jvalue args[] = {}; 22 | v1 = (jint) env->CallNonvirtualIntMethodA(v0, clz, mid, args); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("6:move-result \x76\x30"); 27 | v2 = (jint) v1; 28 | v3 = 7; 29 | LOGD("a:if-ne \x76\x30\x2c\x20\x76\x31\x2c\x20\x2b\x34"); 30 | if(v2 != v3) { 31 | goto L2; 32 | } 33 | else { 34 | goto L1; 35 | } 36 | L1: 37 | v3 = 1; 38 | goto L3; 39 | L2: 40 | v3 = 0; 41 | L3: 42 | LOGD("14:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 43 | { 44 | #define EX_HANDLE EX_UnwindBlock 45 | jclass &clz = cls1; 46 | jmethodID &mid = mth1; 47 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 48 | jvalue args[] = {{.z = (jboolean) v3}}; 49 | env->CallStaticVoidMethodA(clz, mid, args); 50 | D2C_CHECK_PENDING_EX; 51 | #undef EX_HANDLE 52 | } 53 | return (jint) v2; 54 | EX_UnwindBlock: return (jint)0; 55 | } 56 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MoreClasses_subFunc__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MoreClasses;->subFunc(Z)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_MoreClasses_subFunc__Z(JNIEnv *env, jobject thiz, jboolean p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(thiz); 11 | v1 = (jint)p1; 12 | L0: 13 | LOGD("0:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | jclass &clz = cls0; 17 | jmethodID &mid = mth0; 18 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 19 | jvalue args[] = {{.z = (jboolean) v1}}; 20 | env->CallStaticVoidMethodA(clz, mid, args); 21 | D2C_CHECK_PENDING_EX; 22 | #undef EX_HANDLE 23 | } 24 | return; 25 | EX_UnwindBlock: return; 26 | } 27 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_MoreClasses_superFunc__Z.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/MoreClasses;->superFunc(Z)V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_MoreClasses_superFunc__Z(JNIEnv *env, jobject thiz, jboolean p1){ 6 | jobject v0 = NULL; 7 | jint v1; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(thiz); 11 | v1 = (jint)p1; 12 | L0: 13 | LOGD("0:invoke-super \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x43\x6c\x61\x73\x73\x65\x73\x3b\x2d\x3e\x73\x75\x62\x46\x75\x6e\x63\x28\x5a\x29\x56"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | D2C_NOT_NULL(v0); 17 | jclass &clz = cls0; 18 | jmethodID &mid = mth0; 19 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Classes", "subFunc", "(Z)V"); 20 | jvalue args[] = {{.z = (jboolean) v1}}; 21 | env->CallNonvirtualVoidMethodA(v0, clz, mid, args); 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | return; 26 | EX_UnwindBlock: return; 27 | } 28 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_StaticField_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/StaticField;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_StaticField_run__(JNIEnv *env, jobject thiz){ 6 | jclass cls0 = NULL; 7 | jmethodID mth0 = NULL, mth1 = NULL; 8 | L0: 9 | LOGD("0:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x53\x74\x61\x74\x69\x63\x46\x69\x65\x6c\x64\x3b\x2d\x3e\x61\x73\x73\x69\x67\x6e\x46\x69\x65\x6c\x64\x73\x28\x29\x56"); 10 | { 11 | #define EX_HANDLE EX_UnwindBlock 12 | jclass &clz = cls0; 13 | jmethodID &mid = mth0; 14 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/StaticField", "assignFields", "()V"); 15 | jvalue args[] = {}; 16 | env->CallStaticVoidMethodA(clz, mid, args); 17 | D2C_CHECK_PENDING_EX; 18 | #undef EX_HANDLE 19 | } 20 | LOGD("6:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x53\x74\x61\x74\x69\x63\x46\x69\x65\x6c\x64\x3b\x2d\x3e\x63\x68\x65\x63\x6b\x46\x69\x65\x6c\x64\x73\x28\x29\x56"); 21 | { 22 | #define EX_HANDLE EX_UnwindBlock 23 | jclass &clz = cls0; 24 | jmethodID &mid = mth1; 25 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/StaticField", "checkFields", "()V"); 26 | jvalue args[] = {}; 27 | env->CallStaticVoidMethodA(clz, mid, args); 28 | D2C_CHECK_PENDING_EX; 29 | #undef EX_HANDLE 30 | } 31 | return; 32 | EX_UnwindBlock: return; 33 | } 34 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Switch_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Switch;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Switch_run__(JNIEnv *env, jobject thiz){ 6 | jclass cls0 = NULL; 7 | jmethodID mth0 = NULL; 8 | L0: 9 | LOGD("0:invoke-static \x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x53\x77\x69\x74\x63\x68\x3b\x2d\x3e\x74\x65\x73\x74\x53\x77\x69\x74\x63\x68\x28\x29\x56"); 10 | { 11 | #define EX_HANDLE EX_UnwindBlock 12 | jclass &clz = cls0; 13 | jmethodID &mid = mth0; 14 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Switch", "testSwitch", "()V"); 15 | jvalue args[] = {}; 16 | env->CallStaticVoidMethodA(clz, mid, args); 17 | D2C_CHECK_PENDING_EX; 18 | #undef EX_HANDLE 19 | } 20 | return; 21 | EX_UnwindBlock: return; 22 | } 23 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_one__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->one()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_one__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jthrowable exception; 11 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 12 | jfieldID fld0 = NULL; 13 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 14 | v0 = (jobject)env->NewLocalRef(thiz); 15 | L0: 16 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 17 | { 18 | #define EX_HANDLE EX_UnwindBlock 19 | if (v1) { 20 | LOGD("env->DeleteLocalRef(%p):v1", v1); 21 | env->DeleteLocalRef(v1); 22 | } 23 | jclass &clz = cls0; 24 | jfieldID &fld = fld0; 25 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 26 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 27 | D2C_CHECK_PENDING_EX; 28 | #undef EX_HANDLE 29 | } 30 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x54\x68\x72\x6f\x77\x2e\x6f\x6e\x65\x27"); 31 | if (v2) { 32 | LOGD("env->DeleteLocalRef(%p):v2", v2); 33 | env->DeleteLocalRef(v2); 34 | } 35 | v2 = (jstring) env->NewStringUTF("\x54\x68\x72\x6f\x77\x2e\x6f\x6e\x65"); 36 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 37 | { 38 | #define EX_HANDLE EX_UnwindBlock 39 | D2C_NOT_NULL(v1); 40 | jclass &clz = cls1; 41 | jmethodID &mid = mth0; 42 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 43 | jvalue args[] = {{.l = v2}}; 44 | env->CallVoidMethodA(v1, mid, args); 45 | D2C_CHECK_PENDING_EX; 46 | #undef EX_HANDLE 47 | } 48 | L1: 49 | LOGD("e:invoke-virtual \x76\x32\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x74\x68\x72\x6f\x77\x4e\x75\x6c\x6c\x50\x6f\x69\x6e\x74\x65\x72\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x28\x29\x56"); 50 | { 51 | #define EX_HANDLE EX_LandingPad_1 52 | D2C_NOT_NULL(v0); 53 | jclass &clz = cls2; 54 | jmethodID &mid = mth1; 55 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "throwNullPointerException", "()V"); 56 | jvalue args[] = {}; 57 | env->CallVoidMethodA(v0, mid, args); 58 | D2C_CHECK_PENDING_EX; 59 | #undef EX_HANDLE 60 | } 61 | L2: 62 | v3 = 0; 63 | v3 = 0; 64 | L3: 65 | LOGD("16:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 66 | { 67 | #define EX_HANDLE EX_LandingPad_1 68 | jclass &clz = cls3; 69 | jmethodID &mid = mth2; 70 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 71 | jvalue args[] = {{.z = (jboolean) v3}}; 72 | env->CallStaticVoidMethodA(clz, mid, args); 73 | D2C_CHECK_PENDING_EX; 74 | #undef EX_HANDLE 75 | } 76 | L4: 77 | LOGD("1e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 78 | { 79 | #define EX_HANDLE EX_UnwindBlock 80 | jclass &clz = cls3; 81 | jmethodID &mid = mth2; 82 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 83 | jvalue args[] = {{.z = (jboolean) v3}}; 84 | env->CallStaticVoidMethodA(clz, mid, args); 85 | D2C_CHECK_PENDING_EX; 86 | #undef EX_HANDLE 87 | } 88 | return; 89 | L5: 90 | LOGD("26:move-exception \x76\x30"); 91 | if (v1) { 92 | LOGD("env->DeleteLocalRef(%p):v1", v1); 93 | env->DeleteLocalRef(v1); 94 | } 95 | v1 = exception; 96 | return; 97 | 98 | EX_LandingPad_1: 99 | D2C_GET_PENDING_EX 100 | if(d2c_is_instance_of(env, exception, "java/lang/Exception")) { 101 | goto L5; 102 | } 103 | D2C_GOTO_UNWINDBLOCK 104 | EX_UnwindBlock: return; 105 | } 106 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_run__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->run()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_run__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jclass cls0 = NULL; 8 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL, mth3 = NULL, mth4 = NULL; 9 | L0: 10 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b"); 11 | { 12 | #define EX_HANDLE EX_UnwindBlock 13 | if (v0) { 14 | LOGD("env->DeleteLocalRef(%p):v0", v0); 15 | env->DeleteLocalRef(v0); 16 | } 17 | jclass &clz = cls0; 18 | D2C_RESOLVE_CLASS(clz,"com/test/TestCompiler/Throw"); 19 | v0 = (jobject) env->AllocObject(clz); 20 | D2C_CHECK_PENDING_EX; 21 | #undef EX_HANDLE 22 | } 23 | LOGD("4:invoke-direct \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 24 | { 25 | #define EX_HANDLE EX_UnwindBlock 26 | D2C_NOT_NULL(v0); 27 | jclass &clz = cls0; 28 | jmethodID &mid = mth0; 29 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "", "()V"); 30 | jvalue args[] = {}; 31 | env->CallVoidMethodA(v0, mid, args); 32 | D2C_CHECK_PENDING_EX; 33 | #undef EX_HANDLE 34 | } 35 | LOGD("a:invoke-virtual \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x6f\x6e\x65\x28\x29\x56"); 36 | { 37 | #define EX_HANDLE EX_UnwindBlock 38 | D2C_NOT_NULL(v0); 39 | jclass &clz = cls0; 40 | jmethodID &mid = mth1; 41 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "one", "()V"); 42 | jvalue args[] = {}; 43 | env->CallVoidMethodA(v0, mid, args); 44 | D2C_CHECK_PENDING_EX; 45 | #undef EX_HANDLE 46 | } 47 | LOGD("10:invoke-virtual \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x74\x77\x6f\x41\x28\x29\x56"); 48 | { 49 | #define EX_HANDLE EX_UnwindBlock 50 | D2C_NOT_NULL(v0); 51 | jclass &clz = cls0; 52 | jmethodID &mid = mth2; 53 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "twoA", "()V"); 54 | jvalue args[] = {}; 55 | env->CallVoidMethodA(v0, mid, args); 56 | D2C_CHECK_PENDING_EX; 57 | #undef EX_HANDLE 58 | } 59 | LOGD("16:invoke-virtual \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x74\x77\x6f\x4e\x28\x29\x56"); 60 | { 61 | #define EX_HANDLE EX_UnwindBlock 62 | D2C_NOT_NULL(v0); 63 | jclass &clz = cls0; 64 | jmethodID &mid = mth3; 65 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "twoN", "()V"); 66 | jvalue args[] = {}; 67 | env->CallVoidMethodA(v0, mid, args); 68 | D2C_CHECK_PENDING_EX; 69 | #undef EX_HANDLE 70 | } 71 | LOGD("1c:invoke-virtual \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x72\x65\x74\x68\x72\x6f\x77\x28\x29\x56"); 72 | { 73 | #define EX_HANDLE EX_UnwindBlock 74 | D2C_NOT_NULL(v0); 75 | jclass &clz = cls0; 76 | jmethodID &mid = mth4; 77 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "rethrow", "()V"); 78 | jvalue args[] = {}; 79 | env->CallVoidMethodA(v0, mid, args); 80 | D2C_CHECK_PENDING_EX; 81 | #undef EX_HANDLE 82 | } 83 | return; 84 | EX_UnwindBlock: return; 85 | } 86 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_throwArithmeticException__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->throwArithmeticException()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_throwArithmeticException__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jclass cls0 = NULL; 9 | jmethodID mth0 = NULL; 10 | v0 = (jobject)env->NewLocalRef(thiz); 11 | L0: 12 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x41\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x3b"); 13 | { 14 | #define EX_HANDLE EX_UnwindBlock 15 | if (v1) { 16 | LOGD("env->DeleteLocalRef(%p):v1", v1); 17 | env->DeleteLocalRef(v1); 18 | } 19 | jclass &clz = cls0; 20 | D2C_RESOLVE_CLASS(clz,"java/lang/ArithmeticException"); 21 | v1 = (jobject) env->AllocObject(clz); 22 | D2C_CHECK_PENDING_EX; 23 | #undef EX_HANDLE 24 | } 25 | LOGD("4:invoke-direct \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x41\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x29\x56"); 26 | { 27 | #define EX_HANDLE EX_UnwindBlock 28 | D2C_NOT_NULL(v1); 29 | jclass &clz = cls0; 30 | jmethodID &mid = mth0; 31 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/ArithmeticException", "", "()V"); 32 | jvalue args[] = {}; 33 | env->CallVoidMethodA(v1, mid, args); 34 | D2C_CHECK_PENDING_EX; 35 | #undef EX_HANDLE 36 | } 37 | LOGD("a:throw \x76\x30"); 38 | { 39 | #define EX_HANDLE EX_UnwindBlock 40 | D2C_NOT_NULL(v1); 41 | env->Throw((jthrowable) v1); 42 | D2C_CHECK_PENDING_EX; 43 | #undef EX_HANDLE 44 | } 45 | EX_UnwindBlock: return; 46 | } 47 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_throwNullPointerException__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->throwNullPointerException()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_throwNullPointerException__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jclass cls0 = NULL; 10 | jmethodID mth0 = NULL; 11 | v0 = (jobject)env->NewLocalRef(thiz); 12 | L0: 13 | LOGD("0:new-instance \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4e\x75\x6c\x6c\x50\x6f\x69\x6e\x74\x65\x72\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x3b"); 14 | { 15 | #define EX_HANDLE EX_UnwindBlock 16 | if (v1) { 17 | LOGD("env->DeleteLocalRef(%p):v1", v1); 18 | env->DeleteLocalRef(v1); 19 | } 20 | jclass &clz = cls0; 21 | D2C_RESOLVE_CLASS(clz,"java/lang/NullPointerException"); 22 | v1 = (jobject) env->AllocObject(clz); 23 | D2C_CHECK_PENDING_EX; 24 | #undef EX_HANDLE 25 | } 26 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x6e\x70\x65\x21\x27"); 27 | if (v2) { 28 | LOGD("env->DeleteLocalRef(%p):v2", v2); 29 | env->DeleteLocalRef(v2); 30 | } 31 | v2 = (jstring) env->NewStringUTF("\x6e\x70\x65\x21"); 32 | LOGD("8:invoke-direct \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x4e\x75\x6c\x6c\x50\x6f\x69\x6e\x74\x65\x72\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x3b\x2d\x3e\x3c\x69\x6e\x69\x74\x3e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 33 | { 34 | #define EX_HANDLE EX_UnwindBlock 35 | D2C_NOT_NULL(v1); 36 | jclass &clz = cls0; 37 | jmethodID &mid = mth0; 38 | D2C_RESOLVE_METHOD(clz, mid, "java/lang/NullPointerException", "", "(Ljava/lang/String;)V"); 39 | jvalue args[] = {{.l = v2}}; 40 | env->CallVoidMethodA(v1, mid, args); 41 | D2C_CHECK_PENDING_EX; 42 | #undef EX_HANDLE 43 | } 44 | LOGD("e:throw \x76\x30"); 45 | { 46 | #define EX_HANDLE EX_UnwindBlock 47 | D2C_NOT_NULL(v1); 48 | env->Throw((jthrowable) v1); 49 | D2C_CHECK_PENDING_EX; 50 | #undef EX_HANDLE 51 | } 52 | EX_UnwindBlock: return; 53 | } 54 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_twoA__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->twoA()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_twoA__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jobject v6 = NULL; 13 | jint v7; 14 | jint v8; 15 | jthrowable exception; 16 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 17 | jfieldID fld0 = NULL; 18 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 19 | v0 = (jobject)env->NewLocalRef(thiz); 20 | L0: 21 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | if (v1) { 25 | LOGD("env->DeleteLocalRef(%p):v1", v1); 26 | env->DeleteLocalRef(v1); 27 | } 28 | jclass &clz = cls0; 29 | jfieldID &fld = fld0; 30 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 31 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 32 | D2C_CHECK_PENDING_EX; 33 | #undef EX_HANDLE 34 | } 35 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x54\x68\x72\x6f\x77\x2e\x74\x77\x6f\x41\x27"); 36 | if (v2) { 37 | LOGD("env->DeleteLocalRef(%p):v2", v2); 38 | env->DeleteLocalRef(v2); 39 | } 40 | v2 = (jstring) env->NewStringUTF("\x54\x68\x72\x6f\x77\x2e\x74\x77\x6f\x41"); 41 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | D2C_NOT_NULL(v1); 45 | jclass &clz = cls1; 46 | jmethodID &mid = mth0; 47 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 48 | jvalue args[] = {{.l = v2}}; 49 | env->CallVoidMethodA(v1, mid, args); 50 | D2C_CHECK_PENDING_EX; 51 | #undef EX_HANDLE 52 | } 53 | v3 = 0; 54 | v4 = 0; 55 | v4 = 0; 56 | v5 = 0; 57 | v5 = 0; 58 | L1: 59 | LOGD("14:invoke-virtual \x76\x36\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x74\x68\x72\x6f\x77\x41\x72\x69\x74\x68\x6d\x65\x74\x69\x63\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x28\x29\x56"); 60 | { 61 | #define EX_HANDLE EX_LandingPad_1 62 | D2C_NOT_NULL(v0); 63 | jclass &clz = cls2; 64 | jmethodID &mid = mth1; 65 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "throwArithmeticException", "()V"); 66 | jvalue args[] = {}; 67 | env->CallVoidMethodA(v0, mid, args); 68 | D2C_CHECK_PENDING_EX; 69 | #undef EX_HANDLE 70 | } 71 | L2: 72 | v5 = 1; 73 | goto L5; 74 | L3: 75 | LOGD("1e:move-exception \x76\x33"); 76 | if (v6) { 77 | LOGD("env->DeleteLocalRef(%p):v6", v6); 78 | env->DeleteLocalRef(v6); 79 | } 80 | v6 = exception; 81 | v3 = 1; 82 | goto L6; 83 | L4: 84 | LOGD("24:move-exception \x76\x33"); 85 | if (v6) { 86 | LOGD("env->DeleteLocalRef(%p):v6", v6); 87 | env->DeleteLocalRef(v6); 88 | } 89 | v6 = exception; 90 | v4 = 1; 91 | L5: 92 | L6: 93 | LOGD("2a:invoke-static \x76\x31\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 94 | { 95 | #define EX_HANDLE EX_UnwindBlock 96 | jclass &clz = cls3; 97 | jmethodID &mid = mth2; 98 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 99 | jvalue args[] = {{.z = (jboolean) v4}}; 100 | env->CallStaticVoidMethodA(clz, mid, args); 101 | D2C_CHECK_PENDING_EX; 102 | #undef EX_HANDLE 103 | } 104 | v7 = 1; 105 | LOGD("34:if-nez \x76\x30\x2c\x20\x2b\x34"); 106 | if(v3 != 0){ 107 | goto L8; 108 | } 109 | else { 110 | goto L7; 111 | } 112 | L7: 113 | v8 = 1; 114 | goto L9; 115 | L8: 116 | v8 = 0; 117 | L9: 118 | LOGD("3e:invoke-static \x76\x35\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 119 | { 120 | #define EX_HANDLE EX_UnwindBlock 121 | jclass &clz = cls3; 122 | jmethodID &mid = mth2; 123 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 124 | jvalue args[] = {{.z = (jboolean) v8}}; 125 | env->CallStaticVoidMethodA(clz, mid, args); 126 | D2C_CHECK_PENDING_EX; 127 | #undef EX_HANDLE 128 | } 129 | LOGD("44:if-nez \x76\x32\x2c\x20\x2b\x33"); 130 | if(v5 != 0){ 131 | goto L11; 132 | } 133 | else { 134 | goto L10; 135 | } 136 | L10: 137 | goto L12; 138 | L11: 139 | v7 = 0; 140 | L12: 141 | LOGD("4c:invoke-static \x76\x33\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 142 | { 143 | #define EX_HANDLE EX_UnwindBlock 144 | jclass &clz = cls3; 145 | jmethodID &mid = mth2; 146 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 147 | jvalue args[] = {{.z = (jboolean) v7}}; 148 | env->CallStaticVoidMethodA(clz, mid, args); 149 | D2C_CHECK_PENDING_EX; 150 | #undef EX_HANDLE 151 | } 152 | return; 153 | 154 | EX_LandingPad_1: 155 | D2C_GET_PENDING_EX 156 | if(d2c_is_instance_of(env, exception, "java/lang/ArithmeticException")) { 157 | goto L4; 158 | } 159 | if(d2c_is_instance_of(env, exception, "java/lang/NullPointerException")) { 160 | goto L3; 161 | } 162 | D2C_GOTO_UNWINDBLOCK 163 | EX_UnwindBlock: return; 164 | } 165 | -------------------------------------------------------------------------------- /jni/nc/Java_com_test_TestCompiler_Throw_twoN__.cpp: -------------------------------------------------------------------------------- 1 | #include "Dex2C.h" 2 | 3 | /* Lcom/test/TestCompiler/Throw;->twoN()V */ 4 | extern "C" JNIEXPORT void JNICALL 5 | Java_com_test_TestCompiler_Throw_twoN__(JNIEnv *env, jobject thiz){ 6 | jobject v0 = NULL; 7 | jobject v1 = NULL; 8 | jobject v2 = NULL; 9 | jint v3; 10 | jint v4; 11 | jint v5; 12 | jobject v6 = NULL; 13 | jint v7; 14 | jint v8; 15 | jthrowable exception; 16 | jclass cls0 = NULL,cls1 = NULL,cls2 = NULL,cls3 = NULL; 17 | jfieldID fld0 = NULL; 18 | jmethodID mth0 = NULL, mth1 = NULL, mth2 = NULL; 19 | v0 = (jobject)env->NewLocalRef(thiz); 20 | L0: 21 | LOGD("0:sget-object \x76\x30\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x79\x73\x74\x65\x6d\x3b\x2d\x3e\x6f\x75\x74\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b"); 22 | { 23 | #define EX_HANDLE EX_UnwindBlock 24 | if (v1) { 25 | LOGD("env->DeleteLocalRef(%p):v1", v1); 26 | env->DeleteLocalRef(v1); 27 | } 28 | jclass &clz = cls0; 29 | jfieldID &fld = fld0; 30 | D2C_RESOLVE_STATIC_FIELD(clz, fld, "java/lang/System", "out", "Ljava/io/PrintStream;"); 31 | v1 = (jobject) env->GetStaticObjectField(clz,fld); 32 | D2C_CHECK_PENDING_EX; 33 | #undef EX_HANDLE 34 | } 35 | LOGD("4:const-string \x76\x31\x2c\x20\x27\x54\x68\x72\x6f\x77\x2e\x74\x77\x6f\x4e\x27"); 36 | if (v2) { 37 | LOGD("env->DeleteLocalRef(%p):v2", v2); 38 | env->DeleteLocalRef(v2); 39 | } 40 | v2 = (jstring) env->NewStringUTF("\x54\x68\x72\x6f\x77\x2e\x74\x77\x6f\x4e"); 41 | LOGD("8:invoke-virtual \x76\x30\x2c\x20\x76\x31\x2c\x20\x4c\x6a\x61\x76\x61\x2f\x69\x6f\x2f\x50\x72\x69\x6e\x74\x53\x74\x72\x65\x61\x6d\x3b\x2d\x3e\x70\x72\x69\x6e\x74\x6c\x6e\x28\x4c\x6a\x61\x76\x61\x2f\x6c\x61\x6e\x67\x2f\x53\x74\x72\x69\x6e\x67\x3b\x29\x56"); 42 | { 43 | #define EX_HANDLE EX_UnwindBlock 44 | D2C_NOT_NULL(v1); 45 | jclass &clz = cls1; 46 | jmethodID &mid = mth0; 47 | D2C_RESOLVE_METHOD(clz, mid, "java/io/PrintStream", "println", "(Ljava/lang/String;)V"); 48 | jvalue args[] = {{.l = v2}}; 49 | env->CallVoidMethodA(v1, mid, args); 50 | D2C_CHECK_PENDING_EX; 51 | #undef EX_HANDLE 52 | } 53 | v3 = 0; 54 | v4 = 0; 55 | v4 = 0; 56 | v5 = 0; 57 | v5 = 0; 58 | L1: 59 | LOGD("14:invoke-virtual \x76\x36\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x54\x68\x72\x6f\x77\x3b\x2d\x3e\x74\x68\x72\x6f\x77\x4e\x75\x6c\x6c\x50\x6f\x69\x6e\x74\x65\x72\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x28\x29\x56"); 60 | { 61 | #define EX_HANDLE EX_LandingPad_1 62 | D2C_NOT_NULL(v0); 63 | jclass &clz = cls2; 64 | jmethodID &mid = mth1; 65 | D2C_RESOLVE_METHOD(clz, mid, "com/test/TestCompiler/Throw", "throwNullPointerException", "()V"); 66 | jvalue args[] = {}; 67 | env->CallVoidMethodA(v0, mid, args); 68 | D2C_CHECK_PENDING_EX; 69 | #undef EX_HANDLE 70 | } 71 | L2: 72 | v5 = 1; 73 | goto L5; 74 | L3: 75 | LOGD("1e:move-exception \x76\x33"); 76 | if (v6) { 77 | LOGD("env->DeleteLocalRef(%p):v6", v6); 78 | env->DeleteLocalRef(v6); 79 | } 80 | v6 = exception; 81 | v3 = 1; 82 | goto L6; 83 | L4: 84 | LOGD("24:move-exception \x76\x33"); 85 | if (v6) { 86 | LOGD("env->DeleteLocalRef(%p):v6", v6); 87 | env->DeleteLocalRef(v6); 88 | } 89 | v6 = exception; 90 | v4 = 1; 91 | L5: 92 | L6: 93 | v7 = 1; 94 | LOGD("2e:if-nez \x76\x31\x2c\x20\x2b\x34"); 95 | if(v4 != 0){ 96 | goto L8; 97 | } 98 | else { 99 | goto L7; 100 | } 101 | L7: 102 | v8 = 1; 103 | goto L9; 104 | L8: 105 | v8 = 0; 106 | L9: 107 | LOGD("38:invoke-static \x76\x35\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 108 | { 109 | #define EX_HANDLE EX_UnwindBlock 110 | jclass &clz = cls3; 111 | jmethodID &mid = mth2; 112 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 113 | jvalue args[] = {{.z = (jboolean) v8}}; 114 | env->CallStaticVoidMethodA(clz, mid, args); 115 | D2C_CHECK_PENDING_EX; 116 | #undef EX_HANDLE 117 | } 118 | LOGD("3e:invoke-static \x76\x30\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 119 | { 120 | #define EX_HANDLE EX_UnwindBlock 121 | jclass &clz = cls3; 122 | jmethodID &mid = mth2; 123 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 124 | jvalue args[] = {{.z = (jboolean) v3}}; 125 | env->CallStaticVoidMethodA(clz, mid, args); 126 | D2C_CHECK_PENDING_EX; 127 | #undef EX_HANDLE 128 | } 129 | LOGD("44:if-nez \x76\x32\x2c\x20\x2b\x33"); 130 | if(v5 != 0){ 131 | goto L11; 132 | } 133 | else { 134 | goto L10; 135 | } 136 | L10: 137 | goto L12; 138 | L11: 139 | v7 = 0; 140 | L12: 141 | LOGD("4c:invoke-static \x76\x33\x2c\x20\x4c\x63\x6f\x6d\x2f\x74\x65\x73\x74\x2f\x54\x65\x73\x74\x43\x6f\x6d\x70\x69\x6c\x65\x72\x2f\x4d\x61\x69\x6e\x3b\x2d\x3e\x61\x73\x73\x65\x72\x74\x54\x72\x75\x65\x28\x5a\x29\x56"); 142 | { 143 | #define EX_HANDLE EX_UnwindBlock 144 | jclass &clz = cls3; 145 | jmethodID &mid = mth2; 146 | D2C_RESOLVE_STATIC_METHOD(clz, mid, "com/test/TestCompiler/Main", "assertTrue", "(Z)V"); 147 | jvalue args[] = {{.z = (jboolean) v7}}; 148 | env->CallStaticVoidMethodA(clz, mid, args); 149 | D2C_CHECK_PENDING_EX; 150 | #undef EX_HANDLE 151 | } 152 | return; 153 | 154 | EX_LandingPad_1: 155 | D2C_GET_PENDING_EX 156 | if(d2c_is_instance_of(env, exception, "java/lang/ArithmeticException")) { 157 | goto L4; 158 | } 159 | if(d2c_is_instance_of(env, exception, "java/lang/NullPointerException")) { 160 | goto L3; 161 | } 162 | D2C_GOTO_UNWINDBLOCK 163 | EX_UnwindBlock: return; 164 | } 165 | -------------------------------------------------------------------------------- /jni/nc/ScopedLocalRef.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SCOPED_LOCAL_REF_H_included 18 | #define SCOPED_LOCAL_REF_H_included 19 | 20 | #include "jni.h" 21 | 22 | #include 23 | 24 | // A smart pointer that deletes a JNI local reference when it goes out of scope. 25 | template 26 | class ScopedLocalRef { 27 | public: 28 | ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) { 29 | } 30 | 31 | ~ScopedLocalRef() { 32 | reset(); 33 | } 34 | 35 | void reset(T ptr = NULL) { 36 | if (ptr != mLocalRef) { 37 | if (mLocalRef != NULL) { 38 | mEnv->DeleteLocalRef(mLocalRef); 39 | } 40 | mLocalRef = ptr; 41 | } 42 | } 43 | 44 | T release() __attribute__((warn_unused_result)) { 45 | T localRef = mLocalRef; 46 | mLocalRef = NULL; 47 | return localRef; 48 | } 49 | 50 | T get() const { 51 | return mLocalRef; 52 | } 53 | 54 | private: 55 | JNIEnv* mEnv; 56 | T mLocalRef; 57 | 58 | // Disallow copy and assignment. 59 | ScopedLocalRef(const ScopedLocalRef&); 60 | void operator=(const ScopedLocalRef&); 61 | }; 62 | 63 | #endif // SCOPED_LOCAL_REF_H_included 64 | -------------------------------------------------------------------------------- /jni/nc/ScopedPthreadMutexLock.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2010 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef SCOPED_PTHREAD_MUTEX_LOCK_H_included 18 | #define SCOPED_PTHREAD_MUTEX_LOCK_H_included 19 | 20 | #include 21 | 22 | /** 23 | * Locks and unlocks a pthread_mutex_t as it goes in and out of scope. 24 | */ 25 | class ScopedPthreadMutexLock { 26 | public: 27 | explicit ScopedPthreadMutexLock(pthread_mutex_t* mutex) : mMutexPtr(mutex) { 28 | pthread_mutex_lock(mMutexPtr); 29 | } 30 | 31 | ~ScopedPthreadMutexLock() { 32 | pthread_mutex_unlock(mMutexPtr); 33 | } 34 | 35 | private: 36 | pthread_mutex_t* mMutexPtr; 37 | 38 | // Disallow copy and assignment. 39 | ScopedPthreadMutexLock(const ScopedPthreadMutexLock&); 40 | void operator=(const ScopedPthreadMutexLock&); 41 | }; 42 | 43 | #endif // SCOPED_PTHREAD_MUTEX_LOCK_H_included 44 | -------------------------------------------------------------------------------- /jni/nc/well_known_classes.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #include 18 | #include 19 | #include 20 | 21 | #include "well_known_classes.h" 22 | #include "ScopedLocalRef.h" 23 | 24 | #define LOG_FATAL(...) __android_log_print(ANDROID_LOG_FATAL, "WellKnownClasses", __VA_ARGS__) 25 | 26 | 27 | namespace d2c { 28 | 29 | jclass WellKnownClasses::java_lang_Double; 30 | jclass WellKnownClasses::java_lang_Float; 31 | jclass WellKnownClasses::java_lang_Long; 32 | jclass WellKnownClasses::java_lang_Integer; 33 | jclass WellKnownClasses::java_lang_Short; 34 | jclass WellKnownClasses::java_lang_Character; 35 | jclass WellKnownClasses::java_lang_Byte; 36 | jclass WellKnownClasses::java_lang_Boolean; 37 | 38 | jclass WellKnownClasses::primitive_double; 39 | jclass WellKnownClasses::primitive_float; 40 | jclass WellKnownClasses::primitive_long; 41 | jclass WellKnownClasses::primitive_int; 42 | jclass WellKnownClasses::primitive_short; 43 | jclass WellKnownClasses::primitive_char; 44 | jclass WellKnownClasses::primitive_byte; 45 | jclass WellKnownClasses::primitive_boolean; 46 | 47 | static jobject CachePrimitiveClass(JNIEnv *env, jclass c, const char *name, const char *signature) { 48 | jfieldID fid = env->GetStaticFieldID(c, name, signature); 49 | if (fid == NULL) { 50 | LOG_FATAL ( "Couldn't find field \"%s\" with signature \"%s\"", name, signature); 51 | } 52 | jobject val = env->GetStaticObjectField(c, fid); 53 | return env->NewGlobalRef(val); 54 | } 55 | 56 | jclass CacheClass(JNIEnv* env, const char* jni_class_name) { 57 | ScopedLocalRef c(env, env->FindClass(jni_class_name)); 58 | if (c.get() == NULL) { 59 | LOG_FATAL ("Couldn't find class: %s", jni_class_name); 60 | } 61 | return reinterpret_cast(env->NewGlobalRef(c.get())); 62 | } 63 | 64 | jfieldID CacheField(JNIEnv* env, jclass c, bool is_static, const char* name, const char* signature) { 65 | jfieldID fid = is_static ? env->GetStaticFieldID(c, name, signature) : env->GetFieldID(c, name, signature); 66 | if (fid == NULL) { 67 | LOG_FATAL ( "Couldn't find field \"%s\" with signature \"%s\"", name, signature); 68 | } 69 | return fid; 70 | } 71 | 72 | jmethodID CacheMethod(JNIEnv* env, jclass c, bool is_static, const char* name, const char* signature) { 73 | jmethodID mid = is_static ? env->GetStaticMethodID(c, name, signature) : env->GetMethodID(c, name, signature); 74 | if (mid == NULL) { 75 | LOG_FATAL ( "Couldn't find method \"%s\" with signature \"%s\"", name, signature); 76 | } 77 | return mid; 78 | } 79 | 80 | 81 | void WellKnownClasses::Init(JNIEnv* env) { 82 | java_lang_Double = CacheClass(env, "java/lang/Double"); 83 | java_lang_Float = CacheClass(env, "java/lang/Float"); 84 | java_lang_Long = CacheClass(env, "java/lang/Long"); 85 | java_lang_Integer = CacheClass(env, "java/lang/Integer"); 86 | java_lang_Short = CacheClass(env, "java/lang/Short"); 87 | java_lang_Character = CacheClass(env, "java/lang/Character"); 88 | java_lang_Byte = CacheClass(env, "java/lang/Byte"); 89 | java_lang_Boolean = CacheClass(env, "java/lang/Boolean"); 90 | 91 | primitive_double = static_cast(CachePrimitiveClass(env, java_lang_Double, "TYPE", 92 | "Ljava/lang/Class;")); 93 | primitive_float = static_cast(CachePrimitiveClass(env, java_lang_Float, "TYPE", 94 | "Ljava/lang/Class;")); 95 | primitive_long = static_cast(CachePrimitiveClass(env, java_lang_Long, "TYPE", 96 | "Ljava/lang/Class;")); 97 | primitive_int = static_cast(CachePrimitiveClass(env, java_lang_Integer, "TYPE", 98 | "Ljava/lang/Class;")); 99 | primitive_short = static_cast(CachePrimitiveClass(env, java_lang_Short, "TYPE", 100 | "Ljava/lang/Class;")); 101 | primitive_char = static_cast(CachePrimitiveClass(env, java_lang_Character, "TYPE", 102 | "Ljava/lang/Class;")); 103 | primitive_byte = static_cast(CachePrimitiveClass(env, java_lang_Byte, "TYPE", 104 | "Ljava/lang/Class;")); 105 | primitive_boolean = static_cast(CachePrimitiveClass(env, java_lang_Boolean, "TYPE", 106 | "Ljava/lang/Class;")); 107 | 108 | } 109 | 110 | } 111 | -------------------------------------------------------------------------------- /jni/nc/well_known_classes.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012 The Android Open Source Project 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #ifndef ART_RUNTIME_WELL_KNOWN_CLASSES_H_ 18 | #define ART_RUNTIME_WELL_KNOWN_CLASSES_H_ 19 | 20 | #include 21 | #include 22 | 23 | namespace d2c { 24 | 25 | // Various classes used in JNI. We cache them so we don't have to keep looking 26 | // them up. Similar to libcore's JniConstants (except there's no overlap, so 27 | // we keep them separate). 28 | 29 | jmethodID CacheMethod(JNIEnv* env, jclass c, bool is_static, const char* name, const char* signature); 30 | jclass CacheClass(JNIEnv* env, const char* jni_class_name); 31 | jfieldID CacheField(JNIEnv* env, jclass c, bool is_static, const char* name, const char* signature); 32 | 33 | struct WellKnownClasses { 34 | public: 35 | static void Init(JNIEnv* env); // Run before native methods are registered. 36 | 37 | static jclass java_lang_Double; 38 | static jclass java_lang_Float; 39 | static jclass java_lang_Long; 40 | static jclass java_lang_Integer; 41 | static jclass java_lang_Short; 42 | static jclass java_lang_Character; 43 | static jclass java_lang_Byte; 44 | static jclass java_lang_Boolean; 45 | 46 | static jclass primitive_double; 47 | static jclass primitive_float; 48 | static jclass primitive_long; 49 | static jclass primitive_int; 50 | static jclass primitive_short; 51 | static jclass primitive_char; 52 | static jclass primitive_byte; 53 | static jclass primitive_boolean; 54 | }; 55 | 56 | } // namespace art 57 | 58 | #endif // ART_RUNTIME_WELL_KNOWN_CLASSES_H_ 59 | --------------------------------------------------------------------------------