On Wed, Jul 17, 2002 at 05:47:20PM -0700, Zack Weinberg wrote: > =================================================================== > Index: rtl.h > +++ rtl.h 18 Jul 2002 00:38:34 -0000 > @@ -876,8 +877,55 @@ extern const char * const note_insn_name > of LABEL_REFs that point at it, so unused labels can be deleted. */ > #define LABEL_NUSES(RTX) XCINT (RTX, 4, CODE_LABEL) > > -/* Associate a name with a CODE_LABEL. */ > -#define LABEL_ALTERNATE_NAME(RTX) XCSTR (RTX, 8, CODE_LABEL) > +/* Labels carry a two-bit field composed of the ->jump and ->call > + bits. This field indicates whether the label is an alternate > + entry point, and if so, what kind. */ > +enum label_kind > +{ > + LABEL_NORMAL = 0, /* ordinary label */ > + LABEL_STATIC_ENTRY, /* alternate entry point, not exported */ > + LABEL_GLOBAL_ENTRY, /* alternate entry point, exported */ > + LABEL_WEAK_ENTRY /* alternate entry point, exported as weak symbol */ > +}; > + > +#if defined ENABLE_RTL_FLAG_CHECKING && (GCC_VERSION > 2007) > + > +/* Retrieve the kind of LABEL. */ > +#define LABEL_KIND(LABEL) __extension__ \ > +({ rtx const _label = (LABEL); \ > + if (GET_CODE (_label) != CODE_LABEL) \ > + rtl_check_failed_flag ("LABEL_KIND", _label, __FILE__, __LINE__, \ > + __FUNCTION__); \ > + (enum label_kind) ((_label->jump << 1) & _label->call); }) ^ Shouldn't this be `|'? > + > +/* Set the kind of LABEL. */ > +#define SET_LABEL_KIND(LABEL, KIND) do { \ > + rtx _label = (LABEL); \ > + unsigned int _kind = (KIND); \ > + if (GET_CODE (_label) != CODE_LABEL) \ > + rtl_check_failed_flag ("SET_LABEL_KIND", _label, __FILE__, __LINE__, \ > + __FUNCTION__); \ > + _label->jump = ((kind >> 1) & 1); \ > + _label->call = (kind & 1); \ > +} while (0) > + > +#else > + > +/* Retrieve the kind of LABEL. */ > +#define LABEL_KIND(LABEL) \ > + (enum label_kind) (((LABEL)->jump << 1) & (LABEL)->call); }) ^ Likewise. Matt