< prev index next >

src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp

Print this page




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



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


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