Mercurial > hg > graal-jvmci-8
comparison src/share/vm/graal/graalCodeInstaller.cpp @ 13726:343541fb3b49
Support narrow oops in reference maps.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Wed, 22 Jan 2014 11:44:27 +0100 |
parents | 8d8732e14447 |
children | d006a6332db8 |
comparison
equal
deleted
inserted
replaced
13725:8d8732e14447 | 13726:343541fb3b49 |
---|---|
89 oop frame_map = ReferenceMap::frameRefMap(reference_map); | 89 oop frame_map = ReferenceMap::frameRefMap(reference_map); |
90 oop callee_save_info = (oop) DebugInfo::calleeSaveInfo(debug_info); | 90 oop callee_save_info = (oop) DebugInfo::calleeSaveInfo(debug_info); |
91 | 91 |
92 if (register_map != NULL) { | 92 if (register_map != NULL) { |
93 for (jint i = 0; i < RegisterImpl::number_of_registers; i++) { | 93 for (jint i = 0; i < RegisterImpl::number_of_registers; i++) { |
94 bool is_oop = is_bit_set(register_map, i); | 94 bool is_oop = is_bit_set(register_map, 2 * i); |
95 VMReg hotspot_reg = get_hotspot_reg(i); | 95 VMReg hotspot_reg = get_hotspot_reg(i); |
96 if (is_oop) { | 96 if (is_oop) { |
97 map->set_oop(hotspot_reg); | 97 if (is_bit_set(register_map, 2 * i + 1)) { |
98 map->set_narrowoop(hotspot_reg); | |
99 } else { | |
100 map->set_oop(hotspot_reg); | |
101 } | |
98 } else { | 102 } else { |
99 map->set_value(hotspot_reg); | 103 map->set_value(hotspot_reg); |
100 } | 104 } |
101 } | 105 } |
102 } | 106 } |
103 | 107 |
104 for (jint i = 0; i < bitset_size(frame_map); i++) { | 108 for (jint i = 0; i < bitset_size(frame_map) / 3; i++) { |
105 bool is_oop = is_bit_set(frame_map, i); | 109 bool is_oop = is_bit_set(frame_map, i * 3); |
106 // HotSpot stack slots are 4 bytes | 110 // HotSpot stack slots are 4 bytes |
107 VMReg reg = VMRegImpl::stack2reg(i * VMRegImpl::slots_per_word); | 111 VMReg reg = VMRegImpl::stack2reg(i * VMRegImpl::slots_per_word); |
108 if (is_oop) { | 112 if (is_oop) { |
109 map->set_oop(reg); | 113 bool narrow1 = is_bit_set(frame_map, i * 3 + 1); |
114 bool narrow2 = is_bit_set(frame_map, i * 3 + 2); | |
115 if(narrow1 || narrow2) { | |
116 if(narrow1) { | |
117 map->set_narrowoop(reg); | |
118 } | |
119 if(narrow2) { | |
120 VMReg reg2 = VMRegImpl::stack2reg(i * VMRegImpl::slots_per_word + 1); | |
121 map->set_narrowoop(reg2); | |
122 } | |
123 } else { | |
124 map->set_oop(reg); | |
125 } | |
110 } else { | 126 } else { |
111 map->set_value(reg); | 127 map->set_value(reg); |
112 } | 128 } |
113 } | 129 } |
114 | 130 |