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