[vmkit-commits] [vmkit] r198065 - fix another bug in invokeInternal
Gael Thomas
gael.thomas at lip6.fr
Thu Dec 26 16:21:40 PST 2013
Author: gthomas
Date: Thu Dec 26 18:21:40 2013
New Revision: 198065
URL: http://llvm.org/viewvc/llvm-project?rev=198065&view=rev
Log:
fix another bug in invokeInternal
Modified:
vmkit/branches/mcjit/lib/j3/vm/j3method.cc
Modified: vmkit/branches/mcjit/lib/j3/vm/j3method.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3method.cc?rev=198065&r1=198064&r2=198065&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3method.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3method.cc Thu Dec 26 18:21:40 2013
@@ -123,32 +123,34 @@ J3Value J3Method::internalInvoke(bool st
std::vector<llvm::GenericValue> args(methodType()->nbIns());
J3* vm = cl()->loader()->vm();
J3Type* cur;
- uint32_t i = 0;
+ uint32_t i = 0, d = 0;
- if(handle)
+ if(handle) {
args[i++].PointerVal = handle->obj();
+ d = 1;
+ }
for(; i<methodType()->nbIns(); i++) { /* have to avoid collection at this point */
cur = methodType()->ins(i);
if(cur == vm->typeBoolean)
- args[i].IntVal = inArgs[i].valBoolean;
+ args[i].IntVal = inArgs[i-d].valBoolean;
else if(cur == vm->typeByte)
- args[i].IntVal = inArgs[i].valByte;
+ args[i].IntVal = inArgs[i-d].valByte;
else if(cur == vm->typeShort)
- args[i].IntVal = inArgs[i].valShort;
+ args[i].IntVal = inArgs[i-d].valShort;
else if(cur == vm->typeChar)
- args[i].IntVal = inArgs[i].valChar;
+ args[i].IntVal = inArgs[i-d].valChar;
else if(cur == vm->typeInteger)
- args[i].IntVal = inArgs[i].valInteger;
+ args[i].IntVal = inArgs[i-d].valInteger;
else if(cur == vm->typeLong)
- args[i].IntVal = inArgs[i].valLong;
+ args[i].IntVal = inArgs[i-d].valLong;
else if(cur == vm->typeFloat)
- args[i].FloatVal = inArgs[i].valFloat;
+ args[i].FloatVal = inArgs[i-d].valFloat;
else if(cur == vm->typeDouble)
- args[i].FloatVal = inArgs[i].valDouble;
+ args[i].FloatVal = inArgs[i-d].valDouble;
else
- args[i].PointerVal = inArgs[i].valObject->obj();
+ args[i].PointerVal = inArgs[i-d].valObject->obj();
}
J3Method* target;
@@ -156,7 +158,6 @@ J3Value J3Method::internalInvoke(bool st
if(statically)
target = this;
else {
- /* can not use trampoline here */
J3ObjectHandle* self = handle ? handle : inArgs[0].valObject;
target = resolve(self);
}
@@ -195,35 +196,35 @@ J3Value J3Method::internalInvoke(bool st
J3Value* args = (J3Value*)alloca(sizeof(J3Value)*methodType()->nbIns());
J3* vm = cl()->loader()->vm();
J3Type* cur;
- uint32_t i = 0;
+ uint32_t i = 0, d = 0;
if(handle)
- args[i++].valObject = handle;
+ i = d = 1;
- for(; i<methodType()->nbIns(); i++) { /* have to avoid collection at this point */
+ for(; i<methodType()->nbIns(); i++) {
cur = methodType()->ins(i);
if(cur == vm->typeBoolean)
- args[i].valBoolean = va_arg(va, bool);
+ args[i-d].valBoolean = va_arg(va, bool);
else if(cur == vm->typeByte)
- args[i].valByte = va_arg(va, int8_t);
+ args[i-d].valByte = va_arg(va, int8_t);
else if(cur == vm->typeShort)
- args[i].valShort = va_arg(va, int16_t);
+ args[i-d].valShort = va_arg(va, int16_t);
else if(cur == vm->typeChar)
- args[i].valChar = va_arg(va, uint16_t);
+ args[i-d].valChar = va_arg(va, uint16_t);
else if(cur == vm->typeInteger)
- args[i].valInteger = va_arg(va, int32_t);
+ args[i-d].valInteger = va_arg(va, int32_t);
else if(cur == vm->typeLong)
- args[i].valLong = va_arg(va, int64_t);
+ args[i-d].valLong = va_arg(va, int64_t);
else if(cur == vm->typeFloat)
- args[i].valFloat = va_arg(va, float);
+ args[i-d].valFloat = va_arg(va, float);
else if(cur == vm->typeDouble)
- args[i].valDouble = va_arg(va, double);
+ args[i-d].valDouble = va_arg(va, double);
else
- args[i].valObject = va_arg(va, J3ObjectHandle*);
+ args[i-d].valObject = va_arg(va, J3ObjectHandle*);
}
- return internalInvoke(statically, 0, args);
+ return internalInvoke(statically, handle, args);
}
J3Value J3Method::invokeStatic(J3Value* args) {
More information about the vmkit-commits
mailing list