< prev index next >

src/share/vm/c1/c1_LIRGenerator.hpp

Print this page
rev 12906 : [mq]: gc_interface

*** 23,32 **** --- 23,34 ---- */ #ifndef SHARE_VM_C1_C1_LIRGENERATOR_HPP #define SHARE_VM_C1_C1_LIRGENERATOR_HPP + #include "gc/shared/c1BarrierSetCodeGen.hpp" + #include "c1/c1_Decorators.hpp" #include "c1/c1_Instruction.hpp" #include "c1/c1_LIR.hpp" #include "ci/ciMethodData.hpp" #include "utilities/macros.hpp" #include "utilities/sizes.hpp"
*** 148,157 **** --- 150,163 ---- }; // only the classes below belong in the same file class LIRGenerator: public InstructionVisitor, public BlockClosure { + friend class C1BarrierSetCodeGen; + friend class C1ModRefBSCodeGen; + friend class C1CardTableModRefBSCodeGen; + friend class C1G1BSCodeGen; // LIRGenerator should never get instatiated on the heap. private: void* operator new(size_t size) throw(); void* operator new[](size_t size) throw(); void operator delete(void* p) { ShouldNotReachHere(); }
*** 163,173 **** BlockBegin* _block; int _virtual_register_number; Values _instruction_for_operand; BitMap2D _vreg_flags; // flags which can be set on a per-vreg basis LIR_List* _lir; - BarrierSet* _bs; LIRGenerator* gen() { return this; } --- 169,178 ----
*** 267,293 **** // GC Barriers // generic interface ! void pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, bool do_load, bool patch, CodeEmitInfo* info); ! void post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); // specific implementations - // pre barriers - - void G1SATBCardTableModRef_pre_barrier(LIR_Opr addr_opr, LIR_Opr pre_val, - bool do_load, bool patch, CodeEmitInfo* info); - - // post barriers - - void G1SATBCardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); - void CardTableModRef_post_barrier(LIR_OprDesc* addr, LIR_OprDesc* new_val); - #ifdef CARDTABLEMODREF_POST_BARRIER_HELPER - void CardTableModRef_post_barrier_helper(LIR_OprDesc* addr, LIR_Const* card_table_base); - #endif - static LIR_Opr result_register_for(ValueType* type, bool callee = false); ciObject* get_jobject_constant(Value value); --- 272,306 ---- // GC Barriers // generic interface ! void access_store_at(C1DecoratorSet decorators, BasicType type, ! LIRItem& base, LIR_Opr offset, LIR_Opr value, ! CodeEmitInfo* patch_info, CodeEmitInfo* store_emit_info); ! ! LIR_Opr access_load_at(C1DecoratorSet decorators, BasicType type, ! LIRItem& base, LIR_Opr offset, ! CodeEmitInfo* patch_info, CodeEmitInfo* load_emit_info); ! ! LIR_Opr access_cas_at(C1DecoratorSet decorators, BasicType type, ! LIRItem& base, LIRItem& offset, LIRItem& cmp_value, LIRItem& new_value); ! ! LIR_Opr access_swap_at(C1DecoratorSet decorators, BasicType type, ! LIRItem& base, LIRItem& offset, LIRItem& value); ! ! LIR_Opr access_add_at(C1DecoratorSet decorators, BasicType type, ! LIRItem& base, LIRItem& offset, LIRItem& value); ! ! // These need to guarantee JMM volatile semantics are preserved on each platform ! // and requires one implementation per architecture. ! LIR_Opr cas(BasicType type, LIR_Opr addr, LIRItem& cmp_value, LIRItem& new_value); ! LIR_Opr swap(BasicType type, LIR_Opr addr, LIRItem& new_value); ! LIR_Opr add(BasicType type, LIR_Opr addr, LIRItem& new_value); ! void array_store_check(LIR_Opr value, LIR_Opr array, CodeEmitInfo* store_check_info, ciMethod* profiled_method, int profiled_bci); // specific implementations static LIR_Opr result_register_for(ValueType* type, bool callee = false); ciObject* get_jobject_constant(Value value);
*** 432,443 **** #ifdef __SOFTFP__ void do_soft_float_compare(If *x); #endif // __SOFTFP__ - void init(); - SwitchRangeArray* create_lookup_ranges(TableSwitch* x); SwitchRangeArray* create_lookup_ranges(LookupSwitch* x); void do_SwitchRanges(SwitchRangeArray* x, LIR_Opr value, BlockBegin* default_sux); #ifdef TRACE_HAVE_INTRINSICS --- 445,454 ----
*** 451,460 **** --- 462,472 ---- Value arg, LIR_Opr& mdp, bool not_null, ciKlass* signature_at_call_k, ciKlass* callee_signature_k); void profile_arguments(ProfileCall* x); void profile_parameters(Base* x); void profile_parameters_at_call(ProfileCall* x); + LIR_Opr mask_boolean(LIR_Opr array, LIR_Opr value, CodeEmitInfo*& null_check_info); LIR_Opr maybe_mask_boolean(StoreIndexed* x, LIR_Opr array, LIR_Opr value, CodeEmitInfo*& null_check_info); public: Compilation* compilation() const { return _compilation; } FrameMap* frame_map() const { return _compilation->frame_map(); }
*** 478,488 **** LIRGenerator(Compilation* compilation, ciMethod* method) : _compilation(compilation) , _method(method) , _virtual_register_number(LIR_OprDesc::vreg_base) , _vreg_flags(num_vreg_flags) { - init(); } // for virtual registers, maps them back to Phi's or Local's Instruction* instruction_for_opr(LIR_Opr opr); Instruction* instruction_for_vreg(int reg_num); --- 490,499 ----
< prev index next >