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: |