1.1 --- a/src/share/vm/prims/methodHandles.hpp Tue Oct 12 02:21:06 2010 -0700 1.2 +++ b/src/share/vm/prims/methodHandles.hpp Wed Oct 13 01:19:43 2010 -0700 1.3 @@ -226,11 +226,20 @@ 1.4 } 1.5 1.6 enum { CONV_VMINFO_SIGN_FLAG = 0x80 }; 1.7 - static int adapter_subword_vminfo(BasicType dest) { 1.8 - if (dest == T_BOOLEAN) return (BitsPerInt - 1); 1.9 - if (dest == T_CHAR) return (BitsPerInt - 16); 1.10 - if (dest == T_BYTE) return (BitsPerInt - 8) | CONV_VMINFO_SIGN_FLAG; 1.11 - if (dest == T_SHORT) return (BitsPerInt - 16) | CONV_VMINFO_SIGN_FLAG; 1.12 + // Shift values for prim-to-prim conversions. 1.13 + static int adapter_prim_to_prim_subword_vminfo(BasicType dest) { 1.14 + if (dest == T_BOOLEAN) return (BitsPerInt - 1); // boolean is 1 bit 1.15 + if (dest == T_CHAR) return (BitsPerInt - BitsPerShort); 1.16 + if (dest == T_BYTE) return (BitsPerInt - BitsPerByte ) | CONV_VMINFO_SIGN_FLAG; 1.17 + if (dest == T_SHORT) return (BitsPerInt - BitsPerShort) | CONV_VMINFO_SIGN_FLAG; 1.18 + return 0; // case T_INT 1.19 + } 1.20 + // Shift values for unboxing a primitive. 1.21 + static int adapter_unbox_subword_vminfo(BasicType dest) { 1.22 + if (dest == T_BOOLEAN) return (BitsPerInt - BitsPerByte ); // implemented as 1 byte 1.23 + if (dest == T_CHAR) return (BitsPerInt - BitsPerShort); 1.24 + if (dest == T_BYTE) return (BitsPerInt - BitsPerByte ) | CONV_VMINFO_SIGN_FLAG; 1.25 + if (dest == T_SHORT) return (BitsPerInt - BitsPerShort) | CONV_VMINFO_SIGN_FLAG; 1.26 return 0; // case T_INT 1.27 } 1.28 // Here is the transformation the i2i adapter must perform: