From 58f9db871e93ba5851e7d1ba820533c86518b2ab Mon Sep 17 00:00:00 2001
From: rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Mon, 17 Apr 2000 00:54:25 +0000
Subject: [PATCH]         * Makefile.in ($(srcdir)/c-parse.y: c-parse.in):
 Enclose the whole         message in quotes. Otherwise, IBM's make program
 treats the '#' as the         start of a comment and ignores the remainder of
 the line.

        * c-lex.c (yylex): Change for EBCDIC, lower case characters preceed
        upper case.
        * cccp.c (initialize_char_syntax): Allow for holes in EBCDIC.
        * cexp.y (initialize_random_junk): Likewise.
        * cppfiles.c (find_include_file): Cast alloca return value.
        * cppinit.c (initialize_standard_includes): Likewise.
        * cpplib.c (cpp_define, cpp_undef): Likewise.
        * defaults.h (ASM_OUTPUT_ASCII): Use ISPRINT.
        * final.c (output_asm_insn): Allow for holes in EBCDIC.
        * fold-const.c (CHARMASK): New.
        (real_hex_to_f): Use it.
        * real.c (CHARMASK): New.
        (etoasc, asctoeg): Use it.
        (asctoeg): EBCDIC lower case characters preceed upper case.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33192 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog    | 97 ++++++++++++++++++++++++++++++++----------------
 gcc/Makefile.in  |  2 +-
 gcc/c-lex.c      |  2 +-
 gcc/cccp.c       | 11 ++++--
 gcc/cexp.y       | 11 ++++--
 gcc/cppfiles.c   |  2 +-
 gcc/cppinit.c    |  2 +-
 gcc/cpplib.c     |  6 +--
 gcc/defaults.h   |  2 +-
 gcc/final.c      |  3 +-
 gcc/fold-const.c | 14 +++++--
 gcc/real.c       | 13 +++++--
 12 files changed, 110 insertions(+), 55 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9f8908778afa..c629f81dcfe5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,38 @@
+2000-04-12  Dave Pitts  <dpitts@cozx.com>
+
+	* Makefile.in ($(srcdir)/c-parse.y: c-parse.in): Enclose the whole
+	message in quotes. Otherwise, IBM's make program treats the '#' as the
+	start of a comment and ignores the remainder of the line.
+
+	* c-lex.c (yylex): Change for EBCDIC, lower case characters preceed
+	upper case.
+	* cccp.c (initialize_char_syntax): Allow for holes in EBCDIC.
+	* cexp.y (initialize_random_junk): Likewise.
+	* cppfiles.c (find_include_file): Cast alloca return value.
+	* cppinit.c (initialize_standard_includes): Likewise.
+	* cpplib.c (cpp_define, cpp_undef): Likewise.
+	* defaults.h (ASM_OUTPUT_ASCII): Use ISPRINT.
+	* final.c (output_asm_insn): Allow for holes in EBCDIC.
+	* fold-const.c (CHARMASK): New.
+	(real_hex_to_f): Use it.
+	* real.c (CHARMASK): New.
+	(etoasc, asctoeg): Use it.
+	(asctoeg): EBCDIC lower case characters preceed upper case.
+
+	* i370.c (mvs_add_label): Change spacing for coding conventions.
+	* i370.h (ASM_OUTPUT_CASE_LABEL): Change to the data CSECT for the
+	outputing case vectors.
+	(ASM_OUTPUT_CASE_END): New, put assembler back into code CSECT.
+	(ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Remove page check,
+	since vector in in the data CSECT.
+	(ASM_OUTPUT_REG_POP, ASM_OUTPUT_REG_PUSH): Restore to correct operation.        * i370.md (Many patterns): Put the length in the XL directives.
+	(movdi): Put back STM and MVC in definition.
+	(floatsidf2): Correct TARGET_ELF_ABI pattern and add back the LE370
+	pattern using the TCA.
+	* oe.h (CPP_SPEC): Added to allow trigraphs.
+	* xm-oe.h (HOST_BITS_PER_LONGLONG): Change to 32. IBM's compiler does
+	not support the "long long" type.
+
 2000-04-16  Mark Mitchell  <mark@codesourcery.com>
 
 	* config/mips/mips-protos.h (mips_legitimate_address_p): New
@@ -39,9 +74,9 @@
 
 2004-04-16  Neil Booth  <NeilB@earthling.net>
 
-        * cpphash.h (SYNTAX_INCLUDE, SYNTAX_ASSERT, directive_handler): new.
-        * cpplib.c: Add new syntax flags to directive table, and
-        supporting macros.
+	* cpphash.h (SYNTAX_INCLUDE, SYNTAX_ASSERT, directive_handler): new.
+	* cpplib.c: Add new syntax flags to directive table, and
+	supporting macros.
 
 2000-04-15  Ulrich Drepper  <drepper@redhat.com>
 
@@ -225,8 +260,8 @@ Fri Apr 14 10:54:22 2000  Jim Wilson  <wilson@cygnus.com>
 
 2000-04-14  Richard Henderson  <rth@cygnus.com>
 
-        * fold-const.c (extract_muldiv): Don't distribute and widen
-        multiply across plus for non-sizetype unsigned types.
+	* fold-const.c (extract_muldiv): Don't distribute and widen
+	multiply across plus for non-sizetype unsigned types.
 
 2000-04-14  Richard Henderson  <rth@cygnus.com>
 
@@ -254,7 +289,7 @@ Thu Apr 13 19:39:56 2000  Clinton Popetz  <cpopetz@cygnus.com>
 2000-04-13  Andreas Jaeger  <aj@suse.de>
 
 	* config/mips/mips.c (expand_block_move): Pass alignment
-        argument to move_by_pieces in bits, not bytes.
+	argument to move_by_pieces in bits, not bytes.
 
 	* config/mips/linux.h (CPP_PREDEFINES): Also define __PIC__ and
 	__pic__ for little endian.
@@ -357,8 +392,8 @@ Wed Apr 12 15:54:11 MET DST 2000  Jan Hubicka  <jh@suse.cz>
 
 Wed Apr 12 07:51:54 2000  Catherine Moore  <clm@cygnus.com>
  
-        * calls.c (emit_library_call_value_1): Change 3rd arg to
-        locate_and_pad_parm to disregard the setting of partial.
+	* calls.c (emit_library_call_value_1): Change 3rd arg to
+	locate_and_pad_parm to disregard the setting of partial.
 
 Wed Apr 12 08:47:38 2000  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>
 
@@ -3889,11 +3924,11 @@ Thu Mar 16 02:14:16 2000  Hans-Peter Nilsson  <hp@bitrange.com>
 
 	2000-01-27  Clinton Popetz  <cpopetz@cygnus.com>
 
-        * rs6000.c (rs6000_emit_load_toc_table): Use "LCG" and
-        reload_toc_labelno for non-prologue TOC reloads.  Also, don't
-        increment rs6000_pic_labelno here.
-        (rs6000_emit_prologue): Pass TRUE to rs6000_emit_load_toc_table,
-        and increment rs6000_pic_labelno here.
+	* rs6000.c (rs6000_emit_load_toc_table): Use "LCG" and
+	reload_toc_labelno for non-prologue TOC reloads.  Also, don't
+	increment rs6000_pic_labelno here.
+	(rs6000_emit_prologue): Pass TRUE to rs6000_emit_load_toc_table,
+	and increment rs6000_pic_labelno here.
 
 	2000-01-24  Geoffrey Keating  <geoffk@cygnus.com>
 
@@ -4072,29 +4107,29 @@ Thu Mar 16 02:14:16 2000  Hans-Peter Nilsson  <hp@bitrange.com>
 
 	2000-01-07  David Edelsohn  <edelsohn@gnu.org>
 
-        * rs6000.c (processor_target_table): Add power3 as alias for 630.
-        * aix43.h: Revert Aug 2 change.
-        (HAS_INIT_SECTION): Define, not visible yet.
-        (LD_INIT_SWITCH): Define, not visible yet.
-        * t-aix43 (MULTILIB_OPTIONS): Revert Aug 2 change.
+	* rs6000.c (processor_target_table): Add power3 as alias for 630.
+	* aix43.h: Revert Aug 2 change.
+	(HAS_INIT_SECTION): Define, not visible yet.
+	(LD_INIT_SWITCH): Define, not visible yet.
+	* t-aix43 (MULTILIB_OPTIONS): Revert Aug 2 change.
 
 	2000-01-04  Joel Sherrill (joel@OARcorp.com>
 
-        * config/rs6000/rtems.h: Include config/rtems.h.
+	* config/rs6000/rtems.h: Include config/rtems.h.
 
 	2000-01-04  David Edelsohn  <edelsohn@gnu.org>
 
-        * rs6000.h (HANDLE_PRAGMA_PACK): Define.
-        (SLOW_UNALIGNED_ACCESS): Define.
-        (CASE_VECTOR_MODE): Always use 32-bit offsets.
-        (ASM_FILE_END): Generate 64-bit symbol in 64-bit mode.
-        (EXTRA_SECTOIN_FUNCTIONS): Indent .csect pseudo-op.
-        (toc_section): Likewise and .toc pseudo-op.
-        (ASM_DECLARE_FUNCTION): Likewise.  Align text more strictly in
-        64-bit mode.
-        (TEXT_SECTION_ASM_OP): Likewise.
-        (ASM_OUTPUT_ADD_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Always use
-        32-bit offsets.
+	* rs6000.h (HANDLE_PRAGMA_PACK): Define.
+	(SLOW_UNALIGNED_ACCESS): Define.
+	(CASE_VECTOR_MODE): Always use 32-bit offsets.
+	(ASM_FILE_END): Generate 64-bit symbol in 64-bit mode.
+	(EXTRA_SECTOIN_FUNCTIONS): Indent .csect pseudo-op.
+	(toc_section): Likewise and .toc pseudo-op.
+	(ASM_DECLARE_FUNCTION): Likewise.  Align text more strictly in
+	64-bit mode.
+	(TEXT_SECTION_ASM_OP): Likewise.
+	(ASM_OUTPUT_ADD_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Always use
+	32-bit offsets.
 
 	1999-12-17  Jakub Jelinek  <jakub@redhat.com>
 
@@ -4111,7 +4146,7 @@ Thu Mar 16 02:14:16 2000  Hans-Peter Nilsson  <hp@bitrange.com>
 
 	2000-01-05  Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
 
-        * rs6000.h: Continue cleanup.
+	* rs6000.h: Continue cleanup.
 	* aix.h: Likewise.
 	* lynx.h: Likewise.
 	* netware.h: Likewise.
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index ad582c4c49ca..493d08058100 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -1360,7 +1360,7 @@ $(srcdir)/c-parse.y: c-parse.in
 $(srcdir)/c-gperf.h: c-parse.gperf
 	gperf -L C -F ', 0, 0' -p -j1 -i 1 -g -o -t -G -N is_reserved_word \
 	   -k1,3,$$ $(srcdir)/c-parse.gperf >tmp-gperf.h || ( \
-	echo "See " $(website)/cvs.html#generated_files >&2 ; \
+	echo "See $(website)/cvs.html#generated_files" >&2 ; \
 	exit 1 )
 	 $(SHELL) $(srcdir)/move-if-change tmp-gperf.h $(srcdir)/c-gperf.h
 
diff --git a/gcc/c-lex.c b/gcc/c-lex.c
index 2f8a8403d69d..d7697067ac79 100644
--- a/gcc/c-lex.c
+++ b/gcc/c-lex.c
@@ -1625,7 +1625,7 @@ yylex ()
 		    floatflag = AFTER_EXPON;
 		    break;   /* start of exponent */
 		  }
-		else if (c >= 'a')
+		else if (c >= 'a' && c <= 'f')
 		  {
 		    c = c - 'a' + 10;
 		  }
diff --git a/gcc/cccp.c b/gcc/cccp.c
index e91d8cf1b4c2..9a0233344099 100644
--- a/gcc/cccp.c
+++ b/gcc/cccp.c
@@ -10249,10 +10249,13 @@ initialize_char_syntax ()
    * refer to them.
    */
   for (i = 'a'; i <= 'z'; i++) {
-    is_idchar[TOUPPER(i)] = 1;
-    is_idchar[i] = 1;
-    is_idstart[TOUPPER(i)] = 1;
-    is_idstart[i] = 1;
+    /* SKIP EBCIDIC holes, char must be a valid low case char */
+    if (ISLOWER(i)) {
+      is_idchar[TOUPPER(i)] = 1;
+      is_idchar[i] = 1;
+      is_idstart[TOUPPER(i)] = 1;
+      is_idstart[i] = 1;
+    }
   }
   for (i = '0'; i <= '9'; i++)
     is_idchar[i] = 1;
diff --git a/gcc/cexp.y b/gcc/cexp.y
index 1fb2f5d9f424..83f4cede6375 100644
--- a/gcc/cexp.y
+++ b/gcc/cexp.y
@@ -1114,10 +1114,13 @@ initialize_random_junk ()
    * refer to them.
    */
   for (i = 'a'; i <= 'z'; i++) {
-    ++is_idchar[TOUPPER(i)];
-    ++is_idchar[i];
-    ++is_idstart[TOUPPER(i)];
-    ++is_idstart[i];
+    /* SKIP EBCIDIC holes, char must be a valid low case char */
+    if (ISLOWER(i)) {
+      ++is_idchar[TOUPPER(i)];
+      ++is_idchar[i];
+      ++is_idstart[TOUPPER(i)];
+      ++is_idstart[i];
+    }
   }
   for (i = '0'; i <= '9'; i++)
     ++is_idchar[i];
diff --git a/gcc/cppfiles.c b/gcc/cppfiles.c
index 59ee7c76f036..cc891d457298 100644
--- a/gcc/cppfiles.c
+++ b/gcc/cppfiles.c
@@ -284,7 +284,7 @@ find_include_file (pfile, fname, search_start, ihash, before)
   else
     {
       /* Search directory path, trying to open the file.  */
-      name = alloca (strlen (fname) + pfile->max_include_len
+      name = (char *) alloca (strlen (fname) + pfile->max_include_len
 		     + 2 + INCLUDE_LEN_FUDGE);
       do
 	{
diff --git a/gcc/cppinit.c b/gcc/cppinit.c
index 5174da8d5bfe..7d20b2c95c54 100644
--- a/gcc/cppinit.c
+++ b/gcc/cppinit.c
@@ -795,7 +795,7 @@ initialize_standard_includes (pfile)
      These have /usr/local/lib/gcc... replaced by specd_prefix.  */
   if (specd_prefix != 0)
     {
-      char *default_prefix = alloca (sizeof GCC_INCLUDE_DIR - 7);
+      char *default_prefix = (char *) alloca (sizeof GCC_INCLUDE_DIR - 7);
       /* Remove the `include' from /usr/local/lib/gcc.../include.
 	 GCC_INCLUDE_DIR will always end in /include. */
       int default_len = sizeof GCC_INCLUDE_DIR - 8;
diff --git a/gcc/cpplib.c b/gcc/cpplib.c
index cd8285b0d598..98bd9335c90f 100644
--- a/gcc/cpplib.c
+++ b/gcc/cpplib.c
@@ -1705,7 +1705,7 @@ cpp_define (pfile, str)
   if (p)
     {
       count = strlen (str) + 2;
-      buf = alloca (count);
+      buf = (char *) alloca (count);
       memcpy (buf, str, count - 2);
       buf[p - str] = ' ';
       buf[count - 2] = '\n';
@@ -1714,7 +1714,7 @@ cpp_define (pfile, str)
   else
     {
       count = strlen (str) + 4;
-      buf = alloca (count);
+      buf = (char *) alloca (count);
       memcpy (buf, str, count - 4);
       strcpy (&buf[count-4], " 1\n");
     }
@@ -1734,7 +1734,7 @@ cpp_undef (pfile, macro)
 {
   /* Copy the string so we can append a newline.  */
   size_t len = strlen (macro);
-  char *buf = alloca (len + 2);
+  char *buf = (char *) alloca (len + 2);
   memcpy (buf, macro, len);
   buf[len]     = '\n';
   buf[len + 1] = '\0';
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 0582c00c0585..b551fea125f1 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -80,7 +80,7 @@ do { ASM_OUTPUT_LABEL(FILE,LABEL_ALTERNATE_NAME (INSN)); } while (0)
 	  register int c = p[i];					      \
 	  if (c == '\"' || c == '\\')					      \
 	    putc ('\\', asm_out_file);					      \
-	  if (c >= ' ' && c < 0177)					      \
+	  if (ISPRINT(c))						      \
 	    putc (c, asm_out_file);					      \
 	  else								      \
 	    {								      \
diff --git a/gcc/final.c b/gcc/final.c
index ade9da929643..1d4666ed7640 100644
--- a/gcc/final.c
+++ b/gcc/final.c
@@ -3457,8 +3457,7 @@ output_asm_insn (template, operands)
 	   Letters `acln' are implemented directly.
 	   Other letters are passed to `output_operand' so that
 	   the PRINT_OPERAND macro can define them.  */
-	else if ((*p >= 'a' && *p <= 'z')
-		 || (*p >= 'A' && *p <= 'Z'))
+	else if (ISLOWER(*p) || ISUPPER(*p))
 	  {
 	    int letter = *p++;
 	    c = atoi (p);
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 991dddda9730..e0d0f00cb4e3 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -106,6 +106,14 @@ static int count_cond		PARAMS ((tree, int));
 #define BRANCH_COST 1
 #endif
 
+#if defined(HOST_EBCDIC)
+/* bit 8 is significant in EBCDIC */
+#define CHARMASK 0xff
+#else
+#define CHARMASK 0x7f
+#endif
+
+
 /* We know that A1 + B1 = SUM1, using 2's complement arithmetic and ignoring
    overflow.  Suppose A, B and SUM have the same respective signs as A1, B1,
    and SUM1.  Then this yields nonzero if overflow occurred during the
@@ -1091,8 +1099,8 @@ real_hex_to_f (s, mode)
        if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F')
 	   || (c >= 'a' && c <= 'f'))
 	 {
-	   k = c & 0x7f;
-	   if (k >= 'a')
+	   k = c & CHARMASK;
+	   if (k >= 'a' && k <= 'f')
 	     k = k - 'a' + 10;
 	   else if (k >= 'A')
 	     k = k - 'A' + 10;
@@ -1137,7 +1145,7 @@ real_hex_to_f (s, mode)
 	      The exponent field is a decimal integer.  */
 	   while (ISDIGIT(*p))
 	     {
-	       k = (*p++ & 0x7f) - '0';
+	       k = (*p++ & CHARMASK) - '0';
 	       expon = 10 * expon + k;
 	     }
 
diff --git a/gcc/real.c b/gcc/real.c
index 6acd2bf376af..2022aacbeb94 100644
--- a/gcc/real.c
+++ b/gcc/real.c
@@ -337,6 +337,13 @@ do {									\
 /* The exponent of 1.0 */
 #define EXONE (0x3fff)
 
+#if defined(HOST_EBCDIC)
+/* bit 8 is significant in EBCDIC */
+#define CHARMASK 0xff
+#else
+#define CHARMASK 0x7f
+#endif
+
 extern int extra_warnings;
 extern unsigned EMUSHORT ezero[], ehalf[], eone[], etwo[];
 extern unsigned EMUSHORT elog2[], esqrt2[];
@@ -4981,7 +4988,7 @@ etoasc (x, string, ndigs)
       /* Round up and propagate carry-outs */
     roun:
       --s;
-      k = *s & 0x7f;
+      k = *s & CHARMASK;
       /* Carry out to most significant digit? */
       if (k == '.')
 	{
@@ -5142,7 +5149,7 @@ asctoeg (ss, y, oprec)
  nxtcom:
   if (*s >= '0' && *s <= '9')
     k = *s - '0';
-  else if (*s >= 'a')
+  else if (*s >= 'a' && *s <= 'f')
     k = 10 + *s - 'a';
   else
     k = 10 + *s - 'A';
@@ -5160,7 +5167,7 @@ asctoeg (ss, y, oprec)
 				    || (*sp >= 'A' && *sp <= 'F'))))
 	    ++sp;
 	  /* Check for syntax error */
-	  c = *sp & 0x7f;
+	  c = *sp & CHARMASK;
 	  if ((base != 10 || ((c != 'e') && (c != 'E')))
 	      && (base != 16 || ((c != 'p') && (c != 'P')))
 	      && (c != '\0')
-- 
GitLab