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(); |