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