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 |