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