src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp

Print this page




1548   // entered in increasing order.
1549   int offset;
1550 
1551   assert(disp_reg != noreg || Assembler::is_simm13(disp_value), "should have set this up");
1552   if (disp_reg == noreg) {
1553     offset = store(from_reg, src, disp_value, type, wide, unaligned);
1554   } else {
1555     assert(!unaligned, "can't handle this");
1556     offset = store(from_reg, src, disp_reg, type, wide);
1557   }
1558 
1559   if (patch != NULL) {
1560     patching_epilog(patch, patch_code, src, info);
1561   }
1562 
1563   if (info != NULL) add_debug_info_for_null_check(offset, info);
1564 }
1565 
1566 
1567 void LIR_Assembler::return_op(LIR_Opr result) {



1568   // the poll may need a register so just pick one that isn't the return register
1569 #if defined(TIERED) && !defined(_LP64)
1570   if (result->type_field() == LIR_OprDesc::long_type) {
1571     // Must move the result to G1
1572     // Must leave proper result in O0,O1 and G1 (TIERED only)
1573     __ sllx(I0, 32, G1);          // Shift bits into high G1
1574     __ srl (I1, 0, I1);           // Zero extend O1 (harmless?)
1575     __ or3 (I1, G1, G1);          // OR 64 bits into G1
1576 #ifdef ASSERT
1577     // mangle it so any problems will show up
1578     __ set(0xdeadbeef, I0);
1579     __ set(0xdeadbeef, I1);
1580 #endif
1581   }
1582 #endif // TIERED
1583   __ set((intptr_t)os::get_polling_page(), L0);
1584   __ relocate(relocInfo::poll_return_type);
1585   __ ld_ptr(L0, 0, G0);
1586   __ ret();
1587   __ delayed()->restore();




1548   // entered in increasing order.
1549   int offset;
1550 
1551   assert(disp_reg != noreg || Assembler::is_simm13(disp_value), "should have set this up");
1552   if (disp_reg == noreg) {
1553     offset = store(from_reg, src, disp_value, type, wide, unaligned);
1554   } else {
1555     assert(!unaligned, "can't handle this");
1556     offset = store(from_reg, src, disp_reg, type, wide);
1557   }
1558 
1559   if (patch != NULL) {
1560     patching_epilog(patch, patch_code, src, info);
1561   }
1562 
1563   if (info != NULL) add_debug_info_for_null_check(offset, info);
1564 }
1565 
1566 
1567 void LIR_Assembler::return_op(LIR_Opr result) {
1568   if (StackReservedPages > 0 && compilation()->has_reserved_stack_access()) {
1569     __ reserved_stack_check();
1570   }
1571   // the poll may need a register so just pick one that isn't the return register
1572 #if defined(TIERED) && !defined(_LP64)
1573   if (result->type_field() == LIR_OprDesc::long_type) {
1574     // Must move the result to G1
1575     // Must leave proper result in O0,O1 and G1 (TIERED only)
1576     __ sllx(I0, 32, G1);          // Shift bits into high G1
1577     __ srl (I1, 0, I1);           // Zero extend O1 (harmless?)
1578     __ or3 (I1, G1, G1);          // OR 64 bits into G1
1579 #ifdef ASSERT
1580     // mangle it so any problems will show up
1581     __ set(0xdeadbeef, I0);
1582     __ set(0xdeadbeef, I1);
1583 #endif
1584   }
1585 #endif // TIERED
1586   __ set((intptr_t)os::get_polling_page(), L0);
1587   __ relocate(relocInfo::poll_return_type);
1588   __ ld_ptr(L0, 0, G0);
1589   __ ret();
1590   __ delayed()->restore();