From cbe3672526c7686edca6e3c5e81a6bb9369f36e0 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 18 Mar 1998 01:55:53 -0800 Subject: [PATCH] rtl.c (read_rtx): Fall back on homebrew atoll if HOST_WIDE_INT is large... * rtl.c (read_rtx): Fall back on homebrew atoll if HOST_WIDE_INT is large, and the system doesn't provide atoll or atoq. (atoll): New. * alpha/xm-vms.h (HAVE_ATOLL): Define. Reported by Klaus Kaempf . From-SVN: r18657 --- gcc/ChangeLog | 9 ++++++++ gcc/config/alpha/xm-vms.h | 1 + gcc/rtl.c | 43 ++++++++++++++++++++++++++++++++++++--- 3 files changed, 50 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b70fb71be3..cedf0084794 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +Wed Mar 18 09:52:56 1998 Richard Henderson + + * rtl.c (read_rtx): Fall back on homebrew atoll if HOST_WIDE_INT + is large, and the system doesn't provide atoll or atoq. + (atoll): New. + + * alpha/xm-vms.h (HAVE_ATOLL): Define. + Reported by Klaus Kaempf . + Wed Mar 18 09:56:26 1998 Kaveh R. Ghazi * c-lang.c (finish_file): Wrap variable `void_list_node' with macro diff --git a/gcc/config/alpha/xm-vms.h b/gcc/config/alpha/xm-vms.h index 43ac5b62cfb..5e5a4422bcd 100644 --- a/gcc/config/alpha/xm-vms.h +++ b/gcc/config/alpha/xm-vms.h @@ -68,6 +68,7 @@ Boston, MA 02111-1307, USA. */ #define HAVE_VPRINTF #define HAVE_PUTENV #define HAVE_STRERROR +#define HAVE_ATOLL #define NO_SYS_PARAMS_H /* Don't have */ #define NO_STAB_H /* Don't have */ diff --git a/gcc/rtl.c b/gcc/rtl.c index acfe6c2f406..1de50c21202 100644 --- a/gcc/rtl.c +++ b/gcc/rtl.c @@ -558,6 +558,43 @@ read_name (str, infile) *p = 0; } +/* Provide a version of a function to read a long long if the system does + not provide one. */ +#if HOST_BITS_PER_WIDE_INT > HOST_BITS_PER_LONG && !defined(HAVE_ATOLL) && !defined(HAVE_ATOQ) +HOST_WIDE_INT +atoll(p) + const char *p; +{ + int neg = 0; + HOST_WIDE_INT tmp_wide; + + while (isspace(*p)) + p++; + if (*p == '-') + neg = 1, p++; + else if (*p == '+') + p++; + + tmp_wide = 0; + while (isdigit(*p)) + { + HOST_WIDE_INT new_wide = tmp_wide*10 + (*p - '0'); + if (new_wide < tmp_wide) + { + /* Return INT_MAX equiv on overflow. */ + tmp_wide = (~(unsigned HOST_WIDE_INT)0) >> 1; + break; + } + tmp_wide = new_wide; + p++; + } + + if (neg) + tmp_wide = -tmp_wide; + return tmp_wide; +} +#endif + /* Read an rtx in printed representation from INFILE and return an actual rtx in core constructed accordingly. read_rtx is not used in the compiler proper, but rather in @@ -768,14 +805,14 @@ read_rtx (infile) #if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG tmp_wide = atol (tmp_char); #else -#ifdef HAVE_ATOLL + /* Prefer atoll over atoq, since the former is in the ISO C9X draft. + But prefer not to use our hand-rolled function above either. */ +#if defined(HAVE_ATOLL) || !defined(HAVE_ATOQ) tmp_wide = atoll (tmp_char); #else -#ifdef HAVE_ATOQ tmp_wide = atoq (tmp_char); #endif #endif -#endif #endif XWINT (return_rtx, i) = tmp_wide; break; -- 2.30.2