79 int _cisc_spill_operand;// Which operand may cisc-spill
80 void set_cisc_spill_operand(uint op_index) { _cisc_spill_operand = op_index; }
81 bool _is_cisc_alternate;
82 InstructForm *_cisc_spill_alternate;// cisc possible replacement
83 const char *_cisc_reg_mask_name;
84 InstructForm *_short_branch_form;
85 bool _is_short_branch;
86 bool _is_mach_constant; // true if Node is a MachConstantNode
87 uint _alignment;
88
89 public:
90 // Public Data
91 const char *_ident; // Name of this instruction
92 NameList _parameters; // Locally defined names
93 FormDict _localNames; // Table of operands & their types
94 MatchRule *_matrule; // Matching rule for this instruction
95 Opcode *_opcode; // Encoding of the opcode for instruction
96 char *_size; // Size of instruction
97 InsEncode *_insencode; // Encoding class instruction belongs to
98 InsEncode *_constant; // Encoding class constant value belongs to
99 Attribute *_attribs; // List of Attribute rules
100 Predicate *_predicate; // Predicate test for this instruction
101 FormDict _effects; // Dictionary of effect rules
102 ExpandRule *_exprule; // Expand rule for this instruction
103 RewriteRule *_rewrule; // Rewrite rule for this instruction
104 FormatRule *_format; // Format for assembly generation
105 Peephole *_peephole; // List of peephole rules for instruction
106 const char *_ins_pipe; // Instruction Scheduling description class
107
108 uint *_uniq_idx; // Indexes of unique operands
109 uint _uniq_idx_length; // Length of _uniq_idx array
110 uint _num_uniq; // Number of unique operands
111 ComponentList _components; // List of Components matches MachNode's
112 // operand structure
113
114 bool _has_call; // contain a call and caller save registers should be saved?
115
116 // Public Methods
117 InstructForm(const char *id, bool ideal_only = false);
118 InstructForm(const char *id, InstructForm *instr, MatchRule *rule);
119 ~InstructForm();
120
121 // Dynamic type check
122 virtual InstructForm *is_instruction() const;
123
124 virtual bool ideal_only() const;
125
126 // This instruction sets a result
127 virtual bool sets_result() const;
128 // This instruction needs projections for additional DEFs or KILLs
129 virtual bool needs_projections();
130 // This instruction needs extra nodes for temporary inputs
131 virtual bool has_temps();
132 // This instruction defines or kills more than one object
133 virtual uint num_defs_or_kills();
134 // This instruction has an expand rule?
135 virtual bool expands() const ;
136 // Return this instruction's first peephole rule, or NULL
137 virtual Peephole *peepholes() const;
138 // Add a peephole rule to this instruction
139 virtual void append_peephole(Peephole *peep);
140
141 virtual bool is_pinned(FormDict &globals); // should be pinned inside block
142 virtual bool is_projection(FormDict &globals); // node requires projection
143 virtual bool is_parm(FormDict &globals); // node matches ideal 'Parm'
144 // ideal opcode enumeration
145 virtual const char *ideal_Opcode(FormDict &globals) const;
146 virtual int is_expensive() const; // node matches ideal 'CosD'
147 virtual int is_empty_encoding() const; // _size=0 and/or _insencode empty
148 virtual int is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal
149 virtual int is_ideal_copy() const; // node matches ideal 'Copy*'
150 virtual bool is_ideal_negD() const; // node matches ideal 'NegD'
151 virtual bool is_ideal_if() const; // node matches ideal 'If'
152 virtual bool is_ideal_fastlock() const; // node matches 'FastLock'
153 virtual bool is_ideal_membar() const; // node matches ideal 'MemBarXXX'
154 virtual bool is_ideal_loadPC() const; // node matches ideal 'LoadPC'
155 virtual bool is_ideal_box() const; // node matches ideal 'Box'
|
79 int _cisc_spill_operand;// Which operand may cisc-spill
80 void set_cisc_spill_operand(uint op_index) { _cisc_spill_operand = op_index; }
81 bool _is_cisc_alternate;
82 InstructForm *_cisc_spill_alternate;// cisc possible replacement
83 const char *_cisc_reg_mask_name;
84 InstructForm *_short_branch_form;
85 bool _is_short_branch;
86 bool _is_mach_constant; // true if Node is a MachConstantNode
87 uint _alignment;
88
89 public:
90 // Public Data
91 const char *_ident; // Name of this instruction
92 NameList _parameters; // Locally defined names
93 FormDict _localNames; // Table of operands & their types
94 MatchRule *_matrule; // Matching rule for this instruction
95 Opcode *_opcode; // Encoding of the opcode for instruction
96 char *_size; // Size of instruction
97 InsEncode *_insencode; // Encoding class instruction belongs to
98 InsEncode *_constant; // Encoding class constant value belongs to
99 bool _is_lateExpand; // Indicates that encoding just does a lateExpand.
100 Attribute *_attribs; // List of Attribute rules
101 Predicate *_predicate; // Predicate test for this instruction
102 FormDict _effects; // Dictionary of effect rules
103 ExpandRule *_exprule; // Expand rule for this instruction
104 RewriteRule *_rewrule; // Rewrite rule for this instruction
105 FormatRule *_format; // Format for assembly generation
106 Peephole *_peephole; // List of peephole rules for instruction
107 const char *_ins_pipe; // Instruction Scheduling description class
108
109 uint *_uniq_idx; // Indexes of unique operands
110 uint _uniq_idx_length; // Length of _uniq_idx array
111 uint _num_uniq; // Number of unique operands
112 ComponentList _components; // List of Components matches MachNode's
113 // operand structure
114
115 bool _has_call; // contain a call and caller save registers should be saved?
116
117 // Public Methods
118 InstructForm(const char *id, bool ideal_only = false);
119 InstructForm(const char *id, InstructForm *instr, MatchRule *rule);
120 ~InstructForm();
121
122 // Dynamic type check
123 virtual InstructForm *is_instruction() const;
124
125 virtual bool ideal_only() const;
126
127 // This instruction sets a result
128 virtual bool sets_result() const;
129 // This instruction needs projections for additional DEFs or KILLs
130 virtual bool needs_projections();
131 // This instruction needs extra nodes for temporary inputs
132 virtual bool has_temps();
133 // This instruction defines or kills more than one object
134 virtual uint num_defs_or_kills();
135 // This instruction has an expand rule?
136 virtual bool expands() const ;
137 // This instruction has a late expand rule?
138 virtual bool lateExpands() const;
139 // Return this instruction's first peephole rule, or NULL
140 virtual Peephole *peepholes() const;
141 // Add a peephole rule to this instruction
142 virtual void append_peephole(Peephole *peep);
143
144 virtual bool is_pinned(FormDict &globals); // should be pinned inside block
145 virtual bool is_projection(FormDict &globals); // node requires projection
146 virtual bool is_parm(FormDict &globals); // node matches ideal 'Parm'
147 // ideal opcode enumeration
148 virtual const char *ideal_Opcode(FormDict &globals) const;
149 virtual int is_expensive() const; // node matches ideal 'CosD'
150 virtual int is_empty_encoding() const; // _size=0 and/or _insencode empty
151 virtual int is_tls_instruction() const; // tlsLoadP rule or ideal ThreadLocal
152 virtual int is_ideal_copy() const; // node matches ideal 'Copy*'
153 virtual bool is_ideal_negD() const; // node matches ideal 'NegD'
154 virtual bool is_ideal_if() const; // node matches ideal 'If'
155 virtual bool is_ideal_fastlock() const; // node matches 'FastLock'
156 virtual bool is_ideal_membar() const; // node matches ideal 'MemBarXXX'
157 virtual bool is_ideal_loadPC() const; // node matches ideal 'LoadPC'
158 virtual bool is_ideal_box() const; // node matches ideal 'Box'
|