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