258 // Push a projection node onto the projection list
259 void push_projection(Node* node) {
260 _projection_list.push(node);
261 }
262
263 Node* pop_projection() {
264 return _projection_list.pop();
265 }
266
267 // Number of nodes in the projection list
268 uint number_of_projections() const {
269 return _projection_list.size();
270 }
271
272 // Select instructions for entire method
273 void match();
274
275 // Helper for match
276 OptoReg::Name warp_incoming_stk_arg( VMReg reg );
277
278 // Transform, then walk. Does implicit DCE while walking.
279 // Name changed from "transform" to avoid it being virtual.
280 Node *xform( Node *old_space_node, int Nodes );
281
282 // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
283 MachNode *match_tree( const Node *n );
284 MachNode *match_sfpt( SafePointNode *sfpt );
285 // Helper for match_sfpt
286 OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
287
288 // Initialize first stack mask and related masks.
289 void init_first_stack_mask();
290
291 // If we should save-on-entry this register
292 bool is_save_on_entry( int reg );
293
294 // Fixup the save-on-entry registers
295 void Fixup_Save_On_Entry( );
296
297 // --- Frame handling ---
395
396 // Alignment of stack in bytes, standard Intel word alignment is 4.
397 // Sparc probably wants at least double-word (8).
398 static uint stack_alignment_in_bytes();
399 // Alignment of stack, measured in stack slots.
400 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
401 static uint stack_alignment_in_slots() {
402 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
403 }
404
405 // Convert a sig into a calling convention register layout
406 // and find interesting things about it.
407 static OptoReg::Name find_receiver();
408 // Return address register. On Intel it is a stack-slot. On PowerPC
409 // it is the Link register. On Sparc it is r31?
410 virtual OptoReg::Name return_addr() const;
411 RegMask _return_addr_mask;
412 // Return value register. On Intel it is EAX.
413 static OptoRegPair return_value(uint ideal_reg);
414 static OptoRegPair c_return_value(uint ideal_reg);
415 RegMask _return_value_mask;
416 // Inline Cache Register
417 static OptoReg::Name inline_cache_reg();
418 static int inline_cache_reg_encode();
419
420 // Register for DIVI projection of divmodI
421 static RegMask divI_proj_mask();
422 // Register for MODI projection of divmodI
423 static RegMask modI_proj_mask();
424
425 // Register for DIVL projection of divmodL
426 static RegMask divL_proj_mask();
427 // Register for MODL projection of divmodL
428 static RegMask modL_proj_mask();
429
430 // Use hardware DIV instruction when it is faster than
431 // a code which use multiply for division by constant.
432 static bool use_asm_for_ldiv_by_con( jlong divisor );
433
434 static const RegMask method_handle_invoke_SP_save_mask();
435
|
258 // Push a projection node onto the projection list
259 void push_projection(Node* node) {
260 _projection_list.push(node);
261 }
262
263 Node* pop_projection() {
264 return _projection_list.pop();
265 }
266
267 // Number of nodes in the projection list
268 uint number_of_projections() const {
269 return _projection_list.size();
270 }
271
272 // Select instructions for entire method
273 void match();
274
275 // Helper for match
276 OptoReg::Name warp_incoming_stk_arg( VMReg reg );
277
278 RegMask* return_values_mask(const TypeFunc* tf);
279
280 // Transform, then walk. Does implicit DCE while walking.
281 // Name changed from "transform" to avoid it being virtual.
282 Node *xform( Node *old_space_node, int Nodes );
283
284 // Match a single Ideal Node - turn it into a 1-Node tree; Label & Reduce.
285 MachNode *match_tree( const Node *n );
286 MachNode *match_sfpt( SafePointNode *sfpt );
287 // Helper for match_sfpt
288 OptoReg::Name warp_outgoing_stk_arg( VMReg reg, OptoReg::Name begin_out_arg_area, OptoReg::Name &out_arg_limit_per_call );
289
290 // Initialize first stack mask and related masks.
291 void init_first_stack_mask();
292
293 // If we should save-on-entry this register
294 bool is_save_on_entry( int reg );
295
296 // Fixup the save-on-entry registers
297 void Fixup_Save_On_Entry( );
298
299 // --- Frame handling ---
397
398 // Alignment of stack in bytes, standard Intel word alignment is 4.
399 // Sparc probably wants at least double-word (8).
400 static uint stack_alignment_in_bytes();
401 // Alignment of stack, measured in stack slots.
402 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
403 static uint stack_alignment_in_slots() {
404 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
405 }
406
407 // Convert a sig into a calling convention register layout
408 // and find interesting things about it.
409 static OptoReg::Name find_receiver();
410 // Return address register. On Intel it is a stack-slot. On PowerPC
411 // it is the Link register. On Sparc it is r31?
412 virtual OptoReg::Name return_addr() const;
413 RegMask _return_addr_mask;
414 // Return value register. On Intel it is EAX.
415 static OptoRegPair return_value(uint ideal_reg);
416 static OptoRegPair c_return_value(uint ideal_reg);
417 RegMask* _return_values_mask;
418 // Inline Cache Register
419 static OptoReg::Name inline_cache_reg();
420 static int inline_cache_reg_encode();
421
422 // Register for DIVI projection of divmodI
423 static RegMask divI_proj_mask();
424 // Register for MODI projection of divmodI
425 static RegMask modI_proj_mask();
426
427 // Register for DIVL projection of divmodL
428 static RegMask divL_proj_mask();
429 // Register for MODL projection of divmodL
430 static RegMask modL_proj_mask();
431
432 // Use hardware DIV instruction when it is faster than
433 // a code which use multiply for division by constant.
434 static bool use_asm_for_ldiv_by_con( jlong divisor );
435
436 static const RegMask method_handle_invoke_SP_save_mask();
437
|