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