36 class CodeBuffer;
37 class JVMState;
38 class MachCallDynamicJavaNode;
39 class MachCallJavaNode;
40 class MachCallLeafNode;
41 class MachCallNode;
42 class MachCallRuntimeNode;
43 class MachCallStaticJavaNode;
44 class MachEpilogNode;
45 class MachIfNode;
46 class MachNullCheckNode;
47 class MachOper;
48 class MachProjNode;
49 class MachPrologNode;
50 class MachReturnNode;
51 class MachSafePointNode;
52 class MachSpillCopyNode;
53 class Matcher;
54 class PhaseRegAlloc;
55 class RegMask;
56 class State;
57
58 //---------------------------MachOper------------------------------------------
59 class MachOper : public ResourceObj {
60 public:
61 // Allocate right next to the MachNodes in the same arena
62 void *operator new( size_t x, Compile* C ) throw() { return C->node_arena()->Amalloc_D(x); }
63
64 // Opcode
65 virtual uint opcode() const = 0;
66
67 // Number of input edges.
68 // Generally at least 1
69 virtual uint num_edges() const { return 1; }
70 // Array of Register masks
71 virtual const RegMask *in_RegMask(int index) const;
72
73 // Methods to output the encoding of the operand
74
75 // Negate conditional branches. Error for non-branch Nodes
698 #ifndef PRODUCT
699 virtual void dump_spec(outputStream *st) const;
700 #endif
701 };
702
703 //------------------------------MachGotoNode-----------------------------------
704 // Machine-specific versions of GotoNodes
705 class MachGotoNode : public MachBranchNode {
706 public:
707 MachGotoNode() : MachBranchNode() {
708 init_class_id(Class_MachGoto);
709 }
710 };
711
712 //------------------------------MachFastLockNode-------------------------------------
713 // Machine-specific versions of FastLockNodes
714 class MachFastLockNode : public MachNode {
715 virtual uint size_of() const { return sizeof(*this); } // Size is bigger
716 public:
717 BiasedLockingCounters* _counters;
718
719 MachFastLockNode() : MachNode() {}
720 };
721
722 //------------------------------MachReturnNode--------------------------------
723 // Machine-specific versions of subroutine returns
724 class MachReturnNode : public MachNode {
725 virtual uint size_of() const; // Size is bigger
726 public:
727 RegMask *_in_rms; // Input register masks, set during allocation
728 ReallocMark _nesting; // assertion check for reallocations
729 const TypePtr* _adr_type; // memory effects of call or return
730 MachReturnNode() : MachNode() {
731 init_class_id(Class_MachReturn);
732 _adr_type = TypePtr::BOTTOM; // the default: all of memory
733 }
734
735 void set_adr_type(const TypePtr* atp) { _adr_type = atp; }
736
737 virtual const RegMask &in_RegMask(uint) const;
738 virtual bool pinned() const { return true; };
|
36 class CodeBuffer;
37 class JVMState;
38 class MachCallDynamicJavaNode;
39 class MachCallJavaNode;
40 class MachCallLeafNode;
41 class MachCallNode;
42 class MachCallRuntimeNode;
43 class MachCallStaticJavaNode;
44 class MachEpilogNode;
45 class MachIfNode;
46 class MachNullCheckNode;
47 class MachOper;
48 class MachProjNode;
49 class MachPrologNode;
50 class MachReturnNode;
51 class MachSafePointNode;
52 class MachSpillCopyNode;
53 class Matcher;
54 class PhaseRegAlloc;
55 class RegMask;
56 class RTMLockingCounters;
57 class State;
58
59 //---------------------------MachOper------------------------------------------
60 class MachOper : public ResourceObj {
61 public:
62 // Allocate right next to the MachNodes in the same arena
63 void *operator new( size_t x, Compile* C ) throw() { return C->node_arena()->Amalloc_D(x); }
64
65 // Opcode
66 virtual uint opcode() const = 0;
67
68 // Number of input edges.
69 // Generally at least 1
70 virtual uint num_edges() const { return 1; }
71 // Array of Register masks
72 virtual const RegMask *in_RegMask(int index) const;
73
74 // Methods to output the encoding of the operand
75
76 // Negate conditional branches. Error for non-branch Nodes
699 #ifndef PRODUCT
700 virtual void dump_spec(outputStream *st) const;
701 #endif
702 };
703
704 //------------------------------MachGotoNode-----------------------------------
705 // Machine-specific versions of GotoNodes
706 class MachGotoNode : public MachBranchNode {
707 public:
708 MachGotoNode() : MachBranchNode() {
709 init_class_id(Class_MachGoto);
710 }
711 };
712
713 //------------------------------MachFastLockNode-------------------------------------
714 // Machine-specific versions of FastLockNodes
715 class MachFastLockNode : public MachNode {
716 virtual uint size_of() const { return sizeof(*this); } // Size is bigger
717 public:
718 BiasedLockingCounters* _counters;
719 RTMLockingCounters* _rtmcounters; // RTM lock counters for inflated locks
720 RTMLockingCounters* _stackrtmcounters; // RTM lock counters for stack locks
721 MachFastLockNode() : MachNode() {}
722 };
723
724 //------------------------------MachReturnNode--------------------------------
725 // Machine-specific versions of subroutine returns
726 class MachReturnNode : public MachNode {
727 virtual uint size_of() const; // Size is bigger
728 public:
729 RegMask *_in_rms; // Input register masks, set during allocation
730 ReallocMark _nesting; // assertion check for reallocations
731 const TypePtr* _adr_type; // memory effects of call or return
732 MachReturnNode() : MachNode() {
733 init_class_id(Class_MachReturn);
734 _adr_type = TypePtr::BOTTOM; // the default: all of memory
735 }
736
737 void set_adr_type(const TypePtr* atp) { _adr_type = atp; }
738
739 virtual const RegMask &in_RegMask(uint) const;
740 virtual bool pinned() const { return true; };
|