282
283 // Register number of the stack slot corresponding to the highest incoming
284 // argument on the stack. Per the Big Picture in the AD file, it is:
285 // _old_SP + out_preserve_stack_slots + incoming argument size.
286 OptoReg::Name _in_arg_limit;
287
288 // Register number of the stack slot corresponding to the new SP.
289 // Per the Big Picture in the AD file, it is:
290 // _in_arg_limit + pad0
291 OptoReg::Name _new_SP;
292
293 // Register number of the stack slot corresponding to the highest outgoing
294 // argument on the stack. Per the Big Picture in the AD file, it is:
295 // _new_SP + max outgoing arguments of all calls
296 OptoReg::Name _out_arg_limit;
297
298 OptoRegPair *_parm_regs; // Array of machine registers per argument
299 RegMask *_calling_convention_mask; // Array of RegMasks per argument
300
301 // Does matcher have a match rule for this ideal node?
302 static const bool has_match_rule(int opcode);
303 static const bool _hasMatchRule[_last_opcode];
304
305 // Does matcher have a match rule for this ideal node and is the
306 // predicate (if there is one) true?
307 // NOTE: If this function is used more commonly in the future, ADLC
308 // should generate this one.
309 static const bool match_rule_supported(int opcode);
310
311 // identify extra cases that we might want to provide match rules for
312 // e.g. Op_ vector nodes and other intrinsics while guarding with vlen
313 static const bool match_rule_supported_vector(int opcode, int vlen);
314
315 // Some microarchitectures have mask registers used on vectors
316 static const bool has_predicated_vectors(void);
317
318 // Some uarchs have different sized float register resources
319 static const int float_pressure(int default_pressure_threshold);
320
321 // Used to determine if we have fast l2f conversion
322 // USII has it, USIII doesn't
360 // Sparc probably wants at least double-word (8).
361 static uint stack_alignment_in_bytes();
362 // Alignment of stack, measured in stack slots.
363 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
364 static uint stack_alignment_in_slots() {
365 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
366 }
367
368 // Array mapping arguments to registers. Argument 0 is usually the 'this'
369 // pointer. Registers can include stack-slots and regular registers.
370 static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
371
372 // Convert a sig into a calling convention register layout
373 // and find interesting things about it.
374 static OptoReg::Name find_receiver( bool is_outgoing );
375 // Return address register. On Intel it is a stack-slot. On PowerPC
376 // it is the Link register. On Sparc it is r31?
377 virtual OptoReg::Name return_addr() const;
378 RegMask _return_addr_mask;
379 // Return value register. On Intel it is EAX. On Sparc i0/o0.
380 static OptoRegPair return_value(int ideal_reg, bool is_outgoing);
381 static OptoRegPair c_return_value(int ideal_reg, bool is_outgoing);
382 RegMask _return_value_mask;
383 // Inline Cache Register
384 static OptoReg::Name inline_cache_reg();
385 static int inline_cache_reg_encode();
386
387 // Register for DIVI projection of divmodI
388 static RegMask divI_proj_mask();
389 // Register for MODI projection of divmodI
390 static RegMask modI_proj_mask();
391
392 // Register for DIVL projection of divmodL
393 static RegMask divL_proj_mask();
394 // Register for MODL projection of divmodL
395 static RegMask modL_proj_mask();
396
397 // Use hardware DIV instruction when it is faster than
398 // a code which use multiply for division by constant.
399 static bool use_asm_for_ldiv_by_con( jlong divisor );
400
401 static const RegMask method_handle_invoke_SP_save_mask();
|
282
283 // Register number of the stack slot corresponding to the highest incoming
284 // argument on the stack. Per the Big Picture in the AD file, it is:
285 // _old_SP + out_preserve_stack_slots + incoming argument size.
286 OptoReg::Name _in_arg_limit;
287
288 // Register number of the stack slot corresponding to the new SP.
289 // Per the Big Picture in the AD file, it is:
290 // _in_arg_limit + pad0
291 OptoReg::Name _new_SP;
292
293 // Register number of the stack slot corresponding to the highest outgoing
294 // argument on the stack. Per the Big Picture in the AD file, it is:
295 // _new_SP + max outgoing arguments of all calls
296 OptoReg::Name _out_arg_limit;
297
298 OptoRegPair *_parm_regs; // Array of machine registers per argument
299 RegMask *_calling_convention_mask; // Array of RegMasks per argument
300
301 // Does matcher have a match rule for this ideal node?
302 static const bool has_match_rule(uint opcode);
303 static const bool _hasMatchRule[_last_opcode];
304
305 // Does matcher have a match rule for this ideal node and is the
306 // predicate (if there is one) true?
307 // NOTE: If this function is used more commonly in the future, ADLC
308 // should generate this one.
309 static const bool match_rule_supported(int opcode);
310
311 // identify extra cases that we might want to provide match rules for
312 // e.g. Op_ vector nodes and other intrinsics while guarding with vlen
313 static const bool match_rule_supported_vector(int opcode, int vlen);
314
315 // Some microarchitectures have mask registers used on vectors
316 static const bool has_predicated_vectors(void);
317
318 // Some uarchs have different sized float register resources
319 static const int float_pressure(int default_pressure_threshold);
320
321 // Used to determine if we have fast l2f conversion
322 // USII has it, USIII doesn't
360 // Sparc probably wants at least double-word (8).
361 static uint stack_alignment_in_bytes();
362 // Alignment of stack, measured in stack slots.
363 // The size of stack slots is defined by VMRegImpl::stack_slot_size.
364 static uint stack_alignment_in_slots() {
365 return stack_alignment_in_bytes() / (VMRegImpl::stack_slot_size);
366 }
367
368 // Array mapping arguments to registers. Argument 0 is usually the 'this'
369 // pointer. Registers can include stack-slots and regular registers.
370 static void calling_convention( BasicType *, VMRegPair *, uint len, bool is_outgoing );
371
372 // Convert a sig into a calling convention register layout
373 // and find interesting things about it.
374 static OptoReg::Name find_receiver( bool is_outgoing );
375 // Return address register. On Intel it is a stack-slot. On PowerPC
376 // it is the Link register. On Sparc it is r31?
377 virtual OptoReg::Name return_addr() const;
378 RegMask _return_addr_mask;
379 // Return value register. On Intel it is EAX. On Sparc i0/o0.
380 static OptoRegPair return_value(uint ideal_reg, bool is_outgoing);
381 static OptoRegPair c_return_value(uint ideal_reg, bool is_outgoing);
382 RegMask _return_value_mask;
383 // Inline Cache Register
384 static OptoReg::Name inline_cache_reg();
385 static int inline_cache_reg_encode();
386
387 // Register for DIVI projection of divmodI
388 static RegMask divI_proj_mask();
389 // Register for MODI projection of divmodI
390 static RegMask modI_proj_mask();
391
392 // Register for DIVL projection of divmodL
393 static RegMask divL_proj_mask();
394 // Register for MODL projection of divmodL
395 static RegMask modL_proj_mask();
396
397 // Use hardware DIV instruction when it is faster than
398 // a code which use multiply for division by constant.
399 static bool use_asm_for_ldiv_by_con( jlong divisor );
400
401 static const RegMask method_handle_invoke_SP_save_mask();
|