< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page




1339     } else {
1340       ldrw(Rx, spill_address(4, offset));
1341     }
1342   }
1343   void unspill(FloatRegister Vx, SIMD_RegVariant T, int offset) {
1344     ldr(Vx, T, spill_address(1 << (int)T, offset));
1345   }
1346   void spill_copy128(int src_offset, int dst_offset,
1347                      Register tmp1=rscratch1, Register tmp2=rscratch2) {
1348     if (src_offset < 512 && (src_offset & 7) == 0 &&
1349         dst_offset < 512 && (dst_offset & 7) == 0) {
1350       ldp(tmp1, tmp2, Address(sp, src_offset));
1351       stp(tmp1, tmp2, Address(sp, dst_offset));
1352     } else {
1353       unspill(tmp1, true, src_offset);
1354       spill(tmp1, true, dst_offset);
1355       unspill(tmp1, true, src_offset+8);
1356       spill(tmp1, true, dst_offset+8);
1357     }
1358   }



1359 };
1360 
1361 #ifdef ASSERT
1362 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
1363 #endif
1364 
1365 /**
1366  * class SkipIfEqual:
1367  *
1368  * Instantiating this class will result in assembly code being output that will
1369  * jump around any code emitted between the creation of the instance and it's
1370  * automatic destruction at the end of a scope block, depending on the value of
1371  * the flag passed to the constructor, which will be checked at run-time.
1372  */
1373 class SkipIfEqual {
1374  private:
1375   MacroAssembler* _masm;
1376   Label _label;
1377 
1378  public:


1339     } else {
1340       ldrw(Rx, spill_address(4, offset));
1341     }
1342   }
1343   void unspill(FloatRegister Vx, SIMD_RegVariant T, int offset) {
1344     ldr(Vx, T, spill_address(1 << (int)T, offset));
1345   }
1346   void spill_copy128(int src_offset, int dst_offset,
1347                      Register tmp1=rscratch1, Register tmp2=rscratch2) {
1348     if (src_offset < 512 && (src_offset & 7) == 0 &&
1349         dst_offset < 512 && (dst_offset & 7) == 0) {
1350       ldp(tmp1, tmp2, Address(sp, src_offset));
1351       stp(tmp1, tmp2, Address(sp, dst_offset));
1352     } else {
1353       unspill(tmp1, true, src_offset);
1354       spill(tmp1, true, dst_offset);
1355       unspill(tmp1, true, src_offset+8);
1356       spill(tmp1, true, dst_offset+8);
1357     }
1358   }
1359 
1360   void cache_wb(Address line);
1361   void cache_wbsync(bool is_pre);
1362 };
1363 
1364 #ifdef ASSERT
1365 inline bool AbstractAssembler::pd_check_instruction_mark() { return false; }
1366 #endif
1367 
1368 /**
1369  * class SkipIfEqual:
1370  *
1371  * Instantiating this class will result in assembly code being output that will
1372  * jump around any code emitted between the creation of the instance and it's
1373  * automatic destruction at the end of a scope block, depending on the value of
1374  * the flag passed to the constructor, which will be checked at run-time.
1375  */
1376 class SkipIfEqual {
1377  private:
1378   MacroAssembler* _masm;
1379   Label _label;
1380 
1381  public:
< prev index next >