237 // Push a projection node onto the projection list
238 void push_projection(Node* node) {
239 _projection_list.push(node);
240 }
241
242 Node* pop_projection() {
243 return _projection_list.pop();
244 }
245
246 // Number of nodes in the projection list
247 uint number_of_projections() const {
248 return _projection_list.size();
249 }
250
251 // Select instructions for entire method
252 void match();
253
254 // Helper for match
255 OptoReg::Name warp_incoming_stk_arg( VMReg reg );
256
257 // Transform, then walk. Does implicit DCE while walking.
258 // Name changed from "transform" to avoid it being virtual.
259 Node *xform( Node *old_space_node, int Nodes );
260
261 // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
262 MachNode *match_tree( const Node *n );
263 MachNode *match_sfpt( SafePointNode *sfpt );
264 // Helper for match_sfpt
265 OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
266
267 // Initialize first stack mask and related masks.
268 void init_first_stack_mask();
269
270 // If we should save-on-entry this register
271 bool is_save_on_entry( int reg );
272
273 // Fixup the save-on-entry registers
274 void Fixup_Save_On_Entry( );
275
276 // --- Frame handling ---
362 // Alignment of stack, measured in stack slots.
363 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
364 static uint stack_alignment_in_slots() {
365 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
366 }
367
368 // Array mapping arguments to registers. Argument 0 is usually the 'this'
369 // pointer. Registers can include stack-slots and regular registers.
370 static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
371
372 // Convert a sig into a calling convention register layout
373 // and find interesting things about it.
374 static OptoReg::Name find_receiver( bool is_outgoing );
375 // Return address register. On Intel it is a stack-slot. On PowerPC
376 // it is the Link register. On Sparc it is r31?
377 virtual OptoReg::Name return_addr() const;
378 RegMask _return_addr_mask;
379 // Return value register. On Intel it is EAX. On Sparc i0/o0.
380 static OptoRegPair return_value(uint ideal_reg, bool is_outgoing);
381 static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
382 RegMask _return_value_mask;
383 // Inline Cache Register
384 static OptoReg::Name inline_cache_reg();
385 static int inline_cache_reg_encode();
386
387 // Register for DIVI projection of divmodI
388 static RegMask divI_proj_mask();
389 // Register for MODI projection of divmodI
390 static RegMask modI_proj_mask();
391
392 // Register for DIVL projection of divmodL
393 static RegMask divL_proj_mask();
394 // Register for MODL projection of divmodL
395 static RegMask modL_proj_mask();
396
397 // Use hardware DIV instruction when it is faster than
398 // a code which use multiply for division by constant.
399 static bool use_asm_for_ldiv_by_con( jlong divisor );
400
401 static const RegMask method_handle_invoke_SP_save_mask();
402
|
237 // Push a projection node onto the projection list
238 void push_projection(Node* node) {
239 _projection_list.push(node);
240 }
241
242 Node* pop_projection() {
243 return _projection_list.pop();
244 }
245
246 // Number of nodes in the projection list
247 uint number_of_projections() const {
248 return _projection_list.size();
249 }
250
251 // Select instructions for entire method
252 void match();
253
254 // Helper for match
255 OptoReg::Name warp_incoming_stk_arg( VMReg reg );
256
257 RegMask* return_values_mask(const TypeTuple *range);
258
259 // Transform, then walk. Does implicit DCE while walking.
260 // Name changed from "transform" to avoid it being virtual.
261 Node *xform( Node *old_space_node, int Nodes );
262
263 // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
264 MachNode *match_tree( const Node *n );
265 MachNode *match_sfpt( SafePointNode *sfpt );
266 // Helper for match_sfpt
267 OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
268
269 // Initialize first stack mask and related masks.
270 void init_first_stack_mask();
271
272 // If we should save-on-entry this register
273 bool is_save_on_entry( int reg );
274
275 // Fixup the save-on-entry registers
276 void Fixup_Save_On_Entry( );
277
278 // --- Frame handling ---
364 // Alignment of stack, measured in stack slots.
365 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
366 static uint stack_alignment_in_slots() {
367 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
368 }
369
370 // Array mapping arguments to registers. Argument 0 is usually the 'this'
371 // pointer. Registers can include stack-slots and regular registers.
372 static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
373
374 // Convert a sig into a calling convention register layout
375 // and find interesting things about it.
376 static OptoReg::Name find_receiver( bool is_outgoing );
377 // Return address register. On Intel it is a stack-slot. On PowerPC
378 // it is the Link register. On Sparc it is r31?
379 virtual OptoReg::Name return_addr() const;
380 RegMask _return_addr_mask;
381 // Return value register. On Intel it is EAX. On Sparc i0/o0.
382 static OptoRegPair return_value(uint ideal_reg, bool is_outgoing);
383 static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
384 RegMask* _return_values_mask;
385 // Inline Cache Register
386 static OptoReg::Name inline_cache_reg();
387 static int inline_cache_reg_encode();
388
389 // Register for DIVI projection of divmodI
390 static RegMask divI_proj_mask();
391 // Register for MODI projection of divmodI
392 static RegMask modI_proj_mask();
393
394 // Register for DIVL projection of divmodL
395 static RegMask divL_proj_mask();
396 // Register for MODL projection of divmodL
397 static RegMask modL_proj_mask();
398
399 // Use hardware DIV instruction when it is faster than
400 // a code which use multiply for division by constant.
401 static bool use_asm_for_ldiv_by_con( jlong divisor );
402
403 static const RegMask method_handle_invoke_SP_save_mask();
404
|