20#ifndef GCC_HARD_REG_SET_H
21#define GCC_HARD_REG_SET_H
45#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDEST_FAST_INT
52#define HARD_REG_SET_LONGS \
53 ((FIRST_PSEUDO_REGISTER + HOST_BITS_PER_WIDEST_FAST_INT - 1) \
54 / HOST_BITS_PER_WIDEST_FAST_INT)
62 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
63 res.elts[
i] = ~elts[
i];
71 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
72 res.elts[
i] = elts[
i] & other.elts[
i];
79 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
80 elts[
i] &= other.elts[
i];
88 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
89 res.elts[
i] = elts[
i] | other.elts[
i];
96 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
97 elts[
i] |= other.elts[
i];
105 for (
unsigned int i = 0;
i < ARRAY_SIZE (elts); ++
i)
106 bad |= (elts[
i] ^ other.elts[
i]);
143#define HARD_CONST(X) ((HARD_REG_ELT_TYPE) (X))
162#define UHOST_BITS_PER_WIDE_INT ((unsigned) HOST_BITS_PER_WIDEST_FAST_INT)
164#if FIRST_PSEUDO_REGISTER <= HOST_BITS_PER_WIDEST_FAST_INT
166#define SET_HARD_REG_BIT(SET, BIT) \
167 ((SET) |= HARD_CONST (1) << (BIT))
168#define CLEAR_HARD_REG_BIT(SET, BIT) \
169 ((SET) &= ~(HARD_CONST (1) << (BIT)))
170#define TEST_HARD_REG_BIT(SET, BIT) \
171 (!!((SET) & (HARD_CONST (1) << (BIT))))
173#define CLEAR_HARD_REG_SET(TO) ((TO) = HARD_CONST (0))
174#define SET_HARD_REG_SET(TO) ((TO) = ~ HARD_CONST (0))
220 for (
unsigned int i = 0;
i < ARRAY_SIZE (
set.elts); ++
i)
227 for (
unsigned int i = 0;
i < ARRAY_SIZE (
set.elts); ++
i)
235 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
236 bad |= (x.elts[
i] & ~
y.elts[
i]);
244 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
245 good |= (x.elts[
i] &
y.elts[
i]);
253 for (
unsigned int i = 0;
i < ARRAY_SIZE (x.elts); ++
i)
278#define HARD_REG_ELT_BITS UHOST_BITS_PER_WIDE_INT
284 unsigned min,
unsigned *regno)
286#ifdef HARD_REG_SET_LONGS
288 iter->
length = HARD_REG_SET_LONGS;
317 while (!(iter->
bits & 1))
322 return (*regno < FIRST_PSEUDO_REGISTER);
347#define EXECUTE_IF_SET_IN_HARD_REG_SET(SET, MIN, REGNUM, ITER) \
348 for (hard_reg_set_iter_init (&(ITER), (SET), (MIN), &(REGNUM)); \
349 hard_reg_set_iter_set (&(ITER), &(REGNUM)); \
350 hard_reg_set_iter_next (&(ITER), &(REGNUM)))
466#define this_target_hard_regs (&default_target_hard_regs)
469#define accessible_reg_set \
470 (this_target_hard_regs->x_accessible_reg_set)
471#define operand_reg_set \
472 (this_target_hard_regs->x_operand_reg_set)
474 (this_target_hard_regs->x_fixed_regs)
475#define fixed_reg_set \
476 (this_target_hard_regs->x_fixed_reg_set)
477#define fixed_nonglobal_reg_set \
478 (this_target_hard_regs->x_fixed_nonglobal_reg_set)
480#define call_used_regs \
481 (this_target_hard_regs->x_call_used_regs)
483#define savable_regs \
484 (this_target_hard_regs->x_savable_regs)
486#define regs_invalidated_by_call \
487 (this_target_hard_regs->x_regs_invalidated_by_call)
488#define call_used_or_fixed_regs \
489 (regs_invalidated_by_call | fixed_reg_set)
491#define eh_return_data_regs \
492 (this_target_hard_regs->x_eh_return_data_regs)
493#define reg_alloc_order \
494 (this_target_hard_regs->x_reg_alloc_order)
495#define inv_reg_alloc_order \
496 (this_target_hard_regs->x_inv_reg_alloc_order)
497#define reg_class_contents \
498 (this_target_hard_regs->x_reg_class_contents)
499#define class_only_fixed_regs \
500 (this_target_hard_regs->x_class_only_fixed_regs)
501#define reg_class_size \
502 (this_target_hard_regs->x_reg_class_size)
503#define reg_class_subclasses \
504 (this_target_hard_regs->x_reg_class_subclasses)
505#define reg_class_subunion \
506 (this_target_hard_regs->x_reg_class_subunion)
507#define reg_class_superunion \
508 (this_target_hard_regs->x_reg_class_superunion)
510 (this_target_hard_regs->x_reg_names)
518#define REG_CAN_CHANGE_MODE_P(REGN, FROM, TO) \
519 (targetm.can_change_mode_class (FROM, TO, REGNO_REG_CLASS (REGN)))
526call_used_or_fixed_reg_p (
unsigned int regno)
bool operator==(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:131
bool operator!=(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:139
nowarn_spec_t operator|(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:115
nowarn_spec_t operator&(const nowarn_spec_t &lhs, const nowarn_spec_t &rhs)
Definition diagnostic-spec.h:123
dump_flags_t & operator&=(dump_flags_t &lhs, dump_flags_t rhs)
Definition dumpfile.h:240
dump_flags_t & operator|=(dump_flags_t &lhs, dump_flags_t rhs)
Definition dumpfile.h:232
dump_flags_t operator~(dump_flags_t flags)
Definition dumpfile.h:226
#define SET_HARD_REG_SET(TO)
Definition hard-reg-set.h:174
bool hard_reg_set_subset_p(const_hard_reg_set x, const_hard_reg_set y)
Definition hard-reg-set.h:177
#define HARD_REG_ELT_BITS
Definition hard-reg-set.h:278
#define this_target_hard_regs
Definition hard-reg-set.h:466
unsigned HOST_WIDEST_FAST_INT HARD_REG_ELT_TYPE
Definition hard-reg-set.h:43
bool hard_reg_set_iter_set(hard_reg_set_iterator *iter, unsigned *regno)
Definition hard-reg-set.h:306
#define TEST_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:170
#define CLEAR_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:168
char global_regs[FIRST_PSEUDO_REGISTER]
Definition reginfo.cc:92
HARD_REG_ELT_TYPE HARD_REG_SET
Definition hard-reg-set.h:47
bool hard_reg_set_intersect_p(const_hard_reg_set x, const_hard_reg_set y)
Definition hard-reg-set.h:183
#define HARD_CONST(X)
Definition hard-reg-set.h:143
#define fixed_regs
Definition hard-reg-set.h:473
void hard_reg_set_iter_next(hard_reg_set_iterator *iter, unsigned *regno)
Definition hard-reg-set.h:341
#define CLEAR_HARD_REG_SET(TO)
Definition hard-reg-set.h:173
void hard_reg_set_iter_init(hard_reg_set_iterator *iter, const_hard_reg_set set, unsigned min, unsigned *regno)
Definition hard-reg-set.h:283
const char * reg_class_names[]
Definition reginfo.cc:119
bool hard_reg_set_empty_p(const_hard_reg_set x)
Definition hard-reg-set.h:189
#define UHOST_BITS_PER_WIDE_INT
Definition hard-reg-set.h:162
HARD_REG_SET global_reg_set
Definition reginfo.cc:95
#define SET_HARD_REG_BIT(SET, BIT)
Definition hard-reg-set.h:166
struct target_hard_regs default_target_hard_regs
Definition reginfo.cc:63
const HARD_REG_SET const_hard_reg_set
Definition hard-reg-set.h:48
#define HOST_WIDEST_FAST_INT
Definition hwint.h:154
i
Definition poly-int.h:776
Definition array-traits.h:35
Definition hard-reg-set.h:136
HARD_REG_SET set
Definition hard-reg-set.h:137
Definition hard-reg-set.h:262
unsigned short length
Definition hard-reg-set.h:267
const HARD_REG_ELT_TYPE * pelt
Definition hard-reg-set.h:264
unsigned short word_no
Definition hard-reg-set.h:270
HARD_REG_ELT_TYPE bits
Definition hard-reg-set.h:275
Definition hash-traits.h:303
static const size_t constant_size
Definition array-traits.h:29
T element_type
Definition array-traits.h:27
static const bool has_constant_size
Definition array-traits.h:28
static const T * base(const T &x)
Definition array-traits.h:30
static size_t size(const T &)
Definition array-traits.h:31
Definition hard-reg-set.h:368
static hashval_t hash(const simplifiable_subreg *)
Definition reginfo.cc:1176
static bool equal(const simplifiable_subreg *, const subreg_shape *)
Definition reginfo.cc:1184
const subreg_shape * compare_type
Definition hard-reg-set.h:369
Definition hard-reg-set.h:375
int x_reg_alloc_order[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:428
HARD_REG_SET x_fixed_nonglobal_reg_set
Definition hard-reg-set.h:414
char x_call_used_regs[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:398
char x_fixed_regs[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:389
int x_inv_reg_alloc_order[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:431
enum reg_class x_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:448
bool x_class_only_fixed_regs[N_REG_CLASSES]
Definition hard-reg-set.h:438
unsigned int x_reg_class_size[N_REG_CLASSES]
Definition hard-reg-set.h:441
HARD_REG_SET x_reg_class_contents[N_REG_CLASSES]
Definition hard-reg-set.h:434
const char * x_reg_names[FIRST_PSEUDO_REGISTER]
Definition hard-reg-set.h:455
HARD_REG_SET x_accessible_reg_set
Definition hard-reg-set.h:379
hash_table< simplifiable_subregs_hasher > * x_simplifiable_subregs
Definition hard-reg-set.h:459
HARD_REG_SET x_savable_regs
Definition hard-reg-set.h:408
HARD_REG_SET x_eh_return_data_regs
Definition hard-reg-set.h:425
enum reg_class x_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:444
HARD_REG_SET x_operand_reg_set
Definition hard-reg-set.h:383
enum reg_class x_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES]
Definition hard-reg-set.h:452
void finalize()
Definition reginfo.cc:1354
HARD_REG_SET x_fixed_reg_set
Definition hard-reg-set.h:392
HARD_REG_SET x_regs_invalidated_by_call
Definition hard-reg-set.h:422
const T2 & y
Definition wide-int.h:3870