Mercurial > hg > truffle
comparison src/cpu/sparc/vm/sharedRuntime_sparc.cpp @ 113:ba764ed4b6f2
6420645: Create a vm that uses compressed oops for up to 32gb heapsizes
Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv
Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author | coleenp |
---|---|
date | Sun, 13 Apr 2008 17:43:42 -0400 |
parents | a61af66fc99e |
children | 018d5b58dd4f |
comparison
equal
deleted
inserted
replaced
110:a49a647afe9a | 113:ba764ed4b6f2 |
---|---|
158 | 158 |
159 __ stx(O5, SP, o5_offset+STACK_BIAS); | 159 __ stx(O5, SP, o5_offset+STACK_BIAS); |
160 map->set_callee_saved(VMRegImpl::stack2reg((o5_offset + 4)>>2), O5->as_VMReg()); | 160 map->set_callee_saved(VMRegImpl::stack2reg((o5_offset + 4)>>2), O5->as_VMReg()); |
161 #endif /* _LP64 */ | 161 #endif /* _LP64 */ |
162 | 162 |
163 | |
164 #ifdef _LP64 | |
165 int debug_offset = 0; | |
166 #else | |
167 int debug_offset = 4; | |
168 #endif | |
163 // Save the G's | 169 // Save the G's |
164 __ stx(G1, SP, g1_offset+STACK_BIAS); | 170 __ stx(G1, SP, g1_offset+STACK_BIAS); |
165 map->set_callee_saved(VMRegImpl::stack2reg((g1_offset + 4)>>2), G1->as_VMReg()); | 171 map->set_callee_saved(VMRegImpl::stack2reg((g1_offset + debug_offset)>>2), G1->as_VMReg()); |
166 | 172 |
167 __ stx(G3, SP, g3_offset+STACK_BIAS); | 173 __ stx(G3, SP, g3_offset+STACK_BIAS); |
168 map->set_callee_saved(VMRegImpl::stack2reg((g3_offset + 4)>>2), G3->as_VMReg()); | 174 map->set_callee_saved(VMRegImpl::stack2reg((g3_offset + debug_offset)>>2), G3->as_VMReg()); |
169 | 175 |
170 __ stx(G4, SP, g4_offset+STACK_BIAS); | 176 __ stx(G4, SP, g4_offset+STACK_BIAS); |
171 map->set_callee_saved(VMRegImpl::stack2reg((g4_offset + 4)>>2), G4->as_VMReg()); | 177 map->set_callee_saved(VMRegImpl::stack2reg((g4_offset + debug_offset)>>2), G4->as_VMReg()); |
172 | 178 |
173 __ stx(G5, SP, g5_offset+STACK_BIAS); | 179 __ stx(G5, SP, g5_offset+STACK_BIAS); |
174 map->set_callee_saved(VMRegImpl::stack2reg((g5_offset + 4)>>2), G5->as_VMReg()); | 180 map->set_callee_saved(VMRegImpl::stack2reg((g5_offset + debug_offset)>>2), G5->as_VMReg()); |
175 | 181 |
176 // This is really a waste but we'll keep things as they were for now | 182 // This is really a waste but we'll keep things as they were for now |
177 if (true) { | 183 if (true) { |
178 #ifndef _LP64 | 184 #ifndef _LP64 |
179 map->set_callee_saved(VMRegImpl::stack2reg((o0_offset)>>2), O0->as_VMReg()->next()); | 185 map->set_callee_saved(VMRegImpl::stack2reg((o0_offset)>>2), O0->as_VMReg()->next()); |
180 map->set_callee_saved(VMRegImpl::stack2reg((o1_offset)>>2), O1->as_VMReg()->next()); | 186 map->set_callee_saved(VMRegImpl::stack2reg((o1_offset)>>2), O1->as_VMReg()->next()); |
181 map->set_callee_saved(VMRegImpl::stack2reg((o2_offset)>>2), O2->as_VMReg()->next()); | 187 map->set_callee_saved(VMRegImpl::stack2reg((o2_offset)>>2), O2->as_VMReg()->next()); |
182 map->set_callee_saved(VMRegImpl::stack2reg((o3_offset)>>2), O3->as_VMReg()->next()); | 188 map->set_callee_saved(VMRegImpl::stack2reg((o3_offset)>>2), O3->as_VMReg()->next()); |
183 map->set_callee_saved(VMRegImpl::stack2reg((o4_offset)>>2), O4->as_VMReg()->next()); | 189 map->set_callee_saved(VMRegImpl::stack2reg((o4_offset)>>2), O4->as_VMReg()->next()); |
184 map->set_callee_saved(VMRegImpl::stack2reg((o5_offset)>>2), O5->as_VMReg()->next()); | 190 map->set_callee_saved(VMRegImpl::stack2reg((o5_offset)>>2), O5->as_VMReg()->next()); |
185 #endif /* _LP64 */ | |
186 map->set_callee_saved(VMRegImpl::stack2reg((g1_offset)>>2), G1->as_VMReg()->next()); | 191 map->set_callee_saved(VMRegImpl::stack2reg((g1_offset)>>2), G1->as_VMReg()->next()); |
187 map->set_callee_saved(VMRegImpl::stack2reg((g3_offset)>>2), G3->as_VMReg()->next()); | 192 map->set_callee_saved(VMRegImpl::stack2reg((g3_offset)>>2), G3->as_VMReg()->next()); |
188 map->set_callee_saved(VMRegImpl::stack2reg((g4_offset)>>2), G4->as_VMReg()->next()); | 193 map->set_callee_saved(VMRegImpl::stack2reg((g4_offset)>>2), G4->as_VMReg()->next()); |
189 map->set_callee_saved(VMRegImpl::stack2reg((g5_offset)>>2), G5->as_VMReg()->next()); | 194 map->set_callee_saved(VMRegImpl::stack2reg((g5_offset)>>2), G5->as_VMReg()->next()); |
195 #endif /* _LP64 */ | |
190 } | 196 } |
191 | 197 |
192 | 198 |
193 // Save the flags | 199 // Save the flags |
194 __ rdccr( G5 ); | 200 __ rdccr( G5 ); |
1215 | 1221 |
1216 Address ic_miss(G3_scratch, SharedRuntime::get_ic_miss_stub()); | 1222 Address ic_miss(G3_scratch, SharedRuntime::get_ic_miss_stub()); |
1217 | 1223 |
1218 __ verify_oop(O0); | 1224 __ verify_oop(O0); |
1219 __ verify_oop(G5_method); | 1225 __ verify_oop(G5_method); |
1220 __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), G3_scratch); | 1226 __ load_klass(O0, G3_scratch); |
1221 __ verify_oop(G3_scratch); | 1227 __ verify_oop(G3_scratch); |
1222 | 1228 |
1223 #if !defined(_LP64) && defined(COMPILER2) | 1229 #if !defined(_LP64) && defined(COMPILER2) |
1224 __ save(SP, -frame::register_save_words*wordSize, SP); | 1230 __ save(SP, -frame::register_save_words*wordSize, SP); |
1225 __ ld_ptr(G5_method, compiledICHolderOopDesc::holder_klass_offset(), R_temp); | 1231 __ ld_ptr(G5_method, compiledICHolderOopDesc::holder_klass_offset(), R_temp); |
1818 { | 1824 { |
1819 Label L; | 1825 Label L; |
1820 const Register temp_reg = G3_scratch; | 1826 const Register temp_reg = G3_scratch; |
1821 Address ic_miss(temp_reg, SharedRuntime::get_ic_miss_stub()); | 1827 Address ic_miss(temp_reg, SharedRuntime::get_ic_miss_stub()); |
1822 __ verify_oop(O0); | 1828 __ verify_oop(O0); |
1823 __ ld_ptr(O0, oopDesc::klass_offset_in_bytes(), temp_reg); | 1829 __ load_klass(O0, temp_reg); |
1824 __ cmp(temp_reg, G5_inline_cache_reg); | 1830 __ cmp(temp_reg, G5_inline_cache_reg); |
1825 __ brx(Assembler::equal, true, Assembler::pt, L); | 1831 __ brx(Assembler::equal, true, Assembler::pt, L); |
1826 __ delayed()->nop(); | 1832 __ delayed()->nop(); |
1827 | 1833 |
1828 __ jump_to(ic_miss, 0); | 1834 __ jump_to(ic_miss, 0); |