diff -r 388e9d0905e6 src/cpu/zero/vm/cppInterpreter_zero.cpp
--- openjdk/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Mon Apr 11 11:33:18 2016 +0000
+++ openjdk/hotspot/src/cpu/zero/vm/cppInterpreter_zero.cpp Mon Apr 11 21:42:21 2016 +0100
@@ -93,6 +93,7 @@
case T_SHORT:
return (intptr_t)(jshort)result;
case T_OBJECT: // nothing to do fall through
+ case T_ARRAY:
case T_LONG:
case T_INT:
case T_FLOAT:
@@ -219,9 +219,16 @@
// Push our result
for (int i = 0; i < result_slots; i++) {
// Adjust result to smaller
- intptr_t res = result[-i];
+ union {
+ intptr_t res;
+ jint res_jint;
+ };
+ res = result[-i];
if (result_slots == 1) {
- res = narrow(result_type_of(method), res);
+ BasicType t = result_type_of(method);
+ if (is_subword_type(t)) {
+ res_jint = (jint)narrow(t, res_jint);
+ }
}
stack->push(res);
}
@@ -796,22 +797,10 @@
}
BasicType CppInterpreter::result_type_of(Method* 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");
+ // Get method->_constMethod->_result_type
+ u1 *p = ((unsigned char *)method->constMethod()
+ + in_bytes(ConstMethod::result_type_offset()));
+ BasicType t = (BasicType)*p;
return t;
}
diff -r 388e9d0905e6 src/share/vm/interpreter/bytecodeInterpreter.cpp
--- openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Mon Apr 11 11:33:18 2016 +0000
+++ openjdk/hotspot/src/share/vm/interpreter/bytecodeInterpreter.cpp Mon Apr 11 21:42:21 2016 +0100
@@ -593,9 +593,10 @@
/* 0xDC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
/* 0xE0 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
-/* 0xE4 */ &&opc_default, &&opc_fast_aldc, &&opc_fast_aldc_w, &&opc_return_register_finalizer,
-/* 0xE8 */ &&opc_invokehandle,&&opc_default, &&opc_default, &&opc_default,
-/* 0xEC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
+/* 0xE4 */ &&opc_default, &&opc_default, &&opc_fast_aldc, &&opc_fast_aldc_w,
+/* 0xE8 */ &&opc_return_register_finalizer,
+ &&opc_invokehandle, &&opc_default, &&opc_default,
+/* 0xEC */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
/* 0xF0 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,
/* 0xF4 */ &&opc_default, &&opc_default, &&opc_default, &&opc_default,