*参照元 [#c12b6486] #backlinks *説明 [#ed610ab5] -パス: [[gcc-8.3/gcc/hard-reg-set.h]] -FIXME: これは何? --説明 **参考 [#i742a50e] *実装 [#bff902d1] struct target_hard_regs { void finalize (); /* The set of registers that actually exist on the current target. */ HARD_REG_SET x_accessible_reg_set; /* The set of registers that should be considered to be register operands. It is a subset of x_accessible_reg_set. */ HARD_REG_SET x_operand_reg_set; - --[[gcc-8.3/gcc/HARD_REG_SET]] /* Indexed by hard register number, contains 1 for registers that are fixed use (stack pointer, pc, frame pointer, etc.;. These are the registers that cannot be used to allocate a pseudo reg whose life does not cross calls. */ char x_fixed_regs[FIRST_PSEUDO_REGISTER]; /* The same info as a HARD_REG_SET. */ HARD_REG_SET x_fixed_reg_set; /* Indexed by hard register number, contains 1 for registers that are fixed use or are clobbered by function calls. These are the registers that cannot be used to allocate a pseudo reg whose life crosses calls. */ char x_call_used_regs[FIRST_PSEUDO_REGISTER]; char x_call_really_used_regs[FIRST_PSEUDO_REGISTER]; /* The same info as a HARD_REG_SET. */ HARD_REG_SET x_call_used_reg_set; /* Contains registers that are fixed use -- i.e. in fixed_reg_set -- or a function value return register or TARGET_STRUCT_VALUE_RTX or STATIC_CHAIN_REGNUM. These are the registers that cannot hold quantities across calls even if we are willing to save and restore them. */ HARD_REG_SET x_call_fixed_reg_set; /* Contains registers that are fixed use -- i.e. in fixed_reg_set -- but only if they are not merely part of that set because they are global regs. Global regs that are not otherwise fixed can still take part in register allocation. */ HARD_REG_SET x_fixed_nonglobal_reg_set; /* Contains 1 for registers that are set or clobbered by calls. */ /* ??? Ideally, this would be just call_used_regs plus global_regs, but for someone's bright idea to have call_used_regs strictly include fixed_regs. Which leaves us guessing as to the set of fixed_regs that are actually preserved. We know for sure that those associated with the local stack frame are safe, but scant others. */ HARD_REG_SET x_regs_invalidated_by_call; /* Call used hard registers which can not be saved because there is no insn for this. */ HARD_REG_SET x_no_caller_save_reg_set; /* Table of register numbers in the order in which to try to use them. */ int x_reg_alloc_order[FIRST_PSEUDO_REGISTER]; /* The inverse of reg_alloc_order. */ int x_inv_reg_alloc_order[FIRST_PSEUDO_REGISTER]; /* For each reg class, a HARD_REG_SET saying which registers are in it. */ HARD_REG_SET x_reg_class_contents[N_REG_CLASSES]; /* For each reg class, a boolean saying whether the class contains only fixed registers. */ bool x_class_only_fixed_regs[N_REG_CLASSES]; /* For each reg class, number of regs it contains. */ unsigned int x_reg_class_size[N_REG_CLASSES]; /* For each reg class, table listing all the classes contained in it. */ enum reg_class x_reg_class_subclasses[N_REG_CLASSES][N_REG_CLASSES]; /* For each pair of reg classes, a largest reg class contained in their union. */ enum reg_class x_reg_class_subunion[N_REG_CLASSES][N_REG_CLASSES]; /* For each pair of reg classes, the smallest reg class that contains their union. */ enum reg_class x_reg_class_superunion[N_REG_CLASSES][N_REG_CLASSES]; /* Vector indexed by hardware reg giving its name. */ const char *x_reg_names[FIRST_PSEUDO_REGISTER]; /* Records which registers can form a particular subreg, with the subreg being identified by its outer mode, inner mode and offset. */ hash_table <simplifiable_subregs_hasher> *x_simplifiable_subregs; }; - --[[gcc-8.3/gcc/reg_class]] --[[gcc-8.3/gcc/hash_table]] --[[gcc-8.3/gcc/simplifiable_subregs_hasher]] *コメント [#dff01ba7]