From 89b22dd3ab7f971bee0d893283df8eb5c45dcdff Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Wed, 24 Oct 2007 17:06:12 -0600 Subject: [PATCH] fix JNI invocation for return types of less than 32-bits --- src/interpret.cpp | 23 +++++++++++++++++++++-- src/x86.S | 8 ++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/interpret.cpp b/src/interpret.cpp index 2423a89106..b847ee728c 100644 --- a/src/interpret.cpp +++ b/src/interpret.cpp @@ -557,8 +557,26 @@ invokeNative(Thread* t, object method) switch (returnCode) { case ByteField: case BooleanField: + if (DebugRun) { + fprintf(stderr, "result: %"LLD"\n", static_cast(result)); + } + pushInt(t, static_cast(result)); + break; + case CharField: + if (DebugRun) { + fprintf(stderr, "result: %"LLD"\n", static_cast(result)); + } + pushInt(t, static_cast(result)); + break; + case ShortField: + if (DebugRun) { + fprintf(stderr, "result: %"LLD"\n", static_cast(result)); + } + pushInt(t, static_cast(result)); + break; + case FloatField: case IntField: if (DebugRun) { @@ -577,11 +595,12 @@ invokeNative(Thread* t, object method) case ObjectField: if (DebugRun) { - fprintf(stderr, "result: %p at %p\n", result == 0 ? 0 : + fprintf(stderr, "result: %p at %p\n", + static_cast(result) == 0 ? 0 : *reinterpret_cast(static_cast(result)), reinterpret_cast(static_cast(result))); } - pushObject(t, result == 0 ? 0 : + pushObject(t, static_cast(result) == 0 ? 0 : *reinterpret_cast(static_cast(result))); break; diff --git a/src/x86.S b/src/x86.S index 86159b40ce..625168f125 100644 --- a/src/x86.S +++ b/src/x86.S @@ -168,18 +168,14 @@ float: jne double fstps 8(%ebp) movl 8(%ebp),%eax - jmp int32 + jmp exit double: cmpl $DOUBLE_TYPE,%ecx - jne int32 + jne exit fstpl 8(%ebp) movl 8(%ebp),%eax movl 12(%ebp),%edx - jmp exit - -int32: - movl $0,%edx exit: movl %ebp,%esp