src/share/vm/prims/methodHandles.hpp

changeset 2204
5beba6174298
parent 2148
d257356e35f0
child 2314
f95d63e2154a
     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:

mercurial