Mercurial > hg > graal-compiler
diff src/share/vm/prims/methodHandles.hpp @ 1849:5beba6174298
6987555: JSR 292 unboxing to a boolean value fails on big-endian SPARC
Reviewed-by: never, jrose
author | twisti |
---|---|
date | Wed, 13 Oct 2010 01:19:43 -0700 |
parents | d257356e35f0 |
children | f95d63e2154a |
line wrap: on
line diff
--- a/src/share/vm/prims/methodHandles.hpp Tue Oct 12 02:21:06 2010 -0700 +++ b/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: