< prev index next >

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page

        

*** 21,30 **** --- 21,31 ---- * questions. * */ #include "precompiled.hpp" + #include "c1/c1_Defs.hpp" #include "c1/c1_Compilation.hpp" #include "c1/c1_FrameMap.hpp" #include "c1/c1_Instruction.hpp" #include "c1/c1_LIRAssembler.hpp" #include "c1/c1_LIRGenerator.hpp"
*** 46,59 **** #define __ gen()->lir(__FILE__, __LINE__)-> #else #define __ gen()->lir()-> #endif ! // TODO: ARM - Use some recognizable constant which still fits architectural constraints ! #ifdef ARM ! #define PATCHED_ADDR (204) ! #else #define PATCHED_ADDR (max_jint) #endif void PhiResolverState::reset(int max_vregs) { // Initialize array sizes --- 47,57 ---- #define __ gen()->lir(__FILE__, __LINE__)-> #else #define __ gen()->lir()-> #endif ! #ifndef PATCHED_ADDR #define PATCHED_ADDR (max_jint) #endif void PhiResolverState::reset(int max_vregs) { // Initialize array sizes
*** 1597,1625 **** } addr = ptr; } assert(addr->is_register(), "must be a register at this point"); ! #ifdef ARM ! // TODO: ARM - move to platform-dependent code ! LIR_Opr tmp = FrameMap::R14_opr; ! if (VM_Version::supports_movw()) { ! __ move((LIR_Opr)card_table_base, tmp); ! } else { ! __ move(new LIR_Address(FrameMap::Rthread_opr, in_bytes(JavaThread::card_table_base_offset()), T_ADDRESS), tmp); ! } ! ! CardTableModRefBS* ct = (CardTableModRefBS*)_bs; ! LIR_Address *card_addr = new LIR_Address(tmp, addr, (LIR_Address::Scale) -CardTableModRefBS::card_shift, 0, T_BYTE); ! if(((int)ct->byte_map_base & 0xff) == 0) { ! __ move(tmp, card_addr); ! } else { ! LIR_Opr tmp_zero = new_register(T_INT); ! __ move(LIR_OprFact::intConst(0), tmp_zero); ! __ move(tmp_zero, card_addr); ! } ! #else // ARM LIR_Opr tmp = new_pointer_register(); if (TwoOperandLIRForm) { __ move(addr, tmp); __ unsigned_shift_right(tmp, CardTableModRefBS::card_shift, tmp); } else { --- 1595,1607 ---- } addr = ptr; } assert(addr->is_register(), "must be a register at this point"); ! #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER ! CardTableModRef_post_barrier_helper(addr, card_table_base); ! #else LIR_Opr tmp = new_pointer_register(); if (TwoOperandLIRForm) { __ move(addr, tmp); __ unsigned_shift_right(tmp, CardTableModRefBS::card_shift, tmp); } else {
*** 1631,1641 **** } else { __ move(LIR_OprFact::intConst(0), new LIR_Address(tmp, load_constant(card_table_base), T_BYTE)); } ! #endif // ARM } //------------------------field access-------------------------------------- --- 1613,1623 ---- } else { __ move(LIR_OprFact::intConst(0), new LIR_Address(tmp, load_constant(card_table_base), T_BYTE)); } ! #endif } //------------------------field access--------------------------------------
*** 2121,2131 **** assert(index_op->type() == T_INT, "only int constants supported"); addr = new LIR_Address(base_op, index_op->as_jint(), dst_type); } else { #ifdef X86 addr = new LIR_Address(base_op, index_op, LIR_Address::Scale(log2_scale), 0, dst_type); ! #elif defined(ARM) addr = generate_address(base_op, index_op, log2_scale, 0, dst_type); #else if (index_op->is_illegal() || log2_scale == 0) { addr = new LIR_Address(base_op, index_op, dst_type); } else { --- 2103,2113 ---- assert(index_op->type() == T_INT, "only int constants supported"); addr = new LIR_Address(base_op, index_op->as_jint(), dst_type); } else { #ifdef X86 addr = new LIR_Address(base_op, index_op, LIR_Address::Scale(log2_scale), 0, dst_type); ! #elif defined(GENERATE_ADDRESS_IS_PREFERRED) addr = generate_address(base_op, index_op, log2_scale, 0, dst_type); #else if (index_op->is_illegal() || log2_scale == 0) { addr = new LIR_Address(base_op, index_op, dst_type); } else {
*** 2175,2184 **** --- 2157,2169 ---- set_no_result(x); LIR_Opr base_op = base.result(); LIR_Opr index_op = idx.result(); + #ifdef GENERATE_ADDRESS_IS_PREFERRED + LIR_Address* addr = generate_address(base_op, index_op, log2_scale, 0, x->basic_type()); + #else #ifndef _LP64 if (base_op->type() == T_LONG) { base_op = new_register(T_INT); __ convert(Bytecodes::_l2i, base.result(), base_op); }
*** 2208,2217 **** --- 2193,2203 ---- // TODO: ARM also allows embedded shift in the address __ shift_left(index_op, log2_scale, index_op); } LIR_Address* addr = new LIR_Address(base_op, index_op, x->basic_type()); + #endif // !GENERATE_ADDRESS_IS_PREFERRED __ move(value.result(), addr); } void LIRGenerator::do_UnsafeGetObject(UnsafeGetObject* x) {
< prev index next >