5299 ins_cost(MEMORY_REF_COST);
5300 format %{ "FLDD $dst, [$constanttablebase + $constantoffset]\t! load from constant table: double=$src" %}
5301
5302 ins_encode %{
5303 Register r = $constanttablebase;
5304 int offset = $constantoffset($src);
5305 if (!is_memoryD(offset)) { // can't use a predicate
5306 // in load constant instructs
5307 __ add_slow($tmp$$Register, r, offset);
5308 r = $tmp$$Register;
5309 offset = 0;
5310 }
5311 __ ldr_double($dst$$FloatRegister, Address(r, offset));
5312 %}
5313 ins_pipe(loadConFD);
5314 %}
5315
5316 // Prefetch instructions.
5317 // Must be safe to execute with invalid address (cannot fault).
5318
5319 instruct prefetchAlloc_mp( memoryP mem ) %{
5320 predicate(os::is_MP());
5321 match( PrefetchAllocation mem );
5322 ins_cost(MEMORY_REF_COST);
5323 size(4);
5324
5325 format %{ "PLDW $mem\t! Prefetch allocation" %}
5326 ins_encode %{
5327 #ifdef AARCH64
5328 __ prfm(pstl1keep, $mem$$Address);
5329 #else
5330 __ 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
5349 %}
5350 ins_pipe(iload_mem);
5351 %}
5352
5353 //----------Store Instructions-------------------------------------------------
5354 // Store Byte
5355 instruct storeB(memoryB mem, store_RegI src) %{
5356 match(Set mem (StoreB mem src));
5357 ins_cost(MEMORY_REF_COST);
5358
5359 size(4);
5360 format %{ "STRB $src,$mem\t! byte" %}
5361 ins_encode %{
5362 __ strb($src$$Register, $mem$$Address);
5363 %}
5364 ins_pipe(istore_mem_reg);
5365 %}
5366
5367 instruct storeCM(memoryB mem, store_RegI src) %{
|
5299 ins_cost(MEMORY_REF_COST);
5300 format %{ "FLDD $dst, [$constanttablebase + $constantoffset]\t! load from constant table: double=$src" %}
5301
5302 ins_encode %{
5303 Register r = $constanttablebase;
5304 int offset = $constantoffset($src);
5305 if (!is_memoryD(offset)) { // can't use a predicate
5306 // in load constant instructs
5307 __ add_slow($tmp$$Register, r, offset);
5308 r = $tmp$$Register;
5309 offset = 0;
5310 }
5311 __ ldr_double($dst$$FloatRegister, Address(r, offset));
5312 %}
5313 ins_pipe(loadConFD);
5314 %}
5315
5316 // Prefetch instructions.
5317 // Must be safe to execute with invalid address (cannot fault).
5318
5319 instruct prefetchAlloc( memoryP mem ) %{
5320 predicate(os::is_MP());
5321 match( PrefetchAllocation mem );
5322 ins_cost(MEMORY_REF_COST);
5323 size(4);
5324
5325 format %{ "PLDW $mem\t! Prefetch allocation" %}
5326 ins_encode %{
5327 #ifdef AARCH64
5328 __ prfm(pstl1keep, $mem$$Address);
5329 #else
5330 __ pldw($mem$$Address);
5331 #endif
5332 %}
5333 ins_pipe(iload_mem);
5334 %}
5335
5336 //----------Store Instructions-------------------------------------------------
5337 // Store Byte
5338 instruct storeB(memoryB mem, store_RegI src) %{
5339 match(Set mem (StoreB mem src));
5340 ins_cost(MEMORY_REF_COST);
5341
5342 size(4);
5343 format %{ "STRB $src,$mem\t! byte" %}
5344 ins_encode %{
5345 __ strb($src$$Register, $mem$$Address);
5346 %}
5347 ins_pipe(istore_mem_reg);
5348 %}
5349
5350 instruct storeCM(memoryB mem, store_RegI src) %{
|