--- a/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Fri Feb 12 08:54:13 2010 -0800
+++ b/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Fri Feb 12 10:34:11 2010 -0800
@@ -1,6 +1,6 @@
/*
* Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
- * Copyright 2007, 2008, 2009 Red Hat, Inc.
+ * Copyright 2007, 2008, 2009, 2010 Red Hat, Inc.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -145,7 +145,7 @@
}
else if (istate->msg() == BytecodeInterpreter::return_from_method) {
// Copy the result into the caller's frame
- result_slots = type2size[method->result_type()];
+ result_slots = type2size[result_type_of(method)];
assert(result_slots >= 0 && result_slots <= 2, "what?");
result = istate->stack() + result_slots;
break;
@@ -394,9 +394,10 @@
// Push our result
if (!HAS_PENDING_EXCEPTION) {
- stack->set_sp(stack->sp() - type2size[method->result_type()]);
+ BasicType type = result_type_of(method);
+ stack->set_sp(stack->sp() - type2size[type]);
- switch (method->result_type()) {
+ switch (type) {
case T_VOID:
break;
@@ -707,6 +708,26 @@
return i;
}
+BasicType CppInterpreter::result_type_of(methodOop method) {
+ BasicType t;
+ switch (method->result_index()) {
+ case 0 : t = T_BOOLEAN; break;
+ case 1 : t = T_CHAR; break;
+ case 2 : t = T_BYTE; break;
+ case 3 : t = T_SHORT; break;
+ case 4 : t = T_INT; break;
+ case 5 : t = T_LONG; break;
+ case 6 : t = T_VOID; break;
+ case 7 : t = T_FLOAT; break;
+ case 8 : t = T_DOUBLE; break;
+ case 9 : t = T_OBJECT; break;
+ default: ShouldNotReachHere();
+ }
+ assert(AbstractInterpreter::BasicType_as_index(t) == method->result_index(),
+ "out of step with AbstractInterpreter::BasicType_as_index");
+ return t;
+}
+
address InterpreterGenerator::generate_empty_entry() {
if (!UseFastEmptyMethods)
return NULL;