diff options
author | Ian Lance Taylor <ian@airs.com> | 2005-08-01 21:16:31 +0000 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2005-08-01 14:16:31 -0700 |
commit | 9e254451d2c54ff1fc1c9f1de87110566808af35 (patch) | |
tree | 34ac4d017689743b8d8c8016d3db1ede47484578 /gcc/rtl.h | |
parent | 5e9d09007dfa95afa0b3cf979a8b36be46174850 (diff) | |
download | gcc-9e254451d2c54ff1fc1c9f1de87110566808af35.zip gcc-9e254451d2c54ff1fc1c9f1de87110566808af35.tar.gz gcc-9e254451d2c54ff1fc1c9f1de87110566808af35.tar.bz2 |
Makefile.in (RTL_BASE_H): Add real.h.
* Makefile.in (RTL_BASE_H): Add real.h.
* real.h (REAL_VALUE_FROM_CONST_DOUBLE): Use structure copy
instead of memcpy.
* emit-rtl.c (const_double_from_real_value): Likewise; use rtx.u.rv
directly.
* rtl.c (rtl_check_failed_code_mode): New.
* rtl.h (struct rtx_def): Add u.rv.
(XCMWINT, XCNMPRV): New.
(CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH): Use XCMWINT.
(CONST_DOUBLE_REAL_VALUE): Use XCNMPRV; constify.
Co-Authored-By: Richard Henderson <rth@redhat.com>
From-SVN: r102643
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 29 |
1 files changed, 26 insertions, 3 deletions
@@ -25,6 +25,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include "statistics.h" #include "machmode.h" #include "input.h" +#include "real.h" #undef FFS /* Some systems predefine this symbol; don't let it interfere. */ #undef FLOAT /* Likewise. */ @@ -249,6 +250,7 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"), union u { rtunion fld[1]; HOST_WIDE_INT hwint[1]; + struct real_value rv; } GTY ((special ("rtx_def"), desc ("GET_CODE (&%0)"))) u; }; @@ -454,6 +456,20 @@ struct rtvec_def GTY(()) { __FUNCTION__); \ &_rtx->u.hwint[N]; })) +#define XCMWINT(RTX, N, C, M) __extension__ \ +(*({ rtx const _rtx = (RTX); \ + if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) != (M)) \ + rtl_check_failed_code_mode (_rtx, (C), (M), false, __FILE__, \ + __LINE__, __FUNCTION__); \ + &_rtx->u.hwint[N]; })) + +#define XCNMPRV(RTX, C, M) __extension__ \ +({ rtx const _rtx = (RTX); \ + if (GET_CODE (_rtx) != (C) || GET_MODE (_rtx) == (M)) \ + rtl_check_failed_code_mode (_rtx, (C), (M), true, __FILE__, \ + __LINE__, __FUNCTION__); \ + &_rtx->u.rv; }) + extern void rtl_check_failed_bounds (rtx, int, const char *, int, const char *) ATTRIBUTE_NORETURN; @@ -469,6 +485,9 @@ extern void rtl_check_failed_code1 (rtx, enum rtx_code, const char *, extern void rtl_check_failed_code2 (rtx, enum rtx_code, enum rtx_code, const char *, int, const char *) ATTRIBUTE_NORETURN; +extern void rtl_check_failed_code_mode (rtx, enum rtx_code, enum machine_mode, + bool, const char *, int, const char *) + ATTRIBUTE_NORETURN; extern void rtvec_check_failed_bounds (rtvec, int, const char *, int, const char *) ATTRIBUTE_NORETURN; @@ -482,6 +501,9 @@ extern void rtvec_check_failed_bounds (rtvec, int, const char *, int, #define RTVEC_ELT(RTVEC, I) ((RTVEC)->elem[I]) #define XWINT(RTX, N) ((RTX)->u.hwint[N]) #define XCWINT(RTX, N, C) ((RTX)->u.hwint[N]) +#define XCMWINT(RTX, N, C, M) ((RTX)->u.hwint[N]) +#define XCNMWINT(RTX, N, C, M) ((RTX)->u.hwint[N]) +#define XCNMPRV(RTX, C, M) (&(RTX)->u.rv) #endif @@ -916,9 +938,10 @@ enum label_kind low-order word and ..._HIGH the high-order. For a float, there is a REAL_VALUE_TYPE structure, and CONST_DOUBLE_REAL_VALUE(r) is a pointer to it. */ -#define CONST_DOUBLE_LOW(r) XCWINT (r, 0, CONST_DOUBLE) -#define CONST_DOUBLE_HIGH(r) XCWINT (r, 1, CONST_DOUBLE) -#define CONST_DOUBLE_REAL_VALUE(r) ((struct real_value *)&CONST_DOUBLE_LOW(r)) +#define CONST_DOUBLE_LOW(r) XCMWINT (r, 0, CONST_DOUBLE, VOIDmode) +#define CONST_DOUBLE_HIGH(r) XCMWINT (r, 1, CONST_DOUBLE, VOIDmode) +#define CONST_DOUBLE_REAL_VALUE(r) \ + ((const struct real_value *) XCNMPRV (r, CONST_DOUBLE, VOIDmode)) /* For a CONST_VECTOR, return element #n. */ #define CONST_VECTOR_ELT(RTX, N) XCVECEXP (RTX, 0, N, CONST_VECTOR) |