< prev index next >

src/hotspot/cpu/arm/arm.ad

Print this page




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) %{


< prev index next >