--- a/hotspot/src/share/vm/prims/methodHandles.hpp Tue Oct 12 02:21:06 2010 -0700
+++ b/hotspot/src/share/vm/prims/methodHandles.hpp Wed Oct 13 01:19:43 2010 -0700
@@ -226,11 +226,20 @@
}
enum { CONV_VMINFO_SIGN_FLAG = 0x80 };
- static int adapter_subword_vminfo(BasicType dest) {
- if (dest == T_BOOLEAN) return (BitsPerInt - 1);
- if (dest == T_CHAR) return (BitsPerInt - 16);
- if (dest == T_BYTE) return (BitsPerInt - 8) | CONV_VMINFO_SIGN_FLAG;
- if (dest == T_SHORT) return (BitsPerInt - 16) | CONV_VMINFO_SIGN_FLAG;
+ // Shift values for prim-to-prim conversions.
+ static int adapter_prim_to_prim_subword_vminfo(BasicType dest) {
+ if (dest == T_BOOLEAN) return (BitsPerInt - 1); // boolean is 1 bit
+ if (dest == T_CHAR) return (BitsPerInt - BitsPerShort);
+ if (dest == T_BYTE) return (BitsPerInt - BitsPerByte ) | CONV_VMINFO_SIGN_FLAG;
+ if (dest == T_SHORT) return (BitsPerInt - BitsPerShort) | CONV_VMINFO_SIGN_FLAG;
+ return 0; // case T_INT
+ }
+ // Shift values for unboxing a primitive.
+ static int adapter_unbox_subword_vminfo(BasicType dest) {
+ if (dest == T_BOOLEAN) return (BitsPerInt - BitsPerByte ); // implemented as 1 byte
+ if (dest == T_CHAR) return (BitsPerInt - BitsPerShort);
+ if (dest == T_BYTE) return (BitsPerInt - BitsPerByte ) | CONV_VMINFO_SIGN_FLAG;
+ if (dest == T_SHORT) return (BitsPerInt - BitsPerShort) | CONV_VMINFO_SIGN_FLAG;
return 0; // case T_INT
}
// Here is the transformation the i2i adapter must perform: