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