equal
deleted
inserted
replaced
1761 } |
1761 } |
1762 assert(prev_offset == PcDesc::upper_offset_limit, |
1762 assert(prev_offset == PcDesc::upper_offset_limit, |
1763 "must end with a sentinel"); |
1763 "must end with a sentinel"); |
1764 #endif //ASSERT |
1764 #endif //ASSERT |
1765 |
1765 |
|
1766 // Search for MethodHandle invokes and tag the nmethod. |
|
1767 for (int i = 0; i < count; i++) { |
|
1768 if (pcs[i].is_method_handle_invoke()) { |
|
1769 set_has_method_handle_invokes(true); |
|
1770 break; |
|
1771 } |
|
1772 } |
|
1773 |
1766 int size = count * sizeof(PcDesc); |
1774 int size = count * sizeof(PcDesc); |
1767 assert(scopes_pcs_size() >= size, "oob"); |
1775 assert(scopes_pcs_size() >= size, "oob"); |
1768 memcpy(scopes_pcs_begin(), pcs, size); |
1776 memcpy(scopes_pcs_begin(), pcs, size); |
1769 |
1777 |
1770 // Adjust the final sentinel downward. |
1778 // Adjust the final sentinel downward. |
2024 } |
2032 } |
2025 |
2033 |
2026 bool nmethod::is_deopt_pc(address pc) { |
2034 bool nmethod::is_deopt_pc(address pc) { |
2027 bool ret = pc == deopt_handler_begin(); |
2035 bool ret = pc == deopt_handler_begin(); |
2028 return ret; |
2036 return ret; |
|
2037 } |
|
2038 |
|
2039 |
|
2040 // ----------------------------------------------------------------------------- |
|
2041 // MethodHandle |
|
2042 |
|
2043 bool nmethod::is_method_handle_return(address return_pc) { |
|
2044 if (!has_method_handle_invokes()) return false; |
|
2045 PcDesc* pd = pc_desc_at(return_pc); |
|
2046 if (pd == NULL) |
|
2047 return false; |
|
2048 return pd->is_method_handle_invoke(); |
2029 } |
2049 } |
2030 |
2050 |
2031 |
2051 |
2032 // ----------------------------------------------------------------------------- |
2052 // ----------------------------------------------------------------------------- |
2033 // Verification |
2053 // Verification |