Unroll hard register loops if <= 4*HOST_BITS_PER_WIDE_INT registers
From-SVN: r11302
This commit is contained in:
parent
7e27702536
commit
ea78578fb9
|
@ -123,6 +123,199 @@ typedef HARD_REG_ELT_TYPE HARD_REG_SET[HARD_REG_SET_LONGS];
|
||||||
((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT] \
|
((SET)[(BIT) / UHOST_BITS_PER_WIDE_INT] \
|
||||||
& (HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT)))
|
& (HARD_CONST (1) << ((BIT) % UHOST_BITS_PER_WIDE_INT)))
|
||||||
|
|
||||||
|
#if FIRST_PSEUDO_REGISTER <= 2*HOST_BITS_PER_WIDE_INT
|
||||||
|
#define CLEAR_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = 0; \
|
||||||
|
scan_tp_[1] = 0; } while (0)
|
||||||
|
|
||||||
|
#define SET_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = -1; \
|
||||||
|
scan_tp_[1] = -1; } while (0)
|
||||||
|
|
||||||
|
#define COPY_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = ~ scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define AND_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define AND_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= ~ scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= ~ scan_fp_[1]; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_SUBSET(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \
|
||||||
|
&& (0 == (scan_xp_[1] & ~ scan_yp_[1]))) \
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_EQUAL(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((scan_xp_[0] == scan_yp_[0]) \
|
||||||
|
&& (scan_xp_[1] == scan_yp_[1]))
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#if FIRST_PSEUDO_REGISTER <= 3*HOST_BITS_PER_WIDE_INT
|
||||||
|
#define CLEAR_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = 0; \
|
||||||
|
scan_tp_[1] = 0; \
|
||||||
|
scan_tp_[2] = 0; } while (0)
|
||||||
|
|
||||||
|
#define SET_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = -1; \
|
||||||
|
scan_tp_[1] = -1; \
|
||||||
|
scan_tp_[2] = -1; } while (0)
|
||||||
|
|
||||||
|
#define COPY_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = scan_fp_[1]; \
|
||||||
|
scan_tp_[2] = scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] = ~ scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define AND_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= scan_fp_[1]; \
|
||||||
|
scan_tp_[2] &= scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define AND_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] &= ~ scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= scan_fp_[1]; \
|
||||||
|
scan_tp_[2] |= scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] |= ~ scan_fp_[2]; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_SUBSET(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \
|
||||||
|
&& (0 == (scan_xp_[1] & ~ scan_yp_[1])) \
|
||||||
|
&& (0 == (scan_xp_[2] & ~ scan_yp_[2]))) \
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_EQUAL(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((scan_xp_[0] == scan_yp_[0]) \
|
||||||
|
&& (scan_xp_[1] == scan_yp_[1]) \
|
||||||
|
&& (scan_xp_[2] == scan_yp_[2])) \
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#if FIRST_PSEUDO_REGISTER <= 4*HOST_BITS_PER_WIDE_INT
|
||||||
|
#define CLEAR_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = 0; \
|
||||||
|
scan_tp_[1] = 0; \
|
||||||
|
scan_tp_[2] = 0; \
|
||||||
|
scan_tp_[3] = 0; } while (0)
|
||||||
|
|
||||||
|
#define SET_HARD_REG_SET(TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
|
scan_tp_[0] = -1; \
|
||||||
|
scan_tp_[1] = -1; \
|
||||||
|
scan_tp_[2] = -1; \
|
||||||
|
scan_tp_[3] = -1; } while (0)
|
||||||
|
|
||||||
|
#define COPY_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = scan_fp_[1]; \
|
||||||
|
scan_tp_[2] = scan_fp_[2]; \
|
||||||
|
scan_tp_[3] = scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] = ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] = ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] = ~ scan_fp_[2]; \
|
||||||
|
scan_tp_[3] = ~ scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define AND_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= scan_fp_[1]; \
|
||||||
|
scan_tp_[2] &= scan_fp_[2]; \
|
||||||
|
scan_tp_[3] &= scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define AND_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] &= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] &= ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] &= ~ scan_fp_[2]; \
|
||||||
|
scan_tp_[3] &= ~ scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= scan_fp_[1]; \
|
||||||
|
scan_tp_[2] |= scan_fp_[2]; \
|
||||||
|
scan_tp_[3] |= scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define IOR_COMPL_HARD_REG_SET(TO, FROM) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO), *scan_fp_ = (FROM); \
|
||||||
|
scan_tp_[0] |= ~ scan_fp_[0]; \
|
||||||
|
scan_tp_[1] |= ~ scan_fp_[1]; \
|
||||||
|
scan_tp_[2] |= ~ scan_fp_[2]; \
|
||||||
|
scan_tp_[3] |= ~ scan_fp_[3]; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_SUBSET(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((0 == (scan_xp_[0] & ~ scan_yp_[0])) \
|
||||||
|
&& (0 == (scan_xp_[1] & ~ scan_yp_[1])) \
|
||||||
|
&& (0 == (scan_xp_[2] & ~ scan_yp_[2])) \
|
||||||
|
&& (0 == (scan_xp_[3] & ~ scan_yp_[3]))) \
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#define GO_IF_HARD_REG_EQUAL(X,Y,TO) \
|
||||||
|
do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
|
if ((scan_xp_[0] == scan_yp_[0]) \
|
||||||
|
&& (scan_xp_[1] == scan_yp_[1]) \
|
||||||
|
&& (scan_xp_[2] == scan_yp_[2]) \
|
||||||
|
&& (scan_xp_[3] == scan_yp_[3])) \
|
||||||
|
goto TO; } while (0)
|
||||||
|
|
||||||
|
#else /* FIRST_PSEUDO_REGISTER > 3*HOST_BITS_PER_WIDE_INT */
|
||||||
|
|
||||||
#define CLEAR_HARD_REG_SET(TO) \
|
#define CLEAR_HARD_REG_SET(TO) \
|
||||||
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
do { register HARD_REG_ELT_TYPE *scan_tp_ = (TO); \
|
||||||
register int i; \
|
register int i; \
|
||||||
|
@ -186,6 +379,9 @@ do { register HARD_REG_ELT_TYPE *scan_xp_ = (X), *scan_yp_ = (Y); \
|
||||||
if (i == HARD_REG_SET_LONGS) goto TO; } while (0)
|
if (i == HARD_REG_SET_LONGS) goto TO; } while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Define some standard sets of registers. */
|
/* Define some standard sets of registers. */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue