Mercurial > hg > truffle
comparison src/share/vm/prims/methodHandles.cpp @ 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 | 3e8fbc61cee8 |
children | 8213b0f5c92d |
comparison
equal
deleted
inserted
replaced
1847:a932f331ef90 | 1849:5beba6174298 |
---|---|
1566 break; | 1566 break; |
1567 } | 1567 } |
1568 if (ptype != T_INT) { | 1568 if (ptype != T_INT) { |
1569 int value_offset = java_lang_boxing_object::value_offset_in_bytes(T_INT); | 1569 int value_offset = java_lang_boxing_object::value_offset_in_bytes(T_INT); |
1570 jint value = argument->int_field(value_offset); | 1570 jint value = argument->int_field(value_offset); |
1571 int vminfo = adapter_subword_vminfo(ptype); | 1571 int vminfo = adapter_unbox_subword_vminfo(ptype); |
1572 jint subword = truncate_subword_from_vminfo(value, vminfo); | 1572 jint subword = truncate_subword_from_vminfo(value, vminfo); |
1573 if (value != subword) { | 1573 if (value != subword) { |
1574 err = "bound subword value does not fit into the subword type"; | 1574 err = "bound subword value does not fit into the subword type"; |
1575 break; | 1575 break; |
1576 } | 1576 } |
2016 switch (type2size[src] *4+ type2size[dest]) { | 2016 switch (type2size[src] *4+ type2size[dest]) { |
2017 case 1 *4+ 1: | 2017 case 1 *4+ 1: |
2018 assert(src == T_INT || is_subword_type(src), "source is not float"); | 2018 assert(src == T_INT || is_subword_type(src), "source is not float"); |
2019 // Subword-related cases are int -> {boolean,byte,char,short}. | 2019 // Subword-related cases are int -> {boolean,byte,char,short}. |
2020 ek_opt = _adapter_opt_i2i; | 2020 ek_opt = _adapter_opt_i2i; |
2021 vminfo = adapter_subword_vminfo(dest); | 2021 vminfo = adapter_prim_to_prim_subword_vminfo(dest); |
2022 break; | 2022 break; |
2023 case 2 *4+ 1: | 2023 case 2 *4+ 1: |
2024 if (src == T_LONG && (dest == T_INT || is_subword_type(dest))) { | 2024 if (src == T_LONG && (dest == T_INT || is_subword_type(dest))) { |
2025 ek_opt = _adapter_opt_l2i; | 2025 ek_opt = _adapter_opt_l2i; |
2026 vminfo = adapter_subword_vminfo(dest); | 2026 vminfo = adapter_prim_to_prim_subword_vminfo(dest); |
2027 } else if (src == T_DOUBLE && dest == T_FLOAT) { | 2027 } else if (src == T_DOUBLE && dest == T_FLOAT) { |
2028 ek_opt = _adapter_opt_d2f; | 2028 ek_opt = _adapter_opt_d2f; |
2029 } else { | 2029 } else { |
2030 assert(false, ""); | 2030 assert(false, ""); |
2031 } | 2031 } |
2049 case _adapter_ref_to_prim: | 2049 case _adapter_ref_to_prim: |
2050 { | 2050 { |
2051 switch (type2size[dest]) { | 2051 switch (type2size[dest]) { |
2052 case 1: | 2052 case 1: |
2053 ek_opt = _adapter_opt_unboxi; | 2053 ek_opt = _adapter_opt_unboxi; |
2054 vminfo = adapter_subword_vminfo(dest); | 2054 vminfo = adapter_unbox_subword_vminfo(dest); |
2055 break; | 2055 break; |
2056 case 2: | 2056 case 2: |
2057 ek_opt = _adapter_opt_unboxl; | 2057 ek_opt = _adapter_opt_unboxl; |
2058 break; | 2058 break; |
2059 default: | 2059 default: |