Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @ 6848:8e47bac5643a
7054512: Compress class pointers after perm gen removal
Summary: support of compress class pointers in the compilers.
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Tue, 09 Oct 2012 10:11:38 +0200 |
parents | 7eca5de9e0b6 |
children | d804e148cff8 |
comparison
equal
deleted
inserted
replaced
6847:65d07d9ee446 | 6848:8e47bac5643a |
---|---|
338 // inline cache check; done before the frame is built. | 338 // inline cache check; done before the frame is built. |
339 int LIR_Assembler::check_icache() { | 339 int LIR_Assembler::check_icache() { |
340 Register receiver = FrameMap::receiver_opr->as_register(); | 340 Register receiver = FrameMap::receiver_opr->as_register(); |
341 Register ic_klass = IC_Klass; | 341 Register ic_klass = IC_Klass; |
342 const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); | 342 const int ic_cmp_size = LP64_ONLY(10) NOT_LP64(9); |
343 const bool do_post_padding = VerifyOops || UseCompressedOops; | 343 const bool do_post_padding = VerifyOops || UseCompressedKlassPointers; |
344 if (!do_post_padding) { | 344 if (!do_post_padding) { |
345 // insert some nops so that the verified entry point is aligned on CodeEntryAlignment | 345 // insert some nops so that the verified entry point is aligned on CodeEntryAlignment |
346 while ((__ offset() + ic_cmp_size) % CodeEntryAlignment != 0) { | 346 while ((__ offset() + ic_cmp_size) % CodeEntryAlignment != 0) { |
347 __ nop(); | 347 __ nop(); |
348 } | 348 } |
1260 __ movptr(dest->as_register(), from_addr); | 1260 __ movptr(dest->as_register(), from_addr); |
1261 } | 1261 } |
1262 break; | 1262 break; |
1263 | 1263 |
1264 case T_ADDRESS: | 1264 case T_ADDRESS: |
1265 __ movptr(dest->as_register(), from_addr); | 1265 if (UseCompressedKlassPointers && addr->disp() == oopDesc::klass_offset_in_bytes()) { |
1266 __ movl(dest->as_register(), from_addr); | |
1267 } else { | |
1268 __ movptr(dest->as_register(), from_addr); | |
1269 } | |
1266 break; | 1270 break; |
1267 case T_INT: | 1271 case T_INT: |
1268 __ movl(dest->as_register(), from_addr); | 1272 __ movl(dest->as_register(), from_addr); |
1269 break; | 1273 break; |
1270 | 1274 |
1362 if (UseCompressedOops && !wide) { | 1366 if (UseCompressedOops && !wide) { |
1363 __ decode_heap_oop(dest->as_register()); | 1367 __ decode_heap_oop(dest->as_register()); |
1364 } | 1368 } |
1365 #endif | 1369 #endif |
1366 __ verify_oop(dest->as_register()); | 1370 __ verify_oop(dest->as_register()); |
1371 } else if (type == T_ADDRESS && addr->disp() == oopDesc::klass_offset_in_bytes()) { | |
1372 #ifdef _LP64 | |
1373 if (UseCompressedKlassPointers) { | |
1374 __ decode_klass_not_null(dest->as_register()); | |
1375 } | |
1376 #endif | |
1367 } | 1377 } |
1368 } | 1378 } |
1369 | 1379 |
1370 | 1380 |
1371 void LIR_Assembler::prefetchr(LIR_Opr src) { | 1381 void LIR_Assembler::prefetchr(LIR_Opr src) { |
1703 if (obj == k_RInfo) { | 1713 if (obj == k_RInfo) { |
1704 k_RInfo = dst; | 1714 k_RInfo = dst; |
1705 } else if (obj == klass_RInfo) { | 1715 } else if (obj == klass_RInfo) { |
1706 klass_RInfo = dst; | 1716 klass_RInfo = dst; |
1707 } | 1717 } |
1708 if (k->is_loaded() && !UseCompressedOops) { | 1718 if (k->is_loaded() && !UseCompressedKlassPointers) { |
1709 select_different_registers(obj, dst, k_RInfo, klass_RInfo); | 1719 select_different_registers(obj, dst, k_RInfo, klass_RInfo); |
1710 } else { | 1720 } else { |
1711 Rtmp1 = op->tmp3()->as_register(); | 1721 Rtmp1 = op->tmp3()->as_register(); |
1712 select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1); | 1722 select_different_registers(obj, dst, k_RInfo, klass_RInfo, Rtmp1); |
1713 } | 1723 } |
3444 // but not necessarily exactly of type default_type. | 3454 // but not necessarily exactly of type default_type. |
3445 Label known_ok, halt; | 3455 Label known_ok, halt; |
3446 __ mov_metadata(tmp, default_type->constant_encoding()); | 3456 __ mov_metadata(tmp, default_type->constant_encoding()); |
3447 #ifdef _LP64 | 3457 #ifdef _LP64 |
3448 if (UseCompressedKlassPointers) { | 3458 if (UseCompressedKlassPointers) { |
3449 __ encode_heap_oop(tmp); | 3459 __ encode_klass_not_null(tmp); |
3450 } | 3460 } |
3451 #endif | 3461 #endif |
3452 | 3462 |
3453 if (basic_type != T_OBJECT) { | 3463 if (basic_type != T_OBJECT) { |
3454 | 3464 |