fix thinko in Frame::mapSizeInWords; code cleanup

This commit is contained in:
Joel Dice 2008-01-03 16:53:37 -07:00
parent e81a534986
commit 4bda925e08

View File

@ -479,7 +479,7 @@ class Frame {
} }
static unsigned mapSizeInWords(Thread* t, object method) { static unsigned mapSizeInWords(Thread* t, object method) {
return ceiling(mapSize(t, method), BytesPerWord); return ceiling(mapSize(t, method), BitsPerWord);
} }
static unsigned mapSizeInBytes(Thread* t, object method) { static unsigned mapSizeInBytes(Thread* t, object method) {
@ -991,7 +991,7 @@ class Frame {
(context->zone.allocate(sizeof(TraceElement) + (mapSize * BytesPerWord))) (context->zone.allocate(sizeof(TraceElement) + (mapSize * BytesPerWord)))
TraceElement(context, target, virtualCall, context->traceLog); TraceElement(context, target, virtualCall, context->traceLog);
memcpy(e->map, map, mapSizeInWords(t, context->method) * BytesPerWord); memcpy(e->map, map, mapSize * BytesPerWord);
return e; return e;
} }
@ -1076,29 +1076,6 @@ unwind(MyThread* t)
vmJump(ip, base, stack, t); vmJump(ip, base, stack, t);
} }
void
insertTraceNode(MyThread* t, object method, object target, bool virtualCall,
uintptr_t* map, void* address)
{
unsigned mapSize = Frame::mapSizeInWords(t, method);
object node = makeTraceNode
(t,
reinterpret_cast<intptr_t>(address),
0,
method,
target,
virtualCall,
mapSize,
false);
if (mapSize) {
memcpy(&traceNodeMap(t, node, 0), map, mapSize * BytesPerWord);
}
insertTraceNode(t, node);
}
void* void*
findInterfaceMethodFromInstance(MyThread* t, object method, object instance) findInterfaceMethodFromInstance(MyThread* t, object method, object instance)
{ {
@ -2997,11 +2974,16 @@ compile(MyThread* t, Frame* initialFrame, unsigned ip)
if (UNLIKELY(t->exception)) return; if (UNLIKELY(t->exception)) return;
PROTECT(t, class_); PROTECT(t, class_);
Operand* stack = c->temporary();
mov(c, c->stack(), stack);
c->indirectCall c->indirectCall
(c->constant(reinterpret_cast<intptr_t>(makeMultidimensionalArray)), (c->constant(reinterpret_cast<intptr_t>(makeMultidimensionalArray)),
frame->trace(0, false), frame->trace(0, false),
4, c->thread(), frame->append(class_), c->stack(), 4, c->thread(), frame->append(class_), stack,
c->constant(dimensions)); c->constant(dimensions));
c->release(stack);
Operand* result = ::result(c); Operand* result = ::result(c);