5314 %} |
5314 %} |
5315 |
5315 |
5316 // Prefetch instructions. |
5316 // Prefetch instructions. |
5317 // Must be safe to execute with invalid address (cannot fault). |
5317 // Must be safe to execute with invalid address (cannot fault). |
5318 |
5318 |
5319 instruct prefetchAlloc_mp( memoryP mem ) %{ |
5319 instruct prefetchAlloc( memoryP mem ) %{ |
5320 predicate(os::is_MP()); |
|
5321 match( PrefetchAllocation mem ); |
5320 match( PrefetchAllocation mem ); |
5322 ins_cost(MEMORY_REF_COST); |
5321 ins_cost(MEMORY_REF_COST); |
5323 size(4); |
5322 size(4); |
5324 |
5323 |
5325 format %{ "PLDW $mem\t! Prefetch allocation" %} |
5324 format %{ "PLDW $mem\t! Prefetch allocation" %} |
5326 ins_encode %{ |
5325 ins_encode %{ |
5327 #ifdef AARCH64 |
5326 #ifdef AARCH64 |
5328 __ prfm(pstl1keep, $mem$$Address); |
5327 __ prfm(pstl1keep, $mem$$Address); |
5329 #else |
5328 #else |
5330 __ pldw($mem$$Address); |
5329 __ pldw($mem$$Address); |
5331 #endif |
|
5332 %} |
|
5333 ins_pipe(iload_mem); |
|
5334 %} |
|
5335 |
|
5336 instruct prefetchAlloc_sp( memoryP mem ) %{ |
|
5337 predicate(!os::is_MP()); |
|
5338 match( PrefetchAllocation mem ); |
|
5339 ins_cost(MEMORY_REF_COST); |
|
5340 size(4); |
|
5341 |
|
5342 format %{ "PLD $mem\t! Prefetch allocation" %} |
|
5343 ins_encode %{ |
|
5344 #ifdef AARCH64 |
|
5345 __ prfm(pstl1keep, $mem$$Address); |
|
5346 #else |
|
5347 __ pld($mem$$Address); |
|
5348 #endif |
5330 #endif |
5349 %} |
5331 %} |
5350 ins_pipe(iload_mem); |
5332 ins_pipe(iload_mem); |
5351 %} |
5333 %} |
5352 |
5334 |